| 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 |