[FFmpeg-devel] [PATCH v8 4/5] avformat/movenc: Refactor mov_write_dvcc_dvvc_tag to use ff_isom_put_dvcc_dvvc

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Sun Dec 5 16:49:34 EET 2021


quietvoid:
> On Fri, Dec 3, 2021 at 8:40 PM <lance.lmwang at gmail.com> wrote:
> 
>> On Fri, Dec 03, 2021 at 08:27:06PM -0500, quietvoid wrote:
>>> On Fri, Dec 3, 2021 at 8:19 PM <lance.lmwang at gmail.com> wrote:
>>>
>>>> On Sat, Dec 04, 2021 at 02:09:04AM +0100, quietvoid wrote:
>>>>> From: quietvoid <tcchlisop0 at gmail.com>
>>>>>
>>>>> Improves code legibility by not using bit shifts.
>>>>> Also avoids duplicating the dvcC/dvvC ISOM box writing code.
>>>>>
>>>>> Signed-off-by: quietvoid <tcChlisop0 at gmail.com>
>>>>> ---
>>>>>  libavformat/movenc.c | 26 +++++++++-----------------
>>>>>  1 file changed, 9 insertions(+), 17 deletions(-)
>>>>>
>>>>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>>>>> index 38ff90833a..79f7d70747 100644
>>>>> --- a/libavformat/movenc.c
>>>>> +++ b/libavformat/movenc.c
>>>>> @@ -27,6 +27,7 @@
>>>>>  #include "movenc.h"
>>>>>  #include "avformat.h"
>>>>>  #include "avio_internal.h"
>>>>> +#include "dovi_isom.h"
>>>>>  #include "riff.h"
>>>>>  #include "avio.h"
>>>>>  #include "isom.h"
>>>>> @@ -1911,6 +1912,9 @@ static int mov_write_sv3d_tag(AVFormatContext
>> *s,
>>>> AVIOContext *pb, AVSphericalMa
>>>>>
>>>>>  static int mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext
>> *pb,
>>>> AVDOVIDecoderConfigurationRecord *dovi)
>>>>>  {
>>>>> +    uint8_t buf[ISOM_DVCC_DVVC_SIZE];
>>>>> +    int size;
>>>>> +
>>>>>      avio_wb32(pb, 32); /* size = 8 + 24 */
>>>>>      if (dovi->dv_profile > 10)
>>>>>          ffio_wfourcc(pb, "dvwC");
>>>>> @@ -1918,23 +1922,11 @@ static int
>>>> mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext *pb, AVDOVIDe
>>>>>          ffio_wfourcc(pb, "dvvC");
>>>>>      else
>>>>>          ffio_wfourcc(pb, "dvcC");
>>>>> -    avio_w8(pb, dovi->dv_version_major);
>>>>> -    avio_w8(pb, dovi->dv_version_minor);
>>>>> -    avio_wb16(pb, (dovi->dv_profile << 9) | (dovi->dv_level << 3) |
>>>>> -              (dovi->rpu_present_flag << 2) |
>> (dovi->el_present_flag <<
>>>> 1) |
>>>>> -              dovi->bl_present_flag);
>>>>> -    avio_wb32(pb, (dovi->dv_bl_signal_compatibility_id << 28) | 0);
>>>>> -
>>>>> -    ffio_fill(pb, 0, 4 * 4); /* reserved */
>>>>> -    av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d,
>> profile:
>>>> %d, level: %d, "
>>>>> -           "rpu flag: %d, el flag: %d, bl flag: %d, compatibility
>> id:
>>>> %d\n",
>>>>> -           dovi->dv_profile > 10 ? "dvwC" : (dovi->dv_profile > 7 ?
>>>> "dvvC" : "dvcC"),
>>>>> -           dovi->dv_version_major, dovi->dv_version_minor,
>>>>> -           dovi->dv_profile, dovi->dv_level,
>>>>> -           dovi->rpu_present_flag,
>>>>> -           dovi->el_present_flag,
>>>>> -           dovi->bl_present_flag,
>>>>> -           dovi->dv_bl_signal_compatibility_id);
>>>>> +
>>>>> +    size = ff_isom_put_dvcc_dvvc(s, buf, sizeof(buf), dovi);
>>>>
>>>> I think you need check the return of ff_isom_put_dvcc_dvvc().
>>>>
>>>>
>>> Wouldn't it necessarily return the constant ISOM_DVCC_DVVC_SIZE in this
>>> case?
>>
>> yes, now it'll return negative error code in one error case. Why the out
>> parameter is
>> using array instead of pointer, as the size of buffer is one of parameters
>> also.
>> So if it's array, why it's necessary to check the size?
>>
> 
> External users of the function can pass either an array or pointer.

This function is libavformat-only; there are no external users.

> The size addition was suggested here:
> https://ffmpeg.org/pipermail/ffmpeg-devel/2021-September/285877.html

I actually suggested this to you so that you can remove the check from
the function.

> 
> So in the case a pointer is used, the size is necessary.
> 
>> Since the only error condition is if the passed size is lower than that,
>>> but the buffer is constant sized.
>>>
>>> And the PutBitContext, being flushed, would return the same value.
>>>
>>>
>>>>> +
>>>>> +    avio_write(pb, buf, size);
>>>>> +
>>>>>      return 32; /* 8 + 24 */
>>>>>  }
>>>>>
>>>>> --
>>>>> 2.34.1



More information about the ffmpeg-devel mailing list