mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-23 04:24:35 +02:00
avcodec/rawdec: Support CODEC_CAP_PARAM_CHANGE
Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
502fc3b3d4
commit
1587989518
@ -98,19 +98,6 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
|
|||||||
memset(context->palette->data, 0, AVPALETTE_SIZE);
|
memset(context->palette->data, 0, AVPALETTE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
|
|
||||||
avctx->pix_fmt == AV_PIX_FMT_PAL8 &&
|
|
||||||
(!avctx->codec_tag || avctx->codec_tag == MKTAG('r','a','w',' '))) {
|
|
||||||
context->is_2_4_bpp = 1;
|
|
||||||
context->frame_size = avpicture_get_size(avctx->pix_fmt,
|
|
||||||
FFALIGN(avctx->width, 16),
|
|
||||||
avctx->height);
|
|
||||||
} else {
|
|
||||||
context->is_lt_16bpp = av_get_bits_per_pixel(desc) == 16 && avctx->bits_per_coded_sample && avctx->bits_per_coded_sample < 16;
|
|
||||||
context->frame_size = avpicture_get_size(avctx->pix_fmt, avctx->width,
|
|
||||||
avctx->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((avctx->extradata_size >= 9 &&
|
if ((avctx->extradata_size >= 9 &&
|
||||||
!memcmp(avctx->extradata + avctx->extradata_size - 9, "BottomUp", 9)) ||
|
!memcmp(avctx->extradata + avctx->extradata_size - 9, "BottomUp", 9)) ||
|
||||||
avctx->codec_tag == MKTAG('c','y','u','v') ||
|
avctx->codec_tag == MKTAG('c','y','u','v') ||
|
||||||
@ -168,11 +155,25 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame,
|
|||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
int linesize_align = 4;
|
int linesize_align = 4;
|
||||||
int res, len;
|
int res, len;
|
||||||
int need_copy = !avpkt->buf || context->is_2_4_bpp || context->is_yuv2 || context->is_lt_16bpp;
|
int need_copy;
|
||||||
|
|
||||||
AVFrame *frame = data;
|
AVFrame *frame = data;
|
||||||
AVPicture *picture = data;
|
AVPicture *picture = data;
|
||||||
|
|
||||||
|
if ((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
|
||||||
|
avctx->pix_fmt == AV_PIX_FMT_PAL8 &&
|
||||||
|
(!avctx->codec_tag || avctx->codec_tag == MKTAG('r','a','w',' '))) {
|
||||||
|
context->is_2_4_bpp = 1;
|
||||||
|
context->frame_size = avpicture_get_size(avctx->pix_fmt,
|
||||||
|
FFALIGN(avctx->width, 16),
|
||||||
|
avctx->height);
|
||||||
|
} else {
|
||||||
|
context->is_lt_16bpp = av_get_bits_per_pixel(desc) == 16 && avctx->bits_per_coded_sample && avctx->bits_per_coded_sample < 16;
|
||||||
|
context->frame_size = avpicture_get_size(avctx->pix_fmt, avctx->width,
|
||||||
|
avctx->height);
|
||||||
|
}
|
||||||
|
need_copy = !avpkt->buf || context->is_2_4_bpp || context->is_yuv2 || context->is_lt_16bpp;
|
||||||
|
|
||||||
frame->pict_type = AV_PICTURE_TYPE_I;
|
frame->pict_type = AV_PICTURE_TYPE_I;
|
||||||
frame->key_frame = 1;
|
frame->key_frame = 1;
|
||||||
|
|
||||||
@ -368,4 +369,5 @@ AVCodec ff_rawvideo_decoder = {
|
|||||||
.close = raw_close_decoder,
|
.close = raw_close_decoder,
|
||||||
.decode = raw_decode,
|
.decode = raw_decode,
|
||||||
.priv_class = &rawdec_class,
|
.priv_class = &rawdec_class,
|
||||||
|
.capabilities = CODEC_CAP_PARAM_CHANGE,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user