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

Side by Side Diff: media/formats/mp2t/mp2t_stream_parser.cc

Issue 539343002: Make the timestamp unroll offset consistent accross PES pids. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix CR comments from patch set #8. Created 6 years, 3 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 unified diff | Download patch
« no previous file with comments | « media/formats/mp2t/mp2t_stream_parser.h ('k') | media/formats/mp2t/timestamp_unroller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/formats/mp2t/mp2t_stream_parser.h" 5 #include "media/formats/mp2t/mp2t_stream_parser.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 // stream parser already involves the end of the current segment. 211 // stream parser already involves the end of the current segment.
212 segment_started_ = false; 212 segment_started_ = false;
213 213
214 // Remove any bytes left in the TS buffer. 214 // Remove any bytes left in the TS buffer.
215 // (i.e. any partial TS packet => less than 188 bytes). 215 // (i.e. any partial TS packet => less than 188 bytes).
216 ts_byte_queue_.Reset(); 216 ts_byte_queue_.Reset();
217 217
218 // Reset the selected PIDs. 218 // Reset the selected PIDs.
219 selected_audio_pid_ = -1; 219 selected_audio_pid_ = -1;
220 selected_video_pid_ = -1; 220 selected_video_pid_ = -1;
221
222 // Reset the timestamp unroller.
223 timestamp_unroller_.Reset();
221 } 224 }
222 225
223 bool Mp2tStreamParser::Parse(const uint8* buf, int size) { 226 bool Mp2tStreamParser::Parse(const uint8* buf, int size) {
224 DVLOG(1) << "Mp2tStreamParser::Parse size=" << size; 227 DVLOG(1) << "Mp2tStreamParser::Parse size=" << size;
225 228
226 // Add the data to the parser state. 229 // Add the data to the parser state.
227 ts_byte_queue_.Push(buf, size); 230 ts_byte_queue_.Push(buf, size);
228 231
229 while (true) { 232 while (true) {
230 const uint8* ts_buffer; 233 const uint8* ts_buffer;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 pes_pid), 364 pes_pid),
362 log_cb_)); 365 log_cb_));
363 is_audio = true; 366 is_audio = true;
364 } else { 367 } else {
365 return; 368 return;
366 } 369 }
367 370
368 // Create the PES state here. 371 // Create the PES state here.
369 DVLOG(1) << "Create a new PES state"; 372 DVLOG(1) << "Create a new PES state";
370 scoped_ptr<TsSection> pes_section_parser( 373 scoped_ptr<TsSection> pes_section_parser(
371 new TsSectionPes(es_parser.Pass())); 374 new TsSectionPes(es_parser.Pass(), &timestamp_unroller_));
372 PidState::PidType pid_type = 375 PidState::PidType pid_type =
373 is_audio ? PidState::kPidAudioPes : PidState::kPidVideoPes; 376 is_audio ? PidState::kPidAudioPes : PidState::kPidVideoPes;
374 scoped_ptr<PidState> pes_pid_state( 377 scoped_ptr<PidState> pes_pid_state(
375 new PidState(pes_pid, pid_type, pes_section_parser.Pass())); 378 new PidState(pes_pid, pid_type, pes_section_parser.Pass()));
376 pids_.insert(std::pair<int, PidState*>(pes_pid, pes_pid_state.release())); 379 pids_.insert(std::pair<int, PidState*>(pes_pid, pes_pid_state.release()));
377 380
378 // A new PES pid has been added, the PID filter might change. 381 // A new PES pid has been added, the PID filter might change.
379 UpdatePidFilter(); 382 UpdatePidFilter();
380 } 383 }
381 384
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 DVLOG(LOG_LEVEL_ES) 527 DVLOG(LOG_LEVEL_ES)
525 << "OnEmitAudioBuffer: " 528 << "OnEmitAudioBuffer: "
526 << " size=" 529 << " size="
527 << stream_parser_buffer->data_size() 530 << stream_parser_buffer->data_size()
528 << " dts=" 531 << " dts="
529 << stream_parser_buffer->GetDecodeTimestamp().InMilliseconds() 532 << stream_parser_buffer->GetDecodeTimestamp().InMilliseconds()
530 << " pts=" 533 << " pts="
531 << stream_parser_buffer->timestamp().InMilliseconds() 534 << stream_parser_buffer->timestamp().InMilliseconds()
532 << " dur=" 535 << " dur="
533 << stream_parser_buffer->duration().InMilliseconds(); 536 << stream_parser_buffer->duration().InMilliseconds();
534 stream_parser_buffer->set_timestamp(
535 stream_parser_buffer->timestamp() - time_offset_);
536 stream_parser_buffer->SetDecodeTimestamp(
537 stream_parser_buffer->GetDecodeTimestamp() - time_offset_);
538 537
539 // Ignore the incoming buffer if it is not associated with any config. 538 // Ignore the incoming buffer if it is not associated with any config.
540 if (buffer_queue_chain_.empty()) { 539 if (buffer_queue_chain_.empty()) {
541 NOTREACHED() << "Cannot provide buffers before configs"; 540 NOTREACHED() << "Cannot provide buffers before configs";
542 return; 541 return;
543 } 542 }
544 543
545 buffer_queue_chain_.back().audio_queue.push_back(stream_parser_buffer); 544 buffer_queue_chain_.back().audio_queue.push_back(stream_parser_buffer);
546 } 545 }
547 546
548 void Mp2tStreamParser::OnEmitVideoBuffer( 547 void Mp2tStreamParser::OnEmitVideoBuffer(
549 int pes_pid, 548 int pes_pid,
550 scoped_refptr<StreamParserBuffer> stream_parser_buffer) { 549 scoped_refptr<StreamParserBuffer> stream_parser_buffer) {
551 DCHECK_EQ(pes_pid, selected_video_pid_); 550 DCHECK_EQ(pes_pid, selected_video_pid_);
552 551
553 DVLOG(LOG_LEVEL_ES) 552 DVLOG(LOG_LEVEL_ES)
554 << "OnEmitVideoBuffer" 553 << "OnEmitVideoBuffer"
555 << " size=" 554 << " size="
556 << stream_parser_buffer->data_size() 555 << stream_parser_buffer->data_size()
557 << " dts=" 556 << " dts="
558 << stream_parser_buffer->GetDecodeTimestamp().InMilliseconds() 557 << stream_parser_buffer->GetDecodeTimestamp().InMilliseconds()
559 << " pts=" 558 << " pts="
560 << stream_parser_buffer->timestamp().InMilliseconds() 559 << stream_parser_buffer->timestamp().InMilliseconds()
561 << " dur=" 560 << " dur="
562 << stream_parser_buffer->duration().InMilliseconds() 561 << stream_parser_buffer->duration().InMilliseconds()
563 << " IsKeyframe=" 562 << " IsKeyframe="
564 << stream_parser_buffer->IsKeyframe(); 563 << stream_parser_buffer->IsKeyframe();
565 stream_parser_buffer->set_timestamp(
566 stream_parser_buffer->timestamp() - time_offset_);
567 stream_parser_buffer->SetDecodeTimestamp(
568 stream_parser_buffer->GetDecodeTimestamp() - time_offset_);
569 564
570 // Ignore the incoming buffer if it is not associated with any config. 565 // Ignore the incoming buffer if it is not associated with any config.
571 if (buffer_queue_chain_.empty()) { 566 if (buffer_queue_chain_.empty()) {
572 NOTREACHED() << "Cannot provide buffers before configs"; 567 NOTREACHED() << "Cannot provide buffers before configs";
573 return; 568 return;
574 } 569 }
575 570
576 buffer_queue_chain_.back().video_queue.push_back(stream_parser_buffer); 571 buffer_queue_chain_.back().video_queue.push_back(stream_parser_buffer);
577 } 572 }
578 573
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 // so that buffers with the same config can be added later on. 630 // so that buffers with the same config can be added later on.
636 BufferQueueWithConfig queue_with_config( 631 BufferQueueWithConfig queue_with_config(
637 true, last_audio_config, last_video_config); 632 true, last_audio_config, last_video_config);
638 buffer_queue_chain_.push_back(queue_with_config); 633 buffer_queue_chain_.push_back(queue_with_config);
639 634
640 return true; 635 return true;
641 } 636 }
642 637
643 } // namespace mp2t 638 } // namespace mp2t
644 } // namespace media 639 } // namespace media
OLDNEW
« no previous file with comments | « media/formats/mp2t/mp2t_stream_parser.h ('k') | media/formats/mp2t/timestamp_unroller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698