| Index: webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| index 9872766dae253519e74dba0954477220ee9dd233..595cea6af61600a30e0b365d394053756cbb1902 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| @@ -21,16 +21,17 @@
|
| #include "libyuv/convert.h" // NOLINT
|
|
|
| #include "webrtc/base/checks.h"
|
| +#include "webrtc/base/random.h"
|
| #include "webrtc/base/timeutils.h"
|
| #include "webrtc/base/trace_event.h"
|
| #include "webrtc/common_types.h"
|
| #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
| #include "webrtc/modules/include/module_common_types.h"
|
| -#include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
| #include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h"
|
| #include "webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h"
|
| #include "webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h"
|
| #include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h"
|
| +#include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
| #include "webrtc/system_wrappers/include/clock.h"
|
| #include "webrtc/system_wrappers/include/field_trial.h"
|
| #include "webrtc/system_wrappers/include/metrics.h"
|
| @@ -165,10 +166,12 @@ VP8EncoderImpl::VP8EncoderImpl()
|
| number_of_cores_(0),
|
| rc_max_intra_target_(0),
|
| key_frame_request_(kMaxSimulcastStreams, false) {
|
| - uint32_t seed = rtc::Time32();
|
| - srand(seed);
|
| -
|
| + Random random(rtc::TimeMicros());
|
| picture_id_.reserve(kMaxSimulcastStreams);
|
| + for (int i = 0; i < kMaxSimulcastStreams; ++i) {
|
| + picture_id_.push_back(random.Rand<uint16_t>() & 0x7FFF);
|
| + tl0_pic_idx_.push_back(random.Rand<uint8_t>());
|
| + }
|
| temporal_layers_.reserve(kMaxSimulcastStreams);
|
| raw_images_.reserve(kMaxSimulcastStreams);
|
| encoded_images_.reserve(kMaxSimulcastStreams);
|
| @@ -205,10 +208,10 @@ int VP8EncoderImpl::Release() {
|
| vpx_img_free(&raw_images_.back());
|
| raw_images_.pop_back();
|
| }
|
| - while (!temporal_layers_.empty()) {
|
| - delete temporal_layers_.back();
|
| - temporal_layers_.pop_back();
|
| + for (size_t i = 0; i < temporal_layers_.size(); ++i) {
|
| + tl0_pic_idx_[i] = temporal_layers_[i]->Tl0PicIdx();
|
| }
|
| + temporal_layers_.clear();
|
| inited_ = false;
|
| return ret_val;
|
| }
|
| @@ -293,14 +296,15 @@ void VP8EncoderImpl::SetupTemporalLayers(int num_streams,
|
| RTC_DCHECK(codec.VP8().tl_factory != nullptr);
|
| const TemporalLayersFactory* tl_factory = codec.VP8().tl_factory;
|
| if (num_streams == 1) {
|
| - temporal_layers_.push_back(
|
| - tl_factory->Create(0, num_temporal_layers, rand()));
|
| + temporal_layers_.emplace_back(
|
| + tl_factory->Create(0, num_temporal_layers, tl0_pic_idx_[0]));
|
| } else {
|
| for (int i = 0; i < num_streams; ++i) {
|
| RTC_CHECK_GT(num_temporal_layers, 0);
|
| int layers = std::max(static_cast<uint8_t>(1),
|
| codec.simulcastStream[i].numberOfTemporalLayers);
|
| - temporal_layers_.push_back(tl_factory->Create(i, layers, rand()));
|
| + temporal_layers_.emplace_back(
|
| + tl_factory->Create(i, layers, tl0_pic_idx_[i]));
|
| }
|
| }
|
| }
|
| @@ -357,7 +361,6 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
|
| codec_.simulcastStream[0].height = codec_.height;
|
| }
|
|
|
| - picture_id_.resize(number_of_streams);
|
| encoded_images_.resize(number_of_streams);
|
| encoders_.resize(number_of_streams);
|
| configurations_.resize(number_of_streams);
|
| @@ -382,8 +385,6 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
|
| downsampling_factors_[number_of_streams - 1].den = 1;
|
| }
|
| for (int i = 0; i < number_of_streams; ++i) {
|
| - // Random start, 16 bits is enough.
|
| - picture_id_[i] = static_cast<uint16_t>(rand()) & 0x7FFF; // NOLINT
|
| // allocate memory for encoded image
|
| if (encoded_images_[i]._buffer != NULL) {
|
| delete[] encoded_images_[i]._buffer;
|
|
|