webrtc_m130/media/engine/simulcast_encoder_adapter.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

119 lines
4.2 KiB
C
Raw Normal View History

/*
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*
*/
#ifndef MEDIA_ENGINE_SIMULCAST_ENCODER_ADAPTER_H_
#define MEDIA_ENGINE_SIMULCAST_ENCODER_ADAPTER_H_
#include <memory>
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
#include <stack>
#include <string>
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
#include <utility>
#include <vector>
#include "media/engine/webrtcvideoencoderfactory.h"
#include "modules/video_coding/include/video_codec_interface.h"
#include "rtc_base/atomicops.h"
#include "rtc_base/sequenced_task_checker.h"
namespace webrtc {
class SimulcastRateAllocator;
class VideoEncoderFactory;
// SimulcastEncoderAdapter implements simulcast support by creating multiple
// webrtc::VideoEncoder instances with the given VideoEncoderFactory.
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
// The object is created and destroyed on the worker thread, but all public
// interfaces should be called from the encoder task queue.
class SimulcastEncoderAdapter : public VideoEncoder {
public:
explicit SimulcastEncoderAdapter(VideoEncoderFactory* factory,
const SdpVideoFormat& format);
virtual ~SimulcastEncoderAdapter();
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
// Implements VideoEncoder.
int Release() override;
int InitEncode(const VideoCodec* inst,
int number_of_cores,
size_t max_payload_size) override;
int Encode(const VideoFrame& input_image,
const CodecSpecificInfo* codec_specific_info,
const std::vector<FrameType>* frame_types) override;
int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override;
int SetChannelParameters(uint32_t packet_loss, int64_t rtt) override;
int SetRateAllocation(const VideoBitrateAllocation& bitrate,
Reland #2 of Issue 2434073003: Extract bitrate allocation ... This is yet another reland of https://codereview.webrtc.org/2434073003/ including two fixes: 1. SimulcastRateAllocator did not handle the screenshare settings properly for numSimulcastStreams = 1. Additional test case was added for that. 2. In VideoSender, when rate allocation is updated after setting a new VideoCodec config, only update the state of the EncoderParameters, but don't actually run SetRateAllocation on the encoder itself. This caused some problems upstreams. Please review only the changes after patch set 1. Original description: Extract bitrate allocation of spatial/temporal layers out of codec impl. This CL makes a number of intervowen changes: * Add BitrateAllocation struct, that contains a codec independent view of how the target bitrate is distributed over spatial and temporal layers. * Adds the BitrateAllocator interface, which takes a bitrate and frame rate and produces a BitrateAllocation. * A default (non layered) implementation is added, and SimulcastRateAllocator is extended to fully handle VP8 allocation. This includes capturing TemporalLayer instances created by the encoder. * ViEEncoder now owns both the bitrate allocator and the temporal layer factories for VP8. This allows allocation to happen fully outside of the encoder implementation. This refactoring will make it possible for ViEEncoder to signal the full picture of target bitrates to the RTCP module. BUG=webrtc:6301 R=stefan@webrtc.org Review URL: https://codereview.webrtc.org/2510583002 . Cr-Commit-Position: refs/heads/master@{#15105}
2016-11-16 16:41:30 +01:00
uint32_t new_framerate) override;
// Eventual handler for the contained encoders' EncodedImageCallbacks, but
// called from an internal helper that also knows the correct stream
// index.
EncodedImageCallback::Result OnEncodedImage(
size_t stream_idx,
const EncodedImage& encoded_image,
const CodecSpecificInfo* codec_specific_info,
const RTPFragmentationHeader* fragmentation);
VideoEncoder::ScalingSettings GetScalingSettings() const override;
bool SupportsNativeHandle() const override;
const char* ImplementationName() const override;
private:
struct StreamInfo {
StreamInfo(std::unique_ptr<VideoEncoder> encoder,
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
std::unique_ptr<EncodedImageCallback> callback,
uint16_t width,
uint16_t height,
bool send_stream)
: encoder(std::move(encoder)),
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
callback(std::move(callback)),
width(width),
height(height),
key_frame_request(false),
send_stream(send_stream) {}
std::unique_ptr<VideoEncoder> encoder;
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
std::unique_ptr<EncodedImageCallback> callback;
uint16_t width;
uint16_t height;
bool key_frame_request;
bool send_stream;
};
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
// Populate the codec settings for each simulcast stream.
static void PopulateStreamCodec(const webrtc::VideoCodec& inst,
int stream_index,
uint32_t start_bitrate_kbps,
bool highest_resolution_stream,
webrtc::VideoCodec* stream_codec);
bool Initialized() const;
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
void DestroyStoredEncoders();
volatile int inited_; // Accessed atomically.
VideoEncoderFactory* const factory_;
const SdpVideoFormat video_format_;
VideoCodec codec_;
std::vector<StreamInfo> streaminfos_;
EncodedImageCallback* encoded_complete_callback_;
std::string implementation_name_;
Reland of use allocated encoders in SimulcastEncoderAdapter. (patchset #1 id:1 of https://codereview.webrtc.org/2893003002/ ) Reason for reland: Chrome encoder implementation fixed. Original issue's description: > Revert of Reuse allocated encoders in SimulcastEncoderAdapter. (patchset #15 id:320001 of https://codereview.webrtc.org/2830793005/ ) > > Reason for revert: > Breaks Chrome tests. > > Original issue's description: > > Reuse allocated encoders in SimulcastEncoderAdapter. > > > > Prior to this change, the SimulcastEncoderAdapter would destroy and create > > encoders whenever it is being reinitialized. After this change, the > > SimulcastEncoderAdapter will cache the already allocated encoders, and reuse > > them after reinitialization. > > > > This change will help in reducing the number of PictureID "jumps" that have > > been seen around encoder reinitialization. > > > > TESTED=AppRTCMobile, Chrome desktop, and internal app, with forced encoder reinits every 30 frames and https://codereview.webrtc.org/2833493003/ applied. > > BUG=webrtc:7475 > > > > Review-Url: https://codereview.webrtc.org/2830793005 > > Cr-Commit-Position: refs/heads/master@{#18215} > > Committed: https://chromium.googlesource.com/external/webrtc/+/0b8bfb9d98b7a2011d80bcdf3f430bc040370dad > > TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7475 > > Review-Url: https://codereview.webrtc.org/2893003002 > Cr-Commit-Position: refs/heads/master@{#18216} > Committed: https://chromium.googlesource.com/external/webrtc/+/56e119e2e8b30d2d41c55c3a7983b077a5262718 TBR=stefan@webrtc.org,noahric@chromium.org,glaznev@webrtc.org,sprang@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7475 Review-Url: https://codereview.webrtc.org/2901493002 Cr-Commit-Position: refs/heads/master@{#18228}
2017-05-23 03:32:16 -07:00
// Used for checking the single-threaded access of the encoder interface.
rtc::SequencedTaskChecker encoder_queue_;
// Store encoders in between calls to Release and InitEncode, so they don't
// have to be recreated. Remaining encoders are destroyed by the destructor.
std::stack<std::unique_ptr<VideoEncoder>> stored_encoders_;
};
} // namespace webrtc
#endif // MEDIA_ENGINE_SIMULCAST_ENCODER_ADAPTER_H_