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 |