| Index: webrtc/sdk/objc/Framework/Classes/PeerConnection/objc_video_encoder_factory.mm
|
| diff --git a/webrtc/sdk/objc/Framework/Classes/PeerConnection/objc_video_encoder_factory.mm b/webrtc/sdk/objc/Framework/Classes/PeerConnection/objc_video_encoder_factory.mm
|
| index d4fa416d0569affe7f2cdbf9bfbe5ab69b3354d8..9b898fa4237ac00b4caa05c3340e7d4c43f005a4 100644
|
| --- a/webrtc/sdk/objc/Framework/Classes/PeerConnection/objc_video_encoder_factory.mm
|
| +++ b/webrtc/sdk/objc/Framework/Classes/PeerConnection/objc_video_encoder_factory.mm
|
| @@ -25,6 +25,7 @@
|
| #include "webrtc/rtc_base/logging.h"
|
| #include "webrtc/rtc_base/timeutils.h"
|
| #include "webrtc/sdk/objc/Framework/Classes/Common/helpers.h"
|
| +#include "webrtc/sdk/objc/Framework/Classes/Video/RTCI420Buffer+Private.h"
|
| #include "webrtc/sdk/objc/Framework/Classes/Video/objc_frame_buffer.h"
|
|
|
| namespace webrtc {
|
| @@ -44,9 +45,9 @@ class ObjCVideoEncoder : public VideoEncoder {
|
| }
|
|
|
| int32_t RegisterEncodeCompleteCallback(EncodedImageCallback *callback) {
|
| - [encoder_ setCallback:^(RTCEncodedImage *frame,
|
| - id<RTCCodecSpecificInfo> info,
|
| - RTCRtpFragmentationHeader *header) {
|
| + [encoder_ setCallback:^BOOL(RTCEncodedImage *_Nonnull frame,
|
| + id<RTCCodecSpecificInfo> _Nonnull info,
|
| + RTCRtpFragmentationHeader *_Nonnull header) {
|
| EncodedImage encodedImage = [frame toCpp];
|
|
|
| // Handle types than can be converted into one of webrtc::CodecSpecificInfo's hard coded
|
| @@ -57,7 +58,10 @@ class ObjCVideoEncoder : public VideoEncoder {
|
| }
|
|
|
| RTPFragmentationHeader *fragmentationHeader = [header toCpp];
|
| - callback->OnEncodedImage(encodedImage, &codecSpecificInfo, fragmentationHeader);
|
| +
|
| + EncodedImageCallback::Result res =
|
| + callback->OnEncodedImage(encodedImage, &codecSpecificInfo, fragmentationHeader);
|
| + return res.error == EncodedImageCallback::Result::OK;
|
| }];
|
|
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| @@ -68,10 +72,15 @@ class ObjCVideoEncoder : public VideoEncoder {
|
| int32_t Encode(const VideoFrame &frame,
|
| const CodecSpecificInfo *codec_specific_info,
|
| const std::vector<FrameType> *frame_types) {
|
| - RTC_CHECK(frame.video_frame_buffer()->type() == VideoFrameBuffer::Type::kNative);
|
| + id<RTCVideoFrameBuffer> frame_buffer;
|
| + if (frame.video_frame_buffer()->type() == VideoFrameBuffer::Type::kNative) {
|
| + frame_buffer =
|
| + static_cast<ObjCFrameBuffer *>(frame.video_frame_buffer().get())->wrapped_frame_buffer();
|
| + } else {
|
| + frame_buffer =
|
| + [[RTCI420Buffer alloc] initWithFrameBuffer:frame.video_frame_buffer()->ToI420()];
|
| + }
|
|
|
| - id<RTCVideoFrameBuffer> frame_buffer =
|
| - static_cast<ObjCFrameBuffer *>(frame.video_frame_buffer().get())->wrapped_frame_buffer();
|
| RTCVideoFrame *rtcFrame =
|
| [[RTCVideoFrame alloc] initWithBuffer:frame_buffer
|
| rotation:RTCVideoRotation(frame.rotation())
|
| @@ -101,11 +110,7 @@ class ObjCVideoEncoder : public VideoEncoder {
|
| int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) { return WEBRTC_VIDEO_CODEC_OK; }
|
|
|
| int32_t SetRates(uint32_t bitrate, uint32_t framerate) {
|
| - if ([encoder_ setBitrate:bitrate framerate:framerate]) {
|
| - return WEBRTC_VIDEO_CODEC_OK;
|
| - } else {
|
| - return WEBRTC_VIDEO_CODEC_ERROR;
|
| - }
|
| + return [encoder_ setBitrate:bitrate framerate:framerate];
|
| }
|
|
|
| bool SupportsNativeHandle() const { return true; }
|
|
|