Skip to content

Commit 519b09c

Browse files
committed
linux-pipewire: Support MJPEG and H264 devices
1 parent b8ab531 commit 519b09c

5 files changed

Lines changed: 405 additions & 56 deletions

File tree

plugins/linux-pipewire/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ if(NOT ENABLE_PIPEWIRE)
77
endif()
88

99
find_package(PipeWire 0.3.33 REQUIRED)
10+
find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
1011
find_package(Gio 2.76 REQUIRED)
1112
find_package(Libdrm REQUIRED)
1213
get_target_property(libdrm_include_directories Libdrm::Libdrm INTERFACE_INCLUDE_DIRECTORIES)
@@ -26,6 +27,8 @@ target_sources(
2627
PRIVATE
2728
$<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:camera-portal.c>
2829
$<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:camera-portal.h>
30+
$<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:video-decoder.c>
31+
$<$<BOOL:${_HAS_PIPEWIRE_CAMERA}>:video-decoder.h>
2932
formats.c
3033
formats.h
3134
linux-pipewire.c

plugins/linux-pipewire/camera-portal.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* camera-portal.c
22
*
33
* Copyright 2021 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
4+
* Copyright 2024-2026 Dimitris Papaioannou <dimtpap@protonmail.com>
45
*
56
* This program is free software: you can redistribute it and/or modify
67
* it under the terms of the GNU General Public License as published by
@@ -361,8 +362,18 @@ static void camera_format_list(struct camera_device *dev, obs_property_t *prop)
361362
obs_data_set_int(data, "video_format", format);
362363

363364
format_name = obs_pw_video_format.pretty_name;
364-
} else {
365-
continue;
365+
} else if (media_subtype == SPA_MEDIA_SUBTYPE_mjpg || media_subtype == SPA_MEDIA_SUBTYPE_h264) {
366+
obs_data_set_bool(data, "encoded", true);
367+
obs_data_set_int(data, "video_format", SPA_VIDEO_FORMAT_ENCODED);
368+
369+
switch (media_subtype) {
370+
case SPA_MEDIA_SUBTYPE_mjpg:
371+
format_name = "MJPG";
372+
break;
373+
case SPA_MEDIA_SUBTYPE_h264:
374+
format_name = "H264";
375+
break;
376+
}
366377
}
367378

368379
if (spa_pod_parse_object(p->param, SPA_TYPE_OBJECT_Format, format ? &format : NULL,

0 commit comments

Comments
 (0)