Patch by Jai Menon Originally committed as revision 18316 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.6
@@ -51,6 +51,7 @@ const PixelFormatTag ff_raw_pixelFormatTags[] = { | |||||
/* quicktime */ | /* quicktime */ | ||||
{ PIX_FMT_UYVY422, MKTAG('2', 'v', 'u', 'y') }, | { PIX_FMT_UYVY422, MKTAG('2', 'v', 'u', 'y') }, | ||||
{ PIX_FMT_UYVY422, MKTAG('A', 'V', 'U', 'I') }, /* FIXME merge both fields */ | { 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_PAL8, MKTAG('W', 'R', 'A', 'W') }, | ||||
{ PIX_FMT_NONE, 0 }, | { PIX_FMT_NONE, 0 }, | ||||
@@ -26,6 +26,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "raw.h" | #include "raw.h" | ||||
#include "libavutil/intreadwrite.h" | |||||
typedef struct RawVideoContext { | typedef struct RawVideoContext { | ||||
unsigned char * buffer; /* block of memory for holding one frame */ | unsigned char * buffer; /* block of memory for holding one frame */ | ||||
@@ -144,6 +145,17 @@ static int raw_decode(AVCodecContext *avctx, | |||||
picture->data[2] = tmp; | 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); | *data_size = sizeof(AVPicture); | ||||
return buf_size; | return buf_size; | ||||
} | } | ||||
@@ -26,6 +26,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "raw.h" | #include "raw.h" | ||||
#include "libavutil/intreadwrite.h" | |||||
static av_cold int raw_init_encoder(AVCodecContext *avctx) | 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, | static int raw_encode(AVCodecContext *avctx, | ||||
unsigned char *frame, int buf_size, void *data) | 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); | 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 = { | AVCodec rawvideo_encoder = { | ||||
@@ -61,7 +61,7 @@ const AVCodecTag codec_movvideo_tags[] = { | |||||
/* { CODEC_ID_, MKTAG('I', 'V', '5', '0') }, *//* Indeo 5.0 */ | /* { CODEC_ID_, MKTAG('I', 'V', '5', '0') }, *//* Indeo 5.0 */ | ||||
{ CODEC_ID_RAWVIDEO, MKTAG('r', 'a', 'w', ' ') }, /* Uncompressed RGB */ | { 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('A', 'V', 'U', 'I') }, /* YUV with alpha-channel (AVID Uncompressed) */ | ||||
{ CODEC_ID_RAWVIDEO, MKTAG('2', 'v', 'u', 'y') }, /* UNCOMPRESSED 8BIT 4:2:2 */ | { CODEC_ID_RAWVIDEO, MKTAG('2', 'v', 'u', 'y') }, /* UNCOMPRESSED 8BIT 4:2:2 */ | ||||