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

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 17408005: Refactored DecoderBuffer to use unix_hacker_style naming. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@localrefactor
Patch Set: Created 7 years, 5 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/filters/chunk_demuxer.cc ('k') | media/filters/decrypting_audio_decoder.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <algorithm> 5 #include <algorithm>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "media/base/audio_decoder_config.h" 9 #include "media/base/audio_decoder_config.h"
10 #include "media/base/decoder_buffer.h" 10 #include "media/base/decoder_buffer.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 DCHECK(number >= 0 && number < GG_LONGLONG(0x00FFFFFFFFFFFFFF)); 82 DCHECK(number >= 0 && number < GG_LONGLONG(0x00FFFFFFFFFFFFFF));
83 buffer[0] = 0x01; 83 buffer[0] = 0x01;
84 int64 tmp = number; 84 int64 tmp = number;
85 for (int i = 7; i > 0; i--) { 85 for (int i = 7; i > 0; i--) {
86 buffer[i] = tmp & 0xff; 86 buffer[i] = tmp & 0xff;
87 tmp >>= 8; 87 tmp >>= 8;
88 } 88 }
89 } 89 }
90 90
91 MATCHER_P(HasTimestamp, timestamp_in_ms, "") { 91 MATCHER_P(HasTimestamp, timestamp_in_ms, "") {
92 return arg.get() && !arg->IsEndOfStream() && 92 return arg.get() && !arg->end_of_stream() &&
93 arg->GetTimestamp().InMilliseconds() == timestamp_in_ms; 93 arg->timestamp().InMilliseconds() == timestamp_in_ms;
94 } 94 }
95 95
96 MATCHER(IsEndOfStream, "") { return arg.get() && arg->IsEndOfStream(); } 96 MATCHER(IsEndOfStream, "") { return arg.get() && arg->end_of_stream(); }
97 97
98 static void OnReadDone(const base::TimeDelta& expected_time, 98 static void OnReadDone(const base::TimeDelta& expected_time,
99 bool* called, 99 bool* called,
100 DemuxerStream::Status status, 100 DemuxerStream::Status status,
101 const scoped_refptr<DecoderBuffer>& buffer) { 101 const scoped_refptr<DecoderBuffer>& buffer) {
102 EXPECT_EQ(status, DemuxerStream::kOk); 102 EXPECT_EQ(status, DemuxerStream::kOk);
103 EXPECT_EQ(expected_time, buffer->GetTimestamp()); 103 EXPECT_EQ(expected_time, buffer->timestamp());
104 *called = true; 104 *called = true;
105 } 105 }
106 106
107 static void OnReadDone_AbortExpected( 107 static void OnReadDone_AbortExpected(
108 bool* called, DemuxerStream::Status status, 108 bool* called, DemuxerStream::Status status,
109 const scoped_refptr<DecoderBuffer>& buffer) { 109 const scoped_refptr<DecoderBuffer>& buffer) {
110 EXPECT_EQ(status, DemuxerStream::kAborted); 110 EXPECT_EQ(status, DemuxerStream::kAborted);
111 EXPECT_EQ(NULL, buffer.get()); 111 EXPECT_EQ(NULL, buffer.get());
112 *called = true; 112 *called = true;
113 } 113 }
114 114
115 static void OnReadDone_EOSExpected(bool* called, 115 static void OnReadDone_EOSExpected(bool* called,
116 DemuxerStream::Status status, 116 DemuxerStream::Status status,
117 const scoped_refptr<DecoderBuffer>& buffer) { 117 const scoped_refptr<DecoderBuffer>& buffer) {
118 EXPECT_EQ(status, DemuxerStream::kOk); 118 EXPECT_EQ(status, DemuxerStream::kOk);
119 EXPECT_TRUE(buffer->IsEndOfStream()); 119 EXPECT_TRUE(buffer->end_of_stream());
120 *called = true; 120 *called = true;
121 } 121 }
122 122
123 static void OnSeekDone_OKExpected(bool* called, PipelineStatus status) { 123 static void OnSeekDone_OKExpected(bool* called, PipelineStatus status) {
124 EXPECT_EQ(status, PIPELINE_OK); 124 EXPECT_EQ(status, PIPELINE_OK);
125 *called = true; 125 *called = true;
126 } 126 }
127 127
128 class ChunkDemuxerTest : public testing::Test { 128 class ChunkDemuxerTest : public testing::Test {
129 protected: 129 protected:
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 scoped_refptr<DecoderBuffer> video_content_encodings; 178 scoped_refptr<DecoderBuffer> video_content_encodings;
179 179
180 ebml_header = ReadTestDataFile("webm_ebml_element"); 180 ebml_header = ReadTestDataFile("webm_ebml_element");
181 181
182 info = ReadTestDataFile("webm_info_element"); 182 info = ReadTestDataFile("webm_info_element");
183 183
184 int tracks_element_size = 0; 184 int tracks_element_size = 0;
185 185
186 if (has_audio) { 186 if (has_audio) {
187 audio_track_entry = ReadTestDataFile("webm_vorbis_track_entry"); 187 audio_track_entry = ReadTestDataFile("webm_vorbis_track_entry");
188 tracks_element_size += audio_track_entry->GetDataSize(); 188 tracks_element_size += audio_track_entry->data_size();
189 if (is_audio_encrypted) { 189 if (is_audio_encrypted) {
190 audio_content_encodings = ReadTestDataFile("webm_content_encodings"); 190 audio_content_encodings = ReadTestDataFile("webm_content_encodings");
191 tracks_element_size += audio_content_encodings->GetDataSize(); 191 tracks_element_size += audio_content_encodings->data_size();
192 } 192 }
193 } 193 }
194 194
195 if (has_video) { 195 if (has_video) {
196 video_track_entry = ReadTestDataFile("webm_vp8_track_entry"); 196 video_track_entry = ReadTestDataFile("webm_vp8_track_entry");
197 tracks_element_size += video_track_entry->GetDataSize(); 197 tracks_element_size += video_track_entry->data_size();
198 if (is_video_encrypted) { 198 if (is_video_encrypted) {
199 video_content_encodings = ReadTestDataFile("webm_content_encodings"); 199 video_content_encodings = ReadTestDataFile("webm_content_encodings");
200 tracks_element_size += video_content_encodings->GetDataSize(); 200 tracks_element_size += video_content_encodings->data_size();
201 } 201 }
202 } 202 }
203 203
204 *size = ebml_header->GetDataSize() + info->GetDataSize() + 204 *size = ebml_header->data_size() + info->data_size() +
205 kTracksHeaderSize + tracks_element_size; 205 kTracksHeaderSize + tracks_element_size;
206 206
207 buffer->reset(new uint8[*size]); 207 buffer->reset(new uint8[*size]);
208 208
209 uint8* buf = buffer->get(); 209 uint8* buf = buffer->get();
210 memcpy(buf, ebml_header->GetData(), ebml_header->GetDataSize()); 210 memcpy(buf, ebml_header->data(), ebml_header->data_size());
211 buf += ebml_header->GetDataSize(); 211 buf += ebml_header->data_size();
212 212
213 memcpy(buf, info->GetData(), info->GetDataSize()); 213 memcpy(buf, info->data(), info->data_size());
214 buf += info->GetDataSize(); 214 buf += info->data_size();
215 215
216 memcpy(buf, kTracksHeader, kTracksHeaderSize); 216 memcpy(buf, kTracksHeader, kTracksHeaderSize);
217 WriteInt64(buf + kTracksSizeOffset, tracks_element_size); 217 WriteInt64(buf + kTracksSizeOffset, tracks_element_size);
218 buf += kTracksHeaderSize; 218 buf += kTracksHeaderSize;
219 219
220 // TODO(xhwang): Simplify this! Probably have test data files that contain 220 // TODO(xhwang): Simplify this! Probably have test data files that contain
221 // ContentEncodings directly instead of trying to create one at run-time. 221 // ContentEncodings directly instead of trying to create one at run-time.
222 if (has_audio) { 222 if (has_audio) {
223 memcpy(buf, audio_track_entry->GetData(), 223 memcpy(buf, audio_track_entry->data(),
224 audio_track_entry->GetDataSize()); 224 audio_track_entry->data_size());
225 if (is_audio_encrypted) { 225 if (is_audio_encrypted) {
226 memcpy(buf + audio_track_entry->GetDataSize(), 226 memcpy(buf + audio_track_entry->data_size(),
227 audio_content_encodings->GetData(), 227 audio_content_encodings->data(),
228 audio_content_encodings->GetDataSize()); 228 audio_content_encodings->data_size());
229 WriteInt64(buf + kAudioTrackSizeOffset, 229 WriteInt64(buf + kAudioTrackSizeOffset,
230 audio_track_entry->GetDataSize() + 230 audio_track_entry->data_size() +
231 audio_content_encodings->GetDataSize() - 231 audio_content_encodings->data_size() -
232 kAudioTrackEntryHeaderSize); 232 kAudioTrackEntryHeaderSize);
233 buf += audio_content_encodings->GetDataSize(); 233 buf += audio_content_encodings->data_size();
234 } 234 }
235 buf += audio_track_entry->GetDataSize(); 235 buf += audio_track_entry->data_size();
236 } 236 }
237 237
238 if (has_video) { 238 if (has_video) {
239 memcpy(buf, video_track_entry->GetData(), 239 memcpy(buf, video_track_entry->data(),
240 video_track_entry->GetDataSize()); 240 video_track_entry->data_size());
241 if (is_video_encrypted) { 241 if (is_video_encrypted) {
242 memcpy(buf + video_track_entry->GetDataSize(), 242 memcpy(buf + video_track_entry->data_size(),
243 video_content_encodings->GetData(), 243 video_content_encodings->data(),
244 video_content_encodings->GetDataSize()); 244 video_content_encodings->data_size());
245 WriteInt64(buf + kVideoTrackSizeOffset, 245 WriteInt64(buf + kVideoTrackSizeOffset,
246 video_track_entry->GetDataSize() + 246 video_track_entry->data_size() +
247 video_content_encodings->GetDataSize() - 247 video_content_encodings->data_size() -
248 kVideoTrackEntryHeaderSize); 248 kVideoTrackEntryHeaderSize);
249 buf += video_content_encodings->GetDataSize(); 249 buf += video_content_encodings->data_size();
250 } 250 }
251 buf += video_track_entry->GetDataSize(); 251 buf += video_track_entry->data_size();
252 } 252 }
253 } 253 }
254 254
255 ChunkDemuxer::Status AddId() { 255 ChunkDemuxer::Status AddId() {
256 return AddId(kSourceId, true, true); 256 return AddId(kSourceId, true, true);
257 } 257 }
258 258
259 ChunkDemuxer::Status AddId(const std::string& source_id, 259 ChunkDemuxer::Status AddId(const std::string& source_id,
260 bool has_audio, bool has_video) { 260 bool has_audio, bool has_video) {
261 std::vector<std::string> codecs; 261 std::vector<std::string> codecs;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 453
454 EXPECT_CALL(*this, DemuxerOpened()); 454 EXPECT_CALL(*this, DemuxerOpened());
455 demuxer_->Initialize( 455 demuxer_->Initialize(
456 &host_, CreateInitDoneCB(base::TimeDelta::FromMilliseconds(2744), 456 &host_, CreateInitDoneCB(base::TimeDelta::FromMilliseconds(2744),
457 PIPELINE_OK)); 457 PIPELINE_OK));
458 458
459 if (AddId(kSourceId, true, true) != ChunkDemuxer::kOk) 459 if (AddId(kSourceId, true, true) != ChunkDemuxer::kOk)
460 return false; 460 return false;
461 461
462 // Append the whole bear1 file. 462 // Append the whole bear1 file.
463 AppendData(bear1->GetData(), bear1->GetDataSize()); 463 AppendData(bear1->data(), bear1->data_size());
464 CheckExpectedRanges(kSourceId, "{ [0,2737) }"); 464 CheckExpectedRanges(kSourceId, "{ [0,2737) }");
465 465
466 // Append initialization segment for bear2. 466 // Append initialization segment for bear2.
467 // Note: Offsets here and below are derived from 467 // Note: Offsets here and below are derived from
468 // media/test/data/bear-640x360-manifest.js and 468 // media/test/data/bear-640x360-manifest.js and
469 // media/test/data/bear-320x240-manifest.js which were 469 // media/test/data/bear-320x240-manifest.js which were
470 // generated from media/test/data/bear-640x360.webm and 470 // generated from media/test/data/bear-640x360.webm and
471 // media/test/data/bear-320x240.webm respectively. 471 // media/test/data/bear-320x240.webm respectively.
472 AppendData(bear2->GetData(), 4340); 472 AppendData(bear2->data(), 4340);
473 473
474 // Append a media segment that goes from [0.527000, 1.014000). 474 // Append a media segment that goes from [0.527000, 1.014000).
475 AppendData(bear2->GetData() + 55290, 18785); 475 AppendData(bear2->data() + 55290, 18785);
476 CheckExpectedRanges(kSourceId, "{ [0,1028) [1201,2737) }"); 476 CheckExpectedRanges(kSourceId, "{ [0,1028) [1201,2737) }");
477 477
478 // Append initialization segment for bear1 & fill gap with [779-1197) 478 // Append initialization segment for bear1 & fill gap with [779-1197)
479 // segment. 479 // segment.
480 AppendData(bear1->GetData(), 4370); 480 AppendData(bear1->data(), 4370);
481 AppendData(bear1->GetData() + 72737, 28183); 481 AppendData(bear1->data() + 72737, 28183);
482 CheckExpectedRanges(kSourceId, "{ [0,2737) }"); 482 CheckExpectedRanges(kSourceId, "{ [0,2737) }");
483 483
484 EndOfStream(PIPELINE_OK); 484 EndOfStream(PIPELINE_OK);
485 return true; 485 return true;
486 } 486 }
487 487
488 void ShutdownDemuxer() { 488 void ShutdownDemuxer() {
489 if (demuxer_) { 489 if (demuxer_) {
490 demuxer_->Shutdown(); 490 demuxer_->Shutdown();
491 message_loop_.RunUntilIdle(); 491 message_loop_.RunUntilIdle();
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 DemuxerStream::Status* status, 699 DemuxerStream::Status* status,
700 base::TimeDelta* last_timestamp) { 700 base::TimeDelta* last_timestamp) {
701 DemuxerStream* stream = demuxer_->GetStream(type); 701 DemuxerStream* stream = demuxer_->GetStream(type);
702 scoped_refptr<DecoderBuffer> buffer; 702 scoped_refptr<DecoderBuffer> buffer;
703 703
704 *last_timestamp = kNoTimestamp(); 704 *last_timestamp = kNoTimestamp();
705 do { 705 do {
706 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer, 706 stream->Read(base::Bind(&ChunkDemuxerTest::StoreStatusAndBuffer,
707 base::Unretained(this), status, &buffer)); 707 base::Unretained(this), status, &buffer));
708 base::MessageLoop::current()->RunUntilIdle(); 708 base::MessageLoop::current()->RunUntilIdle();
709 if (*status == DemuxerStream::kOk && !buffer->IsEndOfStream()) 709 if (*status == DemuxerStream::kOk && !buffer->end_of_stream())
710 *last_timestamp = buffer->GetTimestamp(); 710 *last_timestamp = buffer->timestamp();
711 } while (*status == DemuxerStream::kOk && !buffer->IsEndOfStream()); 711 } while (*status == DemuxerStream::kOk && !buffer->end_of_stream());
712 } 712 }
713 713
714 void ExpectEndOfStream(DemuxerStream::Type type) { 714 void ExpectEndOfStream(DemuxerStream::Type type) {
715 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream())); 715 EXPECT_CALL(*this, ReadDone(DemuxerStream::kOk, IsEndOfStream()));
716 demuxer_->GetStream(type)->Read(base::Bind( 716 demuxer_->GetStream(type)->Read(base::Bind(
717 &ChunkDemuxerTest::ReadDone, base::Unretained(this))); 717 &ChunkDemuxerTest::ReadDone, base::Unretained(this)));
718 message_loop_.RunUntilIdle(); 718 message_loop_.RunUntilIdle();
719 } 719 }
720 720
721 void ExpectRead(DemuxerStream::Type type, int64 timestamp_in_ms) { 721 void ExpectRead(DemuxerStream::Type type, int64 timestamp_in_ms) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 bool has_audio, bool has_video) { 759 bool has_audio, bool has_video) {
760 EXPECT_CALL(*this, DemuxerOpened()); 760 EXPECT_CALL(*this, DemuxerOpened());
761 demuxer_->Initialize( 761 demuxer_->Initialize(
762 &host_, CreateInitDoneCB(duration, PIPELINE_OK)); 762 &host_, CreateInitDoneCB(duration, PIPELINE_OK));
763 763
764 if (AddId(kSourceId, has_audio, has_video) != ChunkDemuxer::kOk) 764 if (AddId(kSourceId, has_audio, has_video) != ChunkDemuxer::kOk)
765 return false; 765 return false;
766 766
767 // Read a WebM file into memory and send the data to the demuxer. 767 // Read a WebM file into memory and send the data to the demuxer.
768 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename); 768 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename);
769 AppendDataInPieces(buffer->GetData(), buffer->GetDataSize(), 512); 769 AppendDataInPieces(buffer->data(), buffer->data_size(), 512);
770 770
771 // Verify that the timestamps on the first few packets match what we 771 // Verify that the timestamps on the first few packets match what we
772 // expect. 772 // expect.
773 for (size_t i = 0; 773 for (size_t i = 0;
774 (timestamps[i].audio_time_ms != kSkip || 774 (timestamps[i].audio_time_ms != kSkip ||
775 timestamps[i].video_time_ms != kSkip); 775 timestamps[i].video_time_ms != kSkip);
776 i++) { 776 i++) {
777 bool audio_read_done = false; 777 bool audio_read_done = false;
778 bool video_read_done = false; 778 bool video_read_done = false;
779 779
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
1198 EXPECT_EQ(expected, audio_read_done_); 1198 EXPECT_EQ(expected, audio_read_done_);
1199 EXPECT_EQ(expected, video_read_done_); 1199 EXPECT_EQ(expected, video_read_done_);
1200 } 1200 }
1201 1201
1202 private: 1202 private:
1203 static void OnEndOfStreamReadDone( 1203 static void OnEndOfStreamReadDone(
1204 bool* called, 1204 bool* called,
1205 DemuxerStream::Status status, 1205 DemuxerStream::Status status,
1206 const scoped_refptr<DecoderBuffer>& buffer) { 1206 const scoped_refptr<DecoderBuffer>& buffer) {
1207 EXPECT_EQ(status, DemuxerStream::kOk); 1207 EXPECT_EQ(status, DemuxerStream::kOk);
1208 EXPECT_TRUE(buffer->IsEndOfStream()); 1208 EXPECT_TRUE(buffer->end_of_stream());
1209 *called = true; 1209 *called = true;
1210 } 1210 }
1211 1211
1212 Demuxer* demuxer_; 1212 Demuxer* demuxer_;
1213 bool audio_read_done_; 1213 bool audio_read_done_;
1214 bool video_read_done_; 1214 bool video_read_done_;
1215 1215
1216 DISALLOW_COPY_AND_ASSIGN(EndOfStreamHelper); 1216 DISALLOW_COPY_AND_ASSIGN(EndOfStreamHelper);
1217 }; 1217 };
1218 1218
(...skipping 1428 matching lines...) Expand 10 before | Expand all | Expand 10 after
2647 // don't get removed. 2647 // don't get removed.
2648 // 2648 //
2649 // NOTE: The current GC algorithm tries to preserve the GOP at the 2649 // NOTE: The current GC algorithm tries to preserve the GOP at the
2650 // current position as well as the last appended GOP. This is 2650 // current position as well as the last appended GOP. This is
2651 // why there are 2 ranges in the expectations. 2651 // why there are 2 ranges in the expectations.
2652 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, 700, 5); 2652 AppendSingleStreamCluster(kSourceId, kAudioTrackNum, 700, 5);
2653 CheckExpectedRanges(kSourceId, "{ [500,592) [792,815) }"); 2653 CheckExpectedRanges(kSourceId, "{ [500,592) [792,815) }");
2654 } 2654 }
2655 2655
2656 } // namespace media 2656 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | media/filters/decrypting_audio_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698