Chromium Code Reviews| 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 <algorithm> | 5 #include <algorithm> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "media/base/decrypt_config.h" | 9 #include "media/base/decrypt_config.h" |
| 10 #include "media/formats/webm/cluster_builder.h" | 10 #include "media/formats/webm/cluster_builder.h" |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 89 const WebMClusterParser::BufferQueue& video_buffers, | 89 const WebMClusterParser::BufferQueue& video_buffers, |
| 90 const WebMClusterParser::BufferQueue& text_buffers, | 90 const WebMClusterParser::BufferQueue& text_buffers, |
| 91 const BlockInfo* block_info, | 91 const BlockInfo* block_info, |
| 92 int block_count) { | 92 int block_count) { |
| 93 size_t audio_offset = 0; | 93 size_t audio_offset = 0; |
| 94 size_t video_offset = 0; | 94 size_t video_offset = 0; |
| 95 size_t text_offset = 0; | 95 size_t text_offset = 0; |
| 96 for (int i = 0; i < block_count; i++) { | 96 for (int i = 0; i < block_count; i++) { |
| 97 const WebMClusterParser::BufferQueue* buffers = NULL; | 97 const WebMClusterParser::BufferQueue* buffers = NULL; |
| 98 size_t* offset; | 98 size_t* offset; |
| 99 StreamParserBuffer::Type expected_type = StreamParserBuffer::kAudio; | |
|
xhwang
2014/01/29 08:04:50
kAudio/UNKNOWN here, then set expected_type to kAu
wolenetz
2014/02/05 02:49:53
Done.
| |
| 99 | 100 |
| 100 if (block_info[i].track_num == kAudioTrackNum) { | 101 if (block_info[i].track_num == kAudioTrackNum) { |
| 101 buffers = &audio_buffers; | 102 buffers = &audio_buffers; |
| 102 offset = &audio_offset; | 103 offset = &audio_offset; |
| 103 } else if (block_info[i].track_num == kVideoTrackNum) { | 104 } else if (block_info[i].track_num == kVideoTrackNum) { |
| 104 buffers = &video_buffers; | 105 buffers = &video_buffers; |
| 105 offset = &video_offset; | 106 offset = &video_offset; |
| 107 expected_type = StreamParserBuffer::kVideo; | |
| 106 } else if (block_info[i].track_num == kTextTrackNum) { | 108 } else if (block_info[i].track_num == kTextTrackNum) { |
| 107 buffers = &text_buffers; | 109 buffers = &text_buffers; |
| 108 offset = &text_offset; | 110 offset = &text_offset; |
| 111 expected_type = StreamParserBuffer::kText; | |
| 109 } else { | 112 } else { |
| 110 LOG(ERROR) << "Unexpected track number " << block_info[i].track_num; | 113 LOG(ERROR) << "Unexpected track number " << block_info[i].track_num; |
| 111 return false; | 114 return false; |
| 112 } | 115 } |
| 113 | 116 |
| 114 if (*offset >= buffers->size()) | 117 if (*offset >= buffers->size()) |
| 115 return false; | 118 return false; |
| 116 | 119 |
| 117 scoped_refptr<StreamParserBuffer> buffer = (*buffers)[(*offset)++]; | 120 scoped_refptr<StreamParserBuffer> buffer = (*buffers)[(*offset)++]; |
| 118 | 121 |
| 119 | |
| 120 EXPECT_EQ(buffer->timestamp().InMilliseconds(), block_info[i].timestamp); | 122 EXPECT_EQ(buffer->timestamp().InMilliseconds(), block_info[i].timestamp); |
| 121 | 123 |
| 122 if (!block_info[i].use_simple_block) | 124 if (!block_info[i].use_simple_block) |
| 123 EXPECT_NE(buffer->duration(), kNoTimestamp()); | 125 EXPECT_NE(buffer->duration(), kNoTimestamp()); |
| 124 | 126 |
| 125 if (buffer->duration() != kNoTimestamp()) | 127 if (buffer->duration() != kNoTimestamp()) |
| 126 EXPECT_EQ(buffer->duration().InMilliseconds(), block_info[i].duration); | 128 EXPECT_EQ(buffer->duration().InMilliseconds(), block_info[i].duration); |
| 129 | |
| 130 EXPECT_EQ(buffer->type(), expected_type); | |
| 131 if (expected_type == StreamParserBuffer::kText) | |
| 132 EXPECT_EQ(buffer->text_track_number(), kTextTrackNum); | |
| 127 } | 133 } |
| 128 | 134 |
| 129 return true; | 135 return true; |
| 130 } | 136 } |
| 131 | 137 |
| 132 static bool VerifyBuffers(const scoped_ptr<WebMClusterParser>& parser, | 138 static bool VerifyBuffers(const scoped_ptr<WebMClusterParser>& parser, |
| 133 const BlockInfo* block_info, | 139 const BlockInfo* block_info, |
| 134 int block_count) { | 140 int block_count) { |
| 135 const WebMClusterParser::TextBufferQueueMap& text_map = | 141 const WebMClusterParser::TextBufferQueueMap& text_map = |
| 136 parser->GetTextBuffers(); | 142 parser->GetTextBuffers(); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 165 | 171 |
| 166 if (block_info.track_num != text_track_num) | 172 if (block_info.track_num != text_track_num) |
| 167 continue; | 173 continue; |
| 168 | 174 |
| 169 EXPECT_FALSE(block_info.use_simple_block); | 175 EXPECT_FALSE(block_info.use_simple_block); |
| 170 EXPECT_FALSE(buffer_iter == buffer_end); | 176 EXPECT_FALSE(buffer_iter == buffer_end); |
| 171 | 177 |
| 172 const scoped_refptr<StreamParserBuffer> buffer = *buffer_iter++; | 178 const scoped_refptr<StreamParserBuffer> buffer = *buffer_iter++; |
| 173 EXPECT_EQ(buffer->timestamp().InMilliseconds(), block_info.timestamp); | 179 EXPECT_EQ(buffer->timestamp().InMilliseconds(), block_info.timestamp); |
| 174 EXPECT_EQ(buffer->duration().InMilliseconds(), block_info.duration); | 180 EXPECT_EQ(buffer->duration().InMilliseconds(), block_info.duration); |
| 181 EXPECT_EQ(buffer->type(), StreamParserBuffer::kText); | |
| 182 EXPECT_EQ(buffer->text_track_number(), text_track_num); | |
|
xhwang
2014/01/29 08:04:50
FYI, we use EXPECT_EQ(expected, variable) style, n
wolenetz
2014/02/05 02:49:53
Done, also conformed a bunch of other places in th
| |
| 175 } | 183 } |
| 176 | 184 |
| 177 EXPECT_TRUE(buffer_iter == buffer_end); | 185 EXPECT_TRUE(buffer_iter == buffer_end); |
| 178 return true; | 186 return true; |
| 179 } | 187 } |
| 180 | 188 |
| 181 static void VerifyEncryptedBuffer( | 189 static void VerifyEncryptedBuffer( |
| 182 scoped_refptr<StreamParserBuffer> buffer) { | 190 scoped_refptr<StreamParserBuffer> buffer) { |
| 183 EXPECT_TRUE(buffer->decrypt_config()); | 191 EXPECT_TRUE(buffer->decrypt_config()); |
| 184 EXPECT_EQ(static_cast<unsigned long>(DecryptConfig::kDecryptionKeySize), | 192 EXPECT_EQ(static_cast<unsigned long>(DecryptConfig::kDecryptionKeySize), |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 530 TEST_F(WebMClusterParserTest, ParseInvalidUnknownButActuallyZeroSizedCluster) { | 538 TEST_F(WebMClusterParserTest, ParseInvalidUnknownButActuallyZeroSizedCluster) { |
| 531 const uint8 kBuffer[] = { | 539 const uint8 kBuffer[] = { |
| 532 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = "unknown") | 540 0x1F, 0x43, 0xB6, 0x75, 0xFF, // CLUSTER (size = "unknown") |
| 533 0x1F, 0x43, 0xB6, 0x75, 0x85, // CLUSTER (size = 5) | 541 0x1F, 0x43, 0xB6, 0x75, 0x85, // CLUSTER (size = 5) |
| 534 }; | 542 }; |
| 535 | 543 |
| 536 EXPECT_EQ(parser_->Parse(kBuffer, sizeof(kBuffer)), -1); | 544 EXPECT_EQ(parser_->Parse(kBuffer, sizeof(kBuffer)), -1); |
| 537 } | 545 } |
| 538 | 546 |
| 539 } // namespace media | 547 } // namespace media |
| OLD | NEW |