[FFmpeg-devel] [PATCH] mjpegdec: Support 4x1, 2x1, 2x1 notation for 4:2:2 chroma subsampling
Derek Buitenhuis
derek.buitenhuis at gmail.com
Tue Jun 19 15:46:27 EEST 2018
On 19/06/2018 12:31, Michael Niedermayer wrote:
> On Mon, Jun 18, 2018 at 09:19:30PM +0100, Derek Buitenhuis wrote:
>> Just one of the many, many ways to store this stuff in the header.
>>
>> Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
>> ---
>> Related reading, but not exactly the same type:
>> * https://github.com/libjpeg-turbo/libjpeg-turbo/issues/92
>> * https://github.com/libjpeg-turbo/libjpeg-turbo/commit/8ce2c9119a995ef6280f8bba375aac7effb9b571
>> ---
>> libavcodec/mjpegdec.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
>> index d1dca84d36..e5888ed548 100644
>> --- a/libavcodec/mjpegdec.c
>> +++ b/libavcodec/mjpegdec.c
>> @@ -568,6 +568,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
>> }
>> break;
>> case 0x21111100:
>> + case 0x41212100:
>> if (s->component_id[0] == 'Q' && s->component_id[1] == 'F' && s->component_id[2] == 'A') {
>> if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
>> else
>
> either this is wrong or
> "
> - /* NOTE we do not allocate pictures large enough for the possible
> - * padding of h/v_count being 4 */
> "
> this is outdated in some way.
I don't think this was ever a valid comment, since h_coutn and v_count are
not supposed to be interpreted as absolute values to be applied? That is,
you need to look at the ratio.
Further, I am not quite sure what 'padding' refers to in this specific instance,
since this has to do with subsampling? I'm maybe missing something JPEG-specific?
The comments, code, and git history for this whole chunk of code are a confusing
mess and I couldn't easily discern what was done and why. It seems very overly
'clever'...
> in fact we do at least in mjpeg_decode_scan() check w/h and skip writing
> outside. So this may be ok but then it would be simpler
> to update
> if (!(pix_fmt_id & 0xD0D0D0D0))
> pix_fmt_id -= (pix_fmt_id & 0xF0F0F0F0) >> 1;
> if (!(pix_fmt_id & 0x0D0D0D0D))
> pix_fmt_id -= (pix_fmt_id & 0x0F0F0F0F) >> 1;
>
> to also work with the count=4 cases
I still don't know why we're mangling these into a single number, to be
honest, or why we're applying bitmasks instead of just directly interpreting
them...
- Derek
More information about the ffmpeg-devel
mailing list