X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibdav1d.c;h=5248e3f9f56ffe7d48f4f0d3f84182c87f80c8d6;hb=a11aa5f3ed7ee4d2385a7b725d43f6070d790b4c;hp=98737cb16228486d132a897e03502e564a782d73;hpb=a34d06222f12768f1b86b45f27ef1b493d0bb5a4;p=ffmpeg diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index 98737cb1622..5248e3f9f56 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); @@ -287,6 +293,13 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) else frame->reordered_opaque = AV_NOPTS_VALUE; + if (p->seq_hdr->num_units_in_tick && p->seq_hdr->time_scale) { + av_reduce(&c->framerate.den, &c->framerate.num, + p->seq_hdr->num_units_in_tick, p->seq_hdr->time_scale, INT_MAX); + if (p->seq_hdr->equal_picture_interval) + c->ticks_per_frame = p->seq_hdr->num_ticks_per_picture; + } + // match timestamps and packet size frame->pts = frame->best_effort_timestamp = p->m.timestamp; #if FF_API_PKT_PTS @@ -371,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 }, -1, 31, VD }, + { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, { NULL } };