blob: b9fd9cd92abd0e5539cabbc5e4d6aa6bcb95b3a9 [file] [log] [blame]
magjed712338e2017-05-11 05:11:57 -07001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "api/video/video_frame_buffer.h"
magjed712338e2017-05-11 05:11:57 -070012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "rtc_base/checks.h"
magjed712338e2017-05-11 05:11:57 -070014
15namespace webrtc {
16
Ilya Nikolaevskiya8507e32019-05-03 11:39:26 +020017const I420BufferInterface* VideoFrameBuffer::GetI420() const {
18 // Overridden by subclasses that can return an I420 buffer without any
19 // conversion, in particular, I420BufferInterface.
20 return nullptr;
Emircan Uysaler574eaa42017-11-09 12:33:24 -080021}
22
23const I420ABufferInterface* VideoFrameBuffer::GetI420A() const {
24 RTC_CHECK(type() == Type::kI420A);
25 return static_cast<const I420ABufferInterface*>(this);
26}
27
magjed3f075492017-06-01 10:02:26 -070028const I444BufferInterface* VideoFrameBuffer::GetI444() const {
29 RTC_CHECK(type() == Type::kI444);
30 return static_cast<const I444BufferInterface*>(this);
31}
32
Emircan Uysaler901e0ff2018-06-26 12:22:38 -070033const I010BufferInterface* VideoFrameBuffer::GetI010() const {
34 RTC_CHECK(type() == Type::kI010);
35 return static_cast<const I010BufferInterface*>(this);
36}
37
magjedeaf4a1e2017-05-30 01:21:59 -070038VideoFrameBuffer::Type I420BufferInterface::type() const {
39 return Type::kI420;
magjed712338e2017-05-11 05:11:57 -070040}
41
magjedeaf4a1e2017-05-30 01:21:59 -070042int I420BufferInterface::ChromaWidth() const {
43 return (width() + 1) / 2;
magjed712338e2017-05-11 05:11:57 -070044}
45
magjedeaf4a1e2017-05-30 01:21:59 -070046int I420BufferInterface::ChromaHeight() const {
47 return (height() + 1) / 2;
48}
49
50rtc::scoped_refptr<I420BufferInterface> I420BufferInterface::ToI420() {
51 return this;
52}
53
Ilya Nikolaevskiya8507e32019-05-03 11:39:26 +020054const I420BufferInterface* I420BufferInterface::GetI420() const {
55 return this;
56}
57
Emircan Uysaler574eaa42017-11-09 12:33:24 -080058VideoFrameBuffer::Type I420ABufferInterface::type() const {
59 return Type::kI420A;
60}
61
magjedeaf4a1e2017-05-30 01:21:59 -070062VideoFrameBuffer::Type I444BufferInterface::type() const {
63 return Type::kI444;
64}
65
66int I444BufferInterface::ChromaWidth() const {
67 return width();
68}
69
70int I444BufferInterface::ChromaHeight() const {
71 return height();
72}
73
Emircan Uysaler901e0ff2018-06-26 12:22:38 -070074VideoFrameBuffer::Type I010BufferInterface::type() const {
75 return Type::kI010;
76}
77
78int I010BufferInterface::ChromaWidth() const {
79 return (width() + 1) / 2;
80}
81
82int I010BufferInterface::ChromaHeight() const {
83 return (height() + 1) / 2;
84}
85
magjed712338e2017-05-11 05:11:57 -070086} // namespace webrtc