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.
5 #include "media/base/android/test_data_factory.h"
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"
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
;
23 switch (audio_codec
) {
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());
33 configs
.audio_sampling_rate
= 44100;
34 configs
.audio_extra_data
= {0x12, 0x10};
38 // Other codecs are not supported by this helper.
46 DemuxerConfigs
TestDataFactory::CreateVideoConfigs(
47 VideoCodec video_codec
,
48 const base::TimeDelta
& duration
,
49 const gfx::Size
& video_size
) {
50 DemuxerConfigs configs
;
51 configs
.video_codec
= video_codec
;
52 configs
.video_size
= video_size
;
53 configs
.is_video_encrypted
= false;
54 configs
.duration
= duration
;
59 TestDataFactory::TestDataFactory(const char* file_name_template
,
60 const base::TimeDelta
& duration
,
61 const base::TimeDelta
& frame_period
)
62 : duration_(duration
),
63 frame_period_(frame_period
),
64 starvation_mode_(false) {
65 LoadPackets(file_name_template
);
68 TestDataFactory::~TestDataFactory() {}
70 bool TestDataFactory::CreateChunk(DemuxerData
* chunk
, base::TimeDelta
* delay
) {
74 *delay
= base::TimeDelta();
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
;
81 unit
.timestamp
= regular_pts_
;
82 regular_pts_
+= frame_period_
;
84 if (unit
.timestamp
> duration_
) {
88 unit
.is_end_of_stream
= true;
89 break; // EOS units have no data.
92 unit
.data
= packet_
[i
];
94 // Allow for modification by subclasses.
95 ModifyAccessUnit(i
, &unit
);
97 // Maintain last PTS. ModifyAccessUnit() can modify unit's PTS.
98 if (last_pts_
< unit
.timestamp
)
99 last_pts_
= unit
.timestamp
;
105 void TestDataFactory::LoadPackets(const char* file_name_template
) {
106 for (int i
= 0; i
< 4; ++i
) {
107 scoped_refptr
<DecoderBuffer
> buffer
=
108 ReadTestDataFile(base::StringPrintf(file_name_template
, i
));
109 packet_
[i
] = std::vector
<uint8
>(buffer
->data(),
110 buffer
->data() + buffer
->data_size());