| 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
|
|
|