| Index: media/base/video_frame.cc
|
| diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc
|
| index e0367c83a649f8ec4c34a7d822ee2a97e6d9b119..baa012c7aab6d93224f3983b994e9501f2fac843 100644
|
| --- a/media/base/video_frame.cc
|
| +++ b/media/base/video_frame.cc
|
| @@ -548,6 +548,23 @@ size_t VideoFrame::AllocationSize(Format format, const gfx::Size& coded_size) {
|
| }
|
|
|
| // static
|
| +size_t VideoFrame::AlignedAllocationSize(
|
| + const scoped_refptr<VideoFrame>& frame) {
|
| + DCHECK(IsYuvPlanar(frame->format()));
|
| + DCHECK_EQ(frame->storage_type(), STORAGE_OWNED_MEMORY);
|
| +
|
| + // This method is expected to called only after CreateFrame(). Therefore, the
|
| + // buffer size needs to the same as the allocated size of AllocateYUV().
|
| + size_t data_size = 0;
|
| + for (size_t plane = 0; plane < NumPlanes(frame->format()); ++plane) {
|
| + const size_t height = RoundUp(frame->rows(plane), kFrameSizeAlignment * 2);
|
| + data_size += height * frame->stride(plane);
|
| + }
|
| + data_size += frame->stride(kUPlane) + kFrameSizePadding;
|
| + return data_size;
|
| +}
|
| +
|
| +// static
|
| gfx::Size VideoFrame::PlaneSize(Format format,
|
| size_t plane,
|
| const gfx::Size& coded_size) {
|
| @@ -900,16 +917,16 @@ void VideoFrame::AllocateYUV() {
|
| DCHECK(IsValidPlane(kUPlane, format_));
|
| data_size += strides_[kUPlane] + kFrameSizePadding;
|
|
|
| - // FFmpeg expects the initialize allocation to be zero-initialized. Failure
|
| - // to do so can lead to unitialized value usage. See http://crbug.com/390941
|
| uint8* data = reinterpret_cast<uint8*>(
|
| base::AlignedAlloc(data_size, kFrameAddressAlignment));
|
| - memset(data, 0, data_size);
|
| -
|
| for (size_t plane = 0; plane < NumPlanes(format_); ++plane)
|
| data_[plane] = data + offset[plane];
|
|
|
| AddDestructionObserver(base::Bind(&base::AlignedFree, data));
|
| +
|
| + // Make sure that AlignedAllocationSize() returns the same size as allocated
|
| + // here.
|
| + DCHECK_EQ(data_size, VideoFrame::AlignedAllocationSize(this));
|
| }
|
|
|
| } // namespace media
|
|
|