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/mp2t_stream_parser.h" | 5 #include "media/formats/mp2t/mp2t_stream_parser.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 LOG(ERROR) << "Unexpected track type " << track->type(); | 138 LOG(ERROR) << "Unexpected track type " << track->type(); |
139 EXPECT_TRUE(false); | 139 EXPECT_TRUE(false); |
140 } | 140 } |
141 } | 141 } |
142 EXPECT_TRUE(found_audio_track); | 142 EXPECT_TRUE(found_audio_track); |
143 EXPECT_EQ(has_video_, found_video_track); | 143 EXPECT_EQ(has_video_, found_video_track); |
144 config_count_++; | 144 config_count_++; |
145 return true; | 145 return true; |
146 } | 146 } |
147 | 147 |
148 | 148 bool OnNewBuffers(const StreamParser::BufferQueueMap& buffer_queue_map) { |
149 void DumpBuffers(const std::string& label, | |
150 const StreamParser::BufferQueue& buffers) { | |
151 DVLOG(2) << "DumpBuffers: " << label << " size " << buffers.size(); | |
152 for (StreamParser::BufferQueue::const_iterator buf = buffers.begin(); | |
153 buf != buffers.end(); buf++) { | |
154 DVLOG(3) << " n=" << buf - buffers.begin() | |
155 << ", size=" << (*buf)->data_size() | |
156 << ", dur=" << (*buf)->duration().InMilliseconds(); | |
157 } | |
158 } | |
159 | |
160 bool OnNewBuffers(const StreamParser::BufferQueue& audio_buffers, | |
161 const StreamParser::BufferQueue& video_buffers, | |
162 const StreamParser::TextBufferQueueMap& text_map) { | |
163 EXPECT_GT(config_count_, 0); | 149 EXPECT_GT(config_count_, 0); |
164 DumpBuffers("audio_buffers", audio_buffers); | |
165 DumpBuffers("video_buffers", video_buffers); | |
166 | |
167 // Ensure that track ids are properly assigned on all emitted buffers. | 150 // Ensure that track ids are properly assigned on all emitted buffers. |
168 for (const auto& buf : audio_buffers) { | 151 for (const auto& it : buffer_queue_map) { |
169 EXPECT_EQ(audio_track_id_, buf->track_id()); | 152 DVLOG(3) << "Buffers for track_id=" << it.first; |
170 } | 153 for (const auto& buf : it.second) { |
171 for (const auto& buf : video_buffers) { | 154 DVLOG(3) << " track_id=" << buf->track_id() |
172 EXPECT_EQ(video_track_id_, buf->track_id()); | 155 << ", size=" << buf->data_size() |
| 156 << ", pts=" << buf->timestamp().InSecondsF() |
| 157 << ", dts=" << buf->GetDecodeTimestamp().InSecondsF() |
| 158 << ", dur=" << buf->duration().InSecondsF(); |
| 159 EXPECT_EQ(it.first, buf->track_id()); |
| 160 } |
173 } | 161 } |
174 | 162 |
175 // TODO(wolenetz/acolwell): Add text track support to more MSE parsers. See | 163 const StreamParser::BufferQueue empty_buffers; |
176 // http://crbug.com/336926. | 164 const auto& itr_audio = buffer_queue_map.find(audio_track_id_); |
177 if (!text_map.empty()) | 165 const StreamParser::BufferQueue& audio_buffers = |
178 return false; | 166 (itr_audio == buffer_queue_map.end()) ? empty_buffers |
| 167 : itr_audio->second; |
| 168 |
| 169 const auto& itr_video = buffer_queue_map.find(video_track_id_); |
| 170 const StreamParser::BufferQueue& video_buffers = |
| 171 (itr_video == buffer_queue_map.end()) ? empty_buffers |
| 172 : itr_video->second; |
179 | 173 |
180 // Verify monotonicity. | 174 // Verify monotonicity. |
181 if (!IsMonotonic(video_buffers)) | 175 if (!IsMonotonic(video_buffers)) |
182 return false; | 176 return false; |
183 if (!IsMonotonic(audio_buffers)) | 177 if (!IsMonotonic(audio_buffers)) |
184 return false; | 178 return false; |
185 | 179 |
186 if (!video_buffers.empty()) { | 180 if (!video_buffers.empty()) { |
187 DecodeTimestamp first_dts = video_buffers.front()->GetDecodeTimestamp(); | 181 DecodeTimestamp first_dts = video_buffers.front()->GetDecodeTimestamp(); |
188 DecodeTimestamp last_dts = video_buffers.back()->GetDecodeTimestamp(); | 182 DecodeTimestamp last_dts = video_buffers.back()->GetDecodeTimestamp(); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 parser_->Flush(); | 317 parser_->Flush(); |
324 EXPECT_EQ(audio_frame_count_, 40); | 318 EXPECT_EQ(audio_frame_count_, 40); |
325 EXPECT_EQ(video_frame_count_, 0); | 319 EXPECT_EQ(video_frame_count_, 0); |
326 // This stream has no mid-stream configuration change. | 320 // This stream has no mid-stream configuration change. |
327 EXPECT_EQ(config_count_, 1); | 321 EXPECT_EQ(config_count_, 1); |
328 EXPECT_EQ(segment_count_, 1); | 322 EXPECT_EQ(segment_count_, 1); |
329 } | 323 } |
330 | 324 |
331 } // namespace mp2t | 325 } // namespace mp2t |
332 } // namespace media | 326 } // namespace media |
OLD | NEW |