diff options
author | Roberto Togni <r_togni@tiscali.it> | 2004-06-27 18:46:02 +0400 |
---|---|---|
committer | Roberto Togni <r_togni@tiscali.it> | 2004-06-27 18:46:02 +0400 |
commit | dab1c4c612ccb1a7e2ee72e13ca9f7754f0c9c97 (patch) | |
tree | 5b64d83c5887ab9317b02d4a06717c78860707ba /libavcodec/cinepak.c | |
parent | d99fbbf4d7e3f6abea0d052849a515730f552608 (diff) |
Paletted cvid support
Originally committed as revision 3263 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/cinepak.c')
-rw-r--r-- | libavcodec/cinepak.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c index f72d690ee6..df7aa0e480 100644 --- a/libavcodec/cinepak.c +++ b/libavcodec/cinepak.c @@ -35,7 +35,6 @@ #include "avcodec.h" #include "dsputil.h" -#define PALETTE_COUNT 256 typedef struct { uint8_t y0, y1, y2, y3; @@ -63,7 +62,6 @@ typedef struct CinepakContext { int width, height; - unsigned char palette[PALETTE_COUNT * 4]; int palette_video; cvid_strip_t strips[MAX_STRIPS]; @@ -361,22 +359,20 @@ static int cinepak_decode (CinepakContext *s) static int cinepak_decode_init(AVCodecContext *avctx) { CinepakContext *s = (CinepakContext *)avctx->priv_data; -/* - int i; - unsigned char r, g, b; - unsigned char *raw_palette; - unsigned int *palette32; -*/ s->avctx = avctx; s->width = (avctx->width + 3) & ~3; s->height = (avctx->height + 3) & ~3; -// check for paletted data -s->palette_video = 0; - + // check for paletted data + if (avctx->palctrl == NULL) { + s->palette_video = 0; + avctx->pix_fmt = PIX_FMT_YUV420P; + } else { + s->palette_video = 1; + avctx->pix_fmt = PIX_FMT_PAL8; + } - avctx->pix_fmt = PIX_FMT_YUV420P; avctx->has_b_frames = 0; dsputil_init(&s->dsp, avctx); @@ -404,6 +400,15 @@ static int cinepak_decode_frame(AVCodecContext *avctx, cinepak_decode(s); + if (s->palette_video) { + memcpy (s->frame.data[1], avctx->palctrl->palette, AVPALETTE_SIZE); + if (avctx->palctrl->palette_changed) { + s->frame.palette_has_changed = 1; + avctx->palctrl->palette_changed = 0; + } else + s->frame.palette_has_changed = 0; + } + *data_size = sizeof(AVFrame); *(AVFrame*)data = s->frame; |