New upstream version 26.0.0+dfsg1

This commit is contained in:
Sebastian Ramacher 2020-10-01 22:15:25 +02:00
parent 8e020cdacb
commit 240080891f
837 changed files with 41275 additions and 9196 deletions

View file

@ -5,23 +5,28 @@ if(DISABLE_V4L2)
return()
endif()
find_package(Libv4l2)
find_package(LibUDev QUIET)
if(NOT LIBV4L2_FOUND AND ENABLE_V4L2)
message(FATAL_ERROR "libv4l2 not found bit plugin set as enabled")
elseif(NOT LIBV4L2_FOUND)
message(STATUS "libv4l2 not found, disabling v4l2 plugin")
return()
if(ENABLE_V4L2)
find_package(Libv4l2 REQUIRED)
else()
find_package(Libv4l2)
if(NOT LIBV4L2_FOUND)
message(STATUS "libv4l2 not found, disabling v4l2 plugin")
return()
endif()
endif()
if(NOT UDEV_FOUND OR DISABLE_UDEV)
message(STATUS "udev disabled for v4l2 plugin")
else()
set(linux-v4l2-udev_SOURCES
v4l2-udev.c
)
if(DISABLE_UDEV)
add_definitions(-DHAVE_UDEV)
else()
find_package(UDev)
if(NOT UDEV_FOUND)
message(STATUS "udev disabled for v4l2 plugin")
else()
set(linux-v4l2-udev_SOURCES
v4l2-udev.c
)
endif()
endif()
include_directories(
@ -45,5 +50,6 @@ target_link_libraries(linux-v4l2
${LIBV4L2_LIBRARIES}
${UDEV_LIBRARIES}
)
set_target_properties(linux-v4l2 PROPERTIES FOLDER "plugins")
install_obs_plugin_with_data(linux-v4l2 data)

View file

@ -6,7 +6,11 @@ VideoStandard="معيار الفيديو"
DVTiming="توقيت DV"
Resolution="الأبعاد"
FrameRate="الإطار"
LeaveUnchanged="اتركها دون تغيير"
UseBuffering="استخدم التخزين المؤقت"
ColorRange="نطاق اللون"
ColorRange.Default="الافتراضي"
ColorRange.Partial="جزئي"
ColorRange.Full="كامل"
CameraCtrls="التحكم في الكاميرا"

View file

@ -0,0 +1,8 @@
Device="Яйланма"
Input="Индереү"
VideoFormat="Видео форматы"
Resolution="Асыҡлыҡ"
FrameRate="Кадрлар йышлығы"
ColorRange.Default="Ғәҙәти"
ColorRange.Full="Тулы"

View file

@ -12,4 +12,5 @@ ColorRange="Gamma de colors"
ColorRange.Default="Per defecte"
ColorRange.Partial="Parcial"
ColorRange.Full="Complet"
CameraCtrls="Controls de la càmera"

View file

@ -12,4 +12,5 @@ ColorRange="Rozsah barev"
ColorRange.Default="Výchozí"
ColorRange.Partial="Částečný"
ColorRange.Full="Plný"
CameraCtrls="Ovládání kamery"

View file

@ -12,4 +12,5 @@ ColorRange="Farveområde"
ColorRange.Default="Standard"
ColorRange.Partial="Delvist"
ColorRange.Full="Fuldt"
CameraCtrls="Kamerakontroller"

View file

@ -12,4 +12,5 @@ ColorRange="Farbbereich"
ColorRange.Default="Standard"
ColorRange.Partial="Begrenzt"
ColorRange.Full="Voll"
CameraCtrls="Kamerasteuerung"

View file

@ -0,0 +1,16 @@
V4L2Input="Video Capture Device (V4L2)"
Device="Device"
Input="Input"
VideoFormat="Video Format"
VideoStandard="Video Standard"
DVTiming="DV Timing"
Resolution="Resolution"
FrameRate="Frame Rate"
LeaveUnchanged="Leave Unchanged"
UseBuffering="Use Buffering"
ColorRange="Colour Range"
ColorRange.Default="Default"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
CameraCtrls="Camera Controls"

View file

@ -12,3 +12,4 @@ ColorRange="Color Range"
ColorRange.Default="Default"
ColorRange.Partial="Partial"
ColorRange.Full="Full"
CameraCtrls="Camera Controls"

View file

@ -12,4 +12,5 @@ ColorRange="Gama de Colores"
ColorRange.Default="Predeterminado"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
CameraCtrls="Controles de Cámara"

View file

@ -12,4 +12,5 @@ ColorRange="Värialue"
ColorRange.Default="Oletus"
ColorRange.Partial="Osittainen"
ColorRange.Full="Täysi"
CameraCtrls="Kameran asetukset"

View file

@ -8,4 +8,9 @@ Resolution="Resolution"
FrameRate="Frame rate"
LeaveUnchanged="Mag-iwan ng hindi nabago"
UseBuffering="Gamitin ang Buffering"
ColorRange="Saklaw ng Kulay"
ColorRange.Default="Kawalan"
ColorRange.Partial="Partial"
ColorRange.Full="Puno"
CameraCtrls="Kontrol ng Kamera"

View file

@ -12,4 +12,5 @@ ColorRange="Gamme de couleurs"
ColorRange.Default="Par défaut"
ColorRange.Partial="Partielle"
ColorRange.Full="Complète"
CameraCtrls="Contrôles de la caméra"

View file

@ -12,4 +12,5 @@ ColorRange="Gama de cores"
ColorRange.Default="Predeterminado"
ColorRange.Partial="Parcial"
ColorRange.Full="Total"
CameraCtrls="Controis da cámara"

View file

@ -8,4 +8,9 @@ Resolution="רזולוציה"
FrameRate="קצב פריימים"
LeaveUnchanged="ללא שינוי"
UseBuffering="השתמש באוגר"
ColorRange="טווח צבע"
ColorRange.Default="ברירת־מחדל"
ColorRange.Partial="חלקי"
ColorRange.Full="מלא"
CameraCtrls="פקדי מצלמה"

View file

@ -12,4 +12,5 @@ ColorRange="Színtartomány"
ColorRange.Default="Alapértelmezett"
ColorRange.Partial="Részleges"
ColorRange.Full="Teljes"
CameraCtrls="Kamera vezérlők"

View file

@ -0,0 +1,16 @@
V4L2Input="Perangkat Penangkap Video (V4L2)"
Device="Perangkat"
Input="Input"
VideoFormat="Format Video"
VideoStandard="Standar Video"
DVTiming="Timing DV"
Resolution="Resolusi"
FrameRate="Frame Rate"
LeaveUnchanged="Biarkan tanpa perubahan"
UseBuffering="Gunakan Buffering"
ColorRange="Rentang Warna"
ColorRange.Default="Default"
ColorRange.Partial="Sebagian"
ColorRange.Full="Penuh"
CameraCtrls="Kontrol Kamera"

View file

@ -12,4 +12,5 @@ ColorRange="Gamma di colori"
ColorRange.Default="Predefinito"
ColorRange.Partial="Parziale"
ColorRange.Full="Intero"
CameraCtrls="Controlli Fotocamera"

View file

@ -12,4 +12,5 @@ ColorRange="色範囲"
ColorRange.Default="既定"
ColorRange.Partial="一部"
ColorRange.Full="全部"
CameraCtrls="カメラコントロール"

View file

@ -12,4 +12,5 @@ ColorRange="ფერთა გამა"
ColorRange.Default="ნაგულისხმევი"
ColorRange.Partial="ნაწილობრივი"
ColorRange.Full="სრული"
CameraCtrls="კამერის სამართავი"

View file

@ -12,4 +12,5 @@ ColorRange="색상 범위"
ColorRange.Default="기본값"
ColorRange.Partial="부분"
ColorRange.Full="전체"
CameraCtrls="카메라 제어"

View file

@ -12,4 +12,5 @@ ColorRange="Kleurbereik"
ColorRange.Default="Standaard"
ColorRange.Partial="Gedeeltelijk"
ColorRange.Full="Volledig"
CameraCtrls="Besturing Camera"

View file

@ -12,4 +12,5 @@ ColorRange="Zakres kolorów"
ColorRange.Default="Domyślny"
ColorRange.Partial="Częściowy"
ColorRange.Full="Pełny"
CameraCtrls="Panel sterowania kamery"

View file

@ -12,4 +12,5 @@ ColorRange="Intervalo de Cor"
ColorRange.Default="Padrão"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
CameraCtrls="Controles da Câmera"

View file

@ -12,4 +12,5 @@ ColorRange="Gama de Cores"
ColorRange.Default="Pré-definido"
ColorRange.Partial="Parcial"
ColorRange.Full="Completo"
CameraCtrls="Controlos da Câmara"

View file

@ -1,15 +1,16 @@
V4L2Input="Dispozitiv de captură video (V4L2)"
Device="Dispozitiv"
Input="Intrare"
Input="Input"
VideoFormat="Format video"
VideoStandard="Standard video"
DVTiming="Sincronizare DV"
Resolution="Rezoluție"
FrameRate="Frecvență de cadre"
LeaveUnchanged="Lasă neschimbat"
UseBuffering="Folosește zona tampon"
UseBuffering="Folosește buffering"
ColorRange="Gamă de culori"
ColorRange.Default="Implicită"
ColorRange.Partial="Parțială"
ColorRange.Full="Completă"
CameraCtrls="Controale cameră foto"

View file

@ -12,4 +12,5 @@ ColorRange="Цветовой диапазон"
ColorRange.Default="По умолчанию"
ColorRange.Partial="Частичный"
ColorRange.Full="Полный"
CameraCtrls="Управление камерой"

View file

@ -12,4 +12,5 @@ ColorRange="Farebný rozsah"
ColorRange.Default="Predvolený"
ColorRange.Partial="Čiastočný"
ColorRange.Full="Plný"
CameraCtrls="Ovládanie kamery"

View file

@ -12,4 +12,5 @@ ColorRange="Barvni razpon"
ColorRange.Default="Privzeti"
ColorRange.Partial="Delni"
ColorRange.Full="Polni"
CameraCtrls="Nastavitve kamere"

View file

@ -12,4 +12,5 @@ ColorRange="Färgintervall"
ColorRange.Default="Standard"
ColorRange.Partial="Delvis"
ColorRange.Full="Full"
CameraCtrls="Kamerakontroller"

View file

@ -0,0 +1,7 @@
Device="சாதனம்"
Input="உள்ளீடு"
VideoFormat="காணொளி வடிவமைப்பு"
Resolution="தெளிவுத்திறன்"
ColorRange.Default="இயல்புநிலை"
ColorRange.Full="முழு"

View file

@ -12,4 +12,5 @@ ColorRange="Renk Aralığı"
ColorRange.Default="Varsayılan"
ColorRange.Partial="Kısmi"
ColorRange.Full="Tam"
CameraCtrls="Kamera Kontrolleri"

View file

@ -1,15 +1,16 @@
V4L2Input="Відео пристрій (V4L2)"
V4L2Input="Пристрій захоплення відео (V4L2)"
Device="Пристрій"
Input="Вхід"
Input="Ввід"
VideoFormat="Формат відео"
VideoStandard="Відео стандарт"
DVTiming="DV таймінг"
VideoStandard="Стандарт відео"
DVTiming="Таймінг цифрового відео"
Resolution="Роздільна здатність"
FrameRate="Частота кадрів"
LeaveUnchanged="Залишити без змін"
UseBuffering="Увімкнути буферизацію"
ColorRange="Колірний діапазон"
ColorRange.Default="За замовчанням"
ColorRange.Default="За замовчуванням"
ColorRange.Partial="Частковий"
ColorRange.Full="Повний"
CameraCtrls="Керування камерою"

View file

@ -3,4 +3,5 @@ VideoStandard="Video Tiêu chuẩn"
Resolution="Độ phân giải"
FrameRate="Tốc độ khung"
LeaveUnchanged="Giữ nguyên"
CameraCtrls="Điều khiển máy quay"

View file

@ -1,4 +1,4 @@
V4L2Input="视频捕获设备(V4L2)"
V4L2Input="视频采集设备 (V4L2)"
Device="设备"
Input="输入"
VideoFormat="视频格式"
@ -8,8 +8,9 @@ Resolution="分辨率"
FrameRate="帧率"
LeaveUnchanged="保持不变"
UseBuffering="使用缓冲"
ColorRange="色范围"
ColorRange="范围"
ColorRange.Default="默认"
ColorRange.Partial="部分"
ColorRange.Full="全部"
ColorRange.Partial="Limited"
ColorRange.Full="Full"
CameraCtrls="相机控制"

View file

@ -12,4 +12,5 @@ ColorRange="顏色範圍"
ColorRange.Default="預設"
ColorRange.Partial="部分"
ColorRange.Full="完整"
CameraCtrls="相機控制"

View file

@ -46,7 +46,23 @@ static bool v4l2_control_changed(void *data, obs_properties_t *props,
struct v4l2_control control;
control.id = POINTER_TO_UINT(data);
control.value = obs_data_get_int(settings, obs_property_name(prop));
switch (obs_property_get_type(prop)) {
case OBS_PROPERTY_BOOL:
control.value =
obs_data_get_bool(settings, obs_property_name(prop));
break;
case OBS_PROPERTY_INT:
case OBS_PROPERTY_LIST:
control.value =
obs_data_get_int(settings, obs_property_name(prop));
break;
default:
blog(LOG_ERROR, "unknown property type for %s",
obs_property_name(prop));
v4l2_close(dev);
return ret;
}
if (0 != v4l2_ioctl(dev, VIDIOC_S_CTRL, &control)) {
ret = true;
@ -79,7 +95,7 @@ static int_fast32_t v4l2_update_controls_menu(int_fast32_t dev,
qmenu.index += qctrl->step) {
if (0 == v4l2_ioctl(dev, VIDIOC_QUERYMENU, &qmenu)) {
obs_property_list_add_int(prop, (char *)qmenu.name,
qmenu.value);
qmenu.index);
}
}

View file

@ -53,11 +53,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define timeval2ns(tv) \
(((uint64_t)tv.tv_sec * 1000000000) + ((uint64_t)tv.tv_usec * 1000))
#define V4L2_FOURCC_STR(code) \
(char[5]) \
{ \
(code >> 24) & 0xFF, (code >> 16) & 0xFF, (code >> 8) & 0xFF, \
code & 0xFF, 0 \
#define V4L2_FOURCC_STR(code) \
(char[5]) \
{ \
code & 0xFF, (code >> 8) & 0xFF, (code >> 16) & 0xFF, \
(code >> 24) & 0xFF, 0 \
}
#define blog(level, msg, ...) blog(level, "v4l2-input: " msg, ##__VA_ARGS__)
@ -81,6 +81,8 @@ struct v4l2_data {
pthread_t thread;
os_event_t *event;
bool framerate_unchanged;
bool resolution_unchanged;
int_fast32_t dev;
int width;
int height;
@ -91,6 +93,7 @@ struct v4l2_data {
/* forward declarations */
static void v4l2_init(struct v4l2_data *data);
static void v4l2_terminate(struct v4l2_data *data);
static void v4l2_update(void *vptr, obs_data_t *settings);
/**
* Prepare the output frame structure for obs and compute plane offsets
@ -120,7 +123,7 @@ static void v4l2_prep_obs_frame(struct v4l2_data *data,
switch (data->pixfmt) {
case V4L2_PIX_FMT_NV12:
frame->linesize[0] = data->linesize;
frame->linesize[1] = data->linesize / 2;
frame->linesize[1] = data->linesize;
plane_offsets[1] = data->linesize * data->height;
break;
case V4L2_PIX_FMT_YVU420:
@ -579,10 +582,18 @@ static bool device_selected(obs_properties_t *props, obs_property_t *p,
return false;
obs_property_t *prop = obs_properties_get(props, "input");
obs_properties_t *ctrl_props_new = obs_properties_create();
obs_properties_remove_by_name(props, "controls");
v4l2_input_list(dev, prop);
v4l2_update_controls(dev, props, settings);
v4l2_update_controls(dev, ctrl_props_new, settings);
v4l2_close(dev);
obs_properties_add_group(props, "controls",
obs_module_text("CameraCtrls"),
OBS_GROUP_NORMAL, ctrl_props_new);
obs_property_modified(prop, settings);
return true;
@ -785,6 +796,12 @@ static obs_properties_t *v4l2_properties(void *vptr)
obs_properties_add_bool(props, "buffering",
obs_module_text("UseBuffering"));
// a group to contain the camera control
obs_properties_t *ctrl_props = obs_properties_create();
obs_properties_add_group(props, "controls",
obs_module_text("CameraCtrls"),
OBS_GROUP_NORMAL, ctrl_props);
obs_data_t *settings = obs_source_get_settings(data->source);
v4l2_device_list(device_list, settings);
obs_data_release(settings);
@ -939,19 +956,78 @@ static void v4l2_update_source_flags(struct v4l2_data *data,
data->source, !obs_data_get_bool(settings, "buffering"));
}
/**
* Checking if any of the settings have changed so that we can restart the
* stream
*/
static bool v4l2_settings_changed(struct v4l2_data *data, obs_data_t *settings)
{
bool res = false;
if (obs_data_get_string(settings, "device_id") != NULL &&
data->device_id != NULL) {
res |= strcmp(data->device_id,
obs_data_get_string(settings, "device_id")) != 0;
res |= data->input != obs_data_get_int(settings, "input");
res |= data->pixfmt !=
obs_data_get_int(settings, "pixelformat");
res |= data->standard != obs_data_get_int(settings, "standard");
res |= data->dv_timing !=
obs_data_get_int(settings, "dv_timing");
if (obs_data_get_int(settings, "resolution") == -1 &&
!data->resolution_unchanged) {
data->resolution_unchanged = true;
res |= true;
} else if (obs_data_get_int(settings, "resolution") == -1 &&
data->resolution_unchanged) {
res |= false;
} else {
data->resolution_unchanged = false;
res |= (data->resolution !=
obs_data_get_int(settings, "resolution")) &&
(obs_data_get_int(settings, "resolution") != -1);
}
if (obs_data_get_int(settings, "framerate") == -1 &&
!data->framerate_unchanged) {
data->framerate_unchanged = true;
res |= true;
} else if (obs_data_get_int(settings, "framerate") == -1 &&
data->framerate_unchanged) {
res |= false;
} else {
data->framerate_unchanged = false;
res |= (data->framerate !=
obs_data_get_int(settings, "framerate")) &&
(obs_data_get_int(settings, "framerate") != -1);
}
res |= data->color_range !=
obs_data_get_int(settings, "color_range");
} else {
res = true;
}
return res;
}
/**
* Update the settings for the v4l2 source
*
* Since there are very few settings that can be changed without restarting the
* stream we don't bother to even try. Whenever this is called the currently
* active stream (if exists) is stopped, the settings are updated and finally
* the new stream is started.
* There are a few settings that can be changed without restarting the stream
* Whenever this is called the currently active stream (if exists) is stopped,
* the settings are updated and finally the new stream is started.
*/
static void v4l2_update(void *vptr, obs_data_t *settings)
{
V4L2_DATA(vptr);
v4l2_terminate(data);
bool needs_restart = v4l2_settings_changed(data, settings);
if (needs_restart)
v4l2_terminate(data);
if (data->device_id)
bfree(data->device_id);
@ -967,7 +1043,8 @@ static void v4l2_update(void *vptr, obs_data_t *settings)
v4l2_update_source_flags(data, settings);
v4l2_init(data);
if (needs_restart)
v4l2_init(data);
}
static void *v4l2_create(obs_data_t *settings, obs_source_t *source)
@ -975,6 +1052,8 @@ static void *v4l2_create(obs_data_t *settings, obs_source_t *source)
struct v4l2_data *data = bzalloc(sizeof(struct v4l2_data));
data->dev = -1;
data->source = source;
data->resolution_unchanged = false;
data->framerate_unchanged = false;
/* Bitch about build problems ... */
#ifndef V4L2_CAP_DEVICE_CAPS