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

Side by Side Diff: services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc

Issue 1902183002: Motown: Change media type (stream type) representation (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Changes per review feedback. Created 4 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/logging.h" 5 #include "base/logging.h"
6 #include "services/media/framework_ffmpeg/ffmpeg_audio_decoder.h" 6 #include "services/media/framework_ffmpeg/ffmpeg_audio_decoder.h"
7 7
8 namespace mojo { 8 namespace mojo {
9 namespace media { 9 namespace media {
10 10
11 FfmpegAudioDecoder::FfmpegAudioDecoder(AvCodecContextPtr av_codec_context) 11 FfmpegAudioDecoder::FfmpegAudioDecoder(AvCodecContextPtr av_codec_context)
12 : FfmpegDecoderBase(std::move(av_codec_context)) { 12 : FfmpegDecoderBase(std::move(av_codec_context)) {
13 DCHECK(context()); 13 DCHECK(context());
14 DCHECK(context()->channels > 0); 14 DCHECK(context()->channels > 0);
15 15
16 context()->opaque = this; 16 context()->opaque = this;
17 context()->get_buffer2 = AllocateBufferForAvFrame; 17 context()->get_buffer2 = AllocateBufferForAvFrame;
18 context()->refcounted_frames = 1; 18 context()->refcounted_frames = 1;
19 19
20 if (av_sample_fmt_is_planar(context()->sample_fmt)) { 20 if (av_sample_fmt_is_planar(context()->sample_fmt)) {
21 // Prepare for interleaving. 21 // Prepare for interleaving.
22 stream_type_ = output_stream_type(); 22 stream_type_ = output_stream_type();
23 lpcm_util_ = LpcmUtil::Create(*stream_type_->lpcm()); 23 lpcm_util_ = LpcmUtil::Create(*stream_type_->audio());
24 } 24 }
25 } 25 }
26 26
27 FfmpegAudioDecoder::~FfmpegAudioDecoder() {} 27 FfmpegAudioDecoder::~FfmpegAudioDecoder() {}
28 28
29 void FfmpegAudioDecoder::Flush() { 29 void FfmpegAudioDecoder::Flush() {
30 FfmpegDecoderBase::Flush(); 30 FfmpegDecoderBase::Flush();
31 next_pts_ = Packet::kUnknownPts; 31 next_pts_ = Packet::kUnknownPts;
32 } 32 }
33 33
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 80
81 AvBufferContext* av_buffer_context = 81 AvBufferContext* av_buffer_context =
82 reinterpret_cast<AvBufferContext*>(av_buffer_get_opaque(av_frame.buf[0])); 82 reinterpret_cast<AvBufferContext*>(av_buffer_get_opaque(av_frame.buf[0]));
83 83
84 if (lpcm_util_) { 84 if (lpcm_util_) {
85 // We need to interleave. The non-interleaved frames are in a buffer that 85 // We need to interleave. The non-interleaved frames are in a buffer that
86 // was allocated from the default allocator. That buffer will get released 86 // was allocated from the default allocator. That buffer will get released
87 // later in ReleaseBufferForAvFrame. We need a new buffer for the 87 // later in ReleaseBufferForAvFrame. We need a new buffer for the
88 // interleaved frames, which we get from the provided allocator. 88 // interleaved frames, which we get from the provided allocator.
89 DCHECK(stream_type_); 89 DCHECK(stream_type_);
90 DCHECK(stream_type_->lpcm()); 90 DCHECK(stream_type_->audio());
91 payload_size = stream_type_->lpcm()->min_buffer_size(av_frame.nb_samples); 91 payload_size = stream_type_->audio()->min_buffer_size(av_frame.nb_samples);
92 payload_buffer = allocator->AllocatePayloadBuffer(payload_size); 92 payload_buffer = allocator->AllocatePayloadBuffer(payload_size);
93 93
94 lpcm_util_->Interleave(av_buffer_context->buffer(), 94 lpcm_util_->Interleave(av_buffer_context->buffer(),
95 av_buffer_context->size(), payload_buffer, 95 av_buffer_context->size(), payload_buffer,
96 av_frame.nb_samples); 96 av_frame.nb_samples);
97 } else { 97 } else {
98 // We don't need to interleave. The interleaved frames are in a buffer that 98 // We don't need to interleave. The interleaved frames are in a buffer that
99 // was allocated from the correct allocator. We take ownership of the buffer 99 // was allocated from the correct allocator. We take ownership of the buffer
100 // by calling Release here so that ReleaseBufferForAvFrame won't release it. 100 // by calling Release here so that ReleaseBufferForAvFrame won't release it.
101 payload_size = av_buffer_context->size(); 101 payload_size = av_buffer_context->size();
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 DCHECK(av_buffer_context); 193 DCHECK(av_buffer_context);
194 // Either this buffer has already been released to someone else's ownership, 194 // Either this buffer has already been released to someone else's ownership,
195 // or it's the same as the buffer parameter. 195 // or it's the same as the buffer parameter.
196 DCHECK(av_buffer_context->buffer() == nullptr || 196 DCHECK(av_buffer_context->buffer() == nullptr ||
197 av_buffer_context->buffer() == buffer); 197 av_buffer_context->buffer() == buffer);
198 delete av_buffer_context; 198 delete av_buffer_context;
199 } 199 }
200 200
201 } // namespace media 201 } // namespace media
202 } // namespace mojo 202 } // namespace mojo
OLDNEW
« no previous file with comments | « services/media/framework_ffmpeg/av_codec_context.cc ('k') | services/media/framework_mojo/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698