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

Unified Diff: services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc

Issue 2077413003: Motown: Various fixes related to video playback support (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Comments and name changes for clarity. Created 4 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 side-by-side diff with in-line comments
Download patch
Index: services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc
diff --git a/services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc b/services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc
index a269895865a079eb3aec563a6f658385613109da..155e2a8e9e88550117a371d9261260468de38e7a 100644
--- a/services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc
+++ b/services/media/framework_ffmpeg/ffmpeg_audio_decoder.cc
@@ -77,12 +77,6 @@ PacketPtr FfmpegAudioDecoder::CreateOutputPacket(const AVFrame& av_frame,
next_pts_ = pts;
}
- uint64_t payload_size;
- void* payload_buffer;
-
- AvBufferContext* av_buffer_context =
- reinterpret_cast<AvBufferContext*>(av_buffer_get_opaque(av_frame.buf[0]));
-
if (lpcm_util_) {
// We need to interleave. The non-interleaved frames are in a buffer that
// was allocated from the default allocator. That buffer will get released
@@ -90,24 +84,22 @@ PacketPtr FfmpegAudioDecoder::CreateOutputPacket(const AVFrame& av_frame,
// interleaved frames, which we get from the provided allocator.
DCHECK(stream_type_);
DCHECK(stream_type_->audio());
- payload_size = stream_type_->audio()->min_buffer_size(av_frame.nb_samples);
- payload_buffer = allocator->AllocatePayloadBuffer(payload_size);
+ uint64_t payload_size =
+ stream_type_->audio()->min_buffer_size(av_frame.nb_samples);
+ void* payload_buffer = allocator->AllocatePayloadBuffer(payload_size);
- lpcm_util_->Interleave(av_buffer_context->buffer(),
- av_buffer_context->size(), payload_buffer,
- av_frame.nb_samples);
+ lpcm_util_->Interleave(av_frame.buf[0]->data, av_frame.buf[0]->size,
+ payload_buffer, av_frame.nb_samples);
+
+ return Packet::Create(
+ pts,
+ false, // The base class is responsible for end-of-stream.
+ payload_size, payload_buffer, allocator);
} else {
// We don't need to interleave. The interleaved frames are in a buffer that
- // was allocated from the correct allocator. We take ownership of the buffer
- // by calling Release here so that ReleaseBufferForAvFrame won't release it.
- payload_size = av_buffer_context->size();
- payload_buffer = av_buffer_context->Release();
+ // was allocated from the correct allocator.
+ return DecoderPacket::Create(pts, av_buffer_ref(av_frame.buf[0]));
}
-
- return Packet::Create(
- pts,
- false, // The base class is responsible for end-of-stream.
- payload_size, payload_buffer, allocator);
}
PacketPtr FfmpegAudioDecoder::CreateOutputEndOfStreamPacket() {
@@ -137,9 +129,8 @@ int FfmpegAudioDecoder::AllocateBufferForAvFrame(
return buffer_size;
}
- AvBufferContext* av_buffer_context =
- new AvBufferContext(buffer_size, self->allocator_);
- uint8_t* buffer = av_buffer_context->buffer();
+ uint8_t* buffer = static_cast<uint8_t*>(
+ self->allocator_->AllocatePayloadBuffer(buffer_size));
if (!av_sample_fmt_is_planar(av_sample_format)) {
// Samples are interleaved. There's just one buffer.
@@ -181,23 +172,19 @@ int FfmpegAudioDecoder::AllocateBufferForAvFrame(
}
}
- av_frame->buf[0] = av_buffer_create(
- buffer, buffer_size, ReleaseBufferForAvFrame, av_buffer_context,
- 0); // flags
+ av_frame->buf[0] = av_buffer_create(buffer, buffer_size,
+ ReleaseBufferForAvFrame, self->allocator_,
+ 0); // flags
return 0;
}
void FfmpegAudioDecoder::ReleaseBufferForAvFrame(void* opaque,
uint8_t* buffer) {
- AvBufferContext* av_buffer_context =
- reinterpret_cast<AvBufferContext*>(opaque);
- DCHECK(av_buffer_context);
- // Either this buffer has already been released to someone else's ownership,
- // or it's the same as the buffer parameter.
- DCHECK(av_buffer_context->buffer() == nullptr ||
- av_buffer_context->buffer() == buffer);
- delete av_buffer_context;
+ DCHECK(opaque);
+ DCHECK(buffer);
+ PayloadAllocator* allocator = reinterpret_cast<PayloadAllocator*>(opaque);
+ allocator->ReleasePayloadBuffer(buffer);
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698