Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index 18863e657b80f29ffe75fad5673d3c9474a93b52..81ce1abb12ab9ae258a8ce1720f3fdc2c26fbbc1 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -27,6 +27,7 @@ |
#include "media/base/decrypt_config.h" |
#include "media/base/limits.h" |
#include "media/base/media_log.h" |
+#include "media/base/media_tracks.h" |
#include "media/base/timestamp_constants.h" |
#include "media/ffmpeg/ffmpeg_common.h" |
#include "media/filters/ffmpeg_aac_bitstream_converter.h" |
@@ -741,6 +742,7 @@ FFmpegDemuxer::FFmpegDemuxer( |
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
DataSource* data_source, |
const EncryptedMediaInitDataCB& encrypted_media_init_data_cb, |
+ const MediaTracksUpdatedCB& media_tracks_updated_cb, |
const scoped_refptr<MediaLog>& media_log) |
: host_(NULL), |
task_runner_(task_runner), |
@@ -756,9 +758,11 @@ FFmpegDemuxer::FFmpegDemuxer( |
text_enabled_(false), |
duration_known_(false), |
encrypted_media_init_data_cb_(encrypted_media_init_data_cb), |
+ media_tracks_updated_cb_(media_tracks_updated_cb), |
weak_factory_(this) { |
DCHECK(task_runner_.get()); |
DCHECK(data_source_); |
+ DCHECK(!media_tracks_updated_cb_.is_null()); |
} |
FFmpegDemuxer::~FFmpegDemuxer() {} |
@@ -1320,6 +1324,32 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
media_log_->SetTimeProperty("start_time", start_time_); |
media_log_->SetIntegerProperty("bitrate", bitrate_); |
+ { |
+ scoped_ptr<MediaTracks> media_tracks(new MediaTracks()); |
+ |
+ if (audio_stream) { |
+ AVDictionaryEntry* lang_tag = |
+ av_dict_get(audio_stream->metadata, "language", NULL, 0); |
+ std::string track_language = "und"; |
+ if (lang_tag && lang_tag->value) |
+ track_language = lang_tag->value; |
+ |
+ media_tracks->AddAudioTrack(audio_config, "audio", "main", "", |
+ track_language); |
+ } |
+ if (video_stream) { |
+ AVDictionaryEntry* lang_tag = |
+ av_dict_get(video_stream->metadata, "language", NULL, 0); |
+ std::string track_language = "und"; |
+ if (lang_tag && lang_tag->value) |
+ track_language = lang_tag->value; |
+ |
+ media_tracks->AddVideoTrack(video_config, "video", "main", "", |
+ track_language); |
+ } |
+ media_tracks_updated_cb_.Run(std::move(media_tracks)); |
+ } |
+ |
status_cb.Run(PIPELINE_OK); |
} |