New upstream version 26.0.0+dfsg1
This commit is contained in:
parent
8e020cdacb
commit
240080891f
837 changed files with 41275 additions and 9196 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,11 @@ VideoStandard="معيار الفيديو"
|
|||
DVTiming="توقيت DV"
|
||||
Resolution="الأبعاد"
|
||||
FrameRate="الإطار"
|
||||
LeaveUnchanged="اتركها دون تغيير"
|
||||
UseBuffering="استخدم التخزين المؤقت"
|
||||
ColorRange="نطاق اللون"
|
||||
ColorRange.Default="الافتراضي"
|
||||
ColorRange.Partial="جزئي"
|
||||
ColorRange.Full="كامل"
|
||||
CameraCtrls="التحكم في الكاميرا"
|
||||
|
||||
|
|
|
|||
8
plugins/linux-v4l2/data/locale/ba-RU.ini
Normal file
8
plugins/linux-v4l2/data/locale/ba-RU.ini
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
Device="Яйланма"
|
||||
Input="Индереү"
|
||||
VideoFormat="Видео форматы"
|
||||
Resolution="Асыҡлыҡ"
|
||||
FrameRate="Кадрлар йышлығы"
|
||||
ColorRange.Default="Ғәҙәти"
|
||||
ColorRange.Full="Тулы"
|
||||
|
||||
|
|
@ -12,4 +12,5 @@ ColorRange="Gamma de colors"
|
|||
ColorRange.Default="Per defecte"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Complet"
|
||||
CameraCtrls="Controls de la càmera"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Rozsah barev"
|
|||
ColorRange.Default="Výchozí"
|
||||
ColorRange.Partial="Částečný"
|
||||
ColorRange.Full="Plný"
|
||||
CameraCtrls="Ovládání kamery"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Farveområde"
|
|||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Delvist"
|
||||
ColorRange.Full="Fuldt"
|
||||
CameraCtrls="Kamerakontroller"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Farbbereich"
|
|||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Begrenzt"
|
||||
ColorRange.Full="Voll"
|
||||
CameraCtrls="Kamerasteuerung"
|
||||
|
||||
|
|
|
|||
16
plugins/linux-v4l2/data/locale/en-GB.ini
Normal file
16
plugins/linux-v4l2/data/locale/en-GB.ini
Normal 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"
|
||||
|
||||
|
|
@ -12,3 +12,4 @@ ColorRange="Color Range"
|
|||
ColorRange.Default="Default"
|
||||
ColorRange.Partial="Partial"
|
||||
ColorRange.Full="Full"
|
||||
CameraCtrls="Camera Controls"
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Gama de Colores"
|
|||
ColorRange.Default="Predeterminado"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
CameraCtrls="Controles de Cámara"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Värialue"
|
|||
ColorRange.Default="Oletus"
|
||||
ColorRange.Partial="Osittainen"
|
||||
ColorRange.Full="Täysi"
|
||||
CameraCtrls="Kameran asetukset"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Gama de cores"
|
|||
ColorRange.Default="Predeterminado"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Total"
|
||||
CameraCtrls="Controis da cámara"
|
||||
|
||||
|
|
|
|||
|
|
@ -8,4 +8,9 @@ Resolution="רזולוציה"
|
|||
FrameRate="קצב פריימים"
|
||||
LeaveUnchanged="ללא שינוי"
|
||||
UseBuffering="השתמש באוגר"
|
||||
ColorRange="טווח צבע"
|
||||
ColorRange.Default="ברירת־מחדל"
|
||||
ColorRange.Partial="חלקי"
|
||||
ColorRange.Full="מלא"
|
||||
CameraCtrls="פקדי מצלמה"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Színtartomány"
|
|||
ColorRange.Default="Alapértelmezett"
|
||||
ColorRange.Partial="Részleges"
|
||||
ColorRange.Full="Teljes"
|
||||
CameraCtrls="Kamera vezérlők"
|
||||
|
||||
|
|
|
|||
16
plugins/linux-v4l2/data/locale/id-ID.ini
Normal file
16
plugins/linux-v4l2/data/locale/id-ID.ini
Normal 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"
|
||||
|
||||
|
|
@ -12,4 +12,5 @@ ColorRange="Gamma di colori"
|
|||
ColorRange.Default="Predefinito"
|
||||
ColorRange.Partial="Parziale"
|
||||
ColorRange.Full="Intero"
|
||||
CameraCtrls="Controlli Fotocamera"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="色範囲"
|
|||
ColorRange.Default="既定"
|
||||
ColorRange.Partial="一部"
|
||||
ColorRange.Full="全部"
|
||||
CameraCtrls="カメラコントロール"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="ფერთა გამა"
|
|||
ColorRange.Default="ნაგულისხმევი"
|
||||
ColorRange.Partial="ნაწილობრივი"
|
||||
ColorRange.Full="სრული"
|
||||
CameraCtrls="კამერის სამართავი"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="색상 범위"
|
|||
ColorRange.Default="기본값"
|
||||
ColorRange.Partial="부분"
|
||||
ColorRange.Full="전체"
|
||||
CameraCtrls="카메라 제어"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Kleurbereik"
|
|||
ColorRange.Default="Standaard"
|
||||
ColorRange.Partial="Gedeeltelijk"
|
||||
ColorRange.Full="Volledig"
|
||||
CameraCtrls="Besturing Camera"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Zakres kolorów"
|
|||
ColorRange.Default="Domyślny"
|
||||
ColorRange.Partial="Częściowy"
|
||||
ColorRange.Full="Pełny"
|
||||
CameraCtrls="Panel sterowania kamery"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Intervalo de Cor"
|
|||
ColorRange.Default="Padrão"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
CameraCtrls="Controles da Câmera"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Gama de Cores"
|
|||
ColorRange.Default="Pré-definido"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
CameraCtrls="Controlos da Câmara"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Цветовой диапазон"
|
|||
ColorRange.Default="По умолчанию"
|
||||
ColorRange.Partial="Частичный"
|
||||
ColorRange.Full="Полный"
|
||||
CameraCtrls="Управление камерой"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Farebný rozsah"
|
|||
ColorRange.Default="Predvolený"
|
||||
ColorRange.Partial="Čiastočný"
|
||||
ColorRange.Full="Plný"
|
||||
CameraCtrls="Ovládanie kamery"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Barvni razpon"
|
|||
ColorRange.Default="Privzeti"
|
||||
ColorRange.Partial="Delni"
|
||||
ColorRange.Full="Polni"
|
||||
CameraCtrls="Nastavitve kamere"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="Färgintervall"
|
|||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Delvis"
|
||||
ColorRange.Full="Full"
|
||||
CameraCtrls="Kamerakontroller"
|
||||
|
||||
|
|
|
|||
7
plugins/linux-v4l2/data/locale/ta-IN.ini
Normal file
7
plugins/linux-v4l2/data/locale/ta-IN.ini
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
Device="சாதனம்"
|
||||
Input="உள்ளீடு"
|
||||
VideoFormat="காணொளி வடிவமைப்பு"
|
||||
Resolution="தெளிவுத்திறன்"
|
||||
ColorRange.Default="இயல்புநிலை"
|
||||
ColorRange.Full="முழு"
|
||||
|
||||
|
|
@ -12,4 +12,5 @@ ColorRange="Renk Aralığı"
|
|||
ColorRange.Default="Varsayılan"
|
||||
ColorRange.Partial="Kısmi"
|
||||
ColorRange.Full="Tam"
|
||||
CameraCtrls="Kamera Kontrolleri"
|
||||
|
||||
|
|
|
|||
|
|
@ -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="Керування камерою"
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
||||
|
|
|
|||
|
|
@ -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="相机控制"
|
||||
|
||||
|
|
|
|||
|
|
@ -12,4 +12,5 @@ ColorRange="顏色範圍"
|
|||
ColorRange.Default="預設"
|
||||
ColorRange.Partial="部分"
|
||||
ColorRange.Full="完整"
|
||||
CameraCtrls="相機控制"
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue