mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-16 19:25:18 +00:00
ntv2: Update to AJA NTV2 SDK 17.1.0
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7568>
This commit is contained in:
parent
e758ffa2cf
commit
be6eba3e9e
3 changed files with 69 additions and 55 deletions
|
@ -25,7 +25,8 @@
|
||||||
#include "gstajacommon.h"
|
#include "gstajacommon.h"
|
||||||
#include "gstajadeviceprovider.h"
|
#include "gstajadeviceprovider.h"
|
||||||
|
|
||||||
static GstDevice *gst_aja_device_new(NTV2DeviceInfo &device, gboolean video);
|
static GstDevice *gst_aja_device_new(CNTV2Device &device, guint index,
|
||||||
|
gboolean video);
|
||||||
|
|
||||||
G_DEFINE_TYPE(GstAjaDeviceProvider, gst_aja_device_provider,
|
G_DEFINE_TYPE(GstAjaDeviceProvider, gst_aja_device_provider,
|
||||||
GST_TYPE_DEVICE_PROVIDER);
|
GST_TYPE_DEVICE_PROVIDER);
|
||||||
|
@ -35,18 +36,19 @@ static void gst_aja_device_provider_init(GstAjaDeviceProvider *self) {}
|
||||||
static GList *gst_aja_device_provider_probe(GstDeviceProvider *provider) {
|
static GList *gst_aja_device_provider_probe(GstDeviceProvider *provider) {
|
||||||
GList *ret = NULL;
|
GList *ret = NULL;
|
||||||
|
|
||||||
CNTV2DeviceScanner scanner;
|
CNTV2Card device;
|
||||||
|
guint device_idx = 0;
|
||||||
|
|
||||||
NTV2DeviceInfoList devices = scanner.GetDeviceInfoList();
|
while (CNTV2DeviceScanner::GetDeviceAtIndex(device_idx, device)) {
|
||||||
for (NTV2DeviceInfoList::iterator it = devices.begin(); it != devices.end();
|
auto features = device.features();
|
||||||
it++) {
|
|
||||||
// Skip non-input / non-output devices
|
// Skip non-input / non-output devices
|
||||||
if (it->numVidInputs == 0 && it->numVidOutputs == 0) continue;
|
if (features.GetNumVideoInputs() == 0 && features.GetNumVideoOutputs() == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (it->numVidInputs > 0)
|
if (features.GetNumVideoInputs() > 0)
|
||||||
ret = g_list_prepend(ret, gst_aja_device_new(*it, TRUE));
|
ret = g_list_prepend(ret, gst_aja_device_new(device, device_idx, TRUE));
|
||||||
if (it->numVidOutputs > 0)
|
if (features.GetNumVideoOutputs() > 0)
|
||||||
ret = g_list_prepend(ret, gst_aja_device_new(*it, FALSE));
|
ret = g_list_prepend(ret, gst_aja_device_new(device, device_idx, FALSE));
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = g_list_reverse(ret);
|
ret = g_list_reverse(ret);
|
||||||
|
@ -98,7 +100,7 @@ static void gst_aja_device_class_init(GstAjaDeviceClass *klass) {
|
||||||
GST_DEBUG_FUNCPTR(gst_aja_device_create_element);
|
GST_DEBUG_FUNCPTR(gst_aja_device_create_element);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstDevice *gst_aja_device_new(NTV2DeviceInfo &device,
|
static GstDevice *gst_aja_device_new(CNTV2Card &device, guint index,
|
||||||
gboolean is_capture) {
|
gboolean is_capture) {
|
||||||
GstDevice *ret;
|
GstDevice *ret;
|
||||||
gchar *display_name;
|
gchar *display_name;
|
||||||
|
@ -107,52 +109,62 @@ static GstDevice *gst_aja_device_new(NTV2DeviceInfo &device,
|
||||||
GstStructure *properties;
|
GstStructure *properties;
|
||||||
|
|
||||||
device_class = is_capture ? "Audio/Video/Source" : "Audio/Video/Sink";
|
device_class = is_capture ? "Audio/Video/Source" : "Audio/Video/Sink";
|
||||||
display_name = g_strdup_printf("AJA %s (%s)", device.deviceIdentifier.c_str(),
|
display_name = g_strdup_printf("AJA %s (%s)", device.GetDisplayName().c_str(),
|
||||||
is_capture ? "Source" : "Sink");
|
is_capture ? "Source" : "Sink");
|
||||||
|
|
||||||
caps = gst_ntv2_supported_caps(device.deviceID);
|
caps = gst_ntv2_supported_caps(device.GetDeviceID());
|
||||||
|
|
||||||
properties = gst_structure_new_empty("properties");
|
properties = gst_structure_new_empty("properties");
|
||||||
|
|
||||||
|
auto features = device.features();
|
||||||
|
auto widget_ids = device.GetSupportedItems(kNTV2EnumsID_WidgetID);
|
||||||
gst_structure_set(
|
gst_structure_set(
|
||||||
properties, "device-id", G_TYPE_UINT, device.deviceID, "device-index",
|
properties, "device-id", G_TYPE_UINT, device.GetDeviceID(),
|
||||||
G_TYPE_UINT, device.deviceIndex, "pci-slot", G_TYPE_UINT, device.pciSlot,
|
"device-index", G_TYPE_UINT, index, "serial-number", G_TYPE_UINT64,
|
||||||
"serial-number", G_TYPE_UINT64, device.deviceSerialNumber,
|
device.GetSerialNumber(), "device-identifier", G_TYPE_STRING,
|
||||||
"device-identifier", G_TYPE_STRING, device.deviceIdentifier.c_str(),
|
device.GetDisplayName().c_str(), "num-audio-streams", G_TYPE_UINT,
|
||||||
"num-audio-streams", G_TYPE_UINT, device.numAudioStreams,
|
features.GetNumAudioSystems(), "dual-link-support", G_TYPE_BOOLEAN,
|
||||||
"dual-link-support", G_TYPE_BOOLEAN, device.dualLinkSupport,
|
features.CanDoDualLink(), "sdi-3g-support", G_TYPE_BOOLEAN,
|
||||||
"sdi-3g-support", G_TYPE_BOOLEAN, device.sdi3GSupport, "sdi-12g-support",
|
widget_ids.find(NTV2_Wgt3GSDIOut1) != widget_ids.end(), "sdi-12g-support",
|
||||||
G_TYPE_BOOLEAN, device.sdi12GSupport, "ip-support", G_TYPE_BOOLEAN,
|
G_TYPE_BOOLEAN, device.IsSupported(kDeviceCanDo12GSDI), "ip-support",
|
||||||
device.ipSupport, "bi-directional-sdi", G_TYPE_BOOLEAN,
|
G_TYPE_BOOLEAN, device.IsSupported(kDeviceCanDoIP), "bi-directional-sdi",
|
||||||
device.biDirectionalSDI, "ltc-in-support", G_TYPE_BOOLEAN,
|
G_TYPE_BOOLEAN, device.IsSupported(kDeviceHasBiDirectionalSDI),
|
||||||
device.ltcInSupport, "ltc-in-on-ref-port", G_TYPE_BOOLEAN,
|
"ltc-in-support", G_TYPE_BOOLEAN,
|
||||||
device.ltcInOnRefPort, "2k-support", G_TYPE_BOOLEAN, device.has2KSupport,
|
device.GetNumSupported(kDeviceGetNumLTCInputs) > 0, "ltc-in-on-ref-port",
|
||||||
"4k-support", G_TYPE_BOOLEAN, device.has4KSupport, "8k-support",
|
G_TYPE_BOOLEAN, device.IsSupported(kDeviceCanDoLTCInOnRefPort),
|
||||||
G_TYPE_BOOLEAN, device.has8KSupport, "multiformat-support",
|
"2k-support", G_TYPE_BOOLEAN, device.IsSupported(kDeviceCanDo2KVideo),
|
||||||
G_TYPE_BOOLEAN, device.multiFormat, NULL);
|
"4k-support", G_TYPE_BOOLEAN, device.IsSupported(kDeviceCanDo4KVideo),
|
||||||
|
"8k-support", G_TYPE_BOOLEAN, device.IsSupported(kDeviceCanDo8KVideo),
|
||||||
|
"multiformat-support", G_TYPE_BOOLEAN,
|
||||||
|
device.IsSupported(kDeviceCanDoMultiFormat), NULL);
|
||||||
|
|
||||||
if (is_capture) {
|
if (is_capture) {
|
||||||
gst_structure_set(
|
gst_structure_set(
|
||||||
properties, "num-vid-inputs", G_TYPE_UINT, device.numVidInputs,
|
properties, "num-vid-inputs", G_TYPE_UINT, features.GetNumVideoInputs(),
|
||||||
"num-anlg-vid-inputs", G_TYPE_UINT, device.numAnlgVidInputs,
|
"num-anlg-vid-inputs", G_TYPE_UINT, features.GetNumAnalogVideoInputs(),
|
||||||
"num-hdmi-vid-inputs", G_TYPE_UINT, device.numHDMIVidInputs,
|
"num-hdmi-vid-inputs", G_TYPE_UINT, features.GetNumHDMIVideoInputs(),
|
||||||
"num-analog-audio-input-channels", G_TYPE_UINT,
|
"num-analog-audio-input-channels", G_TYPE_UINT,
|
||||||
device.numAnalogAudioInputChannels, "num-aes-audio-input-channels",
|
features.GetNumAnalogAudioInputChannels(),
|
||||||
G_TYPE_UINT, device.numAESAudioInputChannels,
|
"num-aes-audio-input-channels", G_TYPE_UINT,
|
||||||
|
features.GetNumAESAudioInputChannels(),
|
||||||
"num-embedded-audio-input-channels", G_TYPE_UINT,
|
"num-embedded-audio-input-channels", G_TYPE_UINT,
|
||||||
device.numEmbeddedAudioInputChannels, "num-hdmi-audio-input-channels",
|
features.GetNumEmbeddedAudioInputChannels(),
|
||||||
G_TYPE_UINT, device.numHDMIAudioInputChannels, NULL);
|
"num-hdmi-audio-input-channels", G_TYPE_UINT,
|
||||||
|
features.GetNumHDMIAudioInputChannels(), NULL);
|
||||||
} else {
|
} else {
|
||||||
gst_structure_set(
|
gst_structure_set(properties, "num-vid-outputs", G_TYPE_UINT,
|
||||||
properties, "num-vid-outputs", G_TYPE_UINT, device.numVidOutputs,
|
features.GetNumVideoOutputs(), "num-anlg-vid-outputs",
|
||||||
"num-anlg-vid-outputs", G_TYPE_UINT, device.numAnlgVidOutputs,
|
G_TYPE_UINT, features.GetNumAnalogVideoOutputs(),
|
||||||
"num-hdmi-vid-outputs", G_TYPE_UINT, device.numHDMIVidOutputs,
|
"num-hdmi-vid-outputs", G_TYPE_UINT,
|
||||||
"num-analog-audio-output-channels", G_TYPE_UINT,
|
features.GetNumHDMIVideoOutputs(),
|
||||||
device.numAnalogAudioOutputChannels, "num-aes-audio-output-channels",
|
"num-analog-audio-output-channels", G_TYPE_UINT,
|
||||||
G_TYPE_UINT, device.numAESAudioOutputChannels,
|
features.GetNumAnalogAudioOutputChannels(),
|
||||||
"num-embedded-audio-output-channels", G_TYPE_UINT,
|
"num-aes-audio-output-channels", G_TYPE_UINT,
|
||||||
device.numEmbeddedAudioOutputChannels, "num-hdmi-audio-output-channels",
|
features.GetNumAESAudioOutputChannels(),
|
||||||
G_TYPE_UINT, device.numHDMIAudioOutputChannels, NULL);
|
"num-embedded-audio-output-channels", G_TYPE_UINT,
|
||||||
|
features.GetNumEmbeddedAudioOutputChannels(),
|
||||||
|
"num-hdmi-audio-output-channels", G_TYPE_UINT,
|
||||||
|
features.GetNumHDMIAudioOutputChannels(), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = GST_DEVICE(g_object_new(GST_TYPE_AJA_DEVICE, "display-name",
|
ret = GST_DEVICE(g_object_new(GST_TYPE_AJA_DEVICE, "display-name",
|
||||||
|
@ -164,7 +176,7 @@ static GstDevice *gst_aja_device_new(NTV2DeviceInfo &device,
|
||||||
gst_structure_free(properties);
|
gst_structure_free(properties);
|
||||||
|
|
||||||
GST_AJA_DEVICE(ret)->is_capture = is_capture;
|
GST_AJA_DEVICE(ret)->is_capture = is_capture;
|
||||||
GST_AJA_DEVICE(ret)->device_index = device.deviceIndex;
|
GST_AJA_DEVICE(ret)->device_index = index;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
[wrap-file]
|
[wrap-file]
|
||||||
directory = libajantv2-ntv2_17_0_1
|
directory = libajantv2-ntv2_17_1_0
|
||||||
source_url = https://github.com/aja-video/libajantv2/archive/refs/tags/ntv2_17_0_1.tar.gz
|
source_url = https://github.com/aja-video/libajantv2/archive/refs/tags/ntv2_17_1_0.tar.gz
|
||||||
source_filename = libajantv2-ntv2_17_0_1.tar.gz
|
source_filename = libajantv2-ntv2_17_1_0.tar.gz
|
||||||
source_hash = a4be947e4e34dd8065b25082a681994067877966c2aaef8fbc9a25681f03ebe7
|
source_hash = b19bd5d2eb2cb20552d084cd709549517875922c4a6960e077ce96bf2922b7dd
|
||||||
patch_directory = ntv2
|
patch_directory = ntv2
|
||||||
|
|
||||||
[provide]
|
[provide]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
project('ajantv2', ['c', 'cpp'],
|
project('ajantv2', ['c', 'cpp'],
|
||||||
version : '17.0.1',
|
version : '17.1.0',
|
||||||
meson_version : '>= 0.54.0',
|
meson_version : '>= 0.54.0',
|
||||||
default_options : [ 'warning_level=1',
|
default_options : [ 'warning_level=1',
|
||||||
'buildtype=debugoptimized',
|
'buildtype=debugoptimized',
|
||||||
|
@ -30,10 +30,10 @@ endif
|
||||||
|
|
||||||
conf_data = configuration_data()
|
conf_data = configuration_data()
|
||||||
conf_data.set('AJA_NTV2_SDK_VERSION_MAJOR', '17')
|
conf_data.set('AJA_NTV2_SDK_VERSION_MAJOR', '17')
|
||||||
conf_data.set('AJA_NTV2_SDK_VERSION_MINOR', '0')
|
conf_data.set('AJA_NTV2_SDK_VERSION_MINOR', '1')
|
||||||
conf_data.set('AJA_NTV2_SDK_VERSION_POINT', '1')
|
conf_data.set('AJA_NTV2_SDK_VERSION_POINT', '0')
|
||||||
conf_data.set('AJA_NTV2_SDK_BUILD_NUMBER', '0')
|
conf_data.set('AJA_NTV2_SDK_BUILD_NUMBER', '0')
|
||||||
conf_data.set('AJA_NTV2_SDK_BUILD_DATETIME', '2024-02-15T17:41:48-08:00')
|
conf_data.set('AJA_NTV2_SDK_BUILD_DATETIME', '2024-07-18T13:40:28-07:00')
|
||||||
conf_data.set('AJA_NTV2_SDK_BUILD_TYPE', '')
|
conf_data.set('AJA_NTV2_SDK_BUILD_TYPE', '')
|
||||||
configure_file(input : 'ajantv2/includes/ntv2version.h.in',
|
configure_file(input : 'ajantv2/includes/ntv2version.h.in',
|
||||||
output : 'ntv2version.h',
|
output : 'ntv2version.h',
|
||||||
|
@ -58,6 +58,7 @@ ajantv2_sources = [
|
||||||
'ajaanc/src/ancillarydata_timecode.cpp',
|
'ajaanc/src/ancillarydata_timecode.cpp',
|
||||||
'ajaanc/src/ancillarydata_timecode_atc.cpp',
|
'ajaanc/src/ancillarydata_timecode_atc.cpp',
|
||||||
'ajaanc/src/ancillarydata_timecode_vitc.cpp',
|
'ajaanc/src/ancillarydata_timecode_vitc.cpp',
|
||||||
|
'ajaanc/src/ancillarydata_hdmi_aux.cpp',
|
||||||
'ajaanc/src/ancillarylist.cpp',
|
'ajaanc/src/ancillarylist.cpp',
|
||||||
'ajabase/common/audioutilities.cpp',
|
'ajabase/common/audioutilities.cpp',
|
||||||
'ajabase/common/buffer.cpp',
|
'ajabase/common/buffer.cpp',
|
||||||
|
@ -103,6 +104,7 @@ ajantv2_sources = [
|
||||||
'ajabase/system/linux/processimpl.cpp',
|
'ajabase/system/linux/processimpl.cpp',
|
||||||
'ajabase/system/linux/threadimpl.cpp',
|
'ajabase/system/linux/threadimpl.cpp',
|
||||||
'ajantv2/src/ntv2anc.cpp',
|
'ajantv2/src/ntv2anc.cpp',
|
||||||
|
'ajantv2/src/ntv2aux.cpp',
|
||||||
'ajantv2/src/ntv2audio.cpp',
|
'ajantv2/src/ntv2audio.cpp',
|
||||||
'ajantv2/src/ntv2autocirculate.cpp',
|
'ajantv2/src/ntv2autocirculate.cpp',
|
||||||
'ajantv2/src/ntv2bitfile.cpp',
|
'ajantv2/src/ntv2bitfile.cpp',
|
||||||
|
@ -148,7 +150,6 @@ ajantv2_sources = [
|
||||||
'ajantv2/src/ntv2task.cpp',
|
'ajantv2/src/ntv2task.cpp',
|
||||||
'ajantv2/src/ntv2testpatterngen.cpp',
|
'ajantv2/src/ntv2testpatterngen.cpp',
|
||||||
'ajantv2/src/ntv2transcode.cpp',
|
'ajantv2/src/ntv2transcode.cpp',
|
||||||
'ajantv2/src/ntv2utf8.cpp',
|
|
||||||
'ajantv2/src/ntv2utils.cpp',
|
'ajantv2/src/ntv2utils.cpp',
|
||||||
'ajantv2/src/ntv2version.cpp',
|
'ajantv2/src/ntv2version.cpp',
|
||||||
'ajantv2/src/ntv2verticalfilter.cpp',
|
'ajantv2/src/ntv2verticalfilter.cpp',
|
||||||
|
@ -164,6 +165,7 @@ ajantv2_args = [
|
||||||
'-DAJA_USE_CPLUSPLUS11',
|
'-DAJA_USE_CPLUSPLUS11',
|
||||||
'-DNDEBUG',
|
'-DNDEBUG',
|
||||||
'-DNTV2_USE_CPLUSPLUS11',
|
'-DNTV2_USE_CPLUSPLUS11',
|
||||||
|
'-DNTV2_PREVENT_PLUGIN_LOAD',
|
||||||
]
|
]
|
||||||
|
|
||||||
ajantv2_inc = include_directories(
|
ajantv2_inc = include_directories(
|
||||||
|
|
Loading…
Reference in a new issue