| 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/mojo/services/media_type_converters.h" | 5 #include "media/mojo/services/media_type_converters.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "media/base/audio_buffer.h" | 9 #include "media/base/audio_buffer.h" |
| 10 #include "media/base/audio_decoder_config.h" | 10 #include "media/base/audio_decoder_config.h" |
| 11 #include "media/base/cdm_config.h" | 11 #include "media/base/cdm_config.h" |
| 12 #include "media/base/decoder_buffer.h" | 12 #include "media/base/decoder_buffer.h" |
| 13 #include "media/base/media_util.h" | 13 #include "media/base/media_util.h" |
| 14 #include "media/base/sample_format.h" | 14 #include "media/base/sample_format.h" |
| 15 #include "media/base/test_helpers.h" | 15 #include "media/base/test_helpers.h" |
| 16 #include "media/base/video_frame.h" | 16 #include "media/base/video_frame.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 18 |
| 19 namespace media { | 19 namespace media { |
| 20 | 20 |
| 21 namespace { | 21 namespace { |
| 22 | 22 |
| 23 void CompareBytes(uint8* original_data, uint8* result_data, size_t length) { | 23 void CompareBytes(uint8_t* original_data, uint8_t* result_data, size_t length) { |
| 24 EXPECT_GT(length, 0u); | 24 EXPECT_GT(length, 0u); |
| 25 EXPECT_EQ(memcmp(original_data, result_data, length), 0); | 25 EXPECT_EQ(memcmp(original_data, result_data, length), 0); |
| 26 } | 26 } |
| 27 | 27 |
| 28 void CompareAudioBuffers(SampleFormat sample_format, | 28 void CompareAudioBuffers(SampleFormat sample_format, |
| 29 const scoped_refptr<AudioBuffer>& original, | 29 const scoped_refptr<AudioBuffer>& original, |
| 30 const scoped_refptr<AudioBuffer>& result) { | 30 const scoped_refptr<AudioBuffer>& result) { |
| 31 EXPECT_EQ(original->frame_count(), result->frame_count()); | 31 EXPECT_EQ(original->frame_count(), result->frame_count()); |
| 32 EXPECT_EQ(original->timestamp(), result->timestamp()); | 32 EXPECT_EQ(original->timestamp(), result->timestamp()); |
| 33 EXPECT_EQ(original->duration(), result->duration()); | 33 EXPECT_EQ(original->duration(), result->duration()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 EXPECT_EQ(original->natural_size().width(), result->natural_size().width()); | 79 EXPECT_EQ(original->natural_size().width(), result->natural_size().width()); |
| 80 | 80 |
| 81 CompareVideoPlane(media::VideoFrame::kYPlane, original, result); | 81 CompareVideoPlane(media::VideoFrame::kYPlane, original, result); |
| 82 CompareVideoPlane(media::VideoFrame::kUPlane, original, result); | 82 CompareVideoPlane(media::VideoFrame::kUPlane, original, result); |
| 83 CompareVideoPlane(media::VideoFrame::kVPlane, original, result); | 83 CompareVideoPlane(media::VideoFrame::kVPlane, original, result); |
| 84 } | 84 } |
| 85 | 85 |
| 86 } // namespace | 86 } // namespace |
| 87 | 87 |
| 88 TEST(MediaTypeConvertersTest, ConvertDecoderBuffer_Normal) { | 88 TEST(MediaTypeConvertersTest, ConvertDecoderBuffer_Normal) { |
| 89 const uint8 kData[] = "hello, world"; | 89 const uint8_t kData[] = "hello, world"; |
| 90 const uint8 kSideData[] = "sideshow bob"; | 90 const uint8_t kSideData[] = "sideshow bob"; |
| 91 const int kDataSize = arraysize(kData); | 91 const int kDataSize = arraysize(kData); |
| 92 const int kSideDataSize = arraysize(kSideData); | 92 const int kSideDataSize = arraysize(kSideData); |
| 93 | 93 |
| 94 // Original. | 94 // Original. |
| 95 scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom( | 95 scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom( |
| 96 reinterpret_cast<const uint8*>(&kData), kDataSize, | 96 reinterpret_cast<const uint8_t*>(&kData), kDataSize, |
| 97 reinterpret_cast<const uint8*>(&kSideData), kSideDataSize)); | 97 reinterpret_cast<const uint8_t*>(&kSideData), kSideDataSize)); |
| 98 buffer->set_timestamp(base::TimeDelta::FromMilliseconds(123)); | 98 buffer->set_timestamp(base::TimeDelta::FromMilliseconds(123)); |
| 99 buffer->set_duration(base::TimeDelta::FromMilliseconds(456)); | 99 buffer->set_duration(base::TimeDelta::FromMilliseconds(456)); |
| 100 buffer->set_splice_timestamp(base::TimeDelta::FromMilliseconds(200)); | 100 buffer->set_splice_timestamp(base::TimeDelta::FromMilliseconds(200)); |
| 101 buffer->set_discard_padding( | 101 buffer->set_discard_padding( |
| 102 DecoderBuffer::DiscardPadding(base::TimeDelta::FromMilliseconds(5), | 102 DecoderBuffer::DiscardPadding(base::TimeDelta::FromMilliseconds(5), |
| 103 base::TimeDelta::FromMilliseconds(6))); | 103 base::TimeDelta::FromMilliseconds(6))); |
| 104 | 104 |
| 105 // Convert from and back. | 105 // Convert from and back. |
| 106 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); | 106 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); |
| 107 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); | 107 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 129 | 129 |
| 130 // Convert from and back. | 130 // Convert from and back. |
| 131 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); | 131 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); |
| 132 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); | 132 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); |
| 133 | 133 |
| 134 // Compare. | 134 // Compare. |
| 135 EXPECT_TRUE(result->end_of_stream()); | 135 EXPECT_TRUE(result->end_of_stream()); |
| 136 } | 136 } |
| 137 | 137 |
| 138 TEST(MediaTypeConvertersTest, ConvertDecoderBuffer_KeyFrame) { | 138 TEST(MediaTypeConvertersTest, ConvertDecoderBuffer_KeyFrame) { |
| 139 const uint8 kData[] = "hello, world"; | 139 const uint8_t kData[] = "hello, world"; |
| 140 const int kDataSize = arraysize(kData); | 140 const int kDataSize = arraysize(kData); |
| 141 | 141 |
| 142 // Original. | 142 // Original. |
| 143 scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom( | 143 scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom( |
| 144 reinterpret_cast<const uint8*>(&kData), kDataSize)); | 144 reinterpret_cast<const uint8_t*>(&kData), kDataSize)); |
| 145 buffer->set_is_key_frame(true); | 145 buffer->set_is_key_frame(true); |
| 146 EXPECT_TRUE(buffer->is_key_frame()); | 146 EXPECT_TRUE(buffer->is_key_frame()); |
| 147 | 147 |
| 148 // Convert from and back. | 148 // Convert from and back. |
| 149 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); | 149 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); |
| 150 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); | 150 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); |
| 151 | 151 |
| 152 // Compare. | 152 // Compare. |
| 153 // Note: We intentionally do not serialize the data section of the | 153 // Note: We intentionally do not serialize the data section of the |
| 154 // DecoderBuffer; no need to check the data here. | 154 // DecoderBuffer; no need to check the data here. |
| 155 EXPECT_EQ(kDataSize, result->data_size()); | 155 EXPECT_EQ(kDataSize, result->data_size()); |
| 156 EXPECT_TRUE(result->is_key_frame()); | 156 EXPECT_TRUE(result->is_key_frame()); |
| 157 } | 157 } |
| 158 | 158 |
| 159 TEST(MediaTypeConvertersTest, ConvertDecoderBuffer_EncryptedBuffer) { | 159 TEST(MediaTypeConvertersTest, ConvertDecoderBuffer_EncryptedBuffer) { |
| 160 const uint8 kData[] = "hello, world"; | 160 const uint8_t kData[] = "hello, world"; |
| 161 const int kDataSize = arraysize(kData); | 161 const int kDataSize = arraysize(kData); |
| 162 const char kKeyId[] = "00112233445566778899aabbccddeeff"; | 162 const char kKeyId[] = "00112233445566778899aabbccddeeff"; |
| 163 const char kIv[] = "0123456789abcdef"; | 163 const char kIv[] = "0123456789abcdef"; |
| 164 | 164 |
| 165 std::vector<SubsampleEntry> subsamples; | 165 std::vector<SubsampleEntry> subsamples; |
| 166 subsamples.push_back(SubsampleEntry(10, 20)); | 166 subsamples.push_back(SubsampleEntry(10, 20)); |
| 167 subsamples.push_back(SubsampleEntry(30, 40)); | 167 subsamples.push_back(SubsampleEntry(30, 40)); |
| 168 subsamples.push_back(SubsampleEntry(50, 60)); | 168 subsamples.push_back(SubsampleEntry(50, 60)); |
| 169 | 169 |
| 170 // Original. | 170 // Original. |
| 171 scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom( | 171 scoped_refptr<DecoderBuffer> buffer(DecoderBuffer::CopyFrom( |
| 172 reinterpret_cast<const uint8*>(&kData), kDataSize)); | 172 reinterpret_cast<const uint8_t*>(&kData), kDataSize)); |
| 173 buffer->set_decrypt_config( | 173 buffer->set_decrypt_config( |
| 174 make_scoped_ptr(new DecryptConfig(kKeyId, kIv, subsamples))); | 174 make_scoped_ptr(new DecryptConfig(kKeyId, kIv, subsamples))); |
| 175 | 175 |
| 176 // Convert from and back. | 176 // Convert from and back. |
| 177 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); | 177 interfaces::DecoderBufferPtr ptr(interfaces::DecoderBuffer::From(buffer)); |
| 178 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); | 178 scoped_refptr<DecoderBuffer> result(ptr.To<scoped_refptr<DecoderBuffer>>()); |
| 179 | 179 |
| 180 // Compare. | 180 // Compare. |
| 181 // Note: We intentionally do not serialize the data section of the | 181 // Note: We intentionally do not serialize the data section of the |
| 182 // DecoderBuffer; no need to check the data here. | 182 // DecoderBuffer; no need to check the data here. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 scoped_refptr<AudioBuffer> result(ptr.To<scoped_refptr<AudioBuffer>>()); | 254 scoped_refptr<AudioBuffer> result(ptr.To<scoped_refptr<AudioBuffer>>()); |
| 255 | 255 |
| 256 // Compare. | 256 // Compare. |
| 257 EXPECT_TRUE(result->end_of_stream()); | 257 EXPECT_TRUE(result->end_of_stream()); |
| 258 } | 258 } |
| 259 | 259 |
| 260 TEST(MediaTypeConvertersTest, ConvertAudioBuffer_MONO) { | 260 TEST(MediaTypeConvertersTest, ConvertAudioBuffer_MONO) { |
| 261 // Original. | 261 // Original. |
| 262 const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO; | 262 const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_MONO; |
| 263 const int kSampleRate = 48000; | 263 const int kSampleRate = 48000; |
| 264 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8>( | 264 scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<uint8_t>( |
| 265 kSampleFormatU8, kChannelLayout, | 265 kSampleFormatU8, kChannelLayout, |
| 266 ChannelLayoutToChannelCount(kChannelLayout), kSampleRate, 1, 1, | 266 ChannelLayoutToChannelCount(kChannelLayout), kSampleRate, 1, 1, |
| 267 kSampleRate / 100, base::TimeDelta()); | 267 kSampleRate / 100, base::TimeDelta()); |
| 268 | 268 |
| 269 // Convert to and back. | 269 // Convert to and back. |
| 270 interfaces::AudioBufferPtr ptr(interfaces::AudioBuffer::From(buffer)); | 270 interfaces::AudioBufferPtr ptr(interfaces::AudioBuffer::From(buffer)); |
| 271 scoped_refptr<AudioBuffer> result(ptr.To<scoped_refptr<AudioBuffer>>()); | 271 scoped_refptr<AudioBuffer> result(ptr.To<scoped_refptr<AudioBuffer>>()); |
| 272 | 272 |
| 273 // Compare. | 273 // Compare. |
| 274 CompareAudioBuffers(kSampleFormatU8, buffer, result); | 274 CompareAudioBuffers(kSampleFormatU8, buffer, result); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 | 323 |
| 324 // Convert to and back. | 324 // Convert to and back. |
| 325 interfaces::VideoFramePtr ptr(interfaces::VideoFrame::From(buffer)); | 325 interfaces::VideoFramePtr ptr(interfaces::VideoFrame::From(buffer)); |
| 326 scoped_refptr<VideoFrame> result(ptr.To<scoped_refptr<VideoFrame>>()); | 326 scoped_refptr<VideoFrame> result(ptr.To<scoped_refptr<VideoFrame>>()); |
| 327 | 327 |
| 328 // Compare. | 328 // Compare. |
| 329 CompareVideoFrames(buffer, result); | 329 CompareVideoFrames(buffer, result); |
| 330 } | 330 } |
| 331 | 331 |
| 332 } // namespace media | 332 } // namespace media |
| OLD | NEW |