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

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

Issue 361023003: WIP fixing/extending acolwell's init-segment-received patch Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased to ToT. Lots of further work needed (BIG TODOs, nits-to-self, etc) Created 6 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 | Annotate | Revision Log
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | media/filters/pipeline_integration_test.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/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_split.h" 10 #include "base/strings/string_split.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 } 132 }
133 133
134 static void OnSeekDone_OKExpected(bool* called, PipelineStatus status) { 134 static void OnSeekDone_OKExpected(bool* called, PipelineStatus status) {
135 EXPECT_EQ(status, PIPELINE_OK); 135 EXPECT_EQ(status, PIPELINE_OK);
136 *called = true; 136 *called = true;
137 } 137 }
138 138
139 static void LogFunc(const std::string& str) { DVLOG(1) << str; } 139 static void LogFunc(const std::string& str) { DVLOG(1) << str; }
140 140
141 class ChunkDemuxerTest : public ::testing::Test { 141 class ChunkDemuxerTest : public ::testing::Test {
142 public:
143 MOCK_METHOD1(OnNewInitSegment, void(const InitSegment&));
144
142 protected: 145 protected:
143 enum CodecsIndex { 146 enum CodecsIndex {
144 AUDIO, 147 AUDIO,
145 VIDEO, 148 VIDEO,
146 MAX_CODECS_INDEX 149 MAX_CODECS_INDEX
147 }; 150 };
148 151
149 // Default cluster to append first for simple tests. 152 // Default cluster to append first for simple tests.
150 scoped_ptr<Cluster> kDefaultFirstCluster() { 153 scoped_ptr<Cluster> kDefaultFirstCluster() {
151 return GenerateCluster(0, 4); 154 return GenerateCluster(0, 4);
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 343
341 if (has_video) { 344 if (has_video) {
342 codecs.push_back("vp8"); 345 codecs.push_back("vp8");
343 type = "video/webm"; 346 type = "video/webm";
344 } 347 }
345 348
346 if (!has_audio && !has_video) { 349 if (!has_audio && !has_video) {
347 return AddId(kSourceId, HAS_AUDIO | HAS_VIDEO); 350 return AddId(kSourceId, HAS_AUDIO | HAS_VIDEO);
348 } 351 }
349 352
350 return demuxer_->AddId(source_id, type, codecs); 353 return demuxer_->AddId(source_id, type, codecs,
354 base::Bind(&ChunkDemuxerTest::OnNewInitSegment,
355 base::Unretained(this)));
351 } 356 }
352 357
353 ChunkDemuxer::Status AddIdForMp2tSource(const std::string& source_id) { 358 ChunkDemuxer::Status AddIdForMp2tSource(const std::string& source_id) {
354 std::vector<std::string> codecs; 359 std::vector<std::string> codecs;
355 std::string type = "video/mp2t"; 360 std::string type = "video/mp2t";
356 codecs.push_back("mp4a.40.2"); 361 codecs.push_back("mp4a.40.2");
357 codecs.push_back("avc1.640028"); 362 codecs.push_back("avc1.640028");
358 return demuxer_->AddId(source_id, type, codecs); 363 return demuxer_->AddId(source_id, type, codecs,
364 base::Bind(&ChunkDemuxerTest::OnNewInitSegment,
365 base::Unretained(this)));
359 } 366 }
360 367
361 void AppendData(const uint8* data, size_t length) { 368 void AppendData(const uint8* data, size_t length) {
362 AppendData(kSourceId, data, length); 369 AppendData(kSourceId, data, length);
363 } 370 }
364 371
365 void AppendCluster(const std::string& source_id, 372 void AppendCluster(const std::string& source_id,
366 scoped_ptr<Cluster> cluster) { 373 scoped_ptr<Cluster> cluster) {
367 AppendData(source_id, cluster->data(), cluster->size()); 374 AppendData(source_id, cluster->data(), cluster->size());
368 } 375 }
(...skipping 1582 matching lines...) Expand 10 before | Expand all | Expand 10 after
1951 } 1958 }
1952 1959
1953 TEST_F(ChunkDemuxerTest, AVHeadersWithAudioOnlyType) { 1960 TEST_F(ChunkDemuxerTest, AVHeadersWithAudioOnlyType) {
1954 EXPECT_CALL(*this, DemuxerOpened()); 1961 EXPECT_CALL(*this, DemuxerOpened());
1955 demuxer_->Initialize( 1962 demuxer_->Initialize(
1956 &host_, CreateInitDoneCB(kNoTimestamp(), 1963 &host_, CreateInitDoneCB(kNoTimestamp(),
1957 DEMUXER_ERROR_COULD_NOT_OPEN), true); 1964 DEMUXER_ERROR_COULD_NOT_OPEN), true);
1958 1965
1959 std::vector<std::string> codecs(1); 1966 std::vector<std::string> codecs(1);
1960 codecs[0] = "vorbis"; 1967 codecs[0] = "vorbis";
1961 ASSERT_EQ(demuxer_->AddId(kSourceId, "audio/webm", codecs), 1968 ASSERT_EQ(ChunkDemuxer::kOk,
1962 ChunkDemuxer::kOk); 1969 demuxer_->AddId(kSourceId, "audio/webm", codecs,
1970 base::Bind(&ChunkDemuxerTest::OnNewInitSegment,
1971 base::Unretained(this))));
1963 1972
1964 AppendInitSegment(HAS_AUDIO | HAS_VIDEO); 1973 AppendInitSegment(HAS_AUDIO | HAS_VIDEO);
1965 } 1974 }
1966 1975
1967 TEST_F(ChunkDemuxerTest, AVHeadersWithVideoOnlyType) { 1976 TEST_F(ChunkDemuxerTest, AVHeadersWithVideoOnlyType) {
1968 EXPECT_CALL(*this, DemuxerOpened()); 1977 EXPECT_CALL(*this, DemuxerOpened());
1969 demuxer_->Initialize( 1978 demuxer_->Initialize(
1970 &host_, CreateInitDoneCB(kNoTimestamp(), 1979 &host_, CreateInitDoneCB(kNoTimestamp(),
1971 DEMUXER_ERROR_COULD_NOT_OPEN), true); 1980 DEMUXER_ERROR_COULD_NOT_OPEN), true);
1972 1981
1973 std::vector<std::string> codecs(1); 1982 std::vector<std::string> codecs(1);
1974 codecs[0] = "vp8"; 1983 codecs[0] = "vp8";
1975 ASSERT_EQ(demuxer_->AddId(kSourceId, "video/webm", codecs), 1984 ASSERT_EQ(ChunkDemuxer::kOk,
1976 ChunkDemuxer::kOk); 1985 demuxer_->AddId(kSourceId, "video/webm", codecs,
1986 base::Bind(&ChunkDemuxerTest::OnNewInitSegment,
1987 base::Unretained(this))));
1977 1988
1978 AppendInitSegment(HAS_AUDIO | HAS_VIDEO); 1989 AppendInitSegment(HAS_AUDIO | HAS_VIDEO);
1979 } 1990 }
1980 1991
1981 TEST_F(ChunkDemuxerTest, MultipleHeaders) { 1992 TEST_F(ChunkDemuxerTest, MultipleHeaders) {
1982 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 1993 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
1983 1994
1984 AppendCluster(kDefaultFirstCluster()); 1995 AppendCluster(kDefaultFirstCluster());
1985 1996
1986 // Append another identical initialization segment. 1997 // Append another identical initialization segment.
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
2521 TEST_F(ChunkDemuxerTest, CodecPrefixMatching) { 2532 TEST_F(ChunkDemuxerTest, CodecPrefixMatching) {
2522 ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported; 2533 ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported;
2523 2534
2524 #if defined(USE_PROPRIETARY_CODECS) 2535 #if defined(USE_PROPRIETARY_CODECS)
2525 expected = ChunkDemuxer::kOk; 2536 expected = ChunkDemuxer::kOk;
2526 #endif 2537 #endif
2527 2538
2528 std::vector<std::string> codecs; 2539 std::vector<std::string> codecs;
2529 codecs.push_back("avc1.4D4041"); 2540 codecs.push_back("avc1.4D4041");
2530 2541
2531 EXPECT_EQ(demuxer_->AddId("source_id", "video/mp4", codecs), expected); 2542 EXPECT_EQ(expected,
2543 demuxer_->AddId("source_id", "video/mp4", codecs,
2544 base::Bind(&ChunkDemuxerTest::OnNewInitSegment,
2545 base::Unretained(this))));
2532 } 2546 }
2533 2547
2534 // Test codec ID's that are not compliant with RFC6381, but have been 2548 // Test codec ID's that are not compliant with RFC6381, but have been
2535 // seen in the wild. 2549 // seen in the wild.
2536 TEST_F(ChunkDemuxerTest, CodecIDsThatAreNotRFC6381Compliant) { 2550 TEST_F(ChunkDemuxerTest, CodecIDsThatAreNotRFC6381Compliant) {
2537 ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported; 2551 ChunkDemuxer::Status expected = ChunkDemuxer::kNotSupported;
2538 2552
2539 #if defined(USE_PROPRIETARY_CODECS) 2553 #if defined(USE_PROPRIETARY_CODECS)
2540 expected = ChunkDemuxer::kOk; 2554 expected = ChunkDemuxer::kOk;
2541 #endif 2555 #endif
2542 const char* codec_ids[] = { 2556 const char* codec_ids[] = {
2543 // GPAC places leading zeros on the audio object type. 2557 // GPAC places leading zeros on the audio object type.
2544 "mp4a.40.02", 2558 "mp4a.40.02",
2545 "mp4a.40.05" 2559 "mp4a.40.05"
2546 }; 2560 };
2547 2561
2548 for (size_t i = 0; i < arraysize(codec_ids); ++i) { 2562 for (size_t i = 0; i < arraysize(codec_ids); ++i) {
2549 std::vector<std::string> codecs; 2563 std::vector<std::string> codecs;
2550 codecs.push_back(codec_ids[i]); 2564 codecs.push_back(codec_ids[i]);
2551 2565
2552 ChunkDemuxer::Status result = 2566 ChunkDemuxer::Status result =
2553 demuxer_->AddId("source_id", "audio/mp4", codecs); 2567 demuxer_->AddId("source_id", "audio/mp4", codecs,
2568 base::Bind(&ChunkDemuxerTest::OnNewInitSegment,
2569 base::Unretained(this)));
2554 2570
2555 EXPECT_EQ(result, expected) 2571 EXPECT_EQ(result, expected)
2556 << "Fail to add codec_id '" << codec_ids[i] << "'"; 2572 << "Fail to add codec_id '" << codec_ids[i] << "'";
2557 2573
2558 if (result == ChunkDemuxer::kOk) 2574 if (result == ChunkDemuxer::kOk)
2559 demuxer_->RemoveId("source_id"); 2575 demuxer_->RemoveId("source_id");
2560 } 2576 }
2561 } 2577 }
2562 2578
2563 TEST_F(ChunkDemuxerTest, EndOfStreamStillSetAfterSeek) { 2579 TEST_F(ChunkDemuxerTest, EndOfStreamStillSetAfterSeek) {
(...skipping 911 matching lines...) Expand 10 before | Expand all | Expand 10 after
3475 TEST_F(ChunkDemuxerTest, CuesBetweenClusters) { 3491 TEST_F(ChunkDemuxerTest, CuesBetweenClusters) {
3476 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO)); 3492 ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
3477 3493
3478 AppendCluster(GenerateCluster(0, 0, 4)); 3494 AppendCluster(GenerateCluster(0, 0, 4));
3479 AppendData(kCuesHeader, sizeof(kCuesHeader)); 3495 AppendData(kCuesHeader, sizeof(kCuesHeader));
3480 AppendCluster(GenerateCluster(46, 66, 5)); 3496 AppendCluster(GenerateCluster(46, 66, 5));
3481 CheckExpectedRanges(kSourceId, "{ [0,115) }"); 3497 CheckExpectedRanges(kSourceId, "{ [0,115) }");
3482 } 3498 }
3483 3499
3484 } // namespace media 3500 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | media/filters/pipeline_integration_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698