|
|
|
@@ -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, |
|
|
|
}; |