1 /* 2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "api/video/video_frame_buffer.h" 12 13 #include "rtc_base/checks.h" 14 15 namespace webrtc { 16 GetI420() const17const I420BufferInterface* VideoFrameBuffer::GetI420() const { 18 // Overridden by subclasses that can return an I420 buffer without any 19 // conversion, in particular, I420BufferInterface. 20 return nullptr; 21 } 22 GetI420A() const23const I420ABufferInterface* VideoFrameBuffer::GetI420A() const { 24 RTC_CHECK(type() == Type::kI420A); 25 return static_cast<const I420ABufferInterface*>(this); 26 } 27 GetI444() const28const I444BufferInterface* VideoFrameBuffer::GetI444() const { 29 RTC_CHECK(type() == Type::kI444); 30 return static_cast<const I444BufferInterface*>(this); 31 } 32 GetI010() const33const I010BufferInterface* VideoFrameBuffer::GetI010() const { 34 RTC_CHECK(type() == Type::kI010); 35 return static_cast<const I010BufferInterface*>(this); 36 } 37 type() const38VideoFrameBuffer::Type I420BufferInterface::type() const { 39 return Type::kI420; 40 } 41 ChromaWidth() const42int I420BufferInterface::ChromaWidth() const { 43 return (width() + 1) / 2; 44 } 45 ChromaHeight() const46int I420BufferInterface::ChromaHeight() const { 47 return (height() + 1) / 2; 48 } 49 ToI420()50rtc::scoped_refptr<I420BufferInterface> I420BufferInterface::ToI420() { 51 return this; 52 } 53 GetI420() const54const I420BufferInterface* I420BufferInterface::GetI420() const { 55 return this; 56 } 57 type() const58VideoFrameBuffer::Type I420ABufferInterface::type() const { 59 return Type::kI420A; 60 } 61 type() const62VideoFrameBuffer::Type I444BufferInterface::type() const { 63 return Type::kI444; 64 } 65 ChromaWidth() const66int I444BufferInterface::ChromaWidth() const { 67 return width(); 68 } 69 ChromaHeight() const70int I444BufferInterface::ChromaHeight() const { 71 return height(); 72 } 73 type() const74VideoFrameBuffer::Type I010BufferInterface::type() const { 75 return Type::kI010; 76 } 77 ChromaWidth() const78int I010BufferInterface::ChromaWidth() const { 79 return (width() + 1) / 2; 80 } 81 ChromaHeight() const82int I010BufferInterface::ChromaHeight() const { 83 return (height() + 1) / 2; 84 } 85 86 } // namespace webrtc 87