[FFmpeg-devel] [PATCH] avformat/mov: skip call ff_codec_get_id if possible

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Apr 29 14:26:43 EEST 2022


"zhilizhao(赵志立)":
> 
> 
>> On Apr 19, 2022, at 1:12 PM, Zhao Zhili <quinkblack at foxmail.com> wrote:
>>
>> ff_codec_get_id loops over ff_codec_movvideo_tags (which is a large
>> array) two times. The result is unused most of the cases.
>> ---
>> libavformat/mov.c | 4 +---
>> 1 file changed, 1 insertion(+), 3 deletions(-)
>>
>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>> index 6c847de164..bdc8c84bae 100644
>> --- a/libavformat/mov.c
>> +++ b/libavformat/mov.c
>> @@ -2487,8 +2487,6 @@ static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb,
>>                                   int codec_tag, int format,
>>                                   int64_t size)
>> {
>> -    int video_codec_id = ff_codec_get_id(ff_codec_movvideo_tags, format);
>> -
>>     if (codec_tag &&
>>          (codec_tag != format &&
>>           // AVID 1:1 samples with differing data format and codec tag exist
>> @@ -2497,7 +2495,7 @@ static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb,
>>           codec_tag != AV_RL32("apcn") && codec_tag != AV_RL32("apch") &&
>>           // so is dv (sigh)
>>           codec_tag != AV_RL32("dvpp") && codec_tag != AV_RL32("dvcp") &&
>> -          (c->fc->video_codec_id ? video_codec_id != c->fc->video_codec_id
>> +          (c->fc->video_codec_id ? ff_codec_get_id(ff_codec_movvideo_tags, format) != c->fc->video_codec_id
>>                                  : codec_tag != MKTAG('j','p','e','g')))) {
>>         /* Multiple fourcc, we skip JPEG. This is not correct, we should
>>          * export it as a separate AVStream but this needs a few changes
>> -- 
>> 2.35.3
>>
> 
> Do we care about such micro-optimization, or just let compiler do it’s job?

A compiler could currently only optimize this on its own if you were
using LTO; it might also be able to optimize this if ff_codec_get_id
were marked as av_pure. Of course, there is no guarantee that this is
optimized in these cases, but you could check whether e.g. GCC/Clang do it.
And I don't see anything wrong with micro-optimizations.

- Andreas


More information about the ffmpeg-devel mailing list