Update webrtc/sdk/objc to new VideoFrameBuffer interface
More thorough refactoring work is planned for RTCVideoFrame (see webrtc:7785), and this CL just unblocks removing the old interface from webrtc::VideoFrameBuffer. Bug: webrtc:7632,webrtc:7785 Change-Id: I351536c5ca454c2acd8944bbc2ebb1d1439dc50c Reviewed-on: https://chromium-review.googlesource.com/530231 Reviewed-by: Anders Carlsson <andersc@webrtc.org> Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#18553}
This commit is contained in:
committed by
Commit Bot
parent
687bc3e27b
commit
b008b45f1e
@ -25,24 +25,29 @@ CoreVideoFrameBuffer::CoreVideoFrameBuffer(CVPixelBufferRef pixel_buffer,
|
||||
int crop_height,
|
||||
int crop_x,
|
||||
int crop_y)
|
||||
: NativeHandleBuffer(pixel_buffer, adapted_width, adapted_height),
|
||||
pixel_buffer_(pixel_buffer),
|
||||
: pixel_buffer_(pixel_buffer),
|
||||
width_(adapted_width),
|
||||
height_(adapted_height),
|
||||
buffer_width_(CVPixelBufferGetWidth(pixel_buffer)),
|
||||
buffer_height_(CVPixelBufferGetHeight(pixel_buffer)),
|
||||
crop_width_(crop_width), crop_height_(crop_height),
|
||||
crop_width_(crop_width),
|
||||
crop_height_(crop_height),
|
||||
// Can only crop at even pixels.
|
||||
crop_x_(crop_x & ~1), crop_y_(crop_y & ~1) {
|
||||
crop_x_(crop_x & ~1),
|
||||
crop_y_(crop_y & ~1) {
|
||||
CVBufferRetain(pixel_buffer_);
|
||||
}
|
||||
|
||||
CoreVideoFrameBuffer::CoreVideoFrameBuffer(CVPixelBufferRef pixel_buffer)
|
||||
: NativeHandleBuffer(pixel_buffer,
|
||||
CVPixelBufferGetWidth(pixel_buffer),
|
||||
CVPixelBufferGetHeight(pixel_buffer)),
|
||||
pixel_buffer_(pixel_buffer),
|
||||
buffer_width_(width_), buffer_height_(height_),
|
||||
crop_width_(width_), crop_height_(height_),
|
||||
crop_x_(0), crop_y_(0) {
|
||||
: pixel_buffer_(pixel_buffer),
|
||||
width_(CVPixelBufferGetWidth(pixel_buffer)),
|
||||
height_(CVPixelBufferGetHeight(pixel_buffer)),
|
||||
buffer_width_(width_),
|
||||
buffer_height_(height_),
|
||||
crop_width_(width_),
|
||||
crop_height_(height_),
|
||||
crop_x_(0),
|
||||
crop_y_(0) {
|
||||
CVBufferRetain(pixel_buffer_);
|
||||
}
|
||||
|
||||
@ -50,8 +55,19 @@ CoreVideoFrameBuffer::~CoreVideoFrameBuffer() {
|
||||
CVBufferRelease(pixel_buffer_);
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<VideoFrameBuffer>
|
||||
CoreVideoFrameBuffer::NativeToI420Buffer() {
|
||||
VideoFrameBuffer::Type CoreVideoFrameBuffer::type() const {
|
||||
return Type::kNative;
|
||||
}
|
||||
|
||||
int CoreVideoFrameBuffer::width() const {
|
||||
return width_;
|
||||
}
|
||||
|
||||
int CoreVideoFrameBuffer::height() const {
|
||||
return height_;
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<I420BufferInterface> CoreVideoFrameBuffer::ToI420() {
|
||||
const OSType pixel_format = CVPixelBufferGetPixelFormatType(pixel_buffer_);
|
||||
RTC_DCHECK(pixel_format == kCVPixelFormatType_420YpCbCr8BiPlanarFullRange ||
|
||||
pixel_format == kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange);
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class CoreVideoFrameBuffer : public NativeHandleBuffer {
|
||||
class CoreVideoFrameBuffer : public VideoFrameBuffer {
|
||||
public:
|
||||
explicit CoreVideoFrameBuffer(CVPixelBufferRef pixel_buffer);
|
||||
CoreVideoFrameBuffer(CVPixelBufferRef pixel_buffer,
|
||||
@ -31,7 +31,8 @@ class CoreVideoFrameBuffer : public NativeHandleBuffer {
|
||||
int crop_y);
|
||||
~CoreVideoFrameBuffer() override;
|
||||
|
||||
rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override;
|
||||
CVPixelBufferRef pixel_buffer() { return pixel_buffer_; }
|
||||
|
||||
// Returns true if the internal pixel buffer needs to be cropped.
|
||||
bool RequiresCropping() const;
|
||||
// Crop and scales the internal pixel buffer to the output pixel buffer. The
|
||||
@ -41,11 +42,17 @@ class CoreVideoFrameBuffer : public NativeHandleBuffer {
|
||||
CVPixelBufferRef output_pixel_buffer) const;
|
||||
|
||||
private:
|
||||
Type type() const override;
|
||||
int width() const override;
|
||||
int height() const override;
|
||||
rtc::scoped_refptr<I420BufferInterface> ToI420() override;
|
||||
|
||||
CVPixelBufferRef pixel_buffer_;
|
||||
// buffer_width/height is the actual pixel buffer resolution. The width/height
|
||||
// in NativeHandleBuffer, i.e. width()/height(), is the resolution we will
|
||||
// scale to in NativeToI420Buffer(). Cropping happens before scaling, so:
|
||||
// buffer_width >= crop_width >= width().
|
||||
// buffer_width/height is the actual pixel buffer resolution. The
|
||||
// width_/height_ is the resolution we will scale to in ToI420(). Cropping
|
||||
// happens before scaling, so: buffer_width >= crop_width >= width().
|
||||
const int width_;
|
||||
const int height_;
|
||||
const int buffer_width_;
|
||||
const int buffer_height_;
|
||||
const int crop_width_;
|
||||
|
||||
Reference in New Issue
Block a user