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

Przemysław Sobala przemyslaw.sobala at gmail.com
Thu Mar 2 00:48:47 EET 2017


23 lut 2017 21:39 "Przemysław Sobala" <przemyslaw.sobala at gmail.com>
napisał(a):

On Wednesday, February 22, 2017, Przemysław Sobala <
przemyslaw.sobala at gmail.com> wrote:

> From: Przemysław Sobala <przemyslaw.sobala at gmail.com>
>
> Provides a way to change bandwidth (bitrate) parameter after CRF H.264
> encoding (details: http://ffmpeg.org/pipermail/li
> bav-user/2017-February/010141.html)
>
> Signed-off-by: Przemysław Sobala <przemyslaw.sobala at grupawp.pl>
> ---
>  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
>
>
Any comment on this?

--
Best regards
Przemysław Sobala


ping?

--
Regards
Przemysław Sobala


More information about the ffmpeg-devel mailing list