/*
* Raw Video Decoder
- * Copyright (c) 2001 Fabrice Bellard.
+ * Copyright (c) 2001 Fabrice Bellard
*
* This file is part of FFmpeg.
*
*/
/**
- * @file rawdec.c
+ * @file libavcodec/rawdec.c
* Raw Video Decoder
*/
typedef struct RawVideoContext {
unsigned char * buffer; /* block of memory for holding one frame */
int length; /* number of bytes in buffer */
+ int flip;
AVFrame pic; ///< AVCodecContext.coded_frame
} RawVideoContext;
{ PIX_FMT_RGB555, 16 },
{ PIX_FMT_BGR24, 24 },
{ PIX_FMT_RGB32, 32 },
- { -1, 0 },
+ { PIX_FMT_NONE, 0 },
};
static const PixelFormatTag pixelFormatBpsMOV[] = {
{ PIX_FMT_BGR555, 16 },
{ PIX_FMT_RGB24, 24 },
{ PIX_FMT_BGR32_1, 32 },
- { -1, 0 },
+ { PIX_FMT_NONE, 0 },
};
-static int findPixelFormat(const PixelFormatTag *tags, unsigned int fourcc)
+static enum PixelFormat findPixelFormat(const PixelFormatTag *tags, unsigned int fourcc)
{
while (tags->pix_fmt >= 0) {
if (tags->fourcc == fourcc)
if (!context->buffer)
return -1;
+ if(avctx->extradata_size >= 9 && !memcmp(avctx->extradata + avctx->extradata_size - 9, "BottomUp", 9))
+ context->flip=1;
+
return 0;
}
static void flip(AVCodecContext *avctx, AVPicture * picture){
- if(!avctx->codec_tag && avctx->bits_per_coded_sample && picture->linesize[2]==0){
- picture->data[0] += picture->linesize[0] * (avctx->height-1);
- picture->linesize[0] *= -1;
- }
+ picture->data[0] += picture->linesize[0] * (avctx->height-1);
+ picture->linesize[0] *= -1;
}
static int raw_decode(AVCodecContext *avctx,
avctx->palctrl->palette_changed = 0;
}
- flip(avctx, picture);
+ if(context->flip)
+ flip(avctx, picture);
if (avctx->codec_tag == MKTAG('Y', 'V', '1', '2'))
{