[FFmpeg-devel] [PATCH] avcodec: add IMM4 decoder
Paul B Mahol
onemda at gmail.com
Thu Aug 16 18:23:25 EEST 2018
On 8/16/18, James Almer <jamrial at gmail.com> wrote:
> On 8/16/2018 8:00 AM, Paul B Mahol wrote:
>> Hi,
>>
>> another patch attached, please review.
>
>> +static int decode_frame(AVCodecContext *avctx, void *data,
>> + int *got_frame, AVPacket *avpkt)
>> +{
>> + IMM4Context *s = avctx->priv_data;
>> + GetBitContext *gb = &s->gb;
>> + AVFrame *frame = data;
>> + unsigned type;
>> + int ret, scaled;
>> +
>> + if (avpkt->size <= 32)
>> + return AVERROR_INVALIDDATA;
>> +
>> + av_fast_padded_malloc(&s->bitstream, &s->bitstream_size,
>> + FFALIGN(avpkt->size, 4));
>> + if (!s->bitstream)
>> + return AVERROR(ENOMEM);
>> +
>> + s->bdsp.bswap_buf((uint32_t *)s->bitstream,
>> + (uint32_t *)avpkt->data,
>> + (avpkt->size + 3) >> 2);
>> +
>> + if ((ret = init_get_bits8(gb, s->bitstream, FFALIGN(avpkt->size, 4)))
>> < 0)
>
> Split this in two, just to be safe.
Why?, not mandatory.
>
>> + return ret;
>> +
>> + avctx->pix_fmt = AV_PIX_FMT_YUV420P;
>> + avctx->color_range = AVCOL_RANGE_JPEG;
>> +
>> + scaled = avpkt->data[8];
>> + if (scaled < 2) {
>> + int width, height;
>> + int mode = avpkt->data[10];
>> +
>> + switch (mode) {
>> + case 1:
>> + width = 352;
>> + height = 240;
>> + break;
>> + case 2:
>> + width = 704;
>> + height = 240;
>> + break;
>> + case 4:
>> + width = 480;
>> + height = 704;
>> + break;
>> + case 17:
>> + width = 352;
>> + height = 288;
>> + break;
>> + case 18:
>> + width = 704;
>> + height = 288;
>> + break;
>> + default:
>> + width = 704;
>> + height = 576;
>> + break;
>> + }
>> +
>> + if (s->changed_size == 1 &&
>> + (avctx->width != width || avctx->height != height)) {
>> + av_log(avctx, AV_LOG_ERROR, "Frame size change is
>> unsupported.\n");
>> + return AVERROR_INVALIDDATA;
>> + }
>> + avctx->width = width;
>> + avctx->height = height;
>
> ff_set_dimensions()?
These are hardcoded values, always sane.
More information about the ffmpeg-devel
mailing list