OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "media/base/android/test_data_factory.h" |
| 6 |
| 7 #include "base/strings/stringprintf.h" |
| 8 #include "media/base/android/demuxer_stream_player_params.h" |
| 9 #include "media/base/decoder_buffer.h" |
| 10 #include "media/base/test_data_util.h" |
| 11 |
| 12 namespace media { |
| 13 |
| 14 DemuxerConfigs TestDataFactory::CreateAudioConfigs( |
| 15 AudioCodec audio_codec, |
| 16 const base::TimeDelta& duration) { |
| 17 DemuxerConfigs configs; |
| 18 configs.audio_codec = audio_codec; |
| 19 configs.audio_channels = 2; |
| 20 configs.is_audio_encrypted = false; |
| 21 configs.duration = duration; |
| 22 |
| 23 switch (audio_codec) { |
| 24 case kCodecVorbis: { |
| 25 configs.audio_sampling_rate = 44100; |
| 26 scoped_refptr<DecoderBuffer> buffer = |
| 27 ReadTestDataFile("vorbis-extradata"); |
| 28 configs.audio_extra_data = std::vector<uint8>( |
| 29 buffer->data(), buffer->data() + buffer->data_size()); |
| 30 } break; |
| 31 |
| 32 case kCodecAAC: { |
| 33 configs.audio_sampling_rate = 48000; |
| 34 uint8 aac_extra_data[] = {0x13, 0x10}; |
| 35 configs.audio_extra_data = |
| 36 std::vector<uint8>(aac_extra_data, aac_extra_data + 2); |
| 37 } break; |
| 38 |
| 39 default: |
| 40 // Other codecs are not supported by this helper. |
| 41 NOTREACHED(); |
| 42 break; |
| 43 } |
| 44 |
| 45 return configs; |
| 46 } |
| 47 |
| 48 DemuxerConfigs TestDataFactory::CreateVideoConfigs( |
| 49 VideoCodec video_codec, |
| 50 const base::TimeDelta& duration, |
| 51 const gfx::Size& video_size) { |
| 52 DemuxerConfigs configs; |
| 53 configs.video_codec = video_codec; |
| 54 configs.video_size = video_size; |
| 55 configs.is_video_encrypted = false; |
| 56 configs.duration = duration; |
| 57 |
| 58 return configs; |
| 59 } |
| 60 |
| 61 TestDataFactory::TestDataFactory(const char* file_name_template, |
| 62 const base::TimeDelta& duration, |
| 63 const base::TimeDelta& frame_period) |
| 64 : duration_(duration), frame_period_(frame_period) { |
| 65 LoadPackets(file_name_template); |
| 66 } |
| 67 |
| 68 TestDataFactory::~TestDataFactory() {} |
| 69 |
| 70 void TestDataFactory::CreateChunk(DemuxerData* chunk, base::TimeDelta* delay) { |
| 71 DCHECK(chunk); |
| 72 DCHECK(delay); |
| 73 |
| 74 *delay = base::TimeDelta(); |
| 75 |
| 76 for (int i = 0; i < 4; ++i) { |
| 77 chunk->access_units.push_back(AccessUnit()); |
| 78 AccessUnit& unit = chunk->access_units.back(); |
| 79 unit.status = DemuxerStream::kOk; |
| 80 |
| 81 unit.timestamp = regular_pts_; |
| 82 regular_pts_ += frame_period_; |
| 83 |
| 84 if (unit.timestamp > duration_) { |
| 85 unit.is_end_of_stream = true; |
| 86 break; // EOS units have no data. |
| 87 } |
| 88 |
| 89 unit.data = packet_[i]; |
| 90 |
| 91 // Allow for modification by subclasses. |
| 92 ModifyAccessUnit(i, &unit); |
| 93 |
| 94 // Maintain last PTS. FillAccessUnit can modify unit's PTS. |
| 95 if (last_pts_ < unit.timestamp) |
| 96 last_pts_ = unit.timestamp; |
| 97 } |
| 98 } |
| 99 |
| 100 void TestDataFactory::LoadPackets(const char* file_name_template) { |
| 101 for (int i = 0; i < 4; ++i) { |
| 102 scoped_refptr<DecoderBuffer> buffer = |
| 103 ReadTestDataFile(base::StringPrintf(file_name_template, i)); |
| 104 packet_[i] = std::vector<uint8>(buffer->data(), |
| 105 buffer->data() + buffer->data_size()); |
| 106 } |
| 107 } |
| 108 |
| 109 } // namespace media |
OLD | NEW |