From 848f31e57d822a93aa172bf29033e439a8829cbc Mon Sep 17 00:00:00 2001 From: Mirko Bonadei Date: Mon, 22 Jan 2018 13:40:37 +0100 Subject: [PATCH] Removing "initialized lambda captures" (C++14 feature). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WebRTC is still targeting C++11, this C++14 only feature sneaked in because the Android toolchain used to build WebRTC on the trybots uses C++14 features. Bug: None Change-Id: I095fb76134dff729c72b7660cdb3d6abc4de2e0c Reviewed-on: https://webrtc-review.googlesource.com/42501 Commit-Queue: Mirko Bonadei Reviewed-by: Sami Kalliomäki Reviewed-by: Karl Wiberg Cr-Commit-Position: refs/heads/master@{#21711} --- sdk/android/src/jni/videoencoderwrapper.cc | 87 +++++++++++++--------- 1 file changed, 51 insertions(+), 36 deletions(-) diff --git a/sdk/android/src/jni/videoencoderwrapper.cc b/sdk/android/src/jni/videoencoderwrapper.cc index 125a97cc9a..ea25eaec00 100644 --- a/sdk/android/src/jni/videoencoderwrapper.cc +++ b/sdk/android/src/jni/videoencoderwrapper.cc @@ -193,45 +193,60 @@ void VideoEncoderWrapper::OnEncodedFrame(JNIEnv* jni, memcpy(buffer_copy.data(), buffer, buffer_size); const int qp = JavaToNativeOptionalInt(jni, j_qp).value_or(-1); - encoder_queue_->PostTask( - [ - this, task_buffer = std::move(buffer_copy), qp, encoded_width, - encoded_height, capture_time_ns, frame_type, rotation, complete_frame - ]() { - FrameExtraInfo frame_extra_info; - do { - if (frame_extra_infos_.empty()) { - RTC_LOG(LS_WARNING) - << "Java encoder produced an unexpected frame with timestamp: " - << capture_time_ns; - return; - } + struct Lambda { + VideoEncoderWrapper* video_encoder_wrapper; + std::vector task_buffer; + int qp; + jint encoded_width; + jint encoded_height; + jlong capture_time_ns; + jint frame_type; + jint rotation; + jboolean complete_frame; + std::deque* frame_extra_infos; + EncodedImageCallback* callback; - frame_extra_info = frame_extra_infos_.front(); - frame_extra_infos_.pop_front(); - // The encoder might drop frames so iterate through the queue until - // we find a matching timestamp. - } while (frame_extra_info.capture_time_ns != capture_time_ns); - - RTPFragmentationHeader header = ParseFragmentationHeader(task_buffer); - EncodedImage frame(const_cast(task_buffer.data()), - task_buffer.size(), task_buffer.size()); - frame._encodedWidth = encoded_width; - frame._encodedHeight = encoded_height; - frame._timeStamp = frame_extra_info.timestamp_rtp; - frame.capture_time_ms_ = capture_time_ns / rtc::kNumNanosecsPerMillisec; - frame._frameType = (FrameType)frame_type; - frame.rotation_ = (VideoRotation)rotation; - frame._completeFrame = complete_frame; - if (qp == -1) { - frame.qp_ = ParseQp(task_buffer); - } else { - frame.qp_ = qp; + void operator()() const { + FrameExtraInfo frame_extra_info; + do { + if (frame_extra_infos->empty()) { + RTC_LOG(LS_WARNING) + << "Java encoder produced an unexpected frame with timestamp: " + << capture_time_ns; + return; } + frame_extra_info = frame_extra_infos->front(); + frame_extra_infos->pop_front(); + // The encoder might drop frames so iterate through the queue until + // we find a matching timestamp. + } while (frame_extra_info.capture_time_ns != capture_time_ns); - CodecSpecificInfo info(ParseCodecSpecificInfo(frame)); - callback_->OnEncodedImage(frame, &info, &header); - }); + RTPFragmentationHeader header = + video_encoder_wrapper->ParseFragmentationHeader(task_buffer); + EncodedImage frame(const_cast(task_buffer.data()), + task_buffer.size(), task_buffer.size()); + frame._encodedWidth = encoded_width; + frame._encodedHeight = encoded_height; + frame._timeStamp = frame_extra_info.timestamp_rtp; + frame.capture_time_ms_ = capture_time_ns / rtc::kNumNanosecsPerMillisec; + frame._frameType = (FrameType)frame_type; + frame.rotation_ = (VideoRotation)rotation; + frame._completeFrame = complete_frame; + if (qp == -1) { + frame.qp_ = video_encoder_wrapper->ParseQp(task_buffer); + } else { + frame.qp_ = qp; + } + + CodecSpecificInfo info( + video_encoder_wrapper->ParseCodecSpecificInfo(frame)); + callback->OnEncodedImage(frame, &info, &header); + } + }; + + encoder_queue_->PostTask(Lambda{this, std::move(buffer_copy), + qp, encoded_width, encoded_height, capture_time_ns, frame_type, + rotation, complete_frame, &frame_extra_infos_, callback_}); } int32_t VideoEncoderWrapper::HandleReturnCode(JNIEnv* jni,