Ver código fonte

linux-pipewire: Add support for YUY2

columbarius 3 anos atrás
pai
commit
15b8c5b743
1 arquivos alterados com 16 adições e 3 exclusões
  1. 16 3
      plugins/linux-pipewire/pipewire.c

+ 16 - 3
plugins/linux-pipewire/pipewire.c

@@ -301,6 +301,15 @@ static const struct format_data supported_formats[] = {
 		4,
 		"XBGR8888",
 	},
+	{
+		SPA_VIDEO_FORMAT_YUY2,
+		DRM_FORMAT_YUYV,
+		GS_UNKNOWN,
+		VIDEO_FORMAT_YUY2,
+		false,
+		2,
+		"YUYV422",
+	},
 #if PW_CHECK_VERSION(0, 3, 41)
 	{
 		SPA_VIDEO_FORMAT_ABGR_210LE,
@@ -330,6 +339,7 @@ static const struct format_data supported_formats[] = {
 
 static const uint32_t supported_formats_async[] = {
 	SPA_VIDEO_FORMAT_RGBA,
+	SPA_VIDEO_FORMAT_YUY2,
 };
 
 #define N_SUPPORTED_FORMATS_ASYNC \
@@ -819,7 +829,8 @@ static void process_video_sync(obs_pipewire_stream *obs_pw_stream)
 
 		if (!lookup_format_info_from_spa_format(
 			    obs_pw_stream->format.info.raw.format,
-			    &format_data)) {
+			    &format_data) ||
+		    format_data.gs_format == GS_UNKNOWN) {
 			blog(LOG_ERROR,
 			     "[pipewire] unsupported DMA buffer format: %d",
 			     obs_pw_stream->format.info.raw.format);
@@ -867,7 +878,8 @@ static void process_video_sync(obs_pipewire_stream *obs_pw_stream)
 
 		if (!lookup_format_info_from_spa_format(
 			    obs_pw_stream->format.info.raw.format,
-			    &format_data)) {
+			    &format_data) ||
+		    format_data.gs_format == GS_UNKNOWN) {
 			blog(LOG_ERROR,
 			     "[pipewire] unsupported buffer format: %d",
 			     obs_pw_stream->format.info.raw.format);
@@ -947,7 +959,8 @@ read_metadata:
 		if (bitmap && bitmap->size.width > 0 &&
 		    bitmap->size.height > 0 &&
 		    lookup_format_info_from_spa_format(bitmap->format,
-						       &format_data)) {
+						       &format_data) &&
+		    format_data.gs_format != GS_UNKNOWN) {
 			const uint8_t *bitmap_data;
 
 			bitmap_data =