Reland "Add a FrameToRender argument struct as input to FrameToRender"

This is a reland of commit 01f91c81f7660be842fa44e96bf804a8b2402f47

Original change's description:
> Add a FrameToRender argument struct as input to FrameToRender
>
> This is to make it easier to add new arguments to the method in the
> future. We will remove the already existing method accordingly to WebRTCs deprecation rules.
>
> Bug: webrtc:358039777
> Change-Id: Id0706de5216fbd0182cac80ebfccfc4a6a055ee8
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/364642
> Commit-Queue: Fanny Linderborg <linderborg@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Auto-Submit: Fanny Linderborg <linderborg@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#43181}

Bug: webrtc:358039777
Change-Id: I404bb9660d9f4436c0658814fd3ac7d74e483f0f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/364900
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Fanny Linderborg <linderborg@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43188}
This commit is contained in:
Fanny Linderborg 2024-10-07 18:13:59 +02:00 committed by WebRTC LUCI CQ
parent 3d2e730ca6
commit 215401f651
8 changed files with 85 additions and 7 deletions

View File

@ -288,7 +288,9 @@ rtc_library("video_codec_interface") {
]
deps = [
":codec_globals_headers",
"../../api/units:time_delta",
"../../api/video:video_frame",
"../../api/video:video_frame_type",
"../../api/video:video_rtp_headers",
"../../api/video_codecs:scalability_mode",
"../../api/video_codecs:video_codecs_api",

View File

@ -220,9 +220,11 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage,
decodedImage.set_timestamp_us(
frame_info->render_time ? frame_info->render_time->us() : -1);
_receiveCallback->FrameToRender(decodedImage, qp, decode_time,
frame_info->content_type,
frame_info->frame_type);
_receiveCallback->FrameToRender({.video_frame = decodedImage,
.qp = qp,
.decode_time = decode_time,
.content_type = frame_info->content_type,
.frame_type = frame_info->frame_type});
}
void VCMDecodedFrameCallback::OnDecoderInfoChanged(

View File

@ -17,6 +17,10 @@
#include "api/array_view.h"
#include "api/rtp_packet_infos.h"
#include "api/units/time_delta.h"
#include "api/video/video_content_type.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "api/video_codecs/video_decoder.h"
#include "common_video/test/utilities.h"
#include "modules/video_coding/timing/timing.h"
@ -37,7 +41,15 @@ class ReceiveCallback : public VCMReceiveCallback {
TimeDelta decode_time,
VideoContentType content_type,
VideoFrameType frame_type) override {
frames_.push_back(frame);
return FrameToRender({.video_frame = frame,
.qp = qp,
.decode_time = decode_time,
.content_type = content_type,
.frame_type = frame_type});
}
int32_t FrameToRender(const struct FrameToRender& arguments) override {
frames_.push_back(arguments.video_frame);
return 0;
}

View File

@ -16,8 +16,10 @@
#include <optional>
#include "api/units/time_delta.h"
#include "api/video/video_content_type.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "api/video/video_timing.h"
#include "api/video_codecs/video_decoder.h"
@ -51,11 +53,26 @@ enum VCMVideoProtection {
// rendered.
class VCMReceiveCallback {
public:
struct FrameToRender {
VideoFrame& video_frame;
std::optional<uint8_t> qp;
TimeDelta decode_time;
VideoContentType content_type;
VideoFrameType frame_type;
};
// TODO: bugs.webrtc.org/358039777 - Delete this function.
virtual int32_t FrameToRender(VideoFrame& videoFrame, // NOLINT
std::optional<uint8_t> qp,
TimeDelta decode_time,
VideoContentType content_type,
VideoFrameType frame_type) = 0;
// TODO: bugs.webrtc.org/358039777 - Make this pure virtual.
virtual int32_t FrameToRender(const struct FrameToRender& arguments) {
return FrameToRender(arguments.video_frame, arguments.qp,
arguments.decode_time, arguments.content_type,
arguments.frame_type);
}
virtual void OnDroppedFrames(uint32_t frames_dropped);

View File

@ -10,12 +10,18 @@
#include "modules/video_coding/video_receiver2.h"
#include <cstdint>
#include <memory>
#include <optional>
#include <utility>
#include "api/test/mock_video_decoder.h"
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "api/video/encoded_frame.h"
#include "api/video/video_content_type.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "common_video/test/utilities.h"
#include "modules/video_coding/decoder_database.h"
#include "modules/video_coding/timing/timing.h"
@ -43,6 +49,10 @@ class MockVCMReceiveCallback : public VCMReceiveCallback {
VideoContentType,
VideoFrameType),
(override));
MOCK_METHOD(int32_t,
FrameToRender,
(const struct FrameToRender&),
(override));
MOCK_METHOD(void, OnIncomingPayloadType, (int), (override));
MOCK_METHOD(void,
OnDecoderInfoChanged,

View File

@ -8,12 +8,20 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include <cstdint>
#include <optional>
#include "api/test/mock_video_decoder.h"
#include "api/units/time_delta.h"
#include "api/video/video_content_type.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "api/video_codecs/video_decoder.h"
#include "modules/video_coding/include/video_coding.h"
#include "modules/video_coding/timing/timing.h"
#include "modules/video_coding/video_coding_impl.h"
#include "system_wrappers/include/clock.h"
#include "test/gmock.h"
#include "test/gtest.h"
#include "test/scoped_key_value_config.h"
@ -46,6 +54,10 @@ class MockVCMReceiveCallback : public VCMReceiveCallback {
VideoContentType,
VideoFrameType),
(override));
MOCK_METHOD(int32_t,
FrameToRender,
(const struct FrameToRender&),
(override));
MOCK_METHOD(void, OnIncomingPayloadType, (int), (override));
MOCK_METHOD(void,
OnDecoderInfoChanged,

View File

@ -10,6 +10,13 @@
#include "video/video_stream_decoder2.h"
#include <cstdint>
#include <optional>
#include "api/units/time_delta.h"
#include "api/video/video_content_type.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "api/video_codecs/video_decoder.h"
#include "modules/video_coding/video_receiver2.h"
#include "rtc_base/checks.h"
@ -48,9 +55,18 @@ int32_t VideoStreamDecoder::FrameToRender(VideoFrame& video_frame,
TimeDelta decode_time,
VideoContentType content_type,
VideoFrameType frame_type) {
receive_stats_callback_->OnDecodedFrame(video_frame, qp, decode_time,
content_type, frame_type);
incoming_video_stream_->OnFrame(video_frame);
return FrameToRender({.video_frame = video_frame,
.qp = qp,
.decode_time = decode_time,
.content_type = content_type,
.frame_type = frame_type});
}
int32_t VideoStreamDecoder::FrameToRender(
const struct FrameToRender& arguments) {
receive_stats_callback_->OnDecodedFrame(
arguments.video_frame, arguments.qp, arguments.decode_time,
arguments.content_type, arguments.frame_type);
incoming_video_stream_->OnFrame(arguments.video_frame);
return 0;
}

View File

@ -11,12 +11,18 @@
#ifndef VIDEO_VIDEO_STREAM_DECODER2_H_
#define VIDEO_VIDEO_STREAM_DECODER2_H_
#include <cstdint>
#include <list>
#include <map>
#include <memory>
#include <optional>
#include <vector>
#include "api/scoped_refptr.h"
#include "api/units/time_delta.h"
#include "api/video/video_content_type.h"
#include "api/video/video_frame.h"
#include "api/video/video_frame_type.h"
#include "api/video/video_sink_interface.h"
#include "api/video_codecs/video_decoder.h"
#include "modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
@ -45,6 +51,7 @@ class VideoStreamDecoder : public VCMReceiveCallback {
TimeDelta decode_time,
VideoContentType content_type,
VideoFrameType frame_type) override;
int32_t FrameToRender(const struct FrameToRender& arguments) override;
void OnDroppedFrames(uint32_t frames_dropped) override;
void OnIncomingPayloadType(int payload_type) override;
void OnDecoderInfoChanged(