From: Carl Eugen Hoyos <[email protected]> Based on work by ami_stuff.
Signed-off-by: Vittorio Giovara <[email protected]> --- libavcodec/raw.c | 1 + libavcodec/rawdec.c | 10 ++++++++++ libavformat/riff.c | 1 + 3 files changed, 12 insertions(+) diff --git a/libavcodec/raw.c b/libavcodec/raw.c index 4ccc6cc..28943ae 100644 --- a/libavcodec/raw.c +++ b/libavcodec/raw.c @@ -163,6 +163,7 @@ const PixelFormatTag ff_raw_pix_fmt_tags[] = { /* special */ { AV_PIX_FMT_RGB565LE,MKTAG( 3 , 0 , 0 , 0 ) }, /* flipped RGB565LE */ { AV_PIX_FMT_YUV444P, MKTAG('Y', 'V', '2', '4') }, /* YUV444P, swapped UV */ + { AV_PIX_FMT_YUYV422, MKTAG('Y', 'V', 'Y', 'U') }, /* YUYV, swapped UV */ { AV_PIX_FMT_NONE, 0 }, }; diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c index a8227c7..9ff03f7 100644 --- a/libavcodec/rawdec.c +++ b/libavcodec/rawdec.c @@ -240,6 +240,16 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame, line += picture->linesize[0]; } } + if (avctx->codec_tag == AV_RL32("YVYU") && + avctx->pix_fmt == AV_PIX_FMT_YUYV422) { + int x, y; + uint8_t *line = picture->data[0]; + for (y = 0; y < avctx->height; y++) { + for (x = 0; x < avctx->width - 1; x += 2) + FFSWAP(uint8_t, line[2 * x + 1], line[2 * x + 3]); + line += picture->linesize[0]; + } + } *got_frame = 1; return buf_size; diff --git a/libavformat/riff.c b/libavformat/riff.c index 545ecaf..38f4d4e 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -213,6 +213,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'V', '9') }, { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'U', '9') }, { AV_CODEC_ID_RAWVIDEO, MKTAG('a', 'u', 'v', '2') }, + { AV_CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'Y', 'U') }, { AV_CODEC_ID_FRWU, MKTAG('F', 'R', 'W', 'U') }, { AV_CODEC_ID_R10K, MKTAG('R', '1', '0', 'k') }, { AV_CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, -- 1.8.3.4 (Apple Git-47) _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
