Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Unified Diff: webrtc/sdk/objc/Framework/Classes/PeerConnection/objc_video_encoder_factory.mm

Issue 2978623002: Implement H264 codec in Objective-C classes. (Closed)
Patch Set: Fix test after rebase. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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; }

Powered by Google App Engine
This is Rietveld 408576698