Use StreamParser::TrackId instead of string for MediaTrack::byteStreamTrackId
Review-Url: https://codereview.chromium.org/1861963008
Cr-Commit-Position: refs/heads/master@{#399263}
diff --git a/media/base/media_track.cc b/media/base/media_track.cc
index ad5178f..59791e1 100644
--- a/media/base/media_track.cc
+++ b/media/base/media_track.cc
@@ -7,11 +7,15 @@
namespace media {
MediaTrack::MediaTrack(Type type,
- const std::string& id,
+ StreamParser::TrackId bytestream_track_id,
const std::string& kind,
const std::string& label,
const std::string& lang)
- : type_(type), id_(id), kind_(kind), label_(label), language_(lang) {}
+ : type_(type),
+ bytestream_track_id_(bytestream_track_id),
+ kind_(kind),
+ label_(label),
+ language_(lang) {}
MediaTrack::~MediaTrack() {}
diff --git a/media/base/media_track.h b/media/base/media_track.h
index a5cb6d3..3cd41d7 100644
--- a/media/base/media_track.h
+++ b/media/base/media_track.h
@@ -8,6 +8,7 @@
#include <string>
#include "media/base/media_export.h"
+#include "media/base/stream_parser.h"
namespace media {
@@ -15,7 +16,7 @@
public:
enum Type { Text, Audio, Video };
MediaTrack(Type type,
- const std::string& id,
+ StreamParser::TrackId bytestream_track_id,
const std::string& kind,
const std::string& label,
const std::string& lang);
@@ -23,14 +24,16 @@
Type type() const { return type_; }
- const std::string& id() const { return id_; }
+ StreamParser::TrackId bytestream_track_id() const {
+ return bytestream_track_id_;
+ }
const std::string& kind() const { return kind_; }
const std::string& label() const { return label_; }
const std::string& language() const { return language_; }
private:
Type type_;
- std::string id_;
+ StreamParser::TrackId bytestream_track_id_;
std::string kind_;
std::string label_;
std::string language_;
diff --git a/media/base/media_tracks.cc b/media/base/media_tracks.cc
index 367bd01..6f3d2c5 100644
--- a/media/base/media_tracks.cc
+++ b/media/base/media_tracks.cc
@@ -16,34 +16,34 @@
MediaTracks::~MediaTracks() {}
void MediaTracks::AddAudioTrack(const AudioDecoderConfig& config,
- const std::string& id,
+ StreamParser::TrackId bytestream_track_id,
const std::string& kind,
const std::string& label,
const std::string& language) {
DCHECK(config.IsValidConfig());
- CHECK(audio_configs_.find(id) == audio_configs_.end());
- std::unique_ptr<MediaTrack> track = base::WrapUnique(
- new MediaTrack(MediaTrack::Audio, id, kind, label, language));
+ CHECK(audio_configs_.find(bytestream_track_id) == audio_configs_.end());
+ std::unique_ptr<MediaTrack> track = base::WrapUnique(new MediaTrack(
+ MediaTrack::Audio, bytestream_track_id, kind, label, language));
tracks_.push_back(std::move(track));
- audio_configs_[id] = config;
+ audio_configs_[bytestream_track_id] = config;
}
void MediaTracks::AddVideoTrack(const VideoDecoderConfig& config,
- const std::string& id,
+ StreamParser::TrackId bytestream_track_id,
const std::string& kind,
const std::string& label,
const std::string& language) {
DCHECK(config.IsValidConfig());
- CHECK(video_configs_.find(id) == video_configs_.end());
- std::unique_ptr<MediaTrack> track = base::WrapUnique(
- new MediaTrack(MediaTrack::Video, id, kind, label, language));
+ CHECK(video_configs_.find(bytestream_track_id) == video_configs_.end());
+ std::unique_ptr<MediaTrack> track = base::WrapUnique(new MediaTrack(
+ MediaTrack::Video, bytestream_track_id, kind, label, language));
tracks_.push_back(std::move(track));
- video_configs_[id] = config;
+ video_configs_[bytestream_track_id] = config;
}
const AudioDecoderConfig& MediaTracks::getAudioConfig(
- const std::string& id) const {
- auto it = audio_configs_.find(id);
+ StreamParser::TrackId bytestream_track_id) const {
+ auto it = audio_configs_.find(bytestream_track_id);
if (it != audio_configs_.end())
return it->second;
static AudioDecoderConfig invalidConfig;
@@ -51,8 +51,8 @@
}
const VideoDecoderConfig& MediaTracks::getVideoConfig(
- const std::string& id) const {
- auto it = video_configs_.find(id);
+ StreamParser::TrackId bytestream_track_id) const {
+ auto it = video_configs_.find(bytestream_track_id);
if (it != video_configs_.end())
return it->second;
static VideoDecoderConfig invalidConfig;
@@ -62,7 +62,7 @@
const AudioDecoderConfig& MediaTracks::getFirstAudioConfig() const {
for (const auto& track : tracks()) {
if (track->type() == MediaTrack::Audio) {
- return getAudioConfig(track->id());
+ return getAudioConfig(track->bytestream_track_id());
}
}
static AudioDecoderConfig invalidConfig;
@@ -72,7 +72,7 @@
const VideoDecoderConfig& MediaTracks::getFirstVideoConfig() const {
for (const auto& track : tracks()) {
if (track->type() == MediaTrack::Video) {
- return getVideoConfig(track->id());
+ return getVideoConfig(track->bytestream_track_id());
}
}
static VideoDecoderConfig invalidConfig;
diff --git a/media/base/media_tracks.h b/media/base/media_tracks.h
index ea4a38c1..0681398 100644
--- a/media/base/media_tracks.h
+++ b/media/base/media_tracks.h
@@ -26,23 +26,27 @@
MediaTracks();
~MediaTracks();
- // Callers need to ensure that track id is unique.
+ // Adds a new audio track. The |bytestreamTrackId| must uniquely identify the
+ // track within the bytestream.
void AddAudioTrack(const AudioDecoderConfig& config,
- const std::string& id,
+ StreamParser::TrackId bytestream_track_id,
const std::string& kind,
const std::string& label,
const std::string& language);
- // Callers need to ensure that track id is unique.
+ // Adds a new video track. The |bytestreamTrackId| must uniquely identify the
+ // track within the bytestream.
void AddVideoTrack(const VideoDecoderConfig& config,
- const std::string& id,
+ StreamParser::TrackId bytestream_track_id,
const std::string& kind,
const std::string& label,
const std::string& language);
const MediaTracksCollection& tracks() const { return tracks_; }
- const AudioDecoderConfig& getAudioConfig(const std::string& id) const;
- const VideoDecoderConfig& getVideoConfig(const std::string& id) const;
+ const AudioDecoderConfig& getAudioConfig(
+ StreamParser::TrackId bytestream_track_id) const;
+ const VideoDecoderConfig& getVideoConfig(
+ StreamParser::TrackId bytestream_track_id) const;
// TODO(servolk): These are temporary helpers useful until all code paths are
// converted to properly handle multiple media tracks.
@@ -51,8 +55,8 @@
private:
MediaTracksCollection tracks_;
- std::map<std::string, AudioDecoderConfig> audio_configs_;
- std::map<std::string, VideoDecoderConfig> video_configs_;
+ std::map<StreamParser::TrackId, AudioDecoderConfig> audio_configs_;
+ std::map<StreamParser::TrackId, VideoDecoderConfig> video_configs_;
DISALLOW_COPY_AND_ASSIGN(MediaTracks);
};
diff --git a/media/base/stream_parser.h b/media/base/stream_parser.h
index f640c5c9..8c4bc24 100644
--- a/media/base/stream_parser.h
+++ b/media/base/stream_parser.h
@@ -21,10 +21,10 @@
#include "media/base/demuxer_stream.h"
#include "media/base/eme_constants.h"
#include "media/base/media_export.h"
-#include "media/base/media_log.h"
namespace media {
+class MediaLog;
class MediaTracks;
class StreamParserBuffer;
class TextTrackConfig;
diff --git a/media/base/stream_parser_buffer.cc b/media/base/stream_parser_buffer.cc
index 2be4dbe..8c1693bc 100644
--- a/media/base/stream_parser_buffer.cc
+++ b/media/base/stream_parser_buffer.cc
@@ -4,6 +4,8 @@
#include "media/base/stream_parser_buffer.h"
+#include <algorithm>
+
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "media/base/timestamp_constants.h"
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 9d153cde..bf46cb2 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -20,6 +20,7 @@
#include "base/location.h"
#include "base/metrics/histogram.h"
#include "base/single_thread_task_runner.h"
+#include "base/strings/string_number_conversions.h"
#include "base/task_runner_util.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/trace_event/trace_event.h"
@@ -844,7 +845,8 @@
for (const auto& track : tracks->tracks()) {
if (track->type() == MediaTrack::Audio) {
auto track_id = client_->addAudioTrack(
- blink::WebString::fromUTF8(track->id()),
+ blink::WebString::fromUTF8(
+ base::UintToString(track->bytestream_track_id())),
blink::WebMediaPlayerClient::AudioTrackKindMain,
blink::WebString::fromUTF8(track->label()),
blink::WebString::fromUTF8(track->language()),
@@ -852,7 +854,8 @@
(void)track_id;
} else if (track->type() == MediaTrack::Video) {
auto track_id = client_->addVideoTrack(
- blink::WebString::fromUTF8(track->id()),
+ blink::WebString::fromUTF8(
+ base::UintToString(track->bytestream_track_id())),
blink::WebMediaPlayerClient::VideoTrackKindMain,
blink::WebString::fromUTF8(track->label()),
blink::WebString::fromUTF8(track->language()),
diff --git a/media/blink/websourcebuffer_impl.cc b/media/blink/websourcebuffer_impl.cc
index 5482406..f210ea53 100644
--- a/media/blink/websourcebuffer_impl.cc
+++ b/media/blink/websourcebuffer_impl.cc
@@ -12,6 +12,7 @@
#include "base/bind.h"
#include "base/callback.h"
#include "base/callback_helpers.h"
+#include "base/strings/string_number_conversions.h"
#include "media/base/media_tracks.h"
#include "media/base/timestamp_constants.h"
#include "media/filters/chunk_demuxer.h"
@@ -182,7 +183,8 @@
for (const auto& track : tracks->tracks()) {
blink::WebSourceBufferClient::MediaTrackInfo trackInfo;
trackInfo.trackType = mediaTrackTypeToBlink(track->type());
- trackInfo.byteStreamTrackId = blink::WebString::fromUTF8(track->id());
+ trackInfo.byteStreamTrackId = blink::WebString::fromUTF8(
+ base::UintToString(track->bytestream_track_id()));
trackInfo.kind = blink::WebString::fromUTF8(track->kind());
trackInfo.label = blink::WebString::fromUTF8(track->label());
trackInfo.language = blink::WebString::fromUTF8(track->language());
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index 4307fae..be8b1d9 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -1207,7 +1207,7 @@
continue;
}
- std::string track_id = base::IntToString(stream->id);
+ StreamParser::TrackId track_id = stream->id;
std::string track_label = streams_[i]->GetMetadata("handler_name");
std::string track_language = streams_[i]->GetMetadata("language");
@@ -1216,7 +1216,8 @@
strstr(format_context->iformat->name, "matroska")) {
// TODO(servolk): FFmpeg doesn't set stream->id correctly for webm files.
// Need to fix that and use it as track id. crbug.com/323183
- track_id = base::UintToString(media_tracks->tracks().size() + 1);
+ track_id =
+ static_cast<StreamParser::TrackId>(media_tracks->tracks().size() + 1);
track_label = streams_[i]->GetMetadata("title");
}
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index 81da95e..59977f4 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -1205,14 +1205,14 @@
const MediaTrack& audio_track = *(media_tracks_->tracks()[0]);
EXPECT_EQ(audio_track.type(), MediaTrack::Audio);
- EXPECT_EQ(audio_track.id(), "1");
+ EXPECT_EQ(audio_track.bytestream_track_id(), 1);
EXPECT_EQ(audio_track.kind(), "main");
EXPECT_EQ(audio_track.label(), "GPAC ISO Audio Handler");
EXPECT_EQ(audio_track.language(), "und");
const MediaTrack& video_track = *(media_tracks_->tracks()[1]);
EXPECT_EQ(video_track.type(), MediaTrack::Video);
- EXPECT_EQ(video_track.id(), "2");
+ EXPECT_EQ(video_track.bytestream_track_id(), 2);
EXPECT_EQ(video_track.kind(), "main");
EXPECT_EQ(video_track.label(), "GPAC ISO Video Handler");
EXPECT_EQ(video_track.language(), "und");
@@ -1228,14 +1228,14 @@
const MediaTrack& video_track = *(media_tracks_->tracks()[0]);
EXPECT_EQ(video_track.type(), MediaTrack::Video);
- EXPECT_EQ(video_track.id(), "1");
+ EXPECT_EQ(video_track.bytestream_track_id(), 1);
EXPECT_EQ(video_track.kind(), "main");
EXPECT_EQ(video_track.label(), "");
EXPECT_EQ(video_track.language(), "");
const MediaTrack& audio_track = *(media_tracks_->tracks()[1]);
EXPECT_EQ(audio_track.type(), MediaTrack::Audio);
- EXPECT_EQ(audio_track.id(), "2");
+ EXPECT_EQ(audio_track.bytestream_track_id(), 2);
EXPECT_EQ(audio_track.kind(), "main");
EXPECT_EQ(audio_track.label(), "");
EXPECT_EQ(audio_track.language(), "");
diff --git a/media/filters/media_source_state.cc b/media/filters/media_source_state.cc
index 5ca9df01..6a1d95f 100644
--- a/media/filters/media_source_state.cc
+++ b/media/filters/media_source_state.cc
@@ -480,6 +480,7 @@
const StreamParser::TextTrackConfigMap& text_configs) {
DCHECK_GE(state_, PENDING_PARSER_CONFIG);
DCHECK(tracks.get());
+
media_tracks_ = std::move(tracks);
const AudioDecoderConfig& audio_config = media_tracks_->getFirstAudioConfig();
const VideoDecoderConfig& video_config = media_tracks_->getFirstVideoConfig();
diff --git a/media/filters/media_source_state.h b/media/filters/media_source_state.h
index 3eb5e54..1a25e65 100644
--- a/media/filters/media_source_state.h
+++ b/media/filters/media_source_state.h
@@ -11,6 +11,7 @@
#include "base/macros.h"
#include "media/base/demuxer_stream.h"
#include "media/base/media_export.h"
+#include "media/base/media_log.h"
#include "media/base/stream_parser.h"
#include "media/base/stream_parser_buffer.h"
diff --git a/media/formats/common/stream_parser_test_base.cc b/media/formats/common/stream_parser_test_base.cc
index a4dce128..c70d6e2 100644
--- a/media/formats/common/stream_parser_test_base.cc
+++ b/media/formats/common/stream_parser_test_base.cc
@@ -8,6 +8,7 @@
#include <utility>
#include "base/bind.h"
+#include "media/base/media_log.h"
#include "media/base/media_track.h"
#include "media/base/media_tracks.h"
#include "media/base/test_data_util.h"
diff --git a/media/formats/mp2t/mp2t_stream_parser.cc b/media/formats/mp2t/mp2t_stream_parser.cc
index 041bc0d..9f43d2d 100644
--- a/media/formats/mp2t/mp2t_stream_parser.cc
+++ b/media/formats/mp2t/mp2t_stream_parser.cc
@@ -512,10 +512,10 @@
// TODO(servolk): Implement proper sourcing of media track info as described
// in crbug.com/590085
if (audio_config.IsValidConfig()) {
- media_tracks->AddAudioTrack(audio_config, "audio", "main", "", "");
+ media_tracks->AddAudioTrack(audio_config, 1, "main", "", "");
}
if (video_config.IsValidConfig()) {
- media_tracks->AddVideoTrack(video_config, "video", "main", "", "");
+ media_tracks->AddVideoTrack(video_config, 2, "main", "", "");
}
return media_tracks;
}
diff --git a/media/formats/mp2t/mp2t_stream_parser_unittest.cc b/media/formats/mp2t/mp2t_stream_parser_unittest.cc
index 8a03f57..9395a24 100644
--- a/media/formats/mp2t/mp2t_stream_parser_unittest.cc
+++ b/media/formats/mp2t/mp2t_stream_parser_unittest.cc
@@ -18,6 +18,7 @@
#include "base/time/time.h"
#include "media/base/audio_decoder_config.h"
#include "media/base/decoder_buffer.h"
+#include "media/base/media_log.h"
#include "media/base/media_track.h"
#include "media/base/media_tracks.h"
#include "media/base/stream_parser_buffer.h"
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
index dbd736d..1926d1fe 100644
--- a/media/formats/mp4/mp4_stream_parser.cc
+++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -320,9 +320,9 @@
base::TimeDelta(), 0);
has_audio_ = true;
audio_track_id_ = track->header.track_id;
- media_tracks->AddAudioTrack(
- audio_config, base::UintToString(audio_track_id_), "main",
- track->media.handler.name, track->media.header.language());
+ media_tracks->AddAudioTrack(audio_config, audio_track_id_, "main",
+ track->media.handler.name,
+ track->media.header.language());
continue;
}
@@ -371,9 +371,9 @@
is_video_track_encrypted_ ? AesCtrEncryptionScheme() : Unencrypted());
has_video_ = true;
video_track_id_ = track->header.track_id;
- media_tracks->AddVideoTrack(
- video_config, base::UintToString(video_track_id_), "main",
- track->media.handler.name, track->media.header.language());
+ media_tracks->AddVideoTrack(video_config, video_track_id_, "main",
+ track->media.handler.name,
+ track->media.header.language());
continue;
}
diff --git a/media/formats/mp4/mp4_stream_parser_unittest.cc b/media/formats/mp4/mp4_stream_parser_unittest.cc
index e84a85b7..7109c20 100644
--- a/media/formats/mp4/mp4_stream_parser_unittest.cc
+++ b/media/formats/mp4/mp4_stream_parser_unittest.cc
@@ -499,14 +499,14 @@
EXPECT_EQ(media_tracks_->tracks().size(), 2u);
const MediaTrack& video_track = *(media_tracks_->tracks()[0]);
EXPECT_EQ(video_track.type(), MediaTrack::Video);
- EXPECT_EQ(video_track.id(), "1");
+ EXPECT_EQ(video_track.bytestream_track_id(), 1);
EXPECT_EQ(video_track.kind(), "main");
EXPECT_EQ(video_track.label(), "VideoHandler");
EXPECT_EQ(video_track.language(), "und");
const MediaTrack& audio_track = *(media_tracks_->tracks()[1]);
EXPECT_EQ(audio_track.type(), MediaTrack::Audio);
- EXPECT_EQ(audio_track.id(), "2");
+ EXPECT_EQ(audio_track.bytestream_track_id(), 2);
EXPECT_EQ(audio_track.kind(), "main");
EXPECT_EQ(audio_track.label(), "SoundHandler");
EXPECT_EQ(audio_track.language(), "und");
diff --git a/media/formats/mpeg/adts_stream_parser.cc b/media/formats/mpeg/adts_stream_parser.cc
index 38c01cc..c654304 100644
--- a/media/formats/mpeg/adts_stream_parser.cc
+++ b/media/formats/mpeg/adts_stream_parser.cc
@@ -6,6 +6,7 @@
#include <stddef.h>
+#include "media/base/media_log.h"
#include "media/formats/mpeg/adts_constants.h"
namespace media {
diff --git a/media/formats/mpeg/mpeg1_audio_stream_parser.cc b/media/formats/mpeg/mpeg1_audio_stream_parser.cc
index 410c70d..c0a6e2a 100644
--- a/media/formats/mpeg/mpeg1_audio_stream_parser.cc
+++ b/media/formats/mpeg/mpeg1_audio_stream_parser.cc
@@ -4,6 +4,8 @@
#include "media/formats/mpeg/mpeg1_audio_stream_parser.h"
+#include "media/base/media_log.h"
+
namespace media {
static const uint32_t kMPEG1StartCodeMask = 0xffe00000;
diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
index 6e0a383..9952327 100644
--- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
+++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc
@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/message_loop/message_loop.h"
+#include "media/base/media_log.h"
#include "media/base/media_tracks.h"
#include "media/base/media_util.h"
#include "media/base/stream_parser_buffer.h"
@@ -221,7 +222,7 @@
std::unique_ptr<MediaTracks> media_tracks(new MediaTracks());
if (config_.IsValidConfig()) {
- media_tracks->AddAudioTrack(config_, "audio", "", "", "");
+ media_tracks->AddAudioTrack(config_, 1, "main", "", "");
}
if (!config_cb_.Run(std::move(media_tracks), TextTrackConfigMap()))
return -1;
diff --git a/media/formats/webm/webm_stream_parser_unittest.cc b/media/formats/webm/webm_stream_parser_unittest.cc
index 4afe163c..0203b138 100644
--- a/media/formats/webm/webm_stream_parser_unittest.cc
+++ b/media/formats/webm/webm_stream_parser_unittest.cc
@@ -107,14 +107,14 @@
const MediaTrack& video_track = *(media_tracks_->tracks()[0]);
EXPECT_EQ(video_track.type(), MediaTrack::Video);
- EXPECT_EQ(video_track.id(), "1");
+ EXPECT_EQ(video_track.bytestream_track_id(), 1);
EXPECT_EQ(video_track.kind(), "main");
EXPECT_EQ(video_track.label(), "");
EXPECT_EQ(video_track.language(), "und");
const MediaTrack& audio_track = *(media_tracks_->tracks()[1]);
EXPECT_EQ(audio_track.type(), MediaTrack::Audio);
- EXPECT_EQ(audio_track.id(), "2");
+ EXPECT_EQ(audio_track.bytestream_track_id(), 2);
EXPECT_EQ(audio_track.kind(), "main");
EXPECT_EQ(audio_track.label(), "");
EXPECT_EQ(audio_track.language(), "und");
diff --git a/media/formats/webm/webm_tracks_parser.cc b/media/formats/webm/webm_tracks_parser.cc
index f518c72..bcd33e4 100644
--- a/media/formats/webm/webm_tracks_parser.cc
+++ b/media/formats/webm/webm_tracks_parser.cc
@@ -221,9 +221,10 @@
encryption_scheme, &audio_decoder_config_)) {
return false;
}
- media_tracks_->AddAudioTrack(audio_decoder_config_,
- base::Uint64ToString(track_num_), "main",
- track_name_, track_language_);
+ media_tracks_->AddAudioTrack(
+ audio_decoder_config_,
+ static_cast<StreamParser::TrackId>(track_num_), "main", track_name_,
+ track_language_);
} else {
MEDIA_LOG(DEBUG, media_log_) << "Ignoring audio track " << track_num_;
ignored_tracks_.insert(track_num_);
@@ -247,9 +248,10 @@
&video_decoder_config_)) {
return false;
}
- media_tracks_->AddVideoTrack(video_decoder_config_,
- base::Uint64ToString(track_num_), "main",
- track_name_, track_language_);
+ media_tracks_->AddVideoTrack(
+ video_decoder_config_,
+ static_cast<StreamParser::TrackId>(track_num_), "main", track_name_,
+ track_language_);
} else {
MEDIA_LOG(DEBUG, media_log_) << "Ignoring video track " << track_num_;
ignored_tracks_.insert(track_num_);