Support more formats in RTCVideoFrame
Implement Obj-C version of webrtc::VideoFrameBuffer and use that in RTCVideoFrame. Bug: webrtc:7785 Change-Id: I49f42bcf451dd6769b3a79a65fe7b400dce22677 Reviewed-on: https://chromium-review.googlesource.com/536773 Commit-Queue: Anders Carlsson <andersc@webrtc.org> Reviewed-by: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#18691}
This commit is contained in:
committed by
Commit Bot
parent
7f84aeaef6
commit
bd2220a9c4
@ -22,6 +22,8 @@ typedef NS_ENUM(NSInteger, RTCVideoRotation) {
|
||||
RTCVideoRotation_270 = 270,
|
||||
};
|
||||
|
||||
@protocol RTCVideoFrameBuffer;
|
||||
|
||||
// RTCVideoFrame is an ObjectiveC version of webrtc::VideoFrame.
|
||||
RTC_EXPORT
|
||||
@interface RTCVideoFrame : NSObject
|
||||
@ -36,27 +38,35 @@ RTC_EXPORT
|
||||
* is null. It is always possible to get such a frame by calling
|
||||
* newI420VideoFrame.
|
||||
*/
|
||||
@property(nonatomic, readonly, nullable) const uint8_t *dataY;
|
||||
@property(nonatomic, readonly, nullable) const uint8_t *dataU;
|
||||
@property(nonatomic, readonly, nullable) const uint8_t *dataV;
|
||||
@property(nonatomic, readonly) int strideY;
|
||||
@property(nonatomic, readonly) int strideU;
|
||||
@property(nonatomic, readonly) int strideV;
|
||||
@property(nonatomic, readonly, nullable)
|
||||
const uint8_t *dataY DEPRECATED_MSG_ATTRIBUTE("use [buffer toI420]");
|
||||
@property(nonatomic, readonly, nullable)
|
||||
const uint8_t *dataU DEPRECATED_MSG_ATTRIBUTE("use [buffer toI420]");
|
||||
@property(nonatomic, readonly, nullable)
|
||||
const uint8_t *dataV DEPRECATED_MSG_ATTRIBUTE("use [buffer toI420]");
|
||||
@property(nonatomic, readonly) int strideY DEPRECATED_MSG_ATTRIBUTE("use [buffer toI420]");
|
||||
@property(nonatomic, readonly) int strideU DEPRECATED_MSG_ATTRIBUTE("use [buffer toI420]");
|
||||
@property(nonatomic, readonly) int strideV DEPRECATED_MSG_ATTRIBUTE("use [buffer toI420]");
|
||||
|
||||
/** Timestamp in nanoseconds. */
|
||||
@property(nonatomic, readonly) int64_t timeStampNs;
|
||||
|
||||
/** The native handle should be a pixel buffer on iOS. */
|
||||
@property(nonatomic, readonly) CVPixelBufferRef nativeHandle;
|
||||
@property(nonatomic, readonly)
|
||||
CVPixelBufferRef nativeHandle DEPRECATED_MSG_ATTRIBUTE("use buffer instead");
|
||||
|
||||
@property(nonatomic, readonly) id<RTCVideoFrameBuffer> buffer;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
- (instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
/** Initialize an RTCVideoFrame from a pixel buffer, rotation, and timestamp.
|
||||
* Deprecated - initialize with a RTCCVPixelBuffer instead
|
||||
*/
|
||||
- (instancetype)initWithPixelBuffer:(CVPixelBufferRef)pixelBuffer
|
||||
rotation:(RTCVideoRotation)rotation
|
||||
timeStampNs:(int64_t)timeStampNs;
|
||||
timeStampNs:(int64_t)timeStampNs
|
||||
DEPRECATED_MSG_ATTRIBUTE("use initWithBuffer instead");
|
||||
|
||||
/** Initialize an RTCVideoFrame from a pixel buffer combined with cropping and
|
||||
* scaling. Cropping will be applied first on the pixel buffer, followed by
|
||||
@ -70,7 +80,14 @@ RTC_EXPORT
|
||||
cropX:(int)cropX
|
||||
cropY:(int)cropY
|
||||
rotation:(RTCVideoRotation)rotation
|
||||
timeStampNs:(int64_t)timeStampNs;
|
||||
timeStampNs:(int64_t)timeStampNs
|
||||
DEPRECATED_MSG_ATTRIBUTE("use initWithBuffer instead");
|
||||
|
||||
/** Initialize an RTCVideoFrame from a frame buffer, rotation, and timestamp.
|
||||
*/
|
||||
- (instancetype)initWithBuffer:(id<RTCVideoFrameBuffer>)frameBuffer
|
||||
rotation:(RTCVideoRotation)rotation
|
||||
timeStampNs:(int64_t)timeStampNs;
|
||||
|
||||
/** Return a frame that is guaranteed to be I420, i.e. it is possible to access
|
||||
* the YUV data on it.
|
||||
|
||||
Reference in New Issue
Block a user