[FFmpeg-devel] [PATCH] lavf/dashenc: update bitrates on dash_write_trailer

Michael Niedermayer michael at niedermayer.cc
Sat Mar 11 17:36:22 EET 2017


On Fri, Mar 10, 2017 at 04:27:54PM +0100, Przemysław Sobala wrote:
> On Wed, Mar 8, 2017 at 9:27 AM, Przemysław Sobala <
> przemyslaw.sobala at gmail.com> wrote:
> 
> > On Fri, Mar 3, 2017 at 9:38 AM, Przemysław Sobala <
> > przemyslaw.sobala at gmail.com> wrote:
> >
> >> From: Przemysław Sobala <przemyslaw.sobala at gmail.com>
> >>
> >> Provides a way to change bandwidth parameter inside DASH manifest after a
> >> non-CBR H.264 encoding.
> >> Caller now is able to compute the bitrate by itself, after all packets
> >> have been written, and then set that value in AVFormatContext->streams->codecpar->bit_rate
> >> before calling av_write_trailer. As a result that value will be set in DASH
> >> manifest.
> >> ---
> >>  libavformat/dashenc.c | 42 ++++++++++++++++++++++++++++++------------
> >>  1 file changed, 30 insertions(+), 12 deletions(-)
> >>
> >> diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
> >> index fa56505..011d2ea 100644
> >> --- a/libavformat/dashenc.c
> >> +++ b/libavformat/dashenc.c
> >> @@ -561,6 +561,30 @@ static int write_manifest(AVFormatContext *s, int
> >> final)
> >>      return 0;
> >>  }
> >>
> >> +static int set_bitrate(AVFormatContext *s)
> >> +{
> >> +    DASHContext *c = s->priv_data;
> >> +    int i;
> >> +
> >> +    for (i = 0; i < s->nb_streams; i++) {
> >> +        OutputStream *os = &c->streams[i];
> >> +
> >> +        os->bit_rate = s->streams[i]->codecpar->bit_rate;
> >> +        if (os->bit_rate) {
> >> +            snprintf(os->bandwidth_str, sizeof(os->bandwidth_str),
> >> +                     " bandwidth=\"%d\"", os->bit_rate);
> >> +        } else {
> >> +            int level = s->strict_std_compliance >= FF_COMPLIANCE_STRICT
> >> ?
> >> +                        AV_LOG_ERROR : AV_LOG_WARNING;
> >> +            av_log(s, level, "No bit rate set for stream %d\n", i);
> >> +            if (s->strict_std_compliance >= FF_COMPLIANCE_STRICT)
> >> +                return AVERROR(EINVAL);
> >> +        }
> >> +    }
> >> +
> >> +    return 0;
> >> +}
> >> +
> >>  static int dash_init(AVFormatContext *s)
> >>  {
> >>      DASHContext *c = s->priv_data;
> >> @@ -597,6 +621,10 @@ static int dash_init(AVFormatContext *s)
> >>      if (!c->streams)
> >>          return AVERROR(ENOMEM);
> >>
> >> +    ret = set_bitrate(s);
> >> +    if (ret < 0)
> >> +        return ret;
> >> +
> >>      for (i = 0; i < s->nb_streams; i++) {
> >>          OutputStream *os = &c->streams[i];
> >>          AVFormatContext *ctx;
> >> @@ -604,18 +632,6 @@ static int dash_init(AVFormatContext *s)
> >>          AVDictionary *opts = NULL;
> >>          char filename[1024];
> >>
> >> -        os->bit_rate = s->streams[i]->codecpar->bit_rate;
> >> -        if (os->bit_rate) {
> >> -            snprintf(os->bandwidth_str, sizeof(os->bandwidth_str),
> >> -                     " bandwidth=\"%d\"", os->bit_rate);
> >> -        } else {
> >> -            int level = s->strict_std_compliance >= FF_COMPLIANCE_STRICT
> >> ?
> >> -                        AV_LOG_ERROR : AV_LOG_WARNING;
> >> -            av_log(s, level, "No bit rate set for stream %d\n", i);
> >> -            if (s->strict_std_compliance >= FF_COMPLIANCE_STRICT)
> >> -                return AVERROR(EINVAL);
> >> -        }
> >> -
> >>          ctx = avformat_alloc_context();
> >>          if (!ctx)
> >>              return AVERROR(ENOMEM);
> >> @@ -981,6 +997,8 @@ static int dash_write_trailer(AVFormatContext *s)
> >>  {
> >>      DASHContext *c = s->priv_data;
> >>
> >> +    set_bitrate(s);
> >> +
> >>      if (s->nb_streams > 0) {
> >>          OutputStream *os = &c->streams[0];
> >>          // If no segments have been written so far, try to do a crude
> >> --
> >> 2.7.4
> >>
> >>
> > ping
> >
> >
> ping, 7 days timeout
> can anyone tak a look at this?
> [
> http://ffmpeg.org/developer.html#Always-wait-long-enough-before-pushing-changes
> ]

applied

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

It is what and why we do it that matters, not just one of them.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20170311/ffbb101c/attachment.sig>


More information about the ffmpeg-devel mailing list