Reland of Move CoreVideoFrameBuffer from webrtc/common_video/ to webrtc/sdk/objc/ (patchset #1 id:1 of https://codereview.webrtc.org/2862663003/ )

Reason for revert:
Keep header file for backwards compatibility

Original issue's description:
> Revert of Move CoreVideoFrameBuffer from webrtc/common_video/ to webrtc/sdk/objc/ (patchset #2 id:60001 of https://codereview.webrtc.org/2851563003/ )
>
> Reason for revert:
> Breaks downstream targets.
>
> Original issue's description:
> > Move CoreVideoFrameBuffer from webrtc/common_video/ to webrtc/sdk/objc/
> >
> > CoreVideoFrameBuffer is Mac/iPhone specific and should be moved into
> > the webrtc/sdk/objc/ folder.
> >
> > BUG=None
> >
> > Review-Url: https://codereview.webrtc.org/2851563003
> > Cr-Commit-Position: refs/heads/master@{#17998}
> > Committed: d41631aa27
>
> TBR=kthelgason@webrtc.org,magjed@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=None
>
> Review-Url: https://codereview.webrtc.org/2862663003
> Cr-Commit-Position: refs/heads/master@{#18004}
> Committed: c34e730896

TBR=kthelgason@webrtc.org,ehmaldonado@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=None

Review-Url: https://codereview.webrtc.org/2860033002
Cr-Commit-Position: refs/heads/master@{#18011}
This commit is contained in:
magjed
2017-05-04 03:41:33 -07:00
committed by Commit bot
parent 76a1ce71f9
commit 173658968e
3 changed files with 64 additions and 45 deletions

View File

@ -0,0 +1,59 @@
/*
* Copyright 2016 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_SDK_OBJC_FRAMEWORK_CLASSES_COREVIDEO_FRAME_BUFFER_H_
#define WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_COREVIDEO_FRAME_BUFFER_H_
#include <CoreVideo/CoreVideo.h>
#include <vector>
#include "webrtc/common_video/include/video_frame_buffer.h"
namespace webrtc {
class CoreVideoFrameBuffer : public NativeHandleBuffer {
public:
explicit CoreVideoFrameBuffer(CVPixelBufferRef pixel_buffer);
CoreVideoFrameBuffer(CVPixelBufferRef pixel_buffer,
int adapted_width,
int adapted_height,
int crop_width,
int crop_height,
int crop_x,
int crop_y);
~CoreVideoFrameBuffer() override;
rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override;
// 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
// tmp buffer is used for intermediary splitting the UV channels. This
// function returns true if successful.
bool CropAndScaleTo(std::vector<uint8_t>* tmp_buffer,
CVPixelBufferRef output_pixel_buffer) const;
private:
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().
const int buffer_width_;
const int buffer_height_;
const int crop_width_;
const int crop_height_;
const int crop_x_;
const int crop_y_;
};
} // namespace webrtc
#endif // WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_COREVIDEO_FRAME_BUFFER_H_