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() const17 const 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() const23 const I420ABufferInterface* VideoFrameBuffer::GetI420A() const {
24   RTC_CHECK(type() == Type::kI420A);
25   return static_cast<const I420ABufferInterface*>(this);
26 }
27 
GetI444() const28 const I444BufferInterface* VideoFrameBuffer::GetI444() const {
29   RTC_CHECK(type() == Type::kI444);
30   return static_cast<const I444BufferInterface*>(this);
31 }
32 
GetI010() const33 const I010BufferInterface* VideoFrameBuffer::GetI010() const {
34   RTC_CHECK(type() == Type::kI010);
35   return static_cast<const I010BufferInterface*>(this);
36 }
37 
type() const38 VideoFrameBuffer::Type I420BufferInterface::type() const {
39   return Type::kI420;
40 }
41 
ChromaWidth() const42 int I420BufferInterface::ChromaWidth() const {
43   return (width() + 1) / 2;
44 }
45 
ChromaHeight() const46 int I420BufferInterface::ChromaHeight() const {
47   return (height() + 1) / 2;
48 }
49 
ToI420()50 rtc::scoped_refptr<I420BufferInterface> I420BufferInterface::ToI420() {
51   return this;
52 }
53 
GetI420() const54 const I420BufferInterface* I420BufferInterface::GetI420() const {
55   return this;
56 }
57 
type() const58 VideoFrameBuffer::Type I420ABufferInterface::type() const {
59   return Type::kI420A;
60 }
61 
type() const62 VideoFrameBuffer::Type I444BufferInterface::type() const {
63   return Type::kI444;
64 }
65 
ChromaWidth() const66 int I444BufferInterface::ChromaWidth() const {
67   return width();
68 }
69 
ChromaHeight() const70 int I444BufferInterface::ChromaHeight() const {
71   return height();
72 }
73 
type() const74 VideoFrameBuffer::Type I010BufferInterface::type() const {
75   return Type::kI010;
76 }
77 
ChromaWidth() const78 int I010BufferInterface::ChromaWidth() const {
79   return (width() + 1) / 2;
80 }
81 
ChromaHeight() const82 int I010BufferInterface::ChromaHeight() const {
83   return (height() + 1) / 2;
84 }
85 
86 }  // namespace webrtc
87