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

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

Issue 2723083004: Remove a scoped_refptr<>::swap overload (Closed)
Patch Set: fix Created 3 years, 9 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
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/filters/ffmpeg_audio_decoder.h" 5 #include "media/filters/ffmpeg_audio_decoder.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 27 matching lines...) Expand all
38 // When use_system_ffmpeg==1, libav's AVFrame doesn't have channels field. 38 // When use_system_ffmpeg==1, libav's AVFrame doesn't have channels field.
39 return av_get_channel_layout_nb_channels(frame->channel_layout); 39 return av_get_channel_layout_nb_channels(frame->channel_layout);
40 #else 40 #else
41 return frame->channels; 41 return frame->channels;
42 #endif 42 #endif
43 } 43 }
44 44
45 // Called by FFmpeg's allocation routine to free a buffer. |opaque| is the 45 // Called by FFmpeg's allocation routine to free a buffer. |opaque| is the
46 // AudioBuffer allocated, so unref it. 46 // AudioBuffer allocated, so unref it.
47 static void ReleaseAudioBufferImpl(void* opaque, uint8_t* data) { 47 static void ReleaseAudioBufferImpl(void* opaque, uint8_t* data) {
48 scoped_refptr<AudioBuffer> buffer; 48 if (opaque)
49 buffer.swap(reinterpret_cast<AudioBuffer**>(&opaque)); 49 static_cast<AudioBuffer*>(opaque)->Release();
50 } 50 }
51 51
52 // Called by FFmpeg's allocation routine to allocate a buffer. Uses 52 // Called by FFmpeg's allocation routine to allocate a buffer. Uses
53 // AVCodecContext.opaque to get the object reference in order to call 53 // AVCodecContext.opaque to get the object reference in order to call
54 // GetAudioBuffer() to do the actual allocation. 54 // GetAudioBuffer() to do the actual allocation.
55 static int GetAudioBuffer(struct AVCodecContext* s, AVFrame* frame, int flags) { 55 static int GetAudioBuffer(struct AVCodecContext* s, AVFrame* frame, int flags) {
56 DCHECK(s->codec->capabilities & CODEC_CAP_DR1); 56 DCHECK(s->codec->capabilities & CODEC_CAP_DR1);
57 DCHECK_EQ(s->codec_type, AVMEDIA_TYPE_AUDIO); 57 DCHECK_EQ(s->codec_type, AVMEDIA_TYPE_AUDIO);
58 58
59 // Since this routine is called by FFmpeg when a buffer is required for audio 59 // Since this routine is called by FFmpeg when a buffer is required for audio
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 av_malloc(number_of_planes * sizeof(*frame->extended_data))); 117 av_malloc(number_of_planes * sizeof(*frame->extended_data)));
118 int i = 0; 118 int i = 0;
119 for (; i < AV_NUM_DATA_POINTERS; ++i) 119 for (; i < AV_NUM_DATA_POINTERS; ++i)
120 frame->extended_data[i] = frame->data[i] = buffer->channel_data()[i]; 120 frame->extended_data[i] = frame->data[i] = buffer->channel_data()[i];
121 for (; i < number_of_planes; ++i) 121 for (; i < number_of_planes; ++i)
122 frame->extended_data[i] = buffer->channel_data()[i]; 122 frame->extended_data[i] = buffer->channel_data()[i];
123 } 123 }
124 124
125 // Now create an AVBufferRef for the data just allocated. It will own the 125 // Now create an AVBufferRef for the data just allocated. It will own the
126 // reference to the AudioBuffer object. 126 // reference to the AudioBuffer object.
127 void* opaque = NULL; 127 AudioBuffer* opaque = buffer.get();
128 buffer.swap(reinterpret_cast<AudioBuffer**>(&opaque)); 128 opaque->AddRef();
xhwang 2017/03/03 18:36:08 This is hard to read (not saying it's worse than b
dcheng 2017/03/03 18:45:19 Eh... this seems Good Enough (tm) for the use case
129 frame->buf[0] = av_buffer_create( 129 frame->buf[0] = av_buffer_create(
130 frame->data[0], buffer_size_in_bytes, ReleaseAudioBufferImpl, opaque, 0); 130 frame->data[0], buffer_size_in_bytes, ReleaseAudioBufferImpl, opaque, 0);
131 return 0; 131 return 0;
132 } 132 }
133 133
134 FFmpegAudioDecoder::FFmpegAudioDecoder( 134 FFmpegAudioDecoder::FFmpegAudioDecoder(
135 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 135 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
136 const scoped_refptr<MediaLog>& media_log) 136 const scoped_refptr<MediaLog>& media_log)
137 : task_runner_(task_runner), 137 : task_runner_(task_runner),
138 state_(kUninitialized), 138 state_(kUninitialized),
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 // Opus codec delay is handled by ffmpeg. 435 // Opus codec delay is handled by ffmpeg.
436 const int codec_delay = 436 const int codec_delay =
437 config_.codec() == kCodecOpus ? 0 : config_.codec_delay(); 437 config_.codec() == kCodecOpus ? 0 : config_.codec_delay();
438 discard_helper_.reset( 438 discard_helper_.reset(
439 new AudioDiscardHelper(config_.samples_per_second(), codec_delay, 439 new AudioDiscardHelper(config_.samples_per_second(), codec_delay,
440 config_.codec() == kCodecVorbis)); 440 config_.codec() == kCodecVorbis));
441 discard_helper_->Reset(codec_delay); 441 discard_helper_->Reset(codec_delay);
442 } 442 }
443 443
444 } // namespace media 444 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698