mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Make frame generators return the target resolution.
Bug: b/269577953 Change-Id: Ib3db0017becb8a6a680997f59e0f9050a42a3a79 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/293940 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/main@{#39331}
This commit is contained in:
parent
cd7ea3ef46
commit
f1e392214d
5 changed files with 46 additions and 1 deletions
|
@ -23,6 +23,10 @@ namespace test {
|
||||||
|
|
||||||
class FrameGeneratorInterface {
|
class FrameGeneratorInterface {
|
||||||
public:
|
public:
|
||||||
|
struct Resolution {
|
||||||
|
size_t width;
|
||||||
|
size_t height;
|
||||||
|
};
|
||||||
struct VideoFrameData {
|
struct VideoFrameData {
|
||||||
VideoFrameData(rtc::scoped_refptr<VideoFrameBuffer> buffer,
|
VideoFrameData(rtc::scoped_refptr<VideoFrameBuffer> buffer,
|
||||||
absl::optional<VideoFrame::UpdateRect> update_rect)
|
absl::optional<VideoFrame::UpdateRect> update_rect)
|
||||||
|
@ -43,6 +47,11 @@ class FrameGeneratorInterface {
|
||||||
|
|
||||||
// Change the capture resolution.
|
// Change the capture resolution.
|
||||||
virtual void ChangeResolution(size_t width, size_t height) = 0;
|
virtual void ChangeResolution(size_t width, size_t height) = 0;
|
||||||
|
|
||||||
|
virtual Resolution GetResolution() const {
|
||||||
|
// TODO(mbonadei): Remove and make it pure virtual.
|
||||||
|
return {.width = 0, .height = 0};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace test
|
} // namespace test
|
||||||
|
|
|
@ -45,6 +45,12 @@ void SquareGenerator::ChangeResolution(size_t width, size_t height) {
|
||||||
RTC_CHECK(height_ > 0);
|
RTC_CHECK(height_ > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameGeneratorInterface::Resolution SquareGenerator::GetResolution() const {
|
||||||
|
MutexLock lock(&mutex_);
|
||||||
|
return {.width = static_cast<size_t>(width_),
|
||||||
|
.height = static_cast<size_t>(height_)};
|
||||||
|
}
|
||||||
|
|
||||||
rtc::scoped_refptr<I420Buffer> SquareGenerator::CreateI420Buffer(int width,
|
rtc::scoped_refptr<I420Buffer> SquareGenerator::CreateI420Buffer(int width,
|
||||||
int height) {
|
int height) {
|
||||||
rtc::scoped_refptr<I420Buffer> buffer(I420Buffer::Create(width, height));
|
rtc::scoped_refptr<I420Buffer> buffer(I420Buffer::Create(width, height));
|
||||||
|
@ -205,6 +211,10 @@ bool YuvFileGenerator::ReadNextFrame() {
|
||||||
return frame_index_ != prev_frame_index || file_index_ != prev_file_index;
|
return frame_index_ != prev_frame_index || file_index_ != prev_file_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameGeneratorInterface::Resolution YuvFileGenerator::GetResolution() const {
|
||||||
|
return {.width = width_, .height = height_};
|
||||||
|
}
|
||||||
|
|
||||||
NV12FileGenerator::NV12FileGenerator(std::vector<FILE*> files,
|
NV12FileGenerator::NV12FileGenerator(std::vector<FILE*> files,
|
||||||
size_t width,
|
size_t width,
|
||||||
size_t height,
|
size_t height,
|
||||||
|
@ -247,6 +257,10 @@ FrameGeneratorInterface::VideoFrameData NV12FileGenerator::NextFrame() {
|
||||||
return VideoFrameData(last_read_buffer_, update_rect);
|
return VideoFrameData(last_read_buffer_, update_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameGeneratorInterface::Resolution NV12FileGenerator::GetResolution() const {
|
||||||
|
return {.width = width_, .height = height_};
|
||||||
|
}
|
||||||
|
|
||||||
bool NV12FileGenerator::ReadNextFrame() {
|
bool NV12FileGenerator::ReadNextFrame() {
|
||||||
size_t prev_frame_index = frame_index_;
|
size_t prev_frame_index = frame_index_;
|
||||||
size_t prev_file_index = file_index_;
|
size_t prev_file_index = file_index_;
|
||||||
|
@ -287,6 +301,11 @@ FrameGeneratorInterface::VideoFrameData SlideGenerator::NextFrame() {
|
||||||
return VideoFrameData(buffer_, absl::nullopt);
|
return VideoFrameData(buffer_, absl::nullopt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameGeneratorInterface::Resolution SlideGenerator::GetResolution() const {
|
||||||
|
return {.width = static_cast<size_t>(width_),
|
||||||
|
.height = static_cast<size_t>(height_)};
|
||||||
|
}
|
||||||
|
|
||||||
void SlideGenerator::GenerateNewFrame() {
|
void SlideGenerator::GenerateNewFrame() {
|
||||||
// The squares should have a varying order of magnitude in order
|
// The squares should have a varying order of magnitude in order
|
||||||
// to simulate variation in the slides' complexity.
|
// to simulate variation in the slides' complexity.
|
||||||
|
@ -390,6 +409,12 @@ ScrollingImageFrameGenerator::NextFrame() {
|
||||||
return current_frame_;
|
return current_frame_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameGeneratorInterface::Resolution
|
||||||
|
ScrollingImageFrameGenerator::GetResolution() const {
|
||||||
|
return {.width = static_cast<size_t>(target_width_),
|
||||||
|
.height = static_cast<size_t>(target_height_)};
|
||||||
|
}
|
||||||
|
|
||||||
void ScrollingImageFrameGenerator::UpdateSourceFrame(size_t frame_num) {
|
void ScrollingImageFrameGenerator::UpdateSourceFrame(size_t frame_num) {
|
||||||
VideoFrame::UpdateRect acc_update{0, 0, 0, 0};
|
VideoFrame::UpdateRect acc_update{0, 0, 0, 0};
|
||||||
while (current_frame_num_ != frame_num) {
|
while (current_frame_num_ != frame_num) {
|
||||||
|
|
|
@ -38,6 +38,7 @@ class SquareGenerator : public FrameGeneratorInterface {
|
||||||
|
|
||||||
void ChangeResolution(size_t width, size_t height) override;
|
void ChangeResolution(size_t width, size_t height) override;
|
||||||
VideoFrameData NextFrame() override;
|
VideoFrameData NextFrame() override;
|
||||||
|
Resolution GetResolution() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
rtc::scoped_refptr<I420Buffer> CreateI420Buffer(int width, int height);
|
rtc::scoped_refptr<I420Buffer> CreateI420Buffer(int width, int height);
|
||||||
|
@ -59,7 +60,7 @@ class SquareGenerator : public FrameGeneratorInterface {
|
||||||
const uint8_t yuv_a_;
|
const uint8_t yuv_a_;
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutex mutex_;
|
mutable Mutex mutex_;
|
||||||
const OutputType type_;
|
const OutputType type_;
|
||||||
int width_ RTC_GUARDED_BY(&mutex_);
|
int width_ RTC_GUARDED_BY(&mutex_);
|
||||||
int height_ RTC_GUARDED_BY(&mutex_);
|
int height_ RTC_GUARDED_BY(&mutex_);
|
||||||
|
@ -79,6 +80,7 @@ class YuvFileGenerator : public FrameGeneratorInterface {
|
||||||
void ChangeResolution(size_t width, size_t height) override {
|
void ChangeResolution(size_t width, size_t height) override {
|
||||||
RTC_LOG(LS_WARNING) << "YuvFileGenerator::ChangeResolution not implemented";
|
RTC_LOG(LS_WARNING) << "YuvFileGenerator::ChangeResolution not implemented";
|
||||||
}
|
}
|
||||||
|
Resolution GetResolution() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Returns true if the new frame was loaded.
|
// Returns true if the new frame was loaded.
|
||||||
|
@ -111,6 +113,7 @@ class NV12FileGenerator : public FrameGeneratorInterface {
|
||||||
RTC_LOG(LS_WARNING)
|
RTC_LOG(LS_WARNING)
|
||||||
<< "NV12FileGenerator::ChangeResolution not implemented";
|
<< "NV12FileGenerator::ChangeResolution not implemented";
|
||||||
}
|
}
|
||||||
|
Resolution GetResolution() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Returns true if the new frame was loaded.
|
// Returns true if the new frame was loaded.
|
||||||
|
@ -140,6 +143,7 @@ class SlideGenerator : public FrameGeneratorInterface {
|
||||||
void ChangeResolution(size_t width, size_t height) override {
|
void ChangeResolution(size_t width, size_t height) override {
|
||||||
RTC_LOG(LS_WARNING) << "SlideGenerator::ChangeResolution not implemented";
|
RTC_LOG(LS_WARNING) << "SlideGenerator::ChangeResolution not implemented";
|
||||||
}
|
}
|
||||||
|
Resolution GetResolution() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Generates some randomly sized and colored squares scattered
|
// Generates some randomly sized and colored squares scattered
|
||||||
|
@ -171,6 +175,7 @@ class ScrollingImageFrameGenerator : public FrameGeneratorInterface {
|
||||||
RTC_LOG(LS_WARNING)
|
RTC_LOG(LS_WARNING)
|
||||||
<< "ScrollingImageFrameGenerator::ChangeResolution not implemented";
|
<< "ScrollingImageFrameGenerator::ChangeResolution not implemented";
|
||||||
}
|
}
|
||||||
|
Resolution GetResolution() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateSourceFrame(size_t frame_num);
|
void UpdateSourceFrame(size_t frame_num);
|
||||||
|
|
|
@ -105,6 +105,11 @@ void IvfVideoFrameGenerator::ChangeResolution(size_t width, size_t height) {
|
||||||
height_ = height;
|
height_ = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FrameGeneratorInterface::Resolution IvfVideoFrameGenerator::GetResolution()
|
||||||
|
const {
|
||||||
|
return {.width = width_, .height = height_};
|
||||||
|
}
|
||||||
|
|
||||||
int32_t IvfVideoFrameGenerator::DecodedCallback::Decoded(
|
int32_t IvfVideoFrameGenerator::DecodedCallback::Decoded(
|
||||||
VideoFrame& decoded_image) {
|
VideoFrame& decoded_image) {
|
||||||
Decoded(decoded_image, 0, 0);
|
Decoded(decoded_image, 0, 0);
|
||||||
|
|
|
@ -35,6 +35,7 @@ class IvfVideoFrameGenerator : public FrameGeneratorInterface {
|
||||||
|
|
||||||
VideoFrameData NextFrame() override;
|
VideoFrameData NextFrame() override;
|
||||||
void ChangeResolution(size_t width, size_t height) override;
|
void ChangeResolution(size_t width, size_t height) override;
|
||||||
|
Resolution GetResolution() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class DecodedCallback : public DecodedImageCallback {
|
class DecodedCallback : public DecodedImageCallback {
|
||||||
|
|
Loading…
Reference in a new issue