[PATCH v9 6/8] libcamera: pipeline: Shift test pattern by 1 pixel left every frame
Jacopo Mondi
jacopo.mondi at ideasonboard.com
Tue Aug 27 18:39:06 CEST 2024
Hi
On Tue, Aug 20, 2024 at 04:23:37PM GMT, Harvey Yang wrote:
> From: Konami Shu <konamiz at google.com>
>
> - This write the buffer every frame
> - Shifting makes the frame rate dropped from about 160 to 40
>
> Patchset1->2
> - Use constant instead of using a magic number
>
> Patchset2->3
> - Make shiftLeft() private
>
> Signed-off-by: Konami Shu <konamiz at google.com>
> Co-developed-by: Harvey Yang <chenghaoyang at chromium.org>
> Co-developed-by: Yunke Cao <yunkec at chromium.org>
> Co-developed-by: Tomasz Figa <tfiga at chromium.org>
> ---
> .../pipeline/virtual/data/virtual.yaml | 4 +--
This can be squashed in 5/8
> .../virtual/test_pattern_generator.cpp | 36 +++++++++++++++++++
And this in 4/8
Or is there a reason I'm missing why these changes have to be
introduced later ?
> 2 files changed, 38 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/pipeline/virtual/data/virtual.yaml b/src/libcamera/pipeline/virtual/data/virtual.yaml
> index 4eb239e24..b8956f2d4 100644
> --- a/src/libcamera/pipeline/virtual/data/virtual.yaml
> +++ b/src/libcamera/pipeline/virtual/data/virtual.yaml
> @@ -28,8 +28,8 @@
> model: "Virtual Video Device1"
> "Virtual2":
> supported_formats:
> - - width: 100
> - height: 100
> + - width: 400
> + height: 300
> test_pattern: "lines"
> location: "front"
> model: "Virtual Video Device2"
> diff --git a/src/libcamera/pipeline/virtual/test_pattern_generator.cpp b/src/libcamera/pipeline/virtual/test_pattern_generator.cpp
> index 8dfe626e5..6df9b31e9 100644
> --- a/src/libcamera/pipeline/virtual/test_pattern_generator.cpp
> +++ b/src/libcamera/pipeline/virtual/test_pattern_generator.cpp
> @@ -28,6 +28,9 @@ void TestPatternGenerator::generateFrame(
>
> auto planes = mappedFrameBuffer.planes();
>
> + /* TODO: select whether to do shifting or not */
Who selects this ? and how ?
I'm a bit confused :)
> + shiftLeft(size);
> +
> /* Convert the template_ to the frame buffer */
> int ret = libyuv::ARGBToNV12(
> template_.get(), /*src_stride_argb=*/size.width * kARGBSize,
> @@ -39,6 +42,39 @@ void TestPatternGenerator::generateFrame(
> }
> }
>
> +void TestPatternGenerator::shiftLeft(const Size &size)
> +{
> + /* Store the first column temporarily */
> + uint8_t firstColumn[size.height * kARGBSize];
> + for (size_t h = 0; h < size.height; h++) {
> + unsigned int index = h * size.width * kARGBSize;
> + unsigned int index1 = h * kARGBSize;
> + firstColumn[index1] = template_[index];
> + firstColumn[index1 + 1] = template_[index + 1];
> + firstColumn[index1 + 2] = template_[index + 2];
> + firstColumn[index1 + 3] = 0x00;
> + }
> +
> + /* Overwrite template_ */
> + uint8_t *buf = template_.get();
> + for (size_t h = 0; h < size.height; h++) {
> + for (size_t w = 0; w < size.width - 1; w++) {
> + /* Overwrite with the pixel on the right */
> + unsigned int index = (h * size.width + w + 1) * kARGBSize;
> + *buf++ = template_[index]; // B
> + *buf++ = template_[index + 1]; // G
> + *buf++ = template_[index + 2]; // R
> + *buf++ = 0x00; // A
> + }
> + /* Overwrite the new last column with the original first column */
> + unsigned int index1 = h * kARGBSize;
> + *buf++ = firstColumn[index1]; // B
> + *buf++ = firstColumn[index1 + 1]; // G
> + *buf++ = firstColumn[index1 + 2]; // R
> + *buf++ = 0x00; // A
> + }
> +}
> +
> std::unique_ptr<ColorBarsGenerator> ColorBarsGenerator::create()
> {
> return std::make_unique<ColorBarsGenerator>();
> --
> 2.46.0.184.g6999bdac58-goog
>
More information about the libcamera-devel
mailing list