Index: media/mp2t/es_parser_h264.cc |
diff --git a/media/mp2t/es_parser_h264.cc b/media/mp2t/es_parser_h264.cc |
index 48519c786fc46c66202d298726fbab990eefdf0f..bb75106e2b8f9fa7c2f77d5bba75df544e41f2fe 100644 |
--- a/media/mp2t/es_parser_h264.cc |
+++ b/media/mp2t/es_parser_h264.cc |
@@ -216,7 +216,7 @@ bool EsParserH264::ParseInternal() { |
// Emit a frame if needed. |
if (nal_unit_type == kNalUnitTypeAUD) |
- EmitFrameIfNeeded(es_pos_); |
+ RCHECK(EmitFrameIfNeeded(es_pos_)); |
// Skip the syncword. |
es_pos_ += syncword_length; |
@@ -225,21 +225,24 @@ bool EsParserH264::ParseInternal() { |
return true; |
} |
-void EsParserH264::EmitFrameIfNeeded(int next_aud_pos) { |
+bool EsParserH264::EmitFrameIfNeeded(int next_aud_pos) { |
// There is no current frame: start a new frame. |
if (current_access_unit_pos_ < 0) { |
StartFrame(next_aud_pos); |
- return; |
+ return true; |
} |
// Get the access unit timing info. |
- TimingDesc current_timing_desc; |
+ TimingDesc current_timing_desc = {kNoTimestamp(), kNoTimestamp()}; |
while (!timing_desc_list_.empty() && |
timing_desc_list_.front().first <= current_access_unit_pos_) { |
current_timing_desc = timing_desc_list_.front().second; |
timing_desc_list_.pop_front(); |
} |
+ if (current_timing_desc.pts == kNoTimestamp()) |
+ return false; |
+ |
// Emit a frame. |
int raw_es_size; |
const uint8* raw_es; |
@@ -256,6 +259,7 @@ void EsParserH264::EmitFrameIfNeeded(int next_aud_pos) { |
// Set the current frame position to the next AUD position. |
StartFrame(next_aud_pos); |
+ return true; |
} |
void EsParserH264::StartFrame(int aud_pos) { |