Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(765)

Unified Diff: media/filters/media_source_state.cc

Issue 1735803002: Implemented passing media track info from ffmpeg into blink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: wolenetz@ CR feedback + better track info extraction in ffmpeg Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/media_source_state.h ('k') | media/formats/common/stream_parser_test_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/media_source_state.cc
diff --git a/media/filters/media_source_state.cc b/media/filters/media_source_state.cc
index ede96052668fb086df2664f5a11b3f36b647b6ca..89d488ef21031b58eaf62f692f25f8f738ac2007 100644
--- a/media/filters/media_source_state.cc
+++ b/media/filters/media_source_state.cc
@@ -6,6 +6,8 @@
#include "base/callback_helpers.h"
#include "base/stl_util.h"
+#include "media/base/media_track.h"
+#include "media/base/media_tracks.h"
#include "media/filters/chunk_demuxer.h"
#include "media/filters/frame_processor.h"
#include "media/filters/source_buffer_stream.h"
@@ -143,21 +145,24 @@ void MediaSourceState::SetGroupStartTimestampIfInSequenceMode(
frame_processor_->SetGroupStartTimestampIfInSequenceMode(timestamp_offset);
}
-bool MediaSourceState::Append(
- const uint8_t* data,
- size_t length,
- TimeDelta append_window_start,
- TimeDelta append_window_end,
- TimeDelta* timestamp_offset,
- const InitSegmentReceivedCB& init_segment_received_cb) {
+void MediaSourceState::SetTracksWatcher(
+ const Demuxer::MediaTracksUpdatedCB& tracks_updated_cb) {
+ DCHECK(init_segment_received_cb_.is_null());
+ init_segment_received_cb_ = tracks_updated_cb;
+ DCHECK(!init_segment_received_cb_.is_null());
+}
+
+bool MediaSourceState::Append(const uint8_t* data,
+ size_t length,
+ TimeDelta append_window_start,
+ TimeDelta append_window_end,
+ TimeDelta* timestamp_offset) {
+ append_in_progress_ = true;
DCHECK(timestamp_offset);
DCHECK(!timestamp_offset_during_append_);
- DCHECK(!init_segment_received_cb.is_null());
- DCHECK(init_segment_received_cb_.is_null());
append_window_start_during_append_ = append_window_start;
append_window_end_during_append_ = append_window_end;
timestamp_offset_during_append_ = timestamp_offset;
- init_segment_received_cb_ = init_segment_received_cb;
// TODO(wolenetz/acolwell): Curry and pass a NewBuffersCB here bound with
// append window and timestamp offset pointer. See http://crbug.com/351454.
@@ -170,7 +175,7 @@ bool MediaSourceState::Append(
<< " append_window_end=" << append_window_end.InSecondsF();
}
timestamp_offset_during_append_ = NULL;
- init_segment_received_cb_.Reset();
+ append_in_progress_ = false;
return result;
}
@@ -468,13 +473,19 @@ bool MediaSourceState::IsSeekWaitingForData() const {
bool MediaSourceState::OnNewConfigs(
bool allow_audio,
bool allow_video,
- const AudioDecoderConfig& audio_config,
- const VideoDecoderConfig& video_config,
+ scoped_ptr<MediaTracks> tracks,
const StreamParser::TextTrackConfigMap& text_configs) {
+ DCHECK(tracks.get());
+ media_tracks_ = std::move(tracks);
+ const AudioDecoderConfig& audio_config = media_tracks_->getFirstAudioConfig();
+ const VideoDecoderConfig& video_config = media_tracks_->getFirstVideoConfig();
+
DVLOG(1) << "OnNewConfigs(" << allow_audio << ", " << allow_video << ", "
<< audio_config.IsValidConfig() << ", "
<< video_config.IsValidConfig() << ")";
- DCHECK(!init_segment_received_cb_.is_null());
+ // MSE spec allows new configs to be emitted only during Append, but not
+ // during Flush or parser reset operations.
+ CHECK(append_in_progress_);
if (!audio_config.IsValidConfig() && !video_config.IsValidConfig()) {
DVLOG(1) << "OnNewConfigs() : Audio & video config are not valid!";
@@ -637,8 +648,10 @@ bool MediaSourceState::OnNewConfigs(
frame_processor_->SetAllTrackBuffersNeedRandomAccessPoint();
DVLOG(1) << "OnNewConfigs() : " << (success ? "success" : "failed");
- if (success)
- init_segment_received_cb_.Run();
+ if (success) {
+ DCHECK(!init_segment_received_cb_.is_null());
+ init_segment_received_cb_.Run(std::move(media_tracks_));
+ }
return success;
}
« no previous file with comments | « media/filters/media_source_state.h ('k') | media/formats/common/stream_parser_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698