OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/webm/webm_stream_parser.h" | 5 #include "media/formats/webm/webm_stream_parser.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "media/base/decoder_buffer.h" | 10 #include "media/base/decoder_buffer.h" |
11 #include "media/base/demuxer.h" | 11 #include "media/base/demuxer.h" |
12 #include "media/base/media_tracks.h" | 12 #include "media/base/media_tracks.h" |
13 #include "media/base/mock_media_log.h" | 13 #include "media/base/mock_media_log.h" |
14 #include "media/base/stream_parser.h" | 14 #include "media/base/stream_parser.h" |
15 #include "media/base/test_data_util.h" | 15 #include "media/base/test_data_util.h" |
16 #include "media/base/text_track_config.h" | 16 #include "media/base/text_track_config.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 | 18 |
19 using testing::SaveArg; | 19 using testing::SaveArg; |
20 using testing::_; | 20 using testing::_; |
21 | 21 |
22 namespace media { | 22 namespace media { |
23 | 23 |
24 class WebMStreamParserTest : public testing::Test { | 24 class WebMStreamParserTest : public testing::Test { |
25 public: | 25 public: |
26 WebMStreamParserTest() | 26 WebMStreamParserTest() {} |
27 : media_log_(new testing::StrictMock<MockMediaLog>()) {} | |
28 | 27 |
29 protected: | 28 protected: |
30 void ParseWebMFile(const std::string& filename, | 29 void ParseWebMFile(const std::string& filename, |
31 const StreamParser::InitParameters& expected_params) { | 30 const StreamParser::InitParameters& expected_params) { |
32 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename); | 31 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(filename); |
33 parser_.reset(new WebMStreamParser()); | 32 parser_.reset(new WebMStreamParser()); |
34 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = | 33 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = |
35 base::Bind(&WebMStreamParserTest::OnEncryptedMediaInitData, | 34 base::Bind(&WebMStreamParserTest::OnEncryptedMediaInitData, |
36 base::Unretained(this)); | 35 base::Unretained(this)); |
37 | 36 |
38 EXPECT_CALL(*this, InitCB(_)); | 37 EXPECT_CALL(*this, InitCB(_)); |
39 EXPECT_CALL(*this, NewMediaSegmentCB()).Times(testing::AnyNumber()); | 38 EXPECT_CALL(*this, NewMediaSegmentCB()).Times(testing::AnyNumber()); |
40 EXPECT_CALL(*this, EndMediaSegmentCB()).Times(testing::AnyNumber()); | 39 EXPECT_CALL(*this, EndMediaSegmentCB()).Times(testing::AnyNumber()); |
41 EXPECT_CALL(*this, NewBuffersCB(_)) | 40 EXPECT_CALL(*this, NewBuffersCB(_)) |
42 .Times(testing::AnyNumber()) | 41 .Times(testing::AnyNumber()) |
43 .WillRepeatedly(testing::Return(true)); | 42 .WillRepeatedly(testing::Return(true)); |
44 parser_->Init( | 43 parser_->Init( |
45 base::Bind(&WebMStreamParserTest::InitF, base::Unretained(this), | 44 base::Bind(&WebMStreamParserTest::InitF, base::Unretained(this), |
46 expected_params), | 45 expected_params), |
47 base::Bind(&WebMStreamParserTest::NewConfigCB, base::Unretained(this)), | 46 base::Bind(&WebMStreamParserTest::NewConfigCB, base::Unretained(this)), |
48 base::Bind(&WebMStreamParserTest::NewBuffersCB, base::Unretained(this)), | 47 base::Bind(&WebMStreamParserTest::NewBuffersCB, base::Unretained(this)), |
49 false, // don't ignore_text_track | 48 false, // don't ignore_text_track |
50 encrypted_media_init_data_cb, | 49 encrypted_media_init_data_cb, |
51 base::Bind(&WebMStreamParserTest::NewMediaSegmentCB, | 50 base::Bind(&WebMStreamParserTest::NewMediaSegmentCB, |
52 base::Unretained(this)), | 51 base::Unretained(this)), |
53 base::Bind(&WebMStreamParserTest::EndMediaSegmentCB, | 52 base::Bind(&WebMStreamParserTest::EndMediaSegmentCB, |
54 base::Unretained(this)), | 53 base::Unretained(this)), |
55 media_log_); | 54 &media_log_); |
56 bool result = parser_->Parse(buffer->data(), buffer->data_size()); | 55 bool result = parser_->Parse(buffer->data(), buffer->data_size()); |
57 EXPECT_TRUE(result); | 56 EXPECT_TRUE(result); |
58 } | 57 } |
59 | 58 |
60 // Verifies only the detected track counts by track type, then chains to the | 59 // Verifies only the detected track counts by track type, then chains to the |
61 // InitCB mock. | 60 // InitCB mock. |
62 void InitF(const StreamParser::InitParameters& expected_params, | 61 void InitF(const StreamParser::InitParameters& expected_params, |
63 const StreamParser::InitParameters& params) { | 62 const StreamParser::InitParameters& params) { |
64 EXPECT_EQ(expected_params.detected_audio_track_count, | 63 EXPECT_EQ(expected_params.detected_audio_track_count, |
65 params.detected_audio_track_count); | 64 params.detected_audio_track_count); |
(...skipping 13 matching lines...) Expand all Loading... |
79 return true; | 78 return true; |
80 } | 79 } |
81 | 80 |
82 MOCK_METHOD1(NewBuffersCB, bool(const StreamParser::BufferQueueMap&)); | 81 MOCK_METHOD1(NewBuffersCB, bool(const StreamParser::BufferQueueMap&)); |
83 MOCK_METHOD2(OnEncryptedMediaInitData, | 82 MOCK_METHOD2(OnEncryptedMediaInitData, |
84 void(EmeInitDataType init_data_type, | 83 void(EmeInitDataType init_data_type, |
85 const std::vector<uint8_t>& init_data)); | 84 const std::vector<uint8_t>& init_data)); |
86 MOCK_METHOD0(NewMediaSegmentCB, void()); | 85 MOCK_METHOD0(NewMediaSegmentCB, void()); |
87 MOCK_METHOD0(EndMediaSegmentCB, void()); | 86 MOCK_METHOD0(EndMediaSegmentCB, void()); |
88 | 87 |
89 scoped_refptr<testing::StrictMock<MockMediaLog>> media_log_; | 88 testing::StrictMock<MockMediaLog> media_log_; |
90 std::unique_ptr<WebMStreamParser> parser_; | 89 std::unique_ptr<WebMStreamParser> parser_; |
91 std::unique_ptr<MediaTracks> media_tracks_; | 90 std::unique_ptr<MediaTracks> media_tracks_; |
92 }; | 91 }; |
93 | 92 |
94 TEST_F(WebMStreamParserTest, VerifyMediaTrackMetadata) { | 93 TEST_F(WebMStreamParserTest, VerifyMediaTrackMetadata) { |
95 EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration")) | 94 EXPECT_MEDIA_LOG(testing::HasSubstr("Estimating WebM block duration")) |
96 .Times(testing::AnyNumber()); | 95 .Times(testing::AnyNumber()); |
97 StreamParser::InitParameters params(kInfiniteDuration); | 96 StreamParser::InitParameters params(kInfiniteDuration); |
98 params.detected_audio_track_count = 1; | 97 params.detected_audio_track_count = 1; |
99 params.detected_video_track_count = 1; | 98 params.detected_video_track_count = 1; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 EXPECT_FLOAT_EQ(mmdata.primary_g.y(), 0.2f); | 186 EXPECT_FLOAT_EQ(mmdata.primary_g.y(), 0.2f); |
188 EXPECT_FLOAT_EQ(mmdata.primary_b.x(), 0.1f); | 187 EXPECT_FLOAT_EQ(mmdata.primary_b.x(), 0.1f); |
189 EXPECT_FLOAT_EQ(mmdata.primary_b.y(), 0.2f); | 188 EXPECT_FLOAT_EQ(mmdata.primary_b.y(), 0.2f); |
190 EXPECT_FLOAT_EQ(mmdata.white_point.x(), 0.1f); | 189 EXPECT_FLOAT_EQ(mmdata.white_point.x(), 0.1f); |
191 EXPECT_FLOAT_EQ(mmdata.white_point.y(), 0.2f); | 190 EXPECT_FLOAT_EQ(mmdata.white_point.y(), 0.2f); |
192 EXPECT_EQ(mmdata.luminance_max, 40); | 191 EXPECT_EQ(mmdata.luminance_max, 40); |
193 EXPECT_EQ(mmdata.luminance_min, 30); | 192 EXPECT_EQ(mmdata.luminance_min, 30); |
194 } | 193 } |
195 | 194 |
196 } // namespace media | 195 } // namespace media |
OLD | NEW |