[FFmpeg-cvslog] dashenc: allow AdaptationSets to have different average frame rates
Peter Große
git at videolan.org
Sun Oct 29 19:30:30 EET 2017
ffmpeg | branch: master | Peter Große <pegro at friiks.de> | Thu Oct 26 18:17:31 2017 +0200| [2911dabd51dc61f594e43904f27f3afd01f3f835] | committer: Michael Niedermayer
dashenc: allow AdaptationSets to have different average frame rates
Signed-off-by: Peter Große <pegro at friiks.de>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2911dabd51dc61f594e43904f27f3afd01f3f835
---
libavformat/dashenc.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
index 23b2d3fed4..c55106c11d 100644
--- a/libavformat/dashenc.c
+++ b/libavformat/dashenc.c
@@ -55,6 +55,8 @@ typedef struct AdaptationSet {
char id[10];
enum AVMediaType media_type;
AVDictionary *metadata;
+ AVRational min_frame_rate, max_frame_rate;
+ int ambiguous_frame_rate;
} AdaptationSet;
typedef struct OutputStream {
@@ -97,8 +99,6 @@ typedef struct DASHContext {
const char *single_file_name;
const char *init_seg_name;
const char *media_seg_name;
- AVRational min_frame_rate, max_frame_rate;
- int ambiguous_frame_rate;
const char *utc_timing_url;
} DASHContext;
@@ -393,8 +393,8 @@ static int write_adaptation_set(AVFormatContext *s, AVIOContext *out, int as_ind
avio_printf(out, "\t\t<AdaptationSet id=\"%s\" contentType=\"%s\" segmentAlignment=\"true\" bitstreamSwitching=\"true\"",
as->id, as->media_type == AVMEDIA_TYPE_VIDEO ? "video" : "audio");
- if (as->media_type == AVMEDIA_TYPE_VIDEO && c->max_frame_rate.num && !c->ambiguous_frame_rate)
- avio_printf(out, " %s=\"%d/%d\"", (av_cmp_q(c->min_frame_rate, c->max_frame_rate) < 0) ? "maxFrameRate" : "frameRate", c->max_frame_rate.num, c->max_frame_rate.den);
+ if (as->media_type == AVMEDIA_TYPE_VIDEO && as->max_frame_rate.num && !as->ambiguous_frame_rate)
+ avio_printf(out, " %s=\"%d/%d\"", (av_cmp_q(as->min_frame_rate, as->max_frame_rate) < 0) ? "maxFrameRate" : "frameRate", as->max_frame_rate.num, as->max_frame_rate.den);
lang = av_dict_get(as->metadata, "language", NULL, 0);
if (lang)
avio_printf(out, " lang=\"%s\"", lang->value);
@@ -677,7 +677,6 @@ static int dash_init(AVFormatContext *s)
c->single_file = 1;
if (c->single_file)
c->use_template = 0;
- c->ambiguous_frame_rate = 0;
av_strlcpy(c->dirname, s->filename, sizeof(c->dirname));
ptr = strrchr(c->dirname, '/');
@@ -805,12 +804,12 @@ static int dash_init(AVFormatContext *s)
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
AVRational avg_frame_rate = s->streams[i]->avg_frame_rate;
if (avg_frame_rate.num > 0) {
- if (av_cmp_q(avg_frame_rate, c->min_frame_rate) < 0)
- c->min_frame_rate = avg_frame_rate;
- if (av_cmp_q(c->max_frame_rate, avg_frame_rate) < 0)
- c->max_frame_rate = avg_frame_rate;
+ if (av_cmp_q(avg_frame_rate, as->min_frame_rate) < 0)
+ as->min_frame_rate = avg_frame_rate;
+ if (av_cmp_q(as->max_frame_rate, avg_frame_rate) < 0)
+ as->max_frame_rate = avg_frame_rate;
} else {
- c->ambiguous_frame_rate = 1;
+ as->ambiguous_frame_rate = 1;
}
c->has_video = 1;
}
More information about the ffmpeg-cvslog
mailing list