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

Side by Side Diff: media/base/video_frame.cc

Issue 1534273002: Switch to standard integer types in media/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/base/video_frame.h" 5 #include "media/base/video_frame.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <climits> 8 #include <climits>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 return new VideoFrame(format, storage, coded_size, visible_rect, natural_size, 272 return new VideoFrame(format, storage, coded_size, visible_rect, natural_size,
273 mailbox_holders, mailbox_holder_release_cb, timestamp); 273 mailbox_holders, mailbox_holder_release_cb, timestamp);
274 } 274 }
275 275
276 // static 276 // static
277 scoped_refptr<VideoFrame> VideoFrame::WrapExternalData( 277 scoped_refptr<VideoFrame> VideoFrame::WrapExternalData(
278 VideoPixelFormat format, 278 VideoPixelFormat format,
279 const gfx::Size& coded_size, 279 const gfx::Size& coded_size,
280 const gfx::Rect& visible_rect, 280 const gfx::Rect& visible_rect,
281 const gfx::Size& natural_size, 281 const gfx::Size& natural_size,
282 uint8* data, 282 uint8_t* data,
283 size_t data_size, 283 size_t data_size,
284 base::TimeDelta timestamp) { 284 base::TimeDelta timestamp) {
285 return WrapExternalStorage(format, STORAGE_UNOWNED_MEMORY, coded_size, 285 return WrapExternalStorage(format, STORAGE_UNOWNED_MEMORY, coded_size,
286 visible_rect, natural_size, data, data_size, 286 visible_rect, natural_size, data, data_size,
287 timestamp, base::SharedMemory::NULLHandle(), 0); 287 timestamp, base::SharedMemory::NULLHandle(), 0);
288 } 288 }
289 289
290 // static 290 // static
291 scoped_refptr<VideoFrame> VideoFrame::WrapExternalSharedMemory( 291 scoped_refptr<VideoFrame> VideoFrame::WrapExternalSharedMemory(
292 VideoPixelFormat format, 292 VideoPixelFormat format,
293 const gfx::Size& coded_size, 293 const gfx::Size& coded_size,
294 const gfx::Rect& visible_rect, 294 const gfx::Rect& visible_rect,
295 const gfx::Size& natural_size, 295 const gfx::Size& natural_size,
296 uint8* data, 296 uint8_t* data,
297 size_t data_size, 297 size_t data_size,
298 base::SharedMemoryHandle handle, 298 base::SharedMemoryHandle handle,
299 size_t data_offset, 299 size_t data_offset,
300 base::TimeDelta timestamp) { 300 base::TimeDelta timestamp) {
301 return WrapExternalStorage(format, STORAGE_SHMEM, coded_size, visible_rect, 301 return WrapExternalStorage(format, STORAGE_SHMEM, coded_size, visible_rect,
302 natural_size, data, data_size, timestamp, handle, 302 natural_size, data, data_size, timestamp, handle,
303 data_offset); 303 data_offset);
304 } 304 }
305 305
306 // static 306 // static
307 scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvData( 307 scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvData(
308 VideoPixelFormat format, 308 VideoPixelFormat format,
309 const gfx::Size& coded_size, 309 const gfx::Size& coded_size,
310 const gfx::Rect& visible_rect, 310 const gfx::Rect& visible_rect,
311 const gfx::Size& natural_size, 311 const gfx::Size& natural_size,
312 int32 y_stride, 312 int32_t y_stride,
313 int32 u_stride, 313 int32_t u_stride,
314 int32 v_stride, 314 int32_t v_stride,
315 uint8* y_data, 315 uint8_t* y_data,
316 uint8* u_data, 316 uint8_t* u_data,
317 uint8* v_data, 317 uint8_t* v_data,
318 base::TimeDelta timestamp) { 318 base::TimeDelta timestamp) {
319 const StorageType storage = STORAGE_UNOWNED_MEMORY; 319 const StorageType storage = STORAGE_UNOWNED_MEMORY;
320 if (!IsValidConfig(format, storage, coded_size, visible_rect, natural_size)) { 320 if (!IsValidConfig(format, storage, coded_size, visible_rect, natural_size)) {
321 DLOG(ERROR) << __FUNCTION__ << " Invalid config." 321 DLOG(ERROR) << __FUNCTION__ << " Invalid config."
322 << ConfigToString(format, storage, coded_size, visible_rect, 322 << ConfigToString(format, storage, coded_size, visible_rect,
323 natural_size); 323 natural_size);
324 return nullptr; 324 return nullptr;
325 } 325 }
326 326
327 scoped_refptr<VideoFrame> frame(new VideoFrame( 327 scoped_refptr<VideoFrame> frame(new VideoFrame(
328 format, storage, coded_size, visible_rect, natural_size, timestamp)); 328 format, storage, coded_size, visible_rect, natural_size, timestamp));
329 frame->strides_[kYPlane] = y_stride; 329 frame->strides_[kYPlane] = y_stride;
330 frame->strides_[kUPlane] = u_stride; 330 frame->strides_[kUPlane] = u_stride;
331 frame->strides_[kVPlane] = v_stride; 331 frame->strides_[kVPlane] = v_stride;
332 frame->data_[kYPlane] = y_data; 332 frame->data_[kYPlane] = y_data;
333 frame->data_[kUPlane] = u_data; 333 frame->data_[kUPlane] = u_data;
334 frame->data_[kVPlane] = v_data; 334 frame->data_[kVPlane] = v_data;
335 return frame; 335 return frame;
336 } 336 }
337 337
338 // static 338 // static
339 scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvGpuMemoryBuffers( 339 scoped_refptr<VideoFrame> VideoFrame::WrapExternalYuvGpuMemoryBuffers(
340 VideoPixelFormat format, 340 VideoPixelFormat format,
341 const gfx::Size& coded_size, 341 const gfx::Size& coded_size,
342 const gfx::Rect& visible_rect, 342 const gfx::Rect& visible_rect,
343 const gfx::Size& natural_size, 343 const gfx::Size& natural_size,
344 int32 y_stride, 344 int32_t y_stride,
345 int32 u_stride, 345 int32_t u_stride,
346 int32 v_stride, 346 int32_t v_stride,
347 uint8* y_data, 347 uint8_t* y_data,
348 uint8* u_data, 348 uint8_t* u_data,
349 uint8* v_data, 349 uint8_t* v_data,
350 const gfx::GpuMemoryBufferHandle& y_handle, 350 const gfx::GpuMemoryBufferHandle& y_handle,
351 const gfx::GpuMemoryBufferHandle& u_handle, 351 const gfx::GpuMemoryBufferHandle& u_handle,
352 const gfx::GpuMemoryBufferHandle& v_handle, 352 const gfx::GpuMemoryBufferHandle& v_handle,
353 base::TimeDelta timestamp) { 353 base::TimeDelta timestamp) {
354 const StorageType storage = STORAGE_GPU_MEMORY_BUFFERS; 354 const StorageType storage = STORAGE_GPU_MEMORY_BUFFERS;
355 if (!IsValidConfig(format, storage, coded_size, visible_rect, natural_size)) { 355 if (!IsValidConfig(format, storage, coded_size, visible_rect, natural_size)) {
356 DLOG(ERROR) << __FUNCTION__ << " Invalid config." 356 DLOG(ERROR) << __FUNCTION__ << " Invalid config."
357 << ConfigToString(format, storage, coded_size, visible_rect, 357 << ConfigToString(format, storage, coded_size, visible_rect,
358 natural_size); 358 natural_size);
359 return nullptr; 359 return nullptr;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 scoped_refptr<VideoFrame> frame = 503 scoped_refptr<VideoFrame> frame =
504 new VideoFrame(PIXEL_FORMAT_UNKNOWN, STORAGE_UNKNOWN, gfx::Size(), 504 new VideoFrame(PIXEL_FORMAT_UNKNOWN, STORAGE_UNKNOWN, gfx::Size(),
505 gfx::Rect(), gfx::Size(), kNoTimestamp()); 505 gfx::Rect(), gfx::Size(), kNoTimestamp());
506 frame->metadata()->SetBoolean(VideoFrameMetadata::END_OF_STREAM, true); 506 frame->metadata()->SetBoolean(VideoFrameMetadata::END_OF_STREAM, true);
507 return frame; 507 return frame;
508 } 508 }
509 509
510 // static 510 // static
511 scoped_refptr<VideoFrame> VideoFrame::CreateColorFrame( 511 scoped_refptr<VideoFrame> VideoFrame::CreateColorFrame(
512 const gfx::Size& size, 512 const gfx::Size& size,
513 uint8 y, uint8 u, uint8 v, 513 uint8_t y,
514 uint8_t u,
515 uint8_t v,
514 base::TimeDelta timestamp) { 516 base::TimeDelta timestamp) {
515 scoped_refptr<VideoFrame> frame = 517 scoped_refptr<VideoFrame> frame =
516 CreateFrame(PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, timestamp); 518 CreateFrame(PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, timestamp);
517 FillYUV(frame.get(), y, u, v); 519 FillYUV(frame.get(), y, u, v);
518 return frame; 520 return frame;
519 } 521 }
520 522
521 // static 523 // static
522 scoped_refptr<VideoFrame> VideoFrame::CreateBlackFrame(const gfx::Size& size) { 524 scoped_refptr<VideoFrame> VideoFrame::CreateBlackFrame(const gfx::Size& size) {
523 const uint8 kBlackY = 0x00; 525 const uint8_t kBlackY = 0x00;
524 const uint8 kBlackUV = 0x80; 526 const uint8_t kBlackUV = 0x80;
525 const base::TimeDelta kZero; 527 const base::TimeDelta kZero;
526 return CreateColorFrame(size, kBlackY, kBlackUV, kBlackUV, kZero); 528 return CreateColorFrame(size, kBlackY, kBlackUV, kBlackUV, kZero);
527 } 529 }
528 530
529 // static 531 // static
530 scoped_refptr<VideoFrame> VideoFrame::CreateTransparentFrame( 532 scoped_refptr<VideoFrame> VideoFrame::CreateTransparentFrame(
531 const gfx::Size& size) { 533 const gfx::Size& size) {
532 const uint8 kBlackY = 0x00; 534 const uint8_t kBlackY = 0x00;
533 const uint8 kBlackUV = 0x00; 535 const uint8_t kBlackUV = 0x00;
534 const uint8 kTransparentA = 0x00; 536 const uint8_t kTransparentA = 0x00;
535 const base::TimeDelta kZero; 537 const base::TimeDelta kZero;
536 scoped_refptr<VideoFrame> frame = 538 scoped_refptr<VideoFrame> frame =
537 CreateFrame(PIXEL_FORMAT_YV12A, size, gfx::Rect(size), size, kZero); 539 CreateFrame(PIXEL_FORMAT_YV12A, size, gfx::Rect(size), size, kZero);
538 FillYUVA(frame.get(), kBlackY, kBlackUV, kBlackUV, kTransparentA); 540 FillYUVA(frame.get(), kBlackY, kBlackUV, kBlackUV, kTransparentA);
539 return frame; 541 return frame;
540 } 542 }
541 543
542 #if defined(VIDEO_HOLE) 544 #if defined(VIDEO_HOLE)
543 // This block and other blocks wrapped around #if defined(VIDEO_HOLE) is not 545 // This block and other blocks wrapped around #if defined(VIDEO_HOLE) is not
544 // maintained by the general compositor team. Please contact 546 // maintained by the general compositor team. Please contact
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 } 690 }
689 691
690 int VideoFrame::row_bytes(size_t plane) const { 692 int VideoFrame::row_bytes(size_t plane) const {
691 return RowBytes(plane, format_, coded_size_.width()); 693 return RowBytes(plane, format_, coded_size_.width());
692 } 694 }
693 695
694 int VideoFrame::rows(size_t plane) const { 696 int VideoFrame::rows(size_t plane) const {
695 return Rows(plane, format_, coded_size_.height()); 697 return Rows(plane, format_, coded_size_.height());
696 } 698 }
697 699
698 const uint8* VideoFrame::data(size_t plane) const { 700 const uint8_t* VideoFrame::data(size_t plane) const {
699 DCHECK(IsValidPlane(plane, format_)); 701 DCHECK(IsValidPlane(plane, format_));
700 DCHECK(IsMappable()); 702 DCHECK(IsMappable());
701 return data_[plane]; 703 return data_[plane];
702 } 704 }
703 705
704 uint8* VideoFrame::data(size_t plane) { 706 uint8_t* VideoFrame::data(size_t plane) {
705 DCHECK(IsValidPlane(plane, format_)); 707 DCHECK(IsValidPlane(plane, format_));
706 DCHECK(IsMappable()); 708 DCHECK(IsMappable());
707 return data_[plane]; 709 return data_[plane];
708 } 710 }
709 711
710 const uint8* VideoFrame::visible_data(size_t plane) const { 712 const uint8_t* VideoFrame::visible_data(size_t plane) const {
711 DCHECK(IsValidPlane(plane, format_)); 713 DCHECK(IsValidPlane(plane, format_));
712 DCHECK(IsMappable()); 714 DCHECK(IsMappable());
713 715
714 // Calculate an offset that is properly aligned for all planes. 716 // Calculate an offset that is properly aligned for all planes.
715 const gfx::Size alignment = CommonAlignment(format_); 717 const gfx::Size alignment = CommonAlignment(format_);
716 const gfx::Point offset(RoundDown(visible_rect_.x(), alignment.width()), 718 const gfx::Point offset(RoundDown(visible_rect_.x(), alignment.width()),
717 RoundDown(visible_rect_.y(), alignment.height())); 719 RoundDown(visible_rect_.y(), alignment.height()));
718 720
719 const gfx::Size subsample = SampleSize(format_, plane); 721 const gfx::Size subsample = SampleSize(format_, plane);
720 DCHECK(offset.x() % subsample.width() == 0); 722 DCHECK(offset.x() % subsample.width() == 0);
721 DCHECK(offset.y() % subsample.height() == 0); 723 DCHECK(offset.y() % subsample.height() == 0);
722 return data(plane) + 724 return data(plane) +
723 stride(plane) * (offset.y() / subsample.height()) + // Row offset. 725 stride(plane) * (offset.y() / subsample.height()) + // Row offset.
724 BytesPerElement(format_, plane) * // Column offset. 726 BytesPerElement(format_, plane) * // Column offset.
725 (offset.x() / subsample.width()); 727 (offset.x() / subsample.width());
726 } 728 }
727 729
728 uint8* VideoFrame::visible_data(size_t plane) { 730 uint8_t* VideoFrame::visible_data(size_t plane) {
729 return const_cast<uint8*>( 731 return const_cast<uint8_t*>(
730 static_cast<const VideoFrame*>(this)->visible_data(plane)); 732 static_cast<const VideoFrame*>(this)->visible_data(plane));
731 } 733 }
732 734
733 const gpu::MailboxHolder& 735 const gpu::MailboxHolder&
734 VideoFrame::mailbox_holder(size_t texture_index) const { 736 VideoFrame::mailbox_holder(size_t texture_index) const {
735 DCHECK(HasTextures()); 737 DCHECK(HasTextures());
736 DCHECK(IsValidPlane(texture_index, format_)); 738 DCHECK(IsValidPlane(texture_index, format_));
737 return mailbox_holders_[texture_index]; 739 return mailbox_holders_[texture_index];
738 } 740 }
739 741
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 client->GenerateSyncToken(&release_sync_token_); 820 client->GenerateSyncToken(&release_sync_token_);
819 } 821 }
820 822
821 // static 823 // static
822 scoped_refptr<VideoFrame> VideoFrame::WrapExternalStorage( 824 scoped_refptr<VideoFrame> VideoFrame::WrapExternalStorage(
823 VideoPixelFormat format, 825 VideoPixelFormat format,
824 StorageType storage_type, 826 StorageType storage_type,
825 const gfx::Size& coded_size, 827 const gfx::Size& coded_size,
826 const gfx::Rect& visible_rect, 828 const gfx::Rect& visible_rect,
827 const gfx::Size& natural_size, 829 const gfx::Size& natural_size,
828 uint8* data, 830 uint8_t* data,
829 size_t data_size, 831 size_t data_size,
830 base::TimeDelta timestamp, 832 base::TimeDelta timestamp,
831 base::SharedMemoryHandle handle, 833 base::SharedMemoryHandle handle,
832 size_t data_offset) { 834 size_t data_offset) {
833 DCHECK(IsStorageTypeMappable(storage_type)); 835 DCHECK(IsStorageTypeMappable(storage_type));
834 836
835 // TODO(miu): This function should support any pixel format. 837 // TODO(miu): This function should support any pixel format.
836 // http://crbug.com/555909 838 // http://crbug.com/555909
837 if (format != PIXEL_FORMAT_I420) { 839 if (format != PIXEL_FORMAT_I420) {
838 DLOG(ERROR) << "Only PIXEL_FORMAT_I420 format supported: " 840 DLOG(ERROR) << "Only PIXEL_FORMAT_I420 format supported: "
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 data_size += height * strides_[plane]; 1001 data_size += height * strides_[plane];
1000 } 1002 }
1001 1003
1002 // The extra line of UV being allocated is because h264 chroma MC 1004 // The extra line of UV being allocated is because h264 chroma MC
1003 // overreads by one line in some cases, see libavcodec/utils.c: 1005 // overreads by one line in some cases, see libavcodec/utils.c:
1004 // avcodec_align_dimensions2() and libavcodec/x86/h264_chromamc.asm: 1006 // avcodec_align_dimensions2() and libavcodec/x86/h264_chromamc.asm:
1005 // put_h264_chroma_mc4_ssse3(). 1007 // put_h264_chroma_mc4_ssse3().
1006 DCHECK(IsValidPlane(kUPlane, format_)); 1008 DCHECK(IsValidPlane(kUPlane, format_));
1007 data_size += strides_[kUPlane] + kFrameSizePadding; 1009 data_size += strides_[kUPlane] + kFrameSizePadding;
1008 1010
1009 uint8* data = reinterpret_cast<uint8*>( 1011 uint8_t* data = reinterpret_cast<uint8_t*>(
1010 base::AlignedAlloc(data_size, kFrameAddressAlignment)); 1012 base::AlignedAlloc(data_size, kFrameAddressAlignment));
1011 if (zero_initialize_memory) 1013 if (zero_initialize_memory)
1012 memset(data, 0, data_size); 1014 memset(data, 0, data_size);
1013 1015
1014 for (size_t plane = 0; plane < NumPlanes(format_); ++plane) 1016 for (size_t plane = 0; plane < NumPlanes(format_); ++plane)
1015 data_[plane] = data + offset[plane]; 1017 data_[plane] = data + offset[plane];
1016 1018
1017 AddDestructionObserver(base::Bind(&base::AlignedFree, data)); 1019 AddDestructionObserver(base::Bind(&base::AlignedFree, data));
1018 } 1020 }
1019 1021
1020 } // namespace media 1022 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698