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

Side by Side Diff: media/filters/ffmpeg_aac_bitstream_converter_unittest.cc

Issue 2497603003: Roll src/third_party/ffmpeg/ 3c7a09882..cdf4accee (3188 commits). (Closed)
Patch Set: Updated DEPS to ffmpeg origin/master Created 4 years, 1 month 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
« no previous file with comments | « media/filters/ffmpeg_aac_bitstream_converter.cc ('k') | media/filters/ffmpeg_audio_decoder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "media/ffmpeg/ffmpeg_common.h" 9 #include "media/ffmpeg/ffmpeg_common.h"
10 #include "media/filters/ffmpeg_aac_bitstream_converter.h" 10 #include "media/filters/ffmpeg_aac_bitstream_converter.h"
11 #include "media/filters/ffmpeg_demuxer.h" 11 #include "media/filters/ffmpeg_demuxer.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace media { 14 namespace media {
15 15
16 namespace { 16 namespace {
17 const int kAacMainProfile = 0; 17 const int kAacMainProfile = 0;
18 const int kAacLowComplexityProfile = 1; 18 const int kAacLowComplexityProfile = 1;
19 } // namespace 19 } // namespace
20 20
21 // Class for testing the FFmpegAACBitstreamConverter. 21 // Class for testing the FFmpegAACBitstreamConverter.
22 class FFmpegAACBitstreamConverterTest : public testing::Test { 22 class FFmpegAACBitstreamConverterTest : public testing::Test {
23 protected: 23 protected:
24 FFmpegAACBitstreamConverterTest() { 24 FFmpegAACBitstreamConverterTest() {
25 // Minimal extra data header 25 // Minimal extra data header
26 memset(context_header_, 0, sizeof(context_header_)); 26 memset(extradata_header_, 0, sizeof(extradata_header_));
27 27
28 // Set up reasonable aac context 28 // Set up reasonable aac parameters
29 memset(&test_context_, 0, sizeof(AVCodecContext)); 29 memset(&test_parameters_, 0, sizeof(AVCodecParameters));
30 test_context_.codec_id = AV_CODEC_ID_AAC; 30 test_parameters_.codec_id = AV_CODEC_ID_AAC;
31 test_context_.profile = FF_PROFILE_AAC_MAIN; 31 test_parameters_.profile = FF_PROFILE_AAC_MAIN;
32 test_context_.channels = 2; 32 test_parameters_.channels = 2;
33 test_context_.extradata = context_header_; 33 test_parameters_.extradata = extradata_header_;
34 test_context_.extradata_size = sizeof(context_header_); 34 test_parameters_.extradata_size = sizeof(extradata_header_);
35 } 35 }
36 36
37 void CreatePacket(AVPacket* packet, const uint8_t* data, uint32_t data_size) { 37 void CreatePacket(AVPacket* packet, const uint8_t* data, uint32_t data_size) {
38 // Create new packet sized of |data_size| from |data|. 38 // Create new packet sized of |data_size| from |data|.
39 EXPECT_EQ(av_new_packet(packet, data_size), 0); 39 EXPECT_EQ(av_new_packet(packet, data_size), 0);
40 memcpy(packet->data, data, data_size); 40 memcpy(packet->data, data, data_size);
41 } 41 }
42 42
43 // Variable to hold valid dummy context for testing. 43 // Variable to hold valid dummy parameters for testing.
44 AVCodecContext test_context_; 44 AVCodecParameters test_parameters_;
45 45
46 private: 46 private:
47 uint8_t context_header_[2]; 47 uint8_t extradata_header_[2];
48 48
49 DISALLOW_COPY_AND_ASSIGN(FFmpegAACBitstreamConverterTest); 49 DISALLOW_COPY_AND_ASSIGN(FFmpegAACBitstreamConverterTest);
50 }; 50 };
51 51
52 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_Success) { 52 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_Success) {
53 FFmpegAACBitstreamConverter converter(&test_context_); 53 FFmpegAACBitstreamConverter converter(&test_parameters_);
54 54
55 uint8_t dummy_packet[1000]; 55 uint8_t dummy_packet[1000];
56 // Fill dummy packet with junk data. aac converter doesn't look into packet 56 // Fill dummy packet with junk data. aac converter doesn't look into packet
57 // data, just header, so can fill with whatever we want for test. 57 // data, just header, so can fill with whatever we want for test.
58 for(size_t i = 0; i < sizeof(dummy_packet); i++) { 58 for(size_t i = 0; i < sizeof(dummy_packet); i++) {
59 dummy_packet[i] = i & 0xFF; // Repeated sequences of 0-255 59 dummy_packet[i] = i & 0xFF; // Repeated sequences of 0-255
60 } 60 }
61 61
62 ScopedAVPacket test_packet(new AVPacket()); 62 ScopedAVPacket test_packet(new AVPacket());
63 CreatePacket(test_packet.get(), dummy_packet, 63 CreatePacket(test_packet.get(), dummy_packet,
64 sizeof(dummy_packet)); 64 sizeof(dummy_packet));
65 65
66 // Try out the actual conversion (should be successful and allocate new 66 // Try out the actual conversion (should be successful and allocate new
67 // packet and destroy the old one). 67 // packet and destroy the old one).
68 EXPECT_TRUE(converter.ConvertPacket(test_packet.get())); 68 EXPECT_TRUE(converter.ConvertPacket(test_packet.get()));
69 69
70 // Check that a header was added and that packet data was preserved 70 // Check that a header was added and that packet data was preserved
71 EXPECT_EQ(static_cast<long>(test_packet->size), 71 EXPECT_EQ(static_cast<long>(test_packet->size),
72 static_cast<long>(sizeof(dummy_packet) + 72 static_cast<long>(sizeof(dummy_packet) +
73 FFmpegAACBitstreamConverter::kAdtsHeaderSize)); 73 FFmpegAACBitstreamConverter::kAdtsHeaderSize));
74 EXPECT_EQ(memcmp( 74 EXPECT_EQ(memcmp(
75 reinterpret_cast<void*>(test_packet->data + 75 reinterpret_cast<void*>(test_packet->data +
76 FFmpegAACBitstreamConverter::kAdtsHeaderSize), 76 FFmpegAACBitstreamConverter::kAdtsHeaderSize),
77 reinterpret_cast<void*>(dummy_packet), 77 reinterpret_cast<void*>(dummy_packet),
78 sizeof(dummy_packet)), 0); 78 sizeof(dummy_packet)), 0);
79 } 79 }
80 80
81 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_FailureNullParams) { 81 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_FailureNullParams) {
82 // Set up AVCConfigurationRecord to represent NULL data. 82 // Set up AVCConfigurationRecord to represent NULL data.
83 AVCodecContext dummy_context; 83 AVCodecParameters dummy_parameters;
84 dummy_context.extradata = NULL; 84 dummy_parameters.extradata = nullptr;
85 dummy_context.extradata_size = 0; 85 dummy_parameters.extradata_size = 0;
86 FFmpegAACBitstreamConverter converter(&dummy_context); 86 FFmpegAACBitstreamConverter converter(&dummy_parameters);
87 87
88 uint8_t dummy_packet[1000] = {0}; 88 uint8_t dummy_packet[1000] = {0};
89 89
90 // Try out the actual conversion with NULL parameter. 90 // Try out the actual conversion with NULL parameter.
91 EXPECT_FALSE(converter.ConvertPacket(NULL)); 91 EXPECT_FALSE(converter.ConvertPacket(NULL));
92 92
93 // Create new packet to test actual conversion. 93 // Create new packet to test actual conversion.
94 ScopedAVPacket test_packet(new AVPacket()); 94 ScopedAVPacket test_packet(new AVPacket());
95 CreatePacket(test_packet.get(), dummy_packet, sizeof(dummy_packet)); 95 CreatePacket(test_packet.get(), dummy_packet, sizeof(dummy_packet));
96 96
97 // Try out the actual conversion. This should fail due to missing extradata. 97 // Try out the actual conversion. This should fail due to missing extradata.
98 EXPECT_FALSE(converter.ConvertPacket(test_packet.get())); 98 EXPECT_FALSE(converter.ConvertPacket(test_packet.get()));
99 } 99 }
100 100
101 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_AudioProfileType) { 101 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_AudioProfileType) {
102 FFmpegAACBitstreamConverter converter(&test_context_); 102 FFmpegAACBitstreamConverter converter(&test_parameters_);
103 103
104 uint8_t dummy_packet[1000] = {0}; 104 uint8_t dummy_packet[1000] = {0};
105 105
106 ScopedAVPacket test_packet(new AVPacket()); 106 ScopedAVPacket test_packet(new AVPacket());
107 CreatePacket(test_packet.get(), dummy_packet, 107 CreatePacket(test_packet.get(), dummy_packet,
108 sizeof(dummy_packet)); 108 sizeof(dummy_packet));
109 109
110 EXPECT_TRUE(converter.ConvertPacket(test_packet.get())); 110 EXPECT_TRUE(converter.ConvertPacket(test_packet.get()));
111 111
112 // Check that the ADTS header profile matches the context 112 // Check that the ADTS header profile matches the parameters
113 int profile = ((test_packet->data[2] & 0xC0) >> 6); 113 int profile = ((test_packet->data[2] & 0xC0) >> 6);
114 114
115 EXPECT_EQ(profile, kAacMainProfile); 115 EXPECT_EQ(profile, kAacMainProfile);
116 116
117 test_context_.profile = FF_PROFILE_AAC_HE; 117 test_parameters_.profile = FF_PROFILE_AAC_HE;
118 FFmpegAACBitstreamConverter converter_he(&test_context_); 118 FFmpegAACBitstreamConverter converter_he(&test_parameters_);
119 119
120 test_packet.reset(new AVPacket()); 120 test_packet.reset(new AVPacket());
121 CreatePacket(test_packet.get(), dummy_packet, 121 CreatePacket(test_packet.get(), dummy_packet,
122 sizeof(dummy_packet)); 122 sizeof(dummy_packet));
123 123
124 EXPECT_TRUE(converter_he.ConvertPacket(test_packet.get())); 124 EXPECT_TRUE(converter_he.ConvertPacket(test_packet.get()));
125 125
126 profile = ((test_packet->data[2] & 0xC0) >> 6); 126 profile = ((test_packet->data[2] & 0xC0) >> 6);
127 127
128 EXPECT_EQ(profile, kAacLowComplexityProfile); 128 EXPECT_EQ(profile, kAacLowComplexityProfile);
129 129
130 test_context_.profile = FF_PROFILE_AAC_ELD; 130 test_parameters_.profile = FF_PROFILE_AAC_ELD;
131 FFmpegAACBitstreamConverter converter_eld(&test_context_); 131 FFmpegAACBitstreamConverter converter_eld(&test_parameters_);
132 132
133 test_packet.reset(new AVPacket()); 133 test_packet.reset(new AVPacket());
134 CreatePacket(test_packet.get(), dummy_packet, 134 CreatePacket(test_packet.get(), dummy_packet,
135 sizeof(dummy_packet)); 135 sizeof(dummy_packet));
136 136
137 EXPECT_FALSE(converter_eld.ConvertPacket(test_packet.get())); 137 EXPECT_FALSE(converter_eld.ConvertPacket(test_packet.get()));
138 } 138 }
139 139
140 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_MultipleLength) { 140 TEST_F(FFmpegAACBitstreamConverterTest, Conversion_MultipleLength) {
141 FFmpegAACBitstreamConverter converter(&test_context_); 141 FFmpegAACBitstreamConverter converter(&test_parameters_);
142 142
143 uint8_t dummy_packet[1000]; 143 uint8_t dummy_packet[1000];
144 144
145 ScopedAVPacket test_packet(new AVPacket()); 145 ScopedAVPacket test_packet(new AVPacket());
146 CreatePacket(test_packet.get(), dummy_packet, 146 CreatePacket(test_packet.get(), dummy_packet,
147 sizeof(dummy_packet)); 147 sizeof(dummy_packet));
148 148
149 // Try out the actual conversion (should be successful and allocate new 149 // Try out the actual conversion (should be successful and allocate new
150 // packet and destroy the old one). 150 // packet and destroy the old one).
151 EXPECT_TRUE(converter.ConvertPacket(test_packet.get())); 151 EXPECT_TRUE(converter.ConvertPacket(test_packet.get()));
(...skipping 16 matching lines...) Expand all
168 168
169 // Check that the ADTS header frame length matches the packet size 169 // Check that the ADTS header frame length matches the packet size
170 frame_length = ((second_test_packet->data[3] & 0x03) << 11) | 170 frame_length = ((second_test_packet->data[3] & 0x03) << 11) |
171 ((second_test_packet->data[4] & 0xFF) << 3) | 171 ((second_test_packet->data[4] & 0xFF) << 3) |
172 ((second_test_packet->data[5] & 0xE0) >> 5); 172 ((second_test_packet->data[5] & 0xE0) >> 5);
173 173
174 EXPECT_EQ(frame_length, second_test_packet->size); 174 EXPECT_EQ(frame_length, second_test_packet->size);
175 } 175 }
176 176
177 } // namespace media 177 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_aac_bitstream_converter.cc ('k') | media/filters/ffmpeg_audio_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698