Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLYF <yefei.li@gmail.com>2012-11-16 10:12:27 +0400
committerMartin Storsjö <martin@martin.st>2013-07-29 10:50:09 +0400
commitc110cbf6b59dfa0f3fc712b4e3c9095e33c57b50 (patch)
treeff82f3cce9e771d57ce29df6d5b58bc17114b494 /libavformat/hls.c
parent9d64f236292ba28018dd9afd2d57f8f944b33f81 (diff)
hls: Create an AVProgram for each variant
Without the information, an application may choose audio from one variant and video from another variant, which leads to fetching two variants from the network. This enables av_find_best_stream() to find matching audio and video streams, so that only one variant is fetched. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/hls.c')
-rw-r--r--libavformat/hls.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c
index d69a3809e4..b01dd3e791 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -489,6 +489,8 @@ static int hls_read_header(AVFormatContext *s)
struct variant *v = c->variants[i];
AVInputFormat *in_fmt = NULL;
char bitrate_str[20];
+ AVProgram *program;
+
if (v->n_segments == 0)
continue;
@@ -528,6 +530,12 @@ static int hls_read_header(AVFormatContext *s)
if (ret < 0)
goto fail;
snprintf(bitrate_str, sizeof(bitrate_str), "%d", v->bandwidth);
+
+ program = av_new_program(s, i);
+ if (!program)
+ goto fail;
+ av_dict_set(&program->metadata, "variant_bitrate", bitrate_str, 0);
+
/* Create new AVStreams for each stream in this variant */
for (j = 0; j < v->ctx->nb_streams; j++) {
AVStream *st = avformat_new_stream(s, NULL);
@@ -536,6 +544,7 @@ static int hls_read_header(AVFormatContext *s)
ret = AVERROR(ENOMEM);
goto fail;
}
+ ff_program_add_stream_index(s, i, stream_offset + j);
st->id = i;
avpriv_set_pts_info(st, ist->pts_wrap_bits, ist->time_base.num, ist->time_base.den);
avcodec_copy_context(st->codec, v->ctx->streams[j]->codec);