/* * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_COMMON_VIDEO_INCLUDE_VIDEO_FRAME_BUFFER_H_ #define WEBRTC_COMMON_VIDEO_INCLUDE_VIDEO_FRAME_BUFFER_H_ #include #include "webrtc/api/video/video_frame_buffer.h" // TODO(nisse): For backwards compatibility, files including this file // expect it to declare I420Buffer. Delete after callers are updated. #include "webrtc/api/video/i420_buffer.h" #include "webrtc/base/callback.h" #include "webrtc/base/scoped_ref_ptr.h" namespace webrtc { // Base class for native-handle buffer is a wrapper around a |native_handle|. // This is used for convenience as most native-handle implementations can share // many VideoFrame implementations, but need to implement a few others (such // as their own destructors or conversion methods back to software I420). class NativeHandleBuffer : public VideoFrameBuffer { public: NativeHandleBuffer(void* native_handle, int width, int height); int width() const override; int height() const override; const uint8_t* DataY() const override; const uint8_t* DataU() const override; const uint8_t* DataV() const override; int StrideY() const override; int StrideU() const override; int StrideV() const override; void* native_handle() const override; protected: void* native_handle_; const int width_; const int height_; }; class WrappedI420Buffer : public webrtc::VideoFrameBuffer { public: WrappedI420Buffer(int width, int height, const uint8_t* y_plane, int y_stride, const uint8_t* u_plane, int u_stride, const uint8_t* v_plane, int v_stride, const rtc::Callback0& no_longer_used); int width() const override; int height() const override; const uint8_t* DataY() const override; const uint8_t* DataU() const override; const uint8_t* DataV() const override; int StrideY() const override; int StrideU() const override; int StrideV() const override; void* native_handle() const override; rtc::scoped_refptr NativeToI420Buffer() override; private: friend class rtc::RefCountedObject; ~WrappedI420Buffer() override; const int width_; const int height_; const uint8_t* const y_plane_; const uint8_t* const u_plane_; const uint8_t* const v_plane_; const int y_stride_; const int u_stride_; const int v_stride_; rtc::Callback0 no_longer_used_cb_; }; } // namespace webrtc #endif // WEBRTC_COMMON_VIDEO_INCLUDE_VIDEO_FRAME_BUFFER_H_