aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJai Menon <realityman@gmx.net>2009-04-02 12:15:04 +0000
committerCarl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at>2009-04-02 12:15:04 +0000
commit3dd2f87e61d3c02493a02efca146569dc771cb86 (patch)
tree5711b917d88f2eefa8852dea948d0230bcb8e931
parent3dd3604197f8b562b8fc707c28a6329d6bac730c (diff)
downloadffmpeg-3dd2f87e61d3c02493a02efca146569dc771cb86.tar.gz
Map MOV fourcc YUV2 correctly to PIX_FMT_YUYV422.
Patch by Jai Menon Originally committed as revision 18316 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/raw.c1
-rw-r--r--libavcodec/rawdec.c12
-rw-r--r--libavcodec/rawenc.c11
-rw-r--r--libavformat/isom.c2
4 files changed, 24 insertions, 2 deletions
diff --git a/libavcodec/raw.c b/libavcodec/raw.c
index 28d6b0129b..c79c0125f7 100644
--- a/libavcodec/raw.c
+++ b/libavcodec/raw.c
@@ -51,6 +51,7 @@ const PixelFormatTag ff_raw_pixelFormatTags[] = {
/* quicktime */
{ PIX_FMT_UYVY422, MKTAG('2', 'v', 'u', 'y') },
{ PIX_FMT_UYVY422, MKTAG('A', 'V', 'U', 'I') }, /* FIXME merge both fields */
+ { PIX_FMT_YUYV422, MKTAG('y', 'u', 'v', '2') },
{ PIX_FMT_PAL8, MKTAG('W', 'R', 'A', 'W') },
{ PIX_FMT_NONE, 0 },
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index db44f0c8b4..963e148aa1 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -26,6 +26,7 @@
#include "avcodec.h"
#include "raw.h"
+#include "libavutil/intreadwrite.h"
typedef struct RawVideoContext {
unsigned char * buffer; /* block of memory for holding one frame */
@@ -144,6 +145,17 @@ static int raw_decode(AVCodecContext *avctx,
picture->data[2] = tmp;
}
+ if(avctx->codec_tag == AV_RL32("yuv2") &&
+ 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; x++)
+ line[2*x + 1] ^= 0x80;
+ line += picture->linesize[0];
+ }
+ }
+
*data_size = sizeof(AVPicture);
return buf_size;
}
diff --git a/libavcodec/rawenc.c b/libavcodec/rawenc.c
index 4e560333e1..82a543ad46 100644
--- a/libavcodec/rawenc.c
+++ b/libavcodec/rawenc.c
@@ -26,6 +26,7 @@
#include "avcodec.h"
#include "raw.h"
+#include "libavutil/intreadwrite.h"
static av_cold int raw_init_encoder(AVCodecContext *avctx)
{
@@ -40,8 +41,16 @@ static av_cold int raw_init_encoder(AVCodecContext *avctx)
static int raw_encode(AVCodecContext *avctx,
unsigned char *frame, int buf_size, void *data)
{
- return avpicture_layout((AVPicture *)data, avctx->pix_fmt, avctx->width,
+ int ret = avpicture_layout((AVPicture *)data, avctx->pix_fmt, avctx->width,
avctx->height, frame, buf_size);
+
+ if(avctx->codec_tag == AV_RL32("yuv2") && ret > 0 &&
+ avctx->pix_fmt == PIX_FMT_YUYV422) {
+ int x;
+ for(x = 1; x < avctx->height*avctx->width*2; x += 2)
+ frame[x] ^= 0x80;
+ }
+ return ret;
}
AVCodec rawvideo_encoder = {
diff --git a/libavformat/isom.c b/libavformat/isom.c
index b78d65e8fb..a4b89bdf07 100644
--- a/libavformat/isom.c
+++ b/libavformat/isom.c
@@ -61,7 +61,7 @@ const AVCodecTag codec_movvideo_tags[] = {
/* { CODEC_ID_, MKTAG('I', 'V', '5', '0') }, *//* Indeo 5.0 */
{ CODEC_ID_RAWVIDEO, MKTAG('r', 'a', 'w', ' ') }, /* Uncompressed RGB */
-/* { CODEC_ID_RAWVIDEO, MKTAG('Y', 'u', 'v', '2') }, *//* Uncompressed YUV422 */
+ { CODEC_ID_RAWVIDEO, MKTAG('y', 'u', 'v', '2') }, /* Uncompressed YUV422 */
{ CODEC_ID_RAWVIDEO, MKTAG('A', 'V', 'U', 'I') }, /* YUV with alpha-channel (AVID Uncompressed) */
{ CODEC_ID_RAWVIDEO, MKTAG('2', 'v', 'u', 'y') }, /* UNCOMPRESSED 8BIT 4:2:2 */