[FFmpeg-devel,libdav1d.c] : Add options for spatial layers.

Submitted by Thierry Foucu on Nov. 27, 2019, 5:21 p.m.

Details

Message ID 20191127172128.109224-1-tfoucu@gmail.com
State New
Headers show

Commit Message

Thierry Foucu Nov. 27, 2019, 5:21 p.m.
Disable by default to output all the layers, to match libaomdec wrapper.
Add option to select the operating point for the spatial layers.
Update the documentation with the new options.
---
 doc/decoders.texi     | 6 ++++++
 libavcodec/libdav1d.c | 8 ++++++++
 2 files changed, 14 insertions(+)

Comments

Moritz Barsnick Nov. 28, 2019, midnight
On Wed, Nov 27, 2019 at 09:21:28 -0800, Thierry Foucu wrote:
> +@item oppoint
> +Select an operating point of a scalable AV1 bitstream (0 - 32)
[...]
> +    { "oppoint",  "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, 0, 31, VD },

0 to 31 or 0 to 32?

> +@item alllayer
> +Output all spatial layers of a scalable AV1 bitstream. The default value is false.
[...]
> +    { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
"alllayers", not "alllayer"

Cheers,
Moritz
James Almer Nov. 28, 2019, 12:02 a.m.
On 11/27/2019 9:00 PM, Moritz Barsnick wrote:
> On Wed, Nov 27, 2019 at 09:21:28 -0800, Thierry Foucu wrote:
>> +@item oppoint
>> +Select an operating point of a scalable AV1 bitstream (0 - 32)
> [...]
>> +    { "oppoint",  "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, 0, 31, VD },
> 
> 0 to 31 or 0 to 32?

0 to 31. It's 32 operating points in total.

> 
>> +@item alllayer
>> +Output all spatial layers of a scalable AV1 bitstream. The default value is false.
> [...]
>> +    { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
> "alllayers", not "alllayer"
> 
> Cheers,
> Moritz
> _______________________________________________
> 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".
>
Thierry Foucu Nov. 28, 2019, 12:24 a.m.
On Wed, Nov 27, 2019 at 4:02 PM James Almer <jamrial@gmail.com> wrote:

> On 11/27/2019 9:00 PM, Moritz Barsnick wrote:
> > On Wed, Nov 27, 2019 at 09:21:28 -0800, Thierry Foucu wrote:
> >> +@item oppoint
> >> +Select an operating point of a scalable AV1 bitstream (0 - 32)
> > [...]
> >> +    { "oppoint",  "Select an operating point of the scalable
> bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, 0, 31,
> VD },
> >
> > 0 to 31 or 0 to 32?
>
> 0 to 31. It's 32 operating points in total.
>

thanks..
Will update the patch


>
> >
> >> +@item alllayer
> >> +Output all spatial layers of a scalable AV1 bitstream. The default
> value is false.
> > [...]
> >> +    { "alllayers", "Output all spatial layers", OFFSET(all_layers),
> AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
> > "alllayers", not "alllayer"
> >
>

Sorry, will update the patch.


> > Cheers,
> > Moritz
> > _______________________________________________
> > 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 Nov. 28, 2019, 5:08 a.m.
Thierry Foucu:
> Disable by default to output all the layers, to match libaomdec wrapper.
> Add option to select the operating point for the spatial layers.
> Update the documentation with the new options.
> ---
>  doc/decoders.texi     | 6 ++++++
>  libavcodec/libdav1d.c | 8 ++++++++
>  2 files changed, 14 insertions(+)
> 
> diff --git a/doc/decoders.texi b/doc/decoders.texi
> index 676e062e72..86c899b5be 100644
> --- a/doc/decoders.texi
> +++ b/doc/decoders.texi
> @@ -71,6 +71,12 @@ Set amount of tile threads to use during decoding. The default value is 0 (autod
>  Apply film grain to the decoded video if present in the bitstream. Defaults to the
>  internal default of the library.
>  
> +@item oppoint
> +Select an operating point of a scalable AV1 bitstream (0 - 32)

Should be 0 - 31.
> +
> +@item alllayer
> +Output all spatial layers of a scalable AV1 bitstream. The default value is false.
> +
>  @end table
>  
>  @section libdavs2
> diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
> index cf4b178f1d..ea4ef641bf 100644
> --- a/libavcodec/libdav1d.c
> +++ b/libavcodec/libdav1d.c
> @@ -40,6 +40,8 @@ typedef struct Libdav1dContext {
>      int tile_threads;
>      int frame_threads;
>      int apply_grain;
> +    int operating_point;
> +    int all_layers;
>  } Libdav1dContext;
>  
>  static const enum AVPixelFormat pix_fmt[][3] = {
> @@ -134,6 +136,10 @@ static av_cold int libdav1d_init(AVCodecContext *c)
>      if (dav1d->apply_grain >= 0)
>          s.apply_grain = dav1d->apply_grain;
>  
> +    s.all_layers = dav1d->all_layers;
> +    if (dav1d->operating_point >= 0)
> +        s.operating_point = dav1d->operating_point;
> +
>      s.n_tile_threads = dav1d->tile_threads
>                       ? dav1d->tile_threads
>                       : FFMIN(floor(sqrt(threads)), DAV1D_MAX_TILE_THREADS);
> @@ -378,6 +384,8 @@ static const AVOption libdav1d_options[] = {
>      { "tilethreads", "Tile threads", OFFSET(tile_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_TILE_THREADS, VD },
>      { "framethreads", "Frame threads", OFFSET(frame_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_THREADS, VD },
>      { "filmgrain", "Apply Film Grain", OFFSET(apply_grain), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD },
> +    { "oppoint",  "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, 0, 31, VD },

If I am not mistaken, it is not possible (you get an error message and
the default value is not set) to have a default value outside of the
range of allowed values. That is because write_number() which performs
the range checks in libavutil/opt.c is also called to write the
default values. Would be nice if you could make having a default value
outside of the range of allowed values work.

I can't comment on the rest of the patch, being entirely unfamiliar
with dav1d.

- Andreas

Patch hide | download patch | download mbox

diff --git a/doc/decoders.texi b/doc/decoders.texi
index 676e062e72..86c899b5be 100644
--- a/doc/decoders.texi
+++ b/doc/decoders.texi
@@ -71,6 +71,12 @@  Set amount of tile threads to use during decoding. The default value is 0 (autod
 Apply film grain to the decoded video if present in the bitstream. Defaults to the
 internal default of the library.
 
+@item oppoint
+Select an operating point of a scalable AV1 bitstream (0 - 32)
+
+@item alllayer
+Output all spatial layers of a scalable AV1 bitstream. The default value is false.
+
 @end table
 
 @section libdavs2
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index cf4b178f1d..ea4ef641bf 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -40,6 +40,8 @@  typedef struct Libdav1dContext {
     int tile_threads;
     int frame_threads;
     int apply_grain;
+    int operating_point;
+    int all_layers;
 } Libdav1dContext;
 
 static const enum AVPixelFormat pix_fmt[][3] = {
@@ -134,6 +136,10 @@  static av_cold int libdav1d_init(AVCodecContext *c)
     if (dav1d->apply_grain >= 0)
         s.apply_grain = dav1d->apply_grain;
 
+    s.all_layers = dav1d->all_layers;
+    if (dav1d->operating_point >= 0)
+        s.operating_point = dav1d->operating_point;
+
     s.n_tile_threads = dav1d->tile_threads
                      ? dav1d->tile_threads
                      : FFMIN(floor(sqrt(threads)), DAV1D_MAX_TILE_THREADS);
@@ -378,6 +384,8 @@  static const AVOption libdav1d_options[] = {
     { "tilethreads", "Tile threads", OFFSET(tile_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_TILE_THREADS, VD },
     { "framethreads", "Frame threads", OFFSET(frame_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_THREADS, VD },
     { "filmgrain", "Apply Film Grain", OFFSET(apply_grain), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD },
+    { "oppoint",  "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, 0, 31, VD },
+    { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD },
     { NULL }
 };