diff mbox series

[FFmpeg-devel,v1] avcodec/av1dec: Add tile list OBU to decompose list

Message ID 20231220084356.796186-1-fei.w.wang@intel.com
State New
Headers show
Series [FFmpeg-devel,v1] avcodec/av1dec: Add tile list OBU to decompose list | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Wang, Fei W Dec. 20, 2023, 8:43 a.m. UTC
From: Fei Wang <fei.w.wang@intel.com>

Show the unsupported message and return unsupported for clips contain
tile list OBU since it hasn't been implemented. Otherwise, decoding
maybe successful but result is incorrect.

Signed-off-by: Fei Wang <fei.w.wang@intel.com>
---
 libavcodec/av1dec.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Andreas Rheinhardt Dec. 20, 2023, 4:11 p.m. UTC | #1
fei.w.wang-at-intel.com@ffmpeg.org:
> From: Fei Wang <fei.w.wang@intel.com>
> 
> Show the unsupported message and return unsupported for clips contain
> tile list OBU since it hasn't been implemented. Otherwise, decoding
> maybe successful but result is incorrect.
> 
> Signed-off-by: Fei Wang <fei.w.wang@intel.com>
> ---
>  libavcodec/av1dec.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
> index 4dcde234c6..629e37c3f8 100644
> --- a/libavcodec/av1dec.c
> +++ b/libavcodec/av1dec.c
> @@ -805,6 +805,7 @@ static const CodedBitstreamUnitType decompose_unit_types[] = {
>      AV1_OBU_SEQUENCE_HEADER,
>      AV1_OBU_TEMPORAL_DELIMITER,
>      AV1_OBU_TILE_GROUP,
> +    AV1_OBU_TILE_LIST,

What do you need this for? Decomposing it would only change whether
CodedBitstreamUnit.content is available, but you are only reading
CodedBitstreamUnit.type.

>  };
>  
>  static av_cold int av1_decode_init(AVCodecContext *avctx)
> @@ -1327,6 +1328,10 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
>              }
>              break;
>          case AV1_OBU_TILE_LIST:
> +            av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding is unsupported.\n");
> +            ret = AVERROR_PATCHWELCOME;
> +            goto end;
> +            break;
>          case AV1_OBU_TEMPORAL_DELIMITER:
>          case AV1_OBU_PADDING:
>              break;
Wang, Fei W Dec. 21, 2023, 12:46 a.m. UTC | #2
On Wed, 2023-12-20 at 17:11 +0100, Andreas Rheinhardt wrote:
> fei.w.wang-at-intel.com@ffmpeg.org:
> > From: Fei Wang <fei.w.wang@intel.com>
> > 
> > Show the unsupported message and return unsupported for clips
> > contain
> > tile list OBU since it hasn't been implemented. Otherwise, decoding
> > maybe successful but result is incorrect.
> > 
> > Signed-off-by: Fei Wang <fei.w.wang@intel.com>
> > ---
> >  libavcodec/av1dec.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> > 
> > diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
> > index 4dcde234c6..629e37c3f8 100644
> > --- a/libavcodec/av1dec.c
> > +++ b/libavcodec/av1dec.c
> > @@ -805,6 +805,7 @@ static const CodedBitstreamUnitType
> > decompose_unit_types[] = {
> >      AV1_OBU_SEQUENCE_HEADER,
> >      AV1_OBU_TEMPORAL_DELIMITER,
> >      AV1_OBU_TILE_GROUP,
> > +    AV1_OBU_TILE_LIST,
> 
> What do you need this for? Decomposing it would only change whether
> CodedBitstreamUnit.content is available, but you are only reading
> CodedBitstreamUnit.type.

To show the unsupported error and let user know that there are tile
list OBUs in bitstream that decoder can't handle them. Otherwise, like
my commit mentioned, tile list obu bitsteam may be decoded 'successful'
according to log.

> 
> >  };
> >  
> >  static av_cold int av1_decode_init(AVCodecContext *avctx)
> > @@ -1327,6 +1328,10 @@ static int
> > av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
> >              }
> >              break;
> >          case AV1_OBU_TILE_LIST:
> > +            av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding
> > is unsupported.\n");
> > +            ret = AVERROR_PATCHWELCOME;
> > +            goto end;
> > +            break;
> >          case AV1_OBU_TEMPORAL_DELIMITER:
> >          case AV1_OBU_PADDING:
> >              break;
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Andreas Rheinhardt Dec. 21, 2023, 7:14 p.m. UTC | #3
Wang, Fei W:
> On Wed, 2023-12-20 at 17:11 +0100, Andreas Rheinhardt wrote:
>> fei.w.wang-at-intel.com@ffmpeg.org:
>>> From: Fei Wang <fei.w.wang@intel.com>
>>>
>>> Show the unsupported message and return unsupported for clips
>>> contain
>>> tile list OBU since it hasn't been implemented. Otherwise, decoding
>>> maybe successful but result is incorrect.
>>>
>>> Signed-off-by: Fei Wang <fei.w.wang@intel.com>
>>> ---
>>>  libavcodec/av1dec.c | 5 +++++
>>>  1 file changed, 5 insertions(+)
>>>
>>> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
>>> index 4dcde234c6..629e37c3f8 100644
>>> --- a/libavcodec/av1dec.c
>>> +++ b/libavcodec/av1dec.c
>>> @@ -805,6 +805,7 @@ static const CodedBitstreamUnitType
>>> decompose_unit_types[] = {
>>>      AV1_OBU_SEQUENCE_HEADER,
>>>      AV1_OBU_TEMPORAL_DELIMITER,
>>>      AV1_OBU_TILE_GROUP,
>>> +    AV1_OBU_TILE_LIST,
>>
>> What do you need this for? Decomposing it would only change whether
>> CodedBitstreamUnit.content is available, but you are only reading
>> CodedBitstreamUnit.type.
> 
> To show the unsupported error and let user know that there are tile
> list OBUs in bitstream that decoder can't handle them. Otherwise, like
> my commit mentioned, tile list obu bitsteam may be decoded 'successful'
> according to log.
> 

As I said: You do not need CodedBitstreamUnit.content for the error message.

>>
>>>  };
>>>  
>>>  static av_cold int av1_decode_init(AVCodecContext *avctx)
>>> @@ -1327,6 +1328,10 @@ static int
>>> av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
>>>              }
>>>              break;
>>>          case AV1_OBU_TILE_LIST:
>>> +            av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding
>>> is unsupported.\n");
>>> +            ret = AVERROR_PATCHWELCOME;
>>> +            goto end;
>>> +            break;
>>>          case AV1_OBU_TEMPORAL_DELIMITER:
>>>          case AV1_OBU_PADDING:
>>>              break;
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Wang, Fei W Dec. 22, 2023, 1:22 a.m. UTC | #4
On Thu, 2023-12-21 at 20:14 +0100, Andreas Rheinhardt wrote:
> Wang, Fei W:
> > On Wed, 2023-12-20 at 17:11 +0100, Andreas Rheinhardt wrote:
> > > fei.w.wang-at-intel.com@ffmpeg.org:
> > > > From: Fei Wang <fei.w.wang@intel.com>
> > > > 
> > > > Show the unsupported message and return unsupported for clips
> > > > contain
> > > > tile list OBU since it hasn't been implemented. Otherwise,
> > > > decoding
> > > > maybe successful but result is incorrect.
> > > > 
> > > > Signed-off-by: Fei Wang <fei.w.wang@intel.com>
> > > > ---
> > > >  libavcodec/av1dec.c | 5 +++++
> > > >  1 file changed, 5 insertions(+)
> > > > 
> > > > diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
> > > > index 4dcde234c6..629e37c3f8 100644
> > > > --- a/libavcodec/av1dec.c
> > > > +++ b/libavcodec/av1dec.c
> > > > @@ -805,6 +805,7 @@ static const CodedBitstreamUnitType
> > > > decompose_unit_types[] = {
> > > >      AV1_OBU_SEQUENCE_HEADER,
> > > >      AV1_OBU_TEMPORAL_DELIMITER,
> > > >      AV1_OBU_TILE_GROUP,
> > > > +    AV1_OBU_TILE_LIST,
> > > 
> > > What do you need this for? Decomposing it would only change
> > > whether
> > > CodedBitstreamUnit.content is available, but you are only reading
> > > CodedBitstreamUnit.type.
> > 
> > To show the unsupported error and let user know that there are tile
> > list OBUs in bitstream that decoder can't handle them. Otherwise,
> > like
> > my commit mentioned, tile list obu bitsteam may be decoded
> > 'successful'
> > according to log.
> > 
> 
> As I said: You do not need CodedBitstreamUnit.content for the error
> message.

No, obu will be filtered if it is not listed in decompose, decoder
can't receive its type neither.

Thanks
Fei

> 
> > > >  };
> > > >  
> > > >  static av_cold int av1_decode_init(AVCodecContext *avctx)
> > > > @@ -1327,6 +1328,10 @@ static int
> > > > av1_receive_frame_internal(AVCodecContext *avctx, AVFrame
> > > > *frame)
> > > >              }
> > > >              break;
> > > >          case AV1_OBU_TILE_LIST:
> > > > +            av_log(avctx, AV_LOG_ERROR, "Large scale tile
> > > > decoding
> > > > is unsupported.\n");
> > > > +            ret = AVERROR_PATCHWELCOME;
> > > > +            goto end;
> > > > +            break;
> > > >          case AV1_OBU_TEMPORAL_DELIMITER:
> > > >          case AV1_OBU_PADDING:
> > > >              break;
> > > 
> > > _______________________________________________
> > > ffmpeg-devel mailing list
> > > ffmpeg-devel@ffmpeg.org
> > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > > 
> > > To unsubscribe, visit link above, or email
> > > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > 
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Andreas Rheinhardt Dec. 22, 2023, 7:41 a.m. UTC | #5
Wang, Fei W:
> On Thu, 2023-12-21 at 20:14 +0100, Andreas Rheinhardt wrote:
>> Wang, Fei W:
>>> On Wed, 2023-12-20 at 17:11 +0100, Andreas Rheinhardt wrote:
>>>> fei.w.wang-at-intel.com@ffmpeg.org:
>>>>> From: Fei Wang <fei.w.wang@intel.com>
>>>>>
>>>>> Show the unsupported message and return unsupported for clips
>>>>> contain
>>>>> tile list OBU since it hasn't been implemented. Otherwise,
>>>>> decoding
>>>>> maybe successful but result is incorrect.
>>>>>
>>>>> Signed-off-by: Fei Wang <fei.w.wang@intel.com>
>>>>> ---
>>>>>  libavcodec/av1dec.c | 5 +++++
>>>>>  1 file changed, 5 insertions(+)
>>>>>
>>>>> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
>>>>> index 4dcde234c6..629e37c3f8 100644
>>>>> --- a/libavcodec/av1dec.c
>>>>> +++ b/libavcodec/av1dec.c
>>>>> @@ -805,6 +805,7 @@ static const CodedBitstreamUnitType
>>>>> decompose_unit_types[] = {
>>>>>      AV1_OBU_SEQUENCE_HEADER,
>>>>>      AV1_OBU_TEMPORAL_DELIMITER,
>>>>>      AV1_OBU_TILE_GROUP,
>>>>> +    AV1_OBU_TILE_LIST,
>>>>
>>>> What do you need this for? Decomposing it would only change
>>>> whether
>>>> CodedBitstreamUnit.content is available, but you are only reading
>>>> CodedBitstreamUnit.type.
>>>
>>> To show the unsupported error and let user know that there are tile
>>> list OBUs in bitstream that decoder can't handle them. Otherwise,
>>> like
>>> my commit mentioned, tile list obu bitsteam may be decoded
>>> 'successful'
>>> according to log.
>>>
>>
>> As I said: You do not need CodedBitstreamUnit.content for the error
>> message.
> 
> No, obu will be filtered if it is not listed in decompose, decoder
> can't receive its type neither.
> 

Did you test this? If so, this would be a violation of the documentation
of decompose_unit_types: "Types not in this list will be available in
bitstream form only." My reading of the code of
cbs_read_fragment_content() in cbs.c is that it does what it is supposed
to do.

If you were right, it would also mean that the current case for
AV1_OBU_TILE_LIST and AV1_OBU_PADDING is redundant (and that the default
case will be used instead).

- Andreas
Wang, Fei W Dec. 26, 2023, 3:41 a.m. UTC | #6
On Fri, 2023-12-22 at 08:41 +0100, Andreas Rheinhardt wrote:
> Wang, Fei W:
> > On Thu, 2023-12-21 at 20:14 +0100, Andreas Rheinhardt wrote:
> > > Wang, Fei W:
> > > > On Wed, 2023-12-20 at 17:11 +0100, Andreas Rheinhardt wrote:
> > > > > fei.w.wang-at-intel.com@ffmpeg.org:
> > > > > > From: Fei Wang <fei.w.wang@intel.com>
> > > > > > 
> > > > > > Show the unsupported message and return unsupported for
> > > > > > clips
> > > > > > contain
> > > > > > tile list OBU since it hasn't been implemented. Otherwise,
> > > > > > decoding
> > > > > > maybe successful but result is incorrect.
> > > > > > 
> > > > > > Signed-off-by: Fei Wang <fei.w.wang@intel.com>
> > > > > > ---
> > > > > >  libavcodec/av1dec.c | 5 +++++
> > > > > >  1 file changed, 5 insertions(+)
> > > > > > 
> > > > > > diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
> > > > > > index 4dcde234c6..629e37c3f8 100644
> > > > > > --- a/libavcodec/av1dec.c
> > > > > > +++ b/libavcodec/av1dec.c
> > > > > > @@ -805,6 +805,7 @@ static const CodedBitstreamUnitType
> > > > > > decompose_unit_types[] = {
> > > > > >      AV1_OBU_SEQUENCE_HEADER,
> > > > > >      AV1_OBU_TEMPORAL_DELIMITER,
> > > > > >      AV1_OBU_TILE_GROUP,
> > > > > > +    AV1_OBU_TILE_LIST,
> > > > > 
> > > > > What do you need this for? Decomposing it would only change
> > > > > whether
> > > > > CodedBitstreamUnit.content is available, but you are only
> > > > > reading
> > > > > CodedBitstreamUnit.type.
> > > > 
> > > > To show the unsupported error and let user know that there are
> > > > tile
> > > > list OBUs in bitstream that decoder can't handle them.
> > > > Otherwise,
> > > > like
> > > > my commit mentioned, tile list obu bitsteam may be decoded
> > > > 'successful'
> > > > according to log.
> > > > 
> > > 
> > > As I said: You do not need CodedBitstreamUnit.content for the
> > > error
> > > message.
> > 
> > No, obu will be filtered if it is not listed in decompose, decoder
> > can't receive its type neither.
> > 
> 
> Did you test this? If so, this would be a violation of the
> documentation
> of decompose_unit_types: "Types not in this list will be available in
> bitstream form only." My reading of the code of
> cbs_read_fragment_content() in cbs.c is that it does what it is
> supposed
> to do.

I was misled by the incomplete log. Decoder can receive tile list OBU
bitstream. Fixed it together with another version. Sorry for the noise.

https://patchwork.ffmpeg.org/project/ffmpeg/list/?series=10358

Thanks
Fei

> 
> If you were right, it would also mean that the current case for
> AV1_OBU_TILE_LIST and AV1_OBU_PADDING is redundant (and that the
> default
> case will be used instead).
> 
> - Andreas
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox series

Patch

diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
index 4dcde234c6..629e37c3f8 100644
--- a/libavcodec/av1dec.c
+++ b/libavcodec/av1dec.c
@@ -805,6 +805,7 @@  static const CodedBitstreamUnitType decompose_unit_types[] = {
     AV1_OBU_SEQUENCE_HEADER,
     AV1_OBU_TEMPORAL_DELIMITER,
     AV1_OBU_TILE_GROUP,
+    AV1_OBU_TILE_LIST,
 };
 
 static av_cold int av1_decode_init(AVCodecContext *avctx)
@@ -1327,6 +1328,10 @@  static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
             }
             break;
         case AV1_OBU_TILE_LIST:
+            av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding is unsupported.\n");
+            ret = AVERROR_PATCHWELCOME;
+            goto end;
+            break;
         case AV1_OBU_TEMPORAL_DELIMITER:
         case AV1_OBU_PADDING:
             break;