diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2012-05-27 01:13:37 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2012-05-27 01:13:37 +0200 |
commit | ab7d6cb8f770c3b88a8139d1182fcc934062f891 (patch) | |
tree | 6943efc1f99b73d79ae6938951619369745dc573 | |
parent | 5c3f79198c016980b8bd5e876761eb42341c3cec (diff) | |
download | ffmpeg-ab7d6cb8f770c3b88a8139d1182fcc934062f891.tar.gz |
Support decoding fourcc YVYU.
Based on work by ami_stuff.
Fixes ticket #1352
-rw-r--r-- | libavcodec/raw.c | 1 | ||||
-rw-r--r-- | libavcodec/rawdec.c | 10 | ||||
-rw-r--r-- | libavformat/riff.c | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/libavcodec/raw.c b/libavcodec/raw.c index c084d1465b..6afbd028a0 100644 --- a/libavcodec/raw.c +++ b/libavcodec/raw.c @@ -157,6 +157,7 @@ const PixelFormatTag ff_raw_pix_fmt_tags[] = { /* special */ { PIX_FMT_RGB565LE,MKTAG( 3 , 0 , 0 , 0 ) }, /* flipped RGB565LE */ { PIX_FMT_YUV444P, MKTAG('Y', 'V', '2', '4') }, /* YUV444P, swapped UV */ + { PIX_FMT_YUYV422, MKTAG('Y', 'V', 'Y', 'U') }, /* YUYV, swapped UV */ { PIX_FMT_NONE, 0 }, }; diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c index 8d2390e2aa..dd4355f468 100644 --- a/libavcodec/rawdec.c +++ b/libavcodec/rawdec.c @@ -235,6 +235,16 @@ static int raw_decode(AVCodecContext *avctx, line += picture->linesize[0]; } } + if(avctx->codec_tag == AV_RL32("YVYU") && + avctx->pix_fmt == 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]; + } + } *data_size = sizeof(AVPicture); return buf_size; diff --git a/libavformat/riff.c b/libavformat/riff.c index fb3e8ac9dd..add8440429 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -199,6 +199,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { { CODEC_ID_RAWVIDEO, MKTAG('Y', 'U', 'V', '9') }, { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'U', '9') }, { CODEC_ID_RAWVIDEO, MKTAG('a', 'u', 'v', '2') }, + { CODEC_ID_RAWVIDEO, MKTAG('Y', 'V', 'Y', 'U') }, { CODEC_ID_FRWU, MKTAG('F', 'R', 'W', 'U') }, { CODEC_ID_R10K, MKTAG('R', '1', '0', 'k') }, { CODEC_ID_R210, MKTAG('r', '2', '1', '0') }, |