Reland "Implement Optimized CropAndScale for ObjCFrameBuffer"
This is a reland of commit 92043022488f80fd58c91d4dbb6889248de160ce Original change's description: > Implement Optimized CropAndScale for ObjCFrameBuffer > > The default implementation of CropAndScale uses ToI420() and then Scale, > and this implementation behaves inefficiently with RTCCVPixelBuffer. > > Bug: None > Change-Id: I422ef80d124db0354a2e696892e882a78db445bb > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271140 > Reviewed-by: Kári Helgason <kthelgason@webrtc.org> > Commit-Queue: Daniel.L (Byoungchan) Lee <daniel.l@hpcnt.com> > Auto-Submit: Daniel.L (Byoungchan) Lee <daniel.l@hpcnt.com> > Commit-Queue: Kári Helgason <kthelgason@webrtc.org> > Cr-Commit-Position: refs/heads/main@{#37877} Bug: None Change-Id: Ie74146a33c1f54d0c988978bd925671afe699d05 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/272740 Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Commit-Queue: Daniel.L (Byoungchan) Lee <daniel.l@hpcnt.com> Cr-Commit-Position: refs/heads/main@{#37887}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
a7dcd29c1f
commit
5aa3b073ad
@ -33,6 +33,12 @@ class ObjCFrameBuffer : public VideoFrameBuffer {
|
||||
int height() const override;
|
||||
|
||||
rtc::scoped_refptr<I420BufferInterface> ToI420() override;
|
||||
rtc::scoped_refptr<VideoFrameBuffer> CropAndScale(int offset_x,
|
||||
int offset_y,
|
||||
int crop_width,
|
||||
int crop_height,
|
||||
int scaled_width,
|
||||
int scaled_height) override;
|
||||
|
||||
id<RTC_OBJC_TYPE(RTCVideoFrameBuffer)> wrapped_frame_buffer() const;
|
||||
|
||||
|
||||
@ -70,6 +70,27 @@ rtc::scoped_refptr<I420BufferInterface> ObjCFrameBuffer::ToI420() {
|
||||
return rtc::make_ref_counted<ObjCI420FrameBuffer>([frame_buffer_ toI420]);
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<VideoFrameBuffer> ObjCFrameBuffer::CropAndScale(int offset_x,
|
||||
int offset_y,
|
||||
int crop_width,
|
||||
int crop_height,
|
||||
int scaled_width,
|
||||
int scaled_height) {
|
||||
if ([frame_buffer_ respondsToSelector:@selector
|
||||
(cropAndScaleWith:offsetY:cropWidth:cropHeight:scaleWidth:scaleHeight:)]) {
|
||||
return rtc::make_ref_counted<ObjCFrameBuffer>([frame_buffer_ cropAndScaleWith:offset_x
|
||||
offsetY:offset_y
|
||||
cropWidth:crop_width
|
||||
cropHeight:crop_height
|
||||
scaleWidth:scaled_width
|
||||
scaleHeight:scaled_height]);
|
||||
}
|
||||
|
||||
// Use the default implementation.
|
||||
return VideoFrameBuffer::CropAndScale(
|
||||
offset_x, offset_y, crop_width, crop_height, scaled_width, scaled_height);
|
||||
}
|
||||
|
||||
id<RTC_OBJC_TYPE(RTCVideoFrameBuffer)> ObjCFrameBuffer::wrapped_frame_buffer() const {
|
||||
return frame_buffer_;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user