Message ID | 20210822124045.16579-1-onemda@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avcodec/setts_bsf: allow to use input stream timebase too | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Paul B Mahol: > Signed-off-by: Paul B Mahol <onemda@gmail.com> > --- > doc/bitstream_filters.texi | 5 ++++- > libavcodec/setts_bsf.c | 5 ++++- > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi > index 1900eb4352..b5a0be8ca2 100644 > --- a/doc/bitstream_filters.texi > +++ b/doc/bitstream_filters.texi > @@ -777,8 +777,11 @@ The previous output DTS. > @item PREV_OUTPTS > The previous output PTS. > > +@item ITB > +The input timebase of stream packet belongs. > + > @item TB > -The timebase of stream packet belongs. > +The output timebase of stream packet belongs. > > @item SR > The sample rate of stream packet belongs. > diff --git a/libavcodec/setts_bsf.c b/libavcodec/setts_bsf.c > index d604f91f71..965c999500 100644 > --- a/libavcodec/setts_bsf.c > +++ b/libavcodec/setts_bsf.c > @@ -41,7 +41,8 @@ static const char *const var_names[] = { > "DTS", ///< original DTS in the file of the frame > "STARTPTS", ///< PTS at start of movie > "STARTDTS", ///< DTS at start of movie > - "TB", ///< timebase of the stream > + "ITB", ///< input timebase of the stream > + "TB", ///< output timebase of the stream > "SR", ///< sample rate of the stream > "NOPTS", ///< The AV_NOPTS_VALUE constant > NULL > @@ -59,6 +60,7 @@ enum var_name { > VAR_DTS, > VAR_STARTPTS, > VAR_STARTDTS, > + VAR_ITB, > VAR_TB, > VAR_SR, > VAR_NOPTS, > @@ -154,6 +156,7 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) > s->var_values[VAR_PREV_OUTDTS] = s->prev_outdts; > s->var_values[VAR_STARTPTS] = s->start_pts; > s->var_values[VAR_STARTDTS] = s->start_dts; > + s->var_values[VAR_ITB] = ctx->time_base_in.den ? av_q2d(ctx->time_base_in) : 0; > s->var_values[VAR_TB] = ctx->time_base_out.den ? av_q2d(ctx->time_base_out) : 0; > s->var_values[VAR_SR] = ctx->par_in->sample_rate; > > This is of no use: It is the user which sets the input timebase and it is the bsf which (in its init function) chooses the output timebase (the generic bsf code sets it equal to the input timebase and most (all?) filters don't change it). This filter does not change it, so input and output timebases are always equal. The bug in #9382 is really in ffmpeg.c, it can't be fixed in this bsf at all as it lacks the information about the muxing timebase. - Andreas
On Sun, Aug 22, 2021 at 2:48 PM Andreas Rheinhardt < andreas.rheinhardt@outlook.com> wrote: > Paul B Mahol: > > Signed-off-by: Paul B Mahol <onemda@gmail.com> > > --- > > doc/bitstream_filters.texi | 5 ++++- > > libavcodec/setts_bsf.c | 5 ++++- > > 2 files changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi > > index 1900eb4352..b5a0be8ca2 100644 > > --- a/doc/bitstream_filters.texi > > +++ b/doc/bitstream_filters.texi > > @@ -777,8 +777,11 @@ The previous output DTS. > > @item PREV_OUTPTS > > The previous output PTS. > > > > +@item ITB > > +The input timebase of stream packet belongs. > > + > > @item TB > > -The timebase of stream packet belongs. > > +The output timebase of stream packet belongs. > > > > @item SR > > The sample rate of stream packet belongs. > > diff --git a/libavcodec/setts_bsf.c b/libavcodec/setts_bsf.c > > index d604f91f71..965c999500 100644 > > --- a/libavcodec/setts_bsf.c > > +++ b/libavcodec/setts_bsf.c > > @@ -41,7 +41,8 @@ static const char *const var_names[] = { > > "DTS", ///< original DTS in the file of the frame > > "STARTPTS", ///< PTS at start of movie > > "STARTDTS", ///< DTS at start of movie > > - "TB", ///< timebase of the stream > > + "ITB", ///< input timebase of the stream > > + "TB", ///< output timebase of the stream > > "SR", ///< sample rate of the stream > > "NOPTS", ///< The AV_NOPTS_VALUE constant > > NULL > > @@ -59,6 +60,7 @@ enum var_name { > > VAR_DTS, > > VAR_STARTPTS, > > VAR_STARTDTS, > > + VAR_ITB, > > VAR_TB, > > VAR_SR, > > VAR_NOPTS, > > @@ -154,6 +156,7 @@ static int setts_filter(AVBSFContext *ctx, AVPacket > *pkt) > > s->var_values[VAR_PREV_OUTDTS] = s->prev_outdts; > > s->var_values[VAR_STARTPTS] = s->start_pts; > > s->var_values[VAR_STARTDTS] = s->start_dts; > > + s->var_values[VAR_ITB] = ctx->time_base_in.den ? > av_q2d(ctx->time_base_in) : 0; > > s->var_values[VAR_TB] = ctx->time_base_out.den ? > av_q2d(ctx->time_base_out) : 0; > > s->var_values[VAR_SR] = ctx->par_in->sample_rate; > > > > > This is of no use: It is the user which sets the input timebase and it > is the bsf which (in its init function) chooses the output timebase (the > generic bsf code sets it equal to the input timebase and most (all?) > filters don't change it). This filter does not change it, so input and > output timebases are always equal. > > The bug in #9382 is really in ffmpeg.c, it can't be fixed in this bsf at > all as it lacks the information about the muxing timebase. > Are you telling me that one field there is now useless? Above Code is correct. > > - 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". >
Paul B Mahol: > On Sun, Aug 22, 2021 at 2:48 PM Andreas Rheinhardt < > andreas.rheinhardt@outlook.com> wrote: > >> Paul B Mahol: >>> Signed-off-by: Paul B Mahol <onemda@gmail.com> >>> --- >>> doc/bitstream_filters.texi | 5 ++++- >>> libavcodec/setts_bsf.c | 5 ++++- >>> 2 files changed, 8 insertions(+), 2 deletions(-) >>> >>> diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi >>> index 1900eb4352..b5a0be8ca2 100644 >>> --- a/doc/bitstream_filters.texi >>> +++ b/doc/bitstream_filters.texi >>> @@ -777,8 +777,11 @@ The previous output DTS. >>> @item PREV_OUTPTS >>> The previous output PTS. >>> >>> +@item ITB >>> +The input timebase of stream packet belongs. >>> + >>> @item TB >>> -The timebase of stream packet belongs. >>> +The output timebase of stream packet belongs. >>> >>> @item SR >>> The sample rate of stream packet belongs. >>> diff --git a/libavcodec/setts_bsf.c b/libavcodec/setts_bsf.c >>> index d604f91f71..965c999500 100644 >>> --- a/libavcodec/setts_bsf.c >>> +++ b/libavcodec/setts_bsf.c >>> @@ -41,7 +41,8 @@ static const char *const var_names[] = { >>> "DTS", ///< original DTS in the file of the frame >>> "STARTPTS", ///< PTS at start of movie >>> "STARTDTS", ///< DTS at start of movie >>> - "TB", ///< timebase of the stream >>> + "ITB", ///< input timebase of the stream >>> + "TB", ///< output timebase of the stream >>> "SR", ///< sample rate of the stream >>> "NOPTS", ///< The AV_NOPTS_VALUE constant >>> NULL >>> @@ -59,6 +60,7 @@ enum var_name { >>> VAR_DTS, >>> VAR_STARTPTS, >>> VAR_STARTDTS, >>> + VAR_ITB, >>> VAR_TB, >>> VAR_SR, >>> VAR_NOPTS, >>> @@ -154,6 +156,7 @@ static int setts_filter(AVBSFContext *ctx, AVPacket >> *pkt) >>> s->var_values[VAR_PREV_OUTDTS] = s->prev_outdts; >>> s->var_values[VAR_STARTPTS] = s->start_pts; >>> s->var_values[VAR_STARTDTS] = s->start_dts; >>> + s->var_values[VAR_ITB] = ctx->time_base_in.den ? >> av_q2d(ctx->time_base_in) : 0; >>> s->var_values[VAR_TB] = ctx->time_base_out.den ? >> av_q2d(ctx->time_base_out) : 0; >>> s->var_values[VAR_SR] = ctx->par_in->sample_rate; >>> >>> >> This is of no use: It is the user which sets the input timebase and it >> is the bsf which (in its init function) chooses the output timebase (the >> generic bsf code sets it equal to the input timebase and most (all?) >> filters don't change it). This filter does not change it, so input and >> output timebases are always equal. >> >> The bug in #9382 is really in ffmpeg.c, it can't be fixed in this bsf at >> all as it lacks the information about the muxing timebase. >> > > Are you telling me that one field there is now useless? > Above Code is correct. > time_base_in and time_base_out always coincide, so adding the new variable would be useless (and confusing). But if your "now" corresponds to current master, then none of the variables are useless. - Andreas
diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi index 1900eb4352..b5a0be8ca2 100644 --- a/doc/bitstream_filters.texi +++ b/doc/bitstream_filters.texi @@ -777,8 +777,11 @@ The previous output DTS. @item PREV_OUTPTS The previous output PTS. +@item ITB +The input timebase of stream packet belongs. + @item TB -The timebase of stream packet belongs. +The output timebase of stream packet belongs. @item SR The sample rate of stream packet belongs. diff --git a/libavcodec/setts_bsf.c b/libavcodec/setts_bsf.c index d604f91f71..965c999500 100644 --- a/libavcodec/setts_bsf.c +++ b/libavcodec/setts_bsf.c @@ -41,7 +41,8 @@ static const char *const var_names[] = { "DTS", ///< original DTS in the file of the frame "STARTPTS", ///< PTS at start of movie "STARTDTS", ///< DTS at start of movie - "TB", ///< timebase of the stream + "ITB", ///< input timebase of the stream + "TB", ///< output timebase of the stream "SR", ///< sample rate of the stream "NOPTS", ///< The AV_NOPTS_VALUE constant NULL @@ -59,6 +60,7 @@ enum var_name { VAR_DTS, VAR_STARTPTS, VAR_STARTDTS, + VAR_ITB, VAR_TB, VAR_SR, VAR_NOPTS, @@ -154,6 +156,7 @@ static int setts_filter(AVBSFContext *ctx, AVPacket *pkt) s->var_values[VAR_PREV_OUTDTS] = s->prev_outdts; s->var_values[VAR_STARTPTS] = s->start_pts; s->var_values[VAR_STARTDTS] = s->start_dts; + s->var_values[VAR_ITB] = ctx->time_base_in.den ? av_q2d(ctx->time_base_in) : 0; s->var_values[VAR_TB] = ctx->time_base_out.den ? av_q2d(ctx->time_base_out) : 0; s->var_values[VAR_SR] = ctx->par_in->sample_rate;
Signed-off-by: Paul B Mahol <onemda@gmail.com> --- doc/bitstream_filters.texi | 5 ++++- libavcodec/setts_bsf.c | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-)