summaryrefslogtreecommitdiff
path: root/libavcodec/rawdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-05-16 21:52:35 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-05-16 21:52:35 +0200
commit9763420bcc4a50a4c6e9ce2ee46f10de0bc7760c (patch)
tree0e71329f8daa832fe001f3212767efa940296807 /libavcodec/rawdec.c
parent198783744e181f047925bf829c69a2a35b85f6ab (diff)
rawdec: Allow overriding top field first.
Iam not sure this is the best way to implement it, but its the simplest and keeps the code seperate from the application. Keeping ffmpeg.c simple and not requireing user apps to duplicate this code. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/rawdec.c')
-rw-r--r--libavcodec/rawdec.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index 3055a50475..6bf749f4c3 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -29,15 +29,24 @@
#include "raw.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/imgutils.h"
+#include "libavutil/opt.h"
typedef struct RawVideoContext {
+ AVClass *av_class;
uint32_t palette[AVPALETTE_COUNT];
unsigned char * buffer; /* block of memory for holding one frame */
int length; /* number of bytes in buffer */
int flip;
AVFrame pic; ///< AVCodecContext.coded_frame
+ int tff;
} RawVideoContext;
+static const AVOption options[]={
+{"top", "top field first", offsetof(RawVideoContext, tff), FF_OPT_TYPE_INT, {.dbl = -1}, -1, 1, AV_OPT_FLAG_DECODING_PARAM|AV_OPT_FLAG_VIDEO_PARAM},
+{NULL}
+};
+static const AVClass class = { "rawdec", NULL, options, LIBAVUTIL_VERSION_INT };
+
static const PixelFormatTag pix_fmt_bps_avi[] = {
{ PIX_FMT_MONOWHITE, 1 },
{ PIX_FMT_PAL8, 2 },
@@ -130,6 +139,11 @@ static int raw_decode(AVCodecContext *avctx,
frame->pkt_pts = avctx->pkt->pts;
frame->pkt_pos = avctx->pkt->pos;
+ if(context->tff>=0){
+ frame->interlaced_frame = 1;
+ frame->top_field_first = context->tff;
+ }
+
//2bpp and 4bpp raw in avi and mov (yes this is ugly ...)
if (context->buffer) {
int i;
@@ -214,4 +228,5 @@ AVCodec ff_rawvideo_decoder = {
raw_close_decoder,
raw_decode,
.long_name = NULL_IF_CONFIG_SMALL("raw video"),
+ .priv_class= &class,
};