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 < > [email protected]> wrote: > > > On Fri, Mar 3, 2017 at 9:38 AM, Przemysław Sobala < > > [email protected]> wrote: > > > >> From: Przemysław Sobala <[email protected]> > >> > >> 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.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
