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

Unified Diff: media/base/decoder_buffer.cc

Issue 760523008: Switch from a DataPipe per DecoderBuffer to a single one. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments. Created 6 years 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
« no previous file with comments | « media/base/decoder_buffer.h ('k') | media/mojo/interfaces/demuxer_stream.mojom » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/decoder_buffer.cc
diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc
index 0711268740ec7b12fe0cf9fe1a3d4577828f7340..bc1ee9068f966078e6cffe8a70f9f87703ea8d18 100644
--- a/media/base/decoder_buffer.cc
+++ b/media/base/decoder_buffer.cc
@@ -10,6 +10,15 @@
namespace media {
+// Allocates a block of memory which is padded for use with the SIMD
+// optimizations used by FFmpeg.
+static uint8* AllocateFFmpegSafeBlock(int size) {
+ uint8* const block = reinterpret_cast<uint8*>(base::AlignedAlloc(
+ size + DecoderBuffer::kPaddingSize, DecoderBuffer::kAlignmentSize));
+ memset(block + size, 0, DecoderBuffer::kPaddingSize);
+ return block;
+}
+
DecoderBuffer::DecoderBuffer(int size)
: size_(size),
side_data_size_(0),
@@ -46,14 +55,9 @@ DecoderBuffer::~DecoderBuffer() {}
void DecoderBuffer::Initialize() {
CHECK_GE(size_, 0);
- data_.reset(reinterpret_cast<uint8*>(
- base::AlignedAlloc(size_ + kPaddingSize, kAlignmentSize)));
- memset(data_.get() + size_, 0, kPaddingSize);
- if (side_data_size_ > 0) {
- side_data_.reset(reinterpret_cast<uint8*>(
- base::AlignedAlloc(side_data_size_ + kPaddingSize, kAlignmentSize)));
- memset(side_data_.get() + side_data_size_, 0, kPaddingSize);
- }
+ data_.reset(AllocateFFmpegSafeBlock(size_));
+ if (side_data_size_ > 0)
+ side_data_.reset(AllocateFFmpegSafeBlock(side_data_size_));
splice_timestamp_ = kNoTimestamp();
}
@@ -104,4 +108,16 @@ void DecoderBuffer::set_timestamp(base::TimeDelta timestamp) {
timestamp_ = timestamp;
}
+void DecoderBuffer::CopySideDataFrom(const uint8* side_data,
+ int side_data_size) {
+ if (side_data_size > 0) {
+ side_data_size_ = side_data_size;
+ side_data_.reset(AllocateFFmpegSafeBlock(side_data_size_));
+ memcpy(side_data_.get(), side_data, side_data_size_);
+ } else {
+ side_data_.reset();
+ side_data_size_ = 0;
+ }
+}
+
} // namespace media
« no previous file with comments | « media/base/decoder_buffer.h ('k') | media/mojo/interfaces/demuxer_stream.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698