| Index: webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.mm
|
| diff --git a/webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.mm b/webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.mm
|
| index 5a1fe845f78226c5313effdd81a4a4821010db0a..43c3fe575bdc1e9886a2de1966e529bbe1aeeb38 100644
|
| --- a/webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.mm
|
| +++ b/webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.mm
|
| @@ -307,27 +307,30 @@ int H264VideoToolboxEncoder::Encode(
|
| return ret;
|
| }
|
|
|
| + // Get a pixel buffer from the pool and copy frame data over.
|
| + CVPixelBufferPoolRef pixel_buffer_pool =
|
| + VTCompressionSessionGetPixelBufferPool(compression_session_);
|
| +#if defined(WEBRTC_IOS)
|
| + if (!pixel_buffer_pool) {
|
| + // Kind of a hack. On backgrounding, the compression session seems to get
|
| + // invalidated, which causes this pool call to fail when the application
|
| + // is foregrounded and frames are being sent for encoding again.
|
| + // Resetting the session when this happens fixes the issue.
|
| + // In addition we request a keyframe so video can recover quickly.
|
| + ResetCompressionSession();
|
| + pixel_buffer_pool =
|
| + VTCompressionSessionGetPixelBufferPool(compression_session_);
|
| + is_keyframe_required = true;
|
| + LOG(LS_INFO) << "Resetting compression session due to invalid pool.";
|
| + }
|
| +#endif
|
| +
|
| CVPixelBufferRef pixel_buffer =
|
| static_cast<CVPixelBufferRef>(input_image->native_handle());
|
| if (pixel_buffer) {
|
| CVBufferRetain(pixel_buffer);
|
| + pixel_buffer_pool = nullptr;
|
| } else {
|
| - // Get a pixel buffer from the pool and copy frame data over.
|
| - CVPixelBufferPoolRef pixel_buffer_pool =
|
| - VTCompressionSessionGetPixelBufferPool(compression_session_);
|
| -#if defined(WEBRTC_IOS)
|
| - if (!pixel_buffer_pool) {
|
| - // Kind of a hack. On backgrounding, the compression session seems to get
|
| - // invalidated, which causes this pool call to fail when the application
|
| - // is foregrounded and frames are being sent for encoding again.
|
| - // Resetting the session when this happens fixes the issue.
|
| - // In addition we request a keyframe so video can recover quickly.
|
| - ResetCompressionSession();
|
| - pixel_buffer_pool =
|
| - VTCompressionSessionGetPixelBufferPool(compression_session_);
|
| - is_keyframe_required = true;
|
| - }
|
| -#endif
|
| if (!pixel_buffer_pool) {
|
| LOG(LS_ERROR) << "Failed to get pixel buffer pool.";
|
| return WEBRTC_VIDEO_CODEC_ERROR;
|
|
|