Simplify the VideoFrameDumpingDecoder API.
This CL changes the VideoFrameDumpingDecoder API to only expose a factory function creating the wrapper instead of the full class. Bug: webrtc:10902 Change-Id: I1e7e3a60accea1a7c48207d4262ed4bacacab4a2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150040 Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Markus Handell <handellm@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28924}
This commit is contained in:
parent
54d5d2c75b
commit
1c2f6372f6
@ -163,6 +163,7 @@ rtc_source_set("frame_dumping_decoder") {
|
||||
"../modules/video_coding:video_codec_interface",
|
||||
"../modules/video_coding:video_coding_utility",
|
||||
"../rtc_base:rtc_base_approved",
|
||||
"../rtc_base/system:file_wrapper",
|
||||
"//third_party/abseil-cpp/absl/memory",
|
||||
]
|
||||
}
|
||||
|
||||
@ -12,9 +12,34 @@
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "absl/memory/memory.h"
|
||||
#include "modules/video_coding/include/video_codec_interface.h"
|
||||
#include "modules/video_coding/utility/ivf_file_writer.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
|
||||
class FrameDumpingDecoder : public VideoDecoder {
|
||||
public:
|
||||
FrameDumpingDecoder(std::unique_ptr<VideoDecoder> decoder, FileWrapper file);
|
||||
~FrameDumpingDecoder() override;
|
||||
|
||||
int32_t InitDecode(const VideoCodec* codec_settings,
|
||||
int32_t number_of_cores) override;
|
||||
int32_t Decode(const EncodedImage& input_image,
|
||||
bool missing_frames,
|
||||
int64_t render_time_ms) override;
|
||||
int32_t RegisterDecodeCompleteCallback(
|
||||
DecodedImageCallback* callback) override;
|
||||
int32_t Release() override;
|
||||
bool PrefersLateDecoding() const override;
|
||||
const char* ImplementationName() const override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<VideoDecoder> decoder_;
|
||||
VideoCodecType codec_type_ = VideoCodecType::kVideoCodecGeneric;
|
||||
std::unique_ptr<IvfFileWriter> writer_;
|
||||
};
|
||||
|
||||
FrameDumpingDecoder::FrameDumpingDecoder(std::unique_ptr<VideoDecoder> decoder,
|
||||
FileWrapper file)
|
||||
@ -56,4 +81,13 @@ const char* FrameDumpingDecoder::ImplementationName() const {
|
||||
return decoder_->ImplementationName();
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<VideoDecoder> CreateFrameDumpingDecoderWrapper(
|
||||
std::unique_ptr<VideoDecoder> decoder,
|
||||
FileWrapper file) {
|
||||
return absl::make_unique<FrameDumpingDecoder>(std::move(decoder),
|
||||
std::move(file));
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -11,40 +11,17 @@
|
||||
#ifndef VIDEO_FRAME_DUMPING_DECODER_H_
|
||||
#define VIDEO_FRAME_DUMPING_DECODER_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "api/video/encoded_image.h"
|
||||
#include "api/video_codecs/video_codec.h"
|
||||
#include "api/video_codecs/video_decoder.h"
|
||||
#include "modules/video_coding/include/video_codec_interface.h"
|
||||
#include "modules/video_coding/utility/ivf_file_writer.h"
|
||||
#include "rtc_base/system/file_wrapper.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// A decoder wrapper that writes the encoded frames to a file.
|
||||
class FrameDumpingDecoder : public VideoDecoder {
|
||||
public:
|
||||
FrameDumpingDecoder(std::unique_ptr<VideoDecoder> decoder, FileWrapper file);
|
||||
~FrameDumpingDecoder() override;
|
||||
|
||||
int32_t InitDecode(const VideoCodec* codec_settings,
|
||||
int32_t number_of_cores) override;
|
||||
int32_t Decode(const EncodedImage& input_image,
|
||||
bool missing_frames,
|
||||
int64_t render_time_ms) override;
|
||||
int32_t RegisterDecodeCompleteCallback(
|
||||
DecodedImageCallback* callback) override;
|
||||
int32_t Release() override;
|
||||
bool PrefersLateDecoding() const override;
|
||||
const char* ImplementationName() const override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<VideoDecoder> decoder_;
|
||||
VideoCodecType codec_type_ = VideoCodecType::kVideoCodecGeneric;
|
||||
std::unique_ptr<IvfFileWriter> writer_;
|
||||
};
|
||||
// Creates a decoder wrapper that writes the encoded frames to an IVF file.
|
||||
std::unique_ptr<VideoDecoder> CreateFrameDumpingDecoderWrapper(
|
||||
std::unique_ptr<VideoDecoder> decoder,
|
||||
FileWrapper file);
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
|
||||
@ -286,7 +286,7 @@ std::unique_ptr<VideoDecoder> VideoQualityTest::CreateVideoDecoder(
|
||||
str << receive_logs_++;
|
||||
std::string path =
|
||||
params_.logging.encoded_frame_base_path + "." + str.str() + ".recv.ivf";
|
||||
decoder = absl::make_unique<FrameDumpingDecoder>(
|
||||
decoder = CreateFrameDumpingDecoderWrapper(
|
||||
std::move(decoder), FileWrapper::OpenWriteOnly(path));
|
||||
}
|
||||
return decoder;
|
||||
|
||||
@ -362,7 +362,7 @@ void VideoReceiveStream::Start() {
|
||||
ssb << decoded_output_file << "/webrtc_receive_stream_"
|
||||
<< this->config_.rtp.remote_ssrc << "-" << rtc::TimeMicros()
|
||||
<< ".ivf";
|
||||
video_decoder = absl::make_unique<FrameDumpingDecoder>(
|
||||
video_decoder = CreateFrameDumpingDecoderWrapper(
|
||||
std::move(video_decoder), FileWrapper::OpenWriteOnly(ssb.str()));
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user