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

Side by Side Diff: media/ffmpeg/ffmpeg_common.cc

Issue 9317096: Fix media code to work with new ffmpeg. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix years. Created 8 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « media/ffmpeg/ffmpeg_common.h ('k') | media/ffmpeg/ffmpeg_regression_tests.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/ffmpeg/ffmpeg_common.h" 5 #include "media/ffmpeg/ffmpeg_common.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "media/base/audio_decoder_config.h" 8 #include "media/base/audio_decoder_config.h"
9 #include "media/base/video_decoder_config.h" 9 #include "media/base/video_decoder_config.h"
10 10
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 171 }
172 return FF_PROFILE_UNKNOWN; 172 return FF_PROFILE_UNKNOWN;
173 } 173 }
174 174
175 void AVCodecContextToAudioDecoderConfig( 175 void AVCodecContextToAudioDecoderConfig(
176 const AVCodecContext* codec_context, 176 const AVCodecContext* codec_context,
177 AudioDecoderConfig* config) { 177 AudioDecoderConfig* config) {
178 DCHECK_EQ(codec_context->codec_type, AVMEDIA_TYPE_AUDIO); 178 DCHECK_EQ(codec_context->codec_type, AVMEDIA_TYPE_AUDIO);
179 179
180 AudioCodec codec = CodecIDToAudioCodec(codec_context->codec_id); 180 AudioCodec codec = CodecIDToAudioCodec(codec_context->codec_id);
181 int bits_per_channel = av_get_bits_per_sample_fmt(codec_context->sample_fmt); 181 int bytes_per_channel = av_get_bytes_per_sample(codec_context->sample_fmt);
182 ChannelLayout channel_layout = 182 ChannelLayout channel_layout =
183 ChannelLayoutToChromeChannelLayout(codec_context->channel_layout, 183 ChannelLayoutToChromeChannelLayout(codec_context->channel_layout,
184 codec_context->channels); 184 codec_context->channels);
185 int samples_per_second = codec_context->sample_rate; 185 int samples_per_second = codec_context->sample_rate;
186 186
187 config->Initialize(codec, 187 config->Initialize(codec,
188 bits_per_channel, 188 bytes_per_channel << 3,
189 channel_layout, 189 channel_layout,
190 samples_per_second, 190 samples_per_second,
191 codec_context->extradata, 191 codec_context->extradata,
192 codec_context->extradata_size, 192 codec_context->extradata_size,
193 true); 193 true);
194 } 194 }
195 195
196 void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config, 196 void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
197 AVCodecContext* codec_context) { 197 AVCodecContext* codec_context) {
198 codec_context->codec_type = AVMEDIA_TYPE_AUDIO; 198 codec_context->codec_type = AVMEDIA_TYPE_AUDIO;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 FF_INPUT_BUFFER_PADDING_SIZE); 282 FF_INPUT_BUFFER_PADDING_SIZE);
283 } else { 283 } else {
284 codec_context->extradata = NULL; 284 codec_context->extradata = NULL;
285 codec_context->extradata_size = 0; 285 codec_context->extradata_size = 0;
286 } 286 }
287 } 287 }
288 288
289 ChannelLayout ChannelLayoutToChromeChannelLayout(int64_t layout, 289 ChannelLayout ChannelLayoutToChromeChannelLayout(int64_t layout,
290 int channels) { 290 int channels) {
291 switch (layout) { 291 switch (layout) {
292 case CH_LAYOUT_MONO: 292 case AV_CH_LAYOUT_MONO:
293 return CHANNEL_LAYOUT_MONO; 293 return CHANNEL_LAYOUT_MONO;
294 case CH_LAYOUT_STEREO: 294 case AV_CH_LAYOUT_STEREO:
295 return CHANNEL_LAYOUT_STEREO; 295 return CHANNEL_LAYOUT_STEREO;
296 case CH_LAYOUT_2_1: 296 case AV_CH_LAYOUT_2_1:
297 return CHANNEL_LAYOUT_2_1; 297 return CHANNEL_LAYOUT_2_1;
298 case CH_LAYOUT_SURROUND: 298 case AV_CH_LAYOUT_SURROUND:
299 return CHANNEL_LAYOUT_SURROUND; 299 return CHANNEL_LAYOUT_SURROUND;
300 case CH_LAYOUT_4POINT0: 300 case AV_CH_LAYOUT_4POINT0:
301 return CHANNEL_LAYOUT_4POINT0; 301 return CHANNEL_LAYOUT_4POINT0;
302 case CH_LAYOUT_2_2: 302 case AV_CH_LAYOUT_2_2:
303 return CHANNEL_LAYOUT_2_2; 303 return CHANNEL_LAYOUT_2_2;
304 case CH_LAYOUT_QUAD: 304 case AV_CH_LAYOUT_QUAD:
305 return CHANNEL_LAYOUT_QUAD; 305 return CHANNEL_LAYOUT_QUAD;
306 case CH_LAYOUT_5POINT0: 306 case AV_CH_LAYOUT_5POINT0:
307 return CHANNEL_LAYOUT_5POINT0; 307 return CHANNEL_LAYOUT_5POINT0;
308 case CH_LAYOUT_5POINT1: 308 case AV_CH_LAYOUT_5POINT1:
309 return CHANNEL_LAYOUT_5POINT1; 309 return CHANNEL_LAYOUT_5POINT1;
310 case CH_LAYOUT_5POINT0_BACK: 310 case AV_CH_LAYOUT_5POINT0_BACK:
311 return CHANNEL_LAYOUT_5POINT0_BACK; 311 return CHANNEL_LAYOUT_5POINT0_BACK;
312 case CH_LAYOUT_5POINT1_BACK: 312 case AV_CH_LAYOUT_5POINT1_BACK:
313 return CHANNEL_LAYOUT_5POINT1_BACK; 313 return CHANNEL_LAYOUT_5POINT1_BACK;
314 case CH_LAYOUT_7POINT0: 314 case AV_CH_LAYOUT_7POINT0:
315 return CHANNEL_LAYOUT_7POINT0; 315 return CHANNEL_LAYOUT_7POINT0;
316 case CH_LAYOUT_7POINT1: 316 case AV_CH_LAYOUT_7POINT1:
317 return CHANNEL_LAYOUT_7POINT1; 317 return CHANNEL_LAYOUT_7POINT1;
318 case CH_LAYOUT_7POINT1_WIDE: 318 case AV_CH_LAYOUT_7POINT1_WIDE:
319 return CHANNEL_LAYOUT_7POINT1_WIDE; 319 return CHANNEL_LAYOUT_7POINT1_WIDE;
320 case CH_LAYOUT_STEREO_DOWNMIX: 320 case AV_CH_LAYOUT_STEREO_DOWNMIX:
321 return CHANNEL_LAYOUT_STEREO_DOWNMIX; 321 return CHANNEL_LAYOUT_STEREO_DOWNMIX;
322 default: 322 default:
323 // FFmpeg channel_layout is 0 for .wav and .mp3. We know mono and stereo 323 // FFmpeg channel_layout is 0 for .wav and .mp3. We know mono and stereo
324 // from the number of channels, otherwise report errors. 324 // from the number of channels, otherwise report errors.
325 if (channels == 1) 325 if (channels == 1)
326 return CHANNEL_LAYOUT_MONO; 326 return CHANNEL_LAYOUT_MONO;
327 if (channels == 2) 327 if (channels == 2)
328 return CHANNEL_LAYOUT_STEREO; 328 return CHANNEL_LAYOUT_STEREO;
329 DVLOG(1) << "Unsupported channel layout: " << layout; 329 DVLOG(1) << "Unsupported channel layout: " << layout;
330 } 330 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 // Iterate each stream and destroy each one of them. 369 // Iterate each stream and destroy each one of them.
370 if (format_context->streams) { 370 if (format_context->streams) {
371 int streams = format_context->nb_streams; 371 int streams = format_context->nb_streams;
372 for (int i = 0; i < streams; ++i) { 372 for (int i = 0; i < streams; ++i) {
373 AVStream* stream = format_context->streams[i]; 373 AVStream* stream = format_context->streams[i];
374 374
375 // The conditions for calling avcodec_close(): 375 // The conditions for calling avcodec_close():
376 // 1. AVStream is alive. 376 // 1. AVStream is alive.
377 // 2. AVCodecContext in AVStream is alive. 377 // 2. AVCodecContext in AVStream is alive.
378 // 3. AVCodec in AVCodecContext is alive. 378 // 3. AVCodec in AVCodecContext is alive.
379 // Notice that closing a codec context without prior avcodec_open() will 379 // Notice that closing a codec context without prior avcodec_open2() will
380 // result in a crash in FFmpeg. 380 // result in a crash in FFmpeg.
381 if (stream && stream->codec && stream->codec->codec) { 381 if (stream && stream->codec && stream->codec->codec) {
382 stream->discard = AVDISCARD_ALL; 382 stream->discard = AVDISCARD_ALL;
383 avcodec_close(stream->codec); 383 avcodec_close(stream->codec);
384 } 384 }
385 } 385 }
386 } 386 }
387 387
388 // Then finally cleanup the format context. 388 // Then finally cleanup the format context.
389 av_close_input_file(format_context); 389 avformat_close_input(&format_context);
390 } 390 }
391 391
392 } // namespace media 392 } // namespace media
OLDNEW
« no previous file with comments | « media/ffmpeg/ffmpeg_common.h ('k') | media/ffmpeg/ffmpeg_regression_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698