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

Unified Diff: webrtc/video/video_send_stream.cc

Issue 2303273002: Expose Ivf logging through the native API (Closed)
Patch Set: Nit Created 4 years, 3 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
« no previous file with comments | « webrtc/video/video_send_stream.h ('k') | webrtc/video_receive_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/video_send_stream.cc
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index c8541fed12105b302a9e27d1403fac2d7ec5bb08..c998272aa9bf882d347bb53a5cbb1b0d42ab8caa 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -15,7 +15,9 @@
#include <utility>
#include <vector>
+#include "webrtc/common_types.h"
#include "webrtc/base/checks.h"
+#include "webrtc/base/file.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/trace_event.h"
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h"
@@ -267,6 +269,9 @@ class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver,
VideoSendStream::RtpStateMap GetRtpStates() const;
+ void EnableEncodedFrameRecording(const std::vector<rtc::PlatformFile>& files,
+ size_t byte_limit);
+
private:
class CheckEncoderActivityTask;
class EncoderReconfiguredTask;
@@ -316,9 +321,9 @@ class VideoSendStreamImpl : public webrtc::BitrateAllocatorObserver,
BitrateAllocator* const bitrate_allocator_;
VieRemb* const remb_;
- static const bool kEnableFrameRecording = false;
- static const int kMaxLayers = 3;
- std::unique_ptr<IvfFileWriter> file_writers_[kMaxLayers];
+ rtc::CriticalSection ivf_writers_crit_;
+ std::unique_ptr<IvfFileWriter> file_writers_[kMaxSimulcastStreams] GUARDED_BY(
+ ivf_writers_crit_);
int max_padding_bitrate_;
int encoder_min_bitrate_bps_;
@@ -615,6 +620,12 @@ bool VideoSendStream::DeliverRtcp(const uint8_t* packet, size_t length) {
return send_stream_->DeliverRtcp(packet, length);
}
+void VideoSendStream::EnableEncodedFrameRecording(
+ const std::vector<rtc::PlatformFile>& files,
+ size_t byte_limit) {
+ send_stream_->EnableEncodedFrameRecording(files, byte_limit);
+}
+
VideoSendStreamImpl::VideoSendStreamImpl(
SendStatisticsProxy* stats_proxy,
rtc::TaskQueue* worker_queue,
@@ -891,25 +902,16 @@ EncodedImageCallback::Result VideoSendStreamImpl::OnEncodedImage(
EncodedImageCallback::Result result = payload_router_.OnEncodedImage(
encoded_image, codec_specific_info, fragmentation);
- if (kEnableFrameRecording) {
- int layer = codec_specific_info->codecType == kVideoCodecVP8
- ? codec_specific_info->codecSpecific.VP8.simulcastIdx
- : 0;
- IvfFileWriter* file_writer;
- {
- if (file_writers_[layer] == nullptr) {
- std::ostringstream oss;
- oss << "send_bitstream_ssrc";
- for (uint32_t ssrc : config_->rtp.ssrcs)
- oss << "_" << ssrc;
- oss << "_layer" << layer << ".ivf";
- file_writers_[layer] =
- IvfFileWriter::Open(oss.str(), codec_specific_info->codecType);
- }
- file_writer = file_writers_[layer].get();
- }
- if (file_writer) {
- bool ok = file_writer->WriteFrame(encoded_image);
+ RTC_DCHECK(codec_specific_info);
+
+ int layer = codec_specific_info->codecType == kVideoCodecVP8
+ ? codec_specific_info->codecSpecific.VP8.simulcastIdx
+ : 0;
+ {
+ rtc::CritScope lock(&ivf_writers_crit_);
+ if (file_writers_[layer].get()) {
+ bool ok = file_writers_[layer]->WriteFrame(
+ encoded_image, codec_specific_info->codecType);
RTC_DCHECK(ok);
}
}
@@ -1064,6 +1066,27 @@ uint32_t VideoSendStreamImpl::OnBitrateUpdated(uint32_t bitrate_bps,
return protection_bitrate;
}
+void VideoSendStreamImpl::EnableEncodedFrameRecording(
+ const std::vector<rtc::PlatformFile>& files,
+ size_t byte_limit) {
+ {
+ rtc::CritScope lock(&ivf_writers_crit_);
+ for (unsigned int i = 0; i < kMaxSimulcastStreams; ++i) {
+ if (i < files.size()) {
+ file_writers_[i] = IvfFileWriter::Wrap(rtc::File(files[i]), byte_limit);
+ } else {
+ file_writers_[i].reset();
+ }
+ }
+ }
+
+ if (!files.empty()) {
+ // Make a keyframe appear as early as possible in the logs, to give actually
+ // decodable output.
+ vie_encoder_->SendKeyFrame();
+ }
+}
+
int VideoSendStreamImpl::ProtectionRequest(
const FecProtectionParams* delta_params,
const FecProtectionParams* key_params,
« no previous file with comments | « webrtc/video/video_send_stream.h ('k') | webrtc/video_receive_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698