| OLD | NEW |
| 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/ts_section_pes.h" | 5 #include "media/formats/mp2t/ts_section_pes.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "media/base/bit_reader.h" | 9 #include "media/base/bit_reader.h" |
| 10 #include "media/base/buffers.h" | 10 #include "media/base/buffers.h" |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 RCHECK((((pts_section >> 36) & 0xf) == 0x3) && | 260 RCHECK((((pts_section >> 36) & 0xf) == 0x3) && |
| 261 IsTimestampSectionValid(pts_section)); | 261 IsTimestampSectionValid(pts_section)); |
| 262 RCHECK((((dts_section >> 36) & 0xf) == 0x1) && | 262 RCHECK((((dts_section >> 36) & 0xf) == 0x1) && |
| 263 IsTimestampSectionValid(dts_section)); | 263 IsTimestampSectionValid(dts_section)); |
| 264 is_pts_valid = true; | 264 is_pts_valid = true; |
| 265 is_dts_valid = true; | 265 is_dts_valid = true; |
| 266 } | 266 } |
| 267 | 267 |
| 268 // Convert and unroll the timestamps. | 268 // Convert and unroll the timestamps. |
| 269 base::TimeDelta media_pts(kNoTimestamp()); | 269 base::TimeDelta media_pts(kNoTimestamp()); |
| 270 base::TimeDelta media_dts(kNoTimestamp()); | 270 DecodeTimestamp media_dts(kNoDecodeTimestamp()); |
| 271 if (is_pts_valid) { | 271 if (is_pts_valid) { |
| 272 int64 pts = ConvertTimestampSectionToTimestamp(pts_section); | 272 int64 pts = ConvertTimestampSectionToTimestamp(pts_section); |
| 273 if (previous_pts_valid_) | 273 if (previous_pts_valid_) |
| 274 pts = UnrollTimestamp(previous_pts_, pts); | 274 pts = UnrollTimestamp(previous_pts_, pts); |
| 275 previous_pts_ = pts; | 275 previous_pts_ = pts; |
| 276 previous_pts_valid_ = true; | 276 previous_pts_valid_ = true; |
| 277 media_pts = base::TimeDelta::FromMicroseconds((1000 * pts) / 90); | 277 media_pts = base::TimeDelta::FromMicroseconds((1000 * pts) / 90); |
| 278 } | 278 } |
| 279 if (is_dts_valid) { | 279 if (is_dts_valid) { |
| 280 int64 dts = ConvertTimestampSectionToTimestamp(dts_section); | 280 int64 dts = ConvertTimestampSectionToTimestamp(dts_section); |
| 281 if (previous_dts_valid_) | 281 if (previous_dts_valid_) |
| 282 dts = UnrollTimestamp(previous_dts_, dts); | 282 dts = UnrollTimestamp(previous_dts_, dts); |
| 283 previous_dts_ = dts; | 283 previous_dts_ = dts; |
| 284 previous_dts_valid_ = true; | 284 previous_dts_valid_ = true; |
| 285 media_dts = base::TimeDelta::FromMicroseconds((1000 * dts) / 90); | 285 media_dts = DecodeTimestamp::FromMicroseconds((1000 * dts) / 90); |
| 286 } | 286 } |
| 287 | 287 |
| 288 // Discard the rest of the PES packet header. | 288 // Discard the rest of the PES packet header. |
| 289 // TODO(damienv): check if some info of the PES packet header are useful. | 289 // TODO(damienv): check if some info of the PES packet header are useful. |
| 290 DCHECK_EQ(bit_reader.bits_available() % 8, 0); | 290 DCHECK_EQ(bit_reader.bits_available() % 8, 0); |
| 291 int pes_header_remaining_size = pes_header_data_length - | 291 int pes_header_remaining_size = pes_header_data_length - |
| 292 (pes_header_start_size - bit_reader.bits_available() / 8); | 292 (pes_header_start_size - bit_reader.bits_available() / 8); |
| 293 RCHECK(pes_header_remaining_size >= 0); | 293 RCHECK(pes_header_remaining_size >= 0); |
| 294 | 294 |
| 295 // Read the PES packet. | 295 // Read the PES packet. |
| 296 DVLOG(LOG_LEVEL_PES) | 296 DVLOG(LOG_LEVEL_PES) |
| 297 << "Emit a reassembled PES:" | 297 << "Emit a reassembled PES:" |
| 298 << " size=" << es_size | 298 << " size=" << es_size |
| 299 << " pts=" << media_pts.InMilliseconds() | 299 << " pts=" << media_pts.InMilliseconds() |
| 300 << " dts=" << media_dts.InMilliseconds() | 300 << " dts=" << media_dts.InMilliseconds() |
| 301 << " data_alignment_indicator=" << data_alignment_indicator; | 301 << " data_alignment_indicator=" << data_alignment_indicator; |
| 302 return es_parser_->Parse(&raw_pes[es_offset], es_size, media_pts, media_dts); | 302 return es_parser_->Parse(&raw_pes[es_offset], es_size, media_pts, media_dts); |
| 303 } | 303 } |
| 304 | 304 |
| 305 void TsSectionPes::ResetPesState() { | 305 void TsSectionPes::ResetPesState() { |
| 306 pes_byte_queue_.Reset(); | 306 pes_byte_queue_.Reset(); |
| 307 wait_for_pusi_ = true; | 307 wait_for_pusi_ = true; |
| 308 } | 308 } |
| 309 | 309 |
| 310 } // namespace mp2t | 310 } // namespace mp2t |
| 311 } // namespace media | 311 } // namespace media |
| 312 | |
| OLD | NEW |