Commit b641982b authored by Reimar Döffinger's avatar Reimar Döffinger

rawdec: ensure that there is always a valid palette for formats that

should have one like gray8 etc.

Originally committed as revision 25190 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent f0a55438
...@@ -25,8 +25,10 @@ ...@@ -25,8 +25,10 @@
*/ */
#include "avcodec.h" #include "avcodec.h"
#include "imgconvert.h"
#include "raw.h" #include "raw.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavcore/imgutils.h"
typedef struct RawVideoContext { typedef struct RawVideoContext {
uint32_t palette[AVPALETTE_COUNT]; uint32_t palette[AVPALETTE_COUNT];
...@@ -81,6 +83,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx) ...@@ -81,6 +83,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
else if (avctx->pix_fmt == PIX_FMT_NONE && avctx->bits_per_coded_sample) else if (avctx->pix_fmt == PIX_FMT_NONE && avctx->bits_per_coded_sample)
avctx->pix_fmt = find_pix_fmt(pix_fmt_bps_avi, avctx->bits_per_coded_sample); avctx->pix_fmt = find_pix_fmt(pix_fmt_bps_avi, avctx->bits_per_coded_sample);
ff_set_systematic_pal(context->palette, avctx->pix_fmt);
context->length = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height); context->length = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height);
if((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) && if((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
avctx->pix_fmt==PIX_FMT_PAL8 && avctx->pix_fmt==PIX_FMT_PAL8 &&
...@@ -148,7 +151,9 @@ static int raw_decode(AVCodecContext *avctx, ...@@ -148,7 +151,9 @@ static int raw_decode(AVCodecContext *avctx,
return -1; return -1;
avpicture_fill(picture, buf, avctx->pix_fmt, avctx->width, avctx->height); avpicture_fill(picture, buf, avctx->pix_fmt, avctx->width, avctx->height);
if(avctx->pix_fmt==PIX_FMT_PAL8 && buf_size < context->length){ if((avctx->pix_fmt==PIX_FMT_PAL8 && buf_size < context->length) ||
(avctx->pix_fmt!=PIX_FMT_PAL8 &&
(av_pix_fmt_descriptors[avctx->pix_fmt].flags & PIX_FMT_PAL))){
frame->data[1]= context->palette; frame->data[1]= context->palette;
} }
if (avctx->palctrl && avctx->palctrl->palette_changed) { if (avctx->palctrl && avctx->palctrl->palette_changed) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment