Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(463)

Side by Side Diff: media/base/android/test_data_factory.cc

Issue 1176993005: Audio and video decoders for MediaCodecPlayer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactored DataFactory into a separate file Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 void TestDataFactory::CreateChunk(DemuxerData* chunk, base::TimeDelta* delay) {
69 DCHECK(chunk);
70 DCHECK(delay);
71
72 *delay = base::TimeDelta();
73
74 for (int i = 0; i < 4; ++i) {
75 chunk->access_units.push_back(AccessUnit());
76 AccessUnit& unit = chunk->access_units.back();
77 unit.status = DemuxerStream::kOk;
78
79 unit.timestamp = regular_pts_;
80 regular_pts_ += frame_period_;
81
82 if (unit.timestamp > duration_) {
83 unit.is_end_of_stream = true;
84 break; // EOS units have no data
85 }
86
87 unit.data = packet_[i];
88
89 // Allow for modification by subclasses.
90 ModifyAccessUnit(i, &unit);
91
92 // Maintain last PTS. FillAccessUnit can modify unit's PTS.
93 if (last_pts_ < unit.timestamp)
94 last_pts_ = unit.timestamp;
95 }
96 }
97
98 void TestDataFactory::LoadPackets(const char* file_name_template) {
99 for (int i = 0; i < 4; ++i) {
100 scoped_refptr<DecoderBuffer> buffer =
101 ReadTestDataFile(base::StringPrintf(file_name_template, i));
102 packet_[i] = std::vector<uint8>(buffer->data(),
103 buffer->data() + buffer->data_size());
104 }
105 }
106
107 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698