mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
webm_dash_manifest_demuxer: Fix initialization range for files with cues at the front
The WebM DASH spec states: The Initialization Segment shall not contain Clusters or Cues. The Segment Index corresponds to the Cues. Previously, it included the cues if they were at the front. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
parent
8e6b9ef473
commit
6ba1c9bf7e
@ -3815,7 +3815,7 @@ static int64_t webm_dash_manifest_compute_bandwidth(AVFormatContext *s, int64_t
|
||||
return (int64_t)bandwidth;
|
||||
}
|
||||
|
||||
static int webm_dash_manifest_cues(AVFormatContext *s)
|
||||
static int webm_dash_manifest_cues(AVFormatContext *s, int64_t init_range)
|
||||
{
|
||||
MatroskaDemuxContext *matroska = s->priv_data;
|
||||
EbmlList *seekhead_list = &matroska->seekhead;
|
||||
@ -3855,6 +3855,11 @@ static int webm_dash_manifest_cues(AVFormatContext *s)
|
||||
// cues end
|
||||
av_dict_set_int(&s->streams[0]->metadata, CUES_END, cues_end, 0);
|
||||
|
||||
// if the file has cues at the start, fix up the init range so tht
|
||||
// it does not include it
|
||||
if (cues_start <= init_range)
|
||||
av_dict_set_int(&s->streams[0]->metadata, INITIALIZATION_RANGE, cues_start - 1, 0);
|
||||
|
||||
// bandwidth
|
||||
bandwidth = webm_dash_manifest_compute_bandwidth(s, cues_start);
|
||||
if (bandwidth < 0) return -1;
|
||||
@ -3891,6 +3896,7 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||
{
|
||||
char *buf;
|
||||
int ret = matroska_read_header(s);
|
||||
int64_t init_range;
|
||||
MatroskaTrack *tracks;
|
||||
MatroskaDemuxContext *matroska = s->priv_data;
|
||||
if (ret) {
|
||||
@ -3911,7 +3917,8 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||
|
||||
// initialization range
|
||||
// 5 is the offset of Cluster ID.
|
||||
av_dict_set_int(&s->streams[0]->metadata, INITIALIZATION_RANGE, avio_tell(s->pb) - 5, 0);
|
||||
init_range = avio_tell(s->pb) - 5;
|
||||
av_dict_set_int(&s->streams[0]->metadata, INITIALIZATION_RANGE, init_range, 0);
|
||||
}
|
||||
|
||||
// basename of the file
|
||||
@ -3924,7 +3931,7 @@ static int webm_dash_manifest_read_header(AVFormatContext *s)
|
||||
|
||||
// parse the cues and populate Cue related fields
|
||||
if (!matroska->is_live) {
|
||||
ret = webm_dash_manifest_cues(s);
|
||||
ret = webm_dash_manifest_cues(s, init_range);
|
||||
if (ret < 0) {
|
||||
av_log(s, AV_LOG_ERROR, "Error parsing Cues\n");
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user