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

Unified Diff: webrtc/modules/video_coding/generic_encoder.cc

Issue 1853813002: Add support for writing raw encoder output to .ivf files. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Cleanup Created 4 years, 9 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
Index: webrtc/modules/video_coding/generic_encoder.cc
diff --git a/webrtc/modules/video_coding/generic_encoder.cc b/webrtc/modules/video_coding/generic_encoder.cc
index 2463cf5c7a53020ed701539e91ab2514d628d16a..b9381f542c135d434b74180ece706d8f387a79ee 100644
--- a/webrtc/modules/video_coding/generic_encoder.cc
+++ b/webrtc/modules/video_coding/generic_encoder.cc
@@ -91,8 +91,6 @@ void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader* rtp) {
}
} // namespace
-// #define DEBUG_ENCODER_BIT_STREAM
-
VCMGenericEncoder::VCMGenericEncoder(
VideoEncoder* encoder,
VideoEncoderRateObserver* rate_observer,
@@ -131,6 +129,7 @@ int32_t VCMGenericEncoder::InitEncode(const VideoCodec* settings,
return -1;
}
encoder_->RegisterEncodeCompleteCallback(vcm_encoded_frame_callback_);
+ vcm_encoded_frame_callback_->codec_type_ = settings->codecType;
return 0;
}
@@ -234,22 +233,9 @@ VCMEncodedFrameCallback::VCMEncodedFrameCallback(
_payloadType(0),
_internalSource(false),
_rotation(kVideoRotation_0),
- post_encode_callback_(post_encode_callback)
-#ifdef DEBUG_ENCODER_BIT_STREAM
- ,
- _bitStreamAfterEncoder(NULL)
-#endif
-{
-#ifdef DEBUG_ENCODER_BIT_STREAM
- _bitStreamAfterEncoder = fopen("encoderBitStream.bit", "wb");
-#endif
-}
+ post_encode_callback_(post_encode_callback) {}
-VCMEncodedFrameCallback::~VCMEncodedFrameCallback() {
-#ifdef DEBUG_ENCODER_BIT_STREAM
- fclose(_bitStreamAfterEncoder);
-#endif
-}
+VCMEncodedFrameCallback::~VCMEncodedFrameCallback() {}
int32_t VCMEncodedFrameCallback::SetTransportCallback(
VCMPacketizationCallback* transport) {
@@ -269,12 +255,20 @@ int32_t VCMEncodedFrameCallback::Encoded(
return VCM_UNINITIALIZED;
}
-#ifdef DEBUG_ENCODER_BIT_STREAM
- if (_bitStreamAfterEncoder != NULL) {
- fwrite(encoded_image._buffer, 1, encoded_image._length,
- _bitStreamAfterEncoder);
+ if (kEnableFrameRecording) {
+ int layer = GetLayer(*codecSpecificInfo);
+ if (file_writers_[layer] == nullptr) {
+ uint64_t instance_id = reinterpret_cast<uint64_t>(this);
+ std::ostringstream oss;
+ oss << "bitstream_" << instance_id << "_" << layer << ".ivf";
+ file_writers_[layer] =
+ IvfFileWriter::Open(oss.str().c_str(), codec_type_);
+ }
+ if (file_writers_[layer].get() != nullptr) {
+ bool ok = file_writers_[layer]->WriteFrame(encoded_image);
+ RTC_DCHECK(ok);
+ }
}
-#endif
RTPVideoHeader rtpVideoHeader;
memset(&rtpVideoHeader, 0, sizeof(RTPVideoHeader));
@@ -309,4 +303,17 @@ void VCMEncodedFrameCallback::SignalLastEncoderImplementationUsed(
send_callback_->OnEncoderImplementationName(implementation_name);
}
+int VCMEncodedFrameCallback::GetLayer(const CodecSpecificInfo& codec_specific) {
+ switch (codec_type_) {
+ case kVideoCodecVP8:
+ return codec_specific.codecSpecific.VP8.simulcastIdx;
+ case kVideoCodecVP9:
+ case kVideoCodecH264:
+ return 1;
+ default:
+ RTC_NOTREACHED();
+ return -1;
+ }
+}
+
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698