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

Unified Diff: media/base/video_frame.cc

Issue 1313413010: Add VideoFrame::CreateZeroInitializedFrame (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « media/base/video_frame.h ('k') | media/base/video_frame_pool.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/video_frame.cc
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
index 2009664099cab71b3369acd92068d7e3c8f04cff..b906ee22a64097d0cca59fe2ff230d6b1b60a0e9 100644
--- a/media/base/video_frame.cc
+++ b/media/base/video_frame.cc
@@ -195,35 +195,19 @@ scoped_refptr<VideoFrame> VideoFrame::CreateFrame(VideoPixelFormat format,
const gfx::Rect& visible_rect,
const gfx::Size& natural_size,
base::TimeDelta timestamp) {
- if (!IsYuvPlanar(format)) {
- NOTIMPLEMENTED();
- return nullptr;
- }
-
- // Since we're creating a new YUV frame (and allocating memory for it
- // ourselves), we can pad the requested |coded_size| if necessary if the
- // request does not line up on sample boundaries. See discussion at
- // http://crrev.com/1240833003
- const gfx::Size alignment = CommonAlignment(format);
- const gfx::Size new_coded_size =
- gfx::Size(RoundUp(coded_size.width(), alignment.width()),
- RoundUp(coded_size.height(), alignment.height()));
- DCHECK((new_coded_size.width() % alignment.width() == 0) &&
- (new_coded_size.height() % alignment.height() == 0));
-
- const StorageType storage = STORAGE_OWNED_MEMORY;
- if (!IsValidConfig(format, storage, new_coded_size, visible_rect,
- natural_size)) {
- DLOG(ERROR) << __FUNCTION__ << " Invalid config."
- << ConfigToString(format, storage, coded_size, visible_rect,
- natural_size);
- return nullptr;
- }
+ return CreateFrameInternal(format, coded_size, visible_rect, natural_size,
+ timestamp, false);
+}
- scoped_refptr<VideoFrame> frame(new VideoFrame(
- format, storage, new_coded_size, visible_rect, natural_size, timestamp));
- frame->AllocateYUV();
- return frame;
+// static
+scoped_refptr<VideoFrame> VideoFrame::CreateZeroInitializedFrame(
+ VideoPixelFormat format,
+ const gfx::Size& coded_size,
+ const gfx::Rect& visible_rect,
+ const gfx::Size& natural_size,
+ base::TimeDelta timestamp) {
+ return CreateFrameInternal(format, coded_size, visible_rect, natural_size,
+ timestamp, true);
}
// static
@@ -897,7 +881,46 @@ VideoFrame::~VideoFrame() {
base::ResetAndReturn(&callback).Run();
}
-void VideoFrame::AllocateYUV() {
+// static
+scoped_refptr<VideoFrame> VideoFrame::CreateFrameInternal(
+ VideoPixelFormat format,
+ const gfx::Size& coded_size,
+ const gfx::Rect& visible_rect,
+ const gfx::Size& natural_size,
+ base::TimeDelta timestamp,
+ bool zero_initialize_memory) {
+ if (!IsYuvPlanar(format)) {
+ NOTIMPLEMENTED();
+ return nullptr;
+ }
+
+ // Since we're creating a new YUV frame (and allocating memory for it
+ // ourselves), we can pad the requested |coded_size| if necessary if the
+ // request does not line up on sample boundaries. See discussion at
+ // http://crrev.com/1240833003
+ const gfx::Size alignment = CommonAlignment(format);
+ const gfx::Size new_coded_size =
+ gfx::Size(RoundUp(coded_size.width(), alignment.width()),
+ RoundUp(coded_size.height(), alignment.height()));
+ DCHECK((new_coded_size.width() % alignment.width() == 0) &&
+ (new_coded_size.height() % alignment.height() == 0));
+
+ const StorageType storage = STORAGE_OWNED_MEMORY;
+ if (!IsValidConfig(format, storage, new_coded_size, visible_rect,
+ natural_size)) {
+ DLOG(ERROR) << __FUNCTION__ << " Invalid config."
+ << ConfigToString(format, storage, coded_size, visible_rect,
+ natural_size);
+ return nullptr;
+ }
+
+ scoped_refptr<VideoFrame> frame(new VideoFrame(
+ format, storage, new_coded_size, visible_rect, natural_size, timestamp));
+ frame->AllocateYUV(zero_initialize_memory);
+ return frame;
+}
+
+void VideoFrame::AllocateYUV(bool zero_initialize_memory) {
DCHECK_EQ(storage_type_, STORAGE_OWNED_MEMORY);
static_assert(0 == kYPlane, "y plane data must be index 0");
@@ -923,6 +946,8 @@ void VideoFrame::AllocateYUV() {
uint8* data = reinterpret_cast<uint8*>(
base::AlignedAlloc(data_size, kFrameAddressAlignment));
+ if (zero_initialize_memory)
+ memset(data, 0, data_size);
for (size_t plane = 0; plane < NumPlanes(format_); ++plane)
data_[plane] = data + offset[plane];
« no previous file with comments | « media/base/video_frame.h ('k') | media/base/video_frame_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698