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

Unified Diff: media/filters/chunk_demuxer.cc

Issue 143973009: SourceState: Coalesce OnNewBuffers() CB to include OnTextBuffers() behavior (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address PS2 comments Created 6 years, 11 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/base/stream_parser.h ('k') | media/formats/mp2t/mp2t_stream_parser.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/chunk_demuxer.cc
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 4c1de9413229ac1914fbed0ba7a79cb126e8754f..2894058a2295fda33be9ff380dda78c6969ca24f 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -163,7 +163,7 @@ class SourceState {
private:
// Called by the |stream_parser_| when a new initialization segment is
// encountered.
- // Returns true on a successful call. Returns false if an error occured while
+ // Returns true on a successful call. Returns false if an error occurred while
// processing decoder configurations.
bool OnNewConfigs(bool allow_audio, bool allow_video,
const AudioDecoderConfig& audio_config,
@@ -177,19 +177,21 @@ class SourceState {
void OnEndOfMediaSegment();
// Called by the |stream_parser_| when new buffers have been parsed. It
- // applies |timestamp_offset_| to all buffers in |audio_buffers| and
- // |video_buffers| and then calls Append() on |audio_| and/or
- // |video_| with the modified buffers.
- // Returns true on a successful call. Returns false if an error occured while
+ // applies |timestamp_offset_| to all buffers in |audio_buffers|,
+ // |video_buffers| and |text_map| and then calls Append() with the modified
+ // buffers on |audio_|, |video_| and/or the text demuxer streams associated
+ // with the track numbers in |text_map|.
+ // Returns true on a successful call. Returns false if an error occurred while
// processing the buffers.
bool OnNewBuffers(const StreamParser::BufferQueue& audio_buffers,
- const StreamParser::BufferQueue& video_buffers);
+ const StreamParser::BufferQueue& video_buffers,
+ const StreamParser::TextBufferQueueMap& text_map);
- // Called by the |stream_parser_| when new text buffers have been parsed. It
- // applies |timestamp_offset_| to all buffers in |buffers| and then appends
+ // Helper function for OnNewBuffers() when new text buffers have been parsed.
+ // It applies |timestamp_offset_| to all buffers in |buffers| and then appends
// the (modified) buffers to the demuxer stream associated with
// the track having |text_track_number|.
- // Returns true on a successful call. Returns false if an error occured while
+ // Returns true on a successful call. Returns false if an error occurred while
// processing the buffers.
bool OnTextBuffers(int text_track_number,
const StreamParser::BufferQueue& buffers);
@@ -390,13 +392,6 @@ void SourceState::Init(const StreamParser::InitCB& init_cb,
const NewTextTrackCB& new_text_track_cb) {
new_text_track_cb_ = new_text_track_cb;
- StreamParser::NewTextBuffersCB new_text_buffers_cb;
-
- if (!new_text_track_cb_.is_null()) {
- new_text_buffers_cb = base::Bind(&SourceState::OnTextBuffers,
- base::Unretained(this));
- }
-
stream_parser_->Init(init_cb,
base::Bind(&SourceState::OnNewConfigs,
base::Unretained(this),
@@ -404,7 +399,7 @@ void SourceState::Init(const StreamParser::InitCB& init_cb,
allow_video),
base::Bind(&SourceState::OnNewBuffers,
base::Unretained(this)),
- new_text_buffers_cb,
+ new_text_track_cb_.is_null(),
need_key_cb,
base::Bind(&SourceState::OnNewMediaSegment,
base::Unretained(this)),
@@ -771,9 +766,13 @@ void SourceState::OnEndOfMediaSegment() {
new_media_segment_ = false;
}
-bool SourceState::OnNewBuffers(const StreamParser::BufferQueue& audio_buffers,
- const StreamParser::BufferQueue& video_buffers) {
- DCHECK(!audio_buffers.empty() || !video_buffers.empty());
+bool SourceState::OnNewBuffers(
+ const StreamParser::BufferQueue& audio_buffers,
+ const StreamParser::BufferQueue& video_buffers,
+ const StreamParser::TextBufferQueueMap& text_map) {
+ DCHECK(!audio_buffers.empty() || !video_buffers.empty() ||
+ !text_map.empty());
+
AdjustBufferTimestamps(audio_buffers);
AdjustBufferTimestamps(video_buffers);
@@ -786,10 +785,8 @@ bool SourceState::OnNewBuffers(const StreamParser::BufferQueue& audio_buffers,
FilterWithAppendWindow(video_buffers, &video_needs_keyframe_,
&filtered_video);
- if (filtered_audio.empty() && filtered_video.empty())
- return true;
-
- if (new_media_segment_) {
+ if ((!filtered_audio.empty() || !filtered_video.empty()) &&
+ new_media_segment_) {
// Find the earliest timestamp in the filtered buffers and use that for the
// segment start timestamp.
TimeDelta segment_timestamp = kNoTimestamp();
@@ -819,14 +816,31 @@ bool SourceState::OnNewBuffers(const StreamParser::BufferQueue& audio_buffers,
if (!filtered_audio.empty() &&
!AppendAndUpdateDuration(audio_, filtered_audio)) {
- return false;
+ return false;
}
if (!filtered_video.empty() &&
!AppendAndUpdateDuration(video_, filtered_video)) {
- return false;
+ return false;
+ }
+
+ if (text_map.empty())
+ return true;
+
+ // Process any buffers for each of the text tracks in the map.
+ bool all_text_buffers_empty = true;
+ for (StreamParser::TextBufferQueueMap::const_iterator itr = text_map.begin();
+ itr != text_map.end();
+ ++itr) {
+ const StreamParser::BufferQueue text_buffers = itr->second;
+ if (!text_buffers.empty()) {
+ all_text_buffers_empty = false;
+ if (!OnTextBuffers(itr->first, text_buffers))
+ return false;
+ }
}
+ DCHECK(!all_text_buffers_empty);
return true;
}
« no previous file with comments | « media/base/stream_parser.h ('k') | media/formats/mp2t/mp2t_stream_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698