[v2,3/4] apps: cam: sdl_texture: Add `SDLTexture1Plane`
diff mbox series

Message ID 20250425104703.805170-4-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • apps: cam: sdl_sink: Support more RGB and YUV formats
Related show

Commit Message

Barnabás Pőcze April 25, 2025, 10:47 a.m. UTC
`SDLTextureYUYV` uses `SDL_PIXELFORMAT_YUY2`, which is a single plane
format. To support other single plane formats, replace `SDLTextureYUYV`
with `SDLTexture1Plane` that can be instantiated with an arbitrary SDL
pixel format and that uses `SDL_UpdateTexture()` to update the texture
using exactly a single plane.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 src/apps/cam/sdl_sink.cpp         |  3 ++-
 src/apps/cam/sdl_texture_1plane.h | 18 ++++++++++++++++++
 src/apps/cam/sdl_texture_yuv.cpp  | 10 ----------
 src/apps/cam/sdl_texture_yuv.h    |  7 -------
 4 files changed, 20 insertions(+), 18 deletions(-)
 create mode 100644 src/apps/cam/sdl_texture_1plane.h

Comments

Kieran Bingham April 25, 2025, 12:05 p.m. UTC | #1
Quoting Barnabás Pőcze (2025-04-25 11:47:02)
> `SDLTextureYUYV` uses `SDL_PIXELFORMAT_YUY2`, which is a single plane
> format. To support other single plane formats, replace `SDLTextureYUYV`
> with `SDLTexture1Plane` that can be instantiated with an arbitrary SDL
> pixel format and that uses `SDL_UpdateTexture()` to update the texture
> using exactly a single plane.
> 
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

Looks neat,


Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/apps/cam/sdl_sink.cpp         |  3 ++-
>  src/apps/cam/sdl_texture_1plane.h | 18 ++++++++++++++++++
>  src/apps/cam/sdl_texture_yuv.cpp  | 10 ----------
>  src/apps/cam/sdl_texture_yuv.h    |  7 -------
>  4 files changed, 20 insertions(+), 18 deletions(-)
>  create mode 100644 src/apps/cam/sdl_texture_1plane.h
> 
> diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp
> index 8355dd5ed..b295675dc 100644
> --- a/src/apps/cam/sdl_sink.cpp
> +++ b/src/apps/cam/sdl_sink.cpp
> @@ -22,6 +22,7 @@
>  #include "../common/event_loop.h"
>  #include "../common/image.h"
>  
> +#include "sdl_texture_1plane.h"
>  #ifdef HAVE_LIBJPEG
>  #include "sdl_texture_mjpg.h"
>  #endif
> @@ -74,7 +75,7 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config)
>                 break;
>  #endif
>         case libcamera::formats::YUYV:
> -               texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride);
> +               texture_ = std::make_unique<SDLTexture1Plane>(rect_, SDL_PIXELFORMAT_YUY2, cfg.stride);
>                 break;
>         default:
>                 std::cerr << "Unsupported pixel format "
> diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h
> new file mode 100644
> index 000000000..ded35c589
> --- /dev/null
> +++ b/src/apps/cam/sdl_texture_1plane.h
> @@ -0,0 +1,18 @@
> +#pragma once
> +
> +#include <assert.h>
> +
> +#include "sdl_texture.h"
> +
> +class SDLTexture1Plane final : public SDLTexture
> +{
> +public:
> +       using SDLTexture::SDLTexture;
> +
> +       void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override
> +       {
> +               assert(data.size() == 1);
> +               assert(data[0].size_bytes() == std::size_t(rect_.h * stride_));
> +               SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> +       }
> +};
> diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp
> index 7e2ce3f49..bed297d28 100644
> --- a/src/apps/cam/sdl_texture_yuv.cpp
> +++ b/src/apps/cam/sdl_texture_yuv.cpp
> @@ -21,13 +21,3 @@ void SDLTextureNV12::update(libcamera::Span<const libcamera::Span<const uint8_t>
>                             data[1].data(), stride_);
>  }
>  #endif
> -
> -SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride)
> -       : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride)
> -{
> -}
> -
> -void SDLTextureYUYV::update(libcamera::Span<const libcamera::Span<const uint8_t>> data)
> -{
> -       SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> -}
> diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h
> index db877f503..c271f901b 100644
> --- a/src/apps/cam/sdl_texture_yuv.h
> +++ b/src/apps/cam/sdl_texture_yuv.h
> @@ -17,10 +17,3 @@ public:
>         void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
>  };
>  #endif
> -
> -class SDLTextureYUYV : public SDLTexture
> -{
> -public:
> -       SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride);
> -       void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
> -};
> -- 
> 2.49.0
>
Laurent Pinchart April 25, 2025, 12:41 p.m. UTC | #2
Hi Barnabás,

Thank you for the patch.

On Fri, Apr 25, 2025 at 12:47:02PM +0200, Barnabás Pőcze wrote:
> `SDLTextureYUYV` uses `SDL_PIXELFORMAT_YUY2`, which is a single plane
> format. To support other single plane formats, replace `SDLTextureYUYV`
> with `SDLTexture1Plane` that can be instantiated with an arbitrary SDL
> pixel format and that uses `SDL_UpdateTexture()` to update the texture
> using exactly a single plane.
> 
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  src/apps/cam/sdl_sink.cpp         |  3 ++-
>  src/apps/cam/sdl_texture_1plane.h | 18 ++++++++++++++++++
>  src/apps/cam/sdl_texture_yuv.cpp  | 10 ----------
>  src/apps/cam/sdl_texture_yuv.h    |  7 -------
>  4 files changed, 20 insertions(+), 18 deletions(-)
>  create mode 100644 src/apps/cam/sdl_texture_1plane.h
> 
> diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp
> index 8355dd5ed..b295675dc 100644
> --- a/src/apps/cam/sdl_sink.cpp
> +++ b/src/apps/cam/sdl_sink.cpp
> @@ -22,6 +22,7 @@
>  #include "../common/event_loop.h"
>  #include "../common/image.h"
>  
> +#include "sdl_texture_1plane.h"
>  #ifdef HAVE_LIBJPEG
>  #include "sdl_texture_mjpg.h"
>  #endif
> @@ -74,7 +75,7 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config)
>  		break;
>  #endif
>  	case libcamera::formats::YUYV:
> -		texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride);
> +		texture_ = std::make_unique<SDLTexture1Plane>(rect_, SDL_PIXELFORMAT_YUY2, cfg.stride);
>  		break;
>  	default:
>  		std::cerr << "Unsupported pixel format "
> diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h
> new file mode 100644
> index 000000000..ded35c589
> --- /dev/null
> +++ b/src/apps/cam/sdl_texture_1plane.h
> @@ -0,0 +1,18 @@
> +#pragma once
> +
> +#include <assert.h>
> +
> +#include "sdl_texture.h"
> +
> +class SDLTexture1Plane final : public SDLTexture
> +{
> +public:
> +	using SDLTexture::SDLTexture;
> +
> +	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override
> +	{
> +		assert(data.size() == 1);
> +		assert(data[0].size_bytes() == std::size_t(rect_.h * stride_));
> +		SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> +	}

Do we need to inline this function, can't it go to a .cpp file ?

With that handled,

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +};
> diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp
> index 7e2ce3f49..bed297d28 100644
> --- a/src/apps/cam/sdl_texture_yuv.cpp
> +++ b/src/apps/cam/sdl_texture_yuv.cpp
> @@ -21,13 +21,3 @@ void SDLTextureNV12::update(libcamera::Span<const libcamera::Span<const uint8_t>
>  			    data[1].data(), stride_);
>  }
>  #endif
> -
> -SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride)
> -	: SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride)
> -{
> -}
> -
> -void SDLTextureYUYV::update(libcamera::Span<const libcamera::Span<const uint8_t>> data)
> -{
> -	SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> -}
> diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h
> index db877f503..c271f901b 100644
> --- a/src/apps/cam/sdl_texture_yuv.h
> +++ b/src/apps/cam/sdl_texture_yuv.h
> @@ -17,10 +17,3 @@ public:
>  	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
>  };
>  #endif
> -
> -class SDLTextureYUYV : public SDLTexture
> -{
> -public:
> -	SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride);
> -	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
> -};
Barnabás Pőcze April 25, 2025, 12:59 p.m. UTC | #3
Hi


2025. 04. 25. 14:41 keltezéssel, Laurent Pinchart írta:
> Hi Barnabás,
> 
> Thank you for the patch.
> 
> On Fri, Apr 25, 2025 at 12:47:02PM +0200, Barnabás Pőcze wrote:
>> `SDLTextureYUYV` uses `SDL_PIXELFORMAT_YUY2`, which is a single plane
>> format. To support other single plane formats, replace `SDLTextureYUYV`
>> with `SDLTexture1Plane` that can be instantiated with an arbitrary SDL
>> pixel format and that uses `SDL_UpdateTexture()` to update the texture
>> using exactly a single plane.
>>
>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
>> ---
>>   src/apps/cam/sdl_sink.cpp         |  3 ++-
>>   src/apps/cam/sdl_texture_1plane.h | 18 ++++++++++++++++++
>>   src/apps/cam/sdl_texture_yuv.cpp  | 10 ----------
>>   src/apps/cam/sdl_texture_yuv.h    |  7 -------
>>   4 files changed, 20 insertions(+), 18 deletions(-)
>>   create mode 100644 src/apps/cam/sdl_texture_1plane.h
>>
>> diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp
>> index 8355dd5ed..b295675dc 100644
>> --- a/src/apps/cam/sdl_sink.cpp
>> +++ b/src/apps/cam/sdl_sink.cpp
>> @@ -22,6 +22,7 @@
>>   #include "../common/event_loop.h"
>>   #include "../common/image.h"
>>   
>> +#include "sdl_texture_1plane.h"
>>   #ifdef HAVE_LIBJPEG
>>   #include "sdl_texture_mjpg.h"
>>   #endif
>> @@ -74,7 +75,7 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config)
>>   		break;
>>   #endif
>>   	case libcamera::formats::YUYV:
>> -		texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride);
>> +		texture_ = std::make_unique<SDLTexture1Plane>(rect_, SDL_PIXELFORMAT_YUY2, cfg.stride);
>>   		break;
>>   	default:
>>   		std::cerr << "Unsupported pixel format "
>> diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h
>> new file mode 100644
>> index 000000000..ded35c589
>> --- /dev/null
>> +++ b/src/apps/cam/sdl_texture_1plane.h
>> @@ -0,0 +1,18 @@
>> +#pragma once
>> +
>> +#include <assert.h>
>> +
>> +#include "sdl_texture.h"
>> +
>> +class SDLTexture1Plane final : public SDLTexture
>> +{
>> +public:
>> +	using SDLTexture::SDLTexture;
>> +
>> +	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override
>> +	{
>> +		assert(data.size() == 1);
>> +		assert(data[0].size_bytes() == std::size_t(rect_.h * stride_));
>> +		SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
>> +	}
> 
> Do we need to inline this function, can't it go to a .cpp file ?

It could certainly be in a cpp file, I can move it if you want me to. I just kept it here
for simplicity and because it is only used in a single cpp file.


Regards,
Barnabás Pőcze

> 
> With that handled,
> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 
>> +};
>> diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp
>> index 7e2ce3f49..bed297d28 100644
>> --- a/src/apps/cam/sdl_texture_yuv.cpp
>> +++ b/src/apps/cam/sdl_texture_yuv.cpp
>> @@ -21,13 +21,3 @@ void SDLTextureNV12::update(libcamera::Span<const libcamera::Span<const uint8_t>
>>   			    data[1].data(), stride_);
>>   }
>>   #endif
>> -
>> -SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride)
>> -	: SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride)
>> -{
>> -}
>> -
>> -void SDLTextureYUYV::update(libcamera::Span<const libcamera::Span<const uint8_t>> data)
>> -{
>> -	SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
>> -}
>> diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h
>> index db877f503..c271f901b 100644
>> --- a/src/apps/cam/sdl_texture_yuv.h
>> +++ b/src/apps/cam/sdl_texture_yuv.h
>> @@ -17,10 +17,3 @@ public:
>>   	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
>>   };
>>   #endif
>> -
>> -class SDLTextureYUYV : public SDLTexture
>> -{
>> -public:
>> -	SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride);
>> -	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
>> -};
>
Laurent Pinchart April 25, 2025, 2:42 p.m. UTC | #4
On Fri, Apr 25, 2025 at 02:59:18PM +0200, Barnabás Pőcze wrote:
> 2025. 04. 25. 14:41 keltezéssel, Laurent Pinchart írta:
> > On Fri, Apr 25, 2025 at 12:47:02PM +0200, Barnabás Pőcze wrote:
> >> `SDLTextureYUYV` uses `SDL_PIXELFORMAT_YUY2`, which is a single plane
> >> format. To support other single plane formats, replace `SDLTextureYUYV`
> >> with `SDLTexture1Plane` that can be instantiated with an arbitrary SDL
> >> pixel format and that uses `SDL_UpdateTexture()` to update the texture
> >> using exactly a single plane.
> >>
> >> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> >> ---
> >>   src/apps/cam/sdl_sink.cpp         |  3 ++-
> >>   src/apps/cam/sdl_texture_1plane.h | 18 ++++++++++++++++++
> >>   src/apps/cam/sdl_texture_yuv.cpp  | 10 ----------
> >>   src/apps/cam/sdl_texture_yuv.h    |  7 -------
> >>   4 files changed, 20 insertions(+), 18 deletions(-)
> >>   create mode 100644 src/apps/cam/sdl_texture_1plane.h
> >>
> >> diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp
> >> index 8355dd5ed..b295675dc 100644
> >> --- a/src/apps/cam/sdl_sink.cpp
> >> +++ b/src/apps/cam/sdl_sink.cpp
> >> @@ -22,6 +22,7 @@
> >>   #include "../common/event_loop.h"
> >>   #include "../common/image.h"
> >>   
> >> +#include "sdl_texture_1plane.h"
> >>   #ifdef HAVE_LIBJPEG
> >>   #include "sdl_texture_mjpg.h"
> >>   #endif
> >> @@ -74,7 +75,7 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config)
> >>   		break;
> >>   #endif
> >>   	case libcamera::formats::YUYV:
> >> -		texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride);
> >> +		texture_ = std::make_unique<SDLTexture1Plane>(rect_, SDL_PIXELFORMAT_YUY2, cfg.stride);
> >>   		break;
> >>   	default:
> >>   		std::cerr << "Unsupported pixel format "
> >> diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h
> >> new file mode 100644
> >> index 000000000..ded35c589
> >> --- /dev/null
> >> +++ b/src/apps/cam/sdl_texture_1plane.h
> >> @@ -0,0 +1,18 @@
> >> +#pragma once
> >> +
> >> +#include <assert.h>
> >> +
> >> +#include "sdl_texture.h"
> >> +
> >> +class SDLTexture1Plane final : public SDLTexture
> >> +{
> >> +public:
> >> +	using SDLTexture::SDLTexture;
> >> +
> >> +	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override
> >> +	{
> >> +		assert(data.size() == 1);
> >> +		assert(data[0].size_bytes() == std::size_t(rect_.h * stride_));
> >> +		SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> >> +	}
> > 
> > Do we need to inline this function, can't it go to a .cpp file ?
> 
> It could certainly be in a cpp file, I can move it if you want me to. I just kept it here
> for simplicity and because it is only used in a single cpp file.

It would be more consistent with the rest of the code base. I can also
pretend not to have noticed, but maybe you want to keep that joker card
for a future patch instead of using it here :-)

> > With that handled,
> > 
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > 
> >> +};
> >> diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp
> >> index 7e2ce3f49..bed297d28 100644
> >> --- a/src/apps/cam/sdl_texture_yuv.cpp
> >> +++ b/src/apps/cam/sdl_texture_yuv.cpp
> >> @@ -21,13 +21,3 @@ void SDLTextureNV12::update(libcamera::Span<const libcamera::Span<const uint8_t>
> >>   			    data[1].data(), stride_);
> >>   }
> >>   #endif
> >> -
> >> -SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride)
> >> -	: SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride)
> >> -{
> >> -}
> >> -
> >> -void SDLTextureYUYV::update(libcamera::Span<const libcamera::Span<const uint8_t>> data)
> >> -{
> >> -	SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> >> -}
> >> diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h
> >> index db877f503..c271f901b 100644
> >> --- a/src/apps/cam/sdl_texture_yuv.h
> >> +++ b/src/apps/cam/sdl_texture_yuv.h
> >> @@ -17,10 +17,3 @@ public:
> >>   	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
> >>   };
> >>   #endif
> >> -
> >> -class SDLTextureYUYV : public SDLTexture
> >> -{
> >> -public:
> >> -	SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride);
> >> -	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
> >> -};

Patch
diff mbox series

diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp
index 8355dd5ed..b295675dc 100644
--- a/src/apps/cam/sdl_sink.cpp
+++ b/src/apps/cam/sdl_sink.cpp
@@ -22,6 +22,7 @@ 
 #include "../common/event_loop.h"
 #include "../common/image.h"
 
+#include "sdl_texture_1plane.h"
 #ifdef HAVE_LIBJPEG
 #include "sdl_texture_mjpg.h"
 #endif
@@ -74,7 +75,7 @@  int SDLSink::configure(const libcamera::CameraConfiguration &config)
 		break;
 #endif
 	case libcamera::formats::YUYV:
-		texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride);
+		texture_ = std::make_unique<SDLTexture1Plane>(rect_, SDL_PIXELFORMAT_YUY2, cfg.stride);
 		break;
 	default:
 		std::cerr << "Unsupported pixel format "
diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h
new file mode 100644
index 000000000..ded35c589
--- /dev/null
+++ b/src/apps/cam/sdl_texture_1plane.h
@@ -0,0 +1,18 @@ 
+#pragma once
+
+#include <assert.h>
+
+#include "sdl_texture.h"
+
+class SDLTexture1Plane final : public SDLTexture
+{
+public:
+	using SDLTexture::SDLTexture;
+
+	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override
+	{
+		assert(data.size() == 1);
+		assert(data[0].size_bytes() == std::size_t(rect_.h * stride_));
+		SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
+	}
+};
diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp
index 7e2ce3f49..bed297d28 100644
--- a/src/apps/cam/sdl_texture_yuv.cpp
+++ b/src/apps/cam/sdl_texture_yuv.cpp
@@ -21,13 +21,3 @@  void SDLTextureNV12::update(libcamera::Span<const libcamera::Span<const uint8_t>
 			    data[1].data(), stride_);
 }
 #endif
-
-SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride)
-	: SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride)
-{
-}
-
-void SDLTextureYUYV::update(libcamera::Span<const libcamera::Span<const uint8_t>> data)
-{
-	SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
-}
diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h
index db877f503..c271f901b 100644
--- a/src/apps/cam/sdl_texture_yuv.h
+++ b/src/apps/cam/sdl_texture_yuv.h
@@ -17,10 +17,3 @@  public:
 	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
 };
 #endif
-
-class SDLTextureYUYV : public SDLTexture
-{
-public:
-	SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride);
-	void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override;
-};