mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-01 03:52:25 +00:00
Simplify configuration of timecode index and embedded audio source
This commit is contained in:
parent
00c2fcfc8e
commit
12380026e6
6 changed files with 94 additions and 269 deletions
|
@ -550,50 +550,13 @@ GType gst_aja_audio_source_get_type(void) {
|
|||
return (GType)id;
|
||||
}
|
||||
|
||||
GType gst_aja_embedded_audio_input_get_type(void) {
|
||||
static gsize id = 0;
|
||||
static const GEnumValue modes[] = {
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_AUTO, "auto", "Auto"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_1, "video-1", "Video 1"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_2, "video-2", "Video 2"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_3, "video-3", "Video 3"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_4, "video-4", "Video 4"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_5, "video-5", "Video 5"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_6, "video-6", "Video 6"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_7, "video-7", "Video 7"},
|
||||
{GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_8, "video-8", "Video 8"},
|
||||
{0, NULL, NULL}};
|
||||
|
||||
if (g_once_init_enter(&id)) {
|
||||
GType tmp = g_enum_register_static("GstAjaEmbeddedAudioInput", modes);
|
||||
g_once_init_leave(&id, tmp);
|
||||
}
|
||||
|
||||
return (GType)id;
|
||||
}
|
||||
|
||||
GType gst_aja_timecode_index_get_type(void) {
|
||||
static gsize id = 0;
|
||||
static const GEnumValue modes[] = {
|
||||
{GST_AJA_TIMECODE_INDEX_AUTO, "auto", "Auto"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI1, "sdi-1", "SDI 1"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI2, "sdi-2", "SDI 2"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI3, "sdi-3", "SDI 3"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI4, "sdi-4", "SDI 4"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI5, "sdi-5", "SDI 5"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI6, "sdi-6", "SDI 6"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI7, "sdi-7", "SDI 7"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI8, "sdi-8", "SDI 8"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI1_LTC, "sdi-1-ltc", "SDI 1 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI2_LTC, "sdi-2-ltc", "SDI 2 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI3_LTC, "sdi-3-ltc", "SDI 3 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI4_LTC, "sdi-4-ltc", "SDI 4 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI5_LTC, "sdi-5-ltc", "SDI 5 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI6_LTC, "sdi-6-ltc", "SDI 6 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI7_LTC, "sdi-7-ltc", "SDI 7 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_SDI8_LTC, "sdi-8-ltc", "SDI 8 LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_LTC1, "ltc-1", "LTC 1"},
|
||||
{GST_AJA_TIMECODE_INDEX_LTC2, "ltc-2", "LTC 2"},
|
||||
{GST_AJA_TIMECODE_INDEX_VITC, "vitc", "Embedded SDI VITC"},
|
||||
{GST_AJA_TIMECODE_INDEX_VITC, "atc-ltc", "Embedded SDI ATC LTC"},
|
||||
{GST_AJA_TIMECODE_INDEX_LTC1, "ltc-1", "Analog LTC 1"},
|
||||
{GST_AJA_TIMECODE_INDEX_LTC2, "ltc-2", "Analog LTC 2"},
|
||||
{0, NULL, NULL}};
|
||||
|
||||
if (g_once_init_enter(&id)) {
|
||||
|
|
|
@ -218,40 +218,8 @@ G_GNUC_INTERNAL
|
|||
GType gst_aja_audio_source_get_type(void);
|
||||
|
||||
typedef enum {
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_AUTO,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_1,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_2,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_3,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_4,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_5,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_6,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_7,
|
||||
GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_8,
|
||||
} GstAjaEmbeddedAudioInput;
|
||||
|
||||
#define GST_TYPE_AJA_EMBEDDED_AUDIO_INPUT \
|
||||
(gst_aja_embedded_audio_input_get_type())
|
||||
G_GNUC_INTERNAL
|
||||
GType gst_aja_embedded_audio_input_get_type(void);
|
||||
|
||||
typedef enum {
|
||||
GST_AJA_TIMECODE_INDEX_AUTO,
|
||||
GST_AJA_TIMECODE_INDEX_SDI1,
|
||||
GST_AJA_TIMECODE_INDEX_SDI2,
|
||||
GST_AJA_TIMECODE_INDEX_SDI3,
|
||||
GST_AJA_TIMECODE_INDEX_SDI4,
|
||||
GST_AJA_TIMECODE_INDEX_SDI5,
|
||||
GST_AJA_TIMECODE_INDEX_SDI6,
|
||||
GST_AJA_TIMECODE_INDEX_SDI7,
|
||||
GST_AJA_TIMECODE_INDEX_SDI8,
|
||||
GST_AJA_TIMECODE_INDEX_SDI1_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI2_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI3_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI4_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI5_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI6_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI7_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_SDI8_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_VITC,
|
||||
GST_AJA_TIMECODE_INDEX_ATC_LTC,
|
||||
GST_AJA_TIMECODE_INDEX_LTC1,
|
||||
GST_AJA_TIMECODE_INDEX_LTC2,
|
||||
} GstAjaTimecodeIndex;
|
||||
|
|
136
gstajasink.cpp
136
gstajasink.cpp
|
@ -35,7 +35,7 @@ GST_DEBUG_CATEGORY_STATIC(gst_aja_sink_debug);
|
|||
#define DEFAULT_CHANNEL (::NTV2_CHANNEL1)
|
||||
#define DEFAULT_AUDIO_SYSTEM (GST_AJA_AUDIO_SYSTEM_AUTO)
|
||||
#define DEFAULT_OUTPUT_DESTINATION (GST_AJA_OUTPUT_DESTINATION_AUTO)
|
||||
#define DEFAULT_TIMECODE_INDEX (GST_AJA_TIMECODE_INDEX_AUTO)
|
||||
#define DEFAULT_TIMECODE_INDEX (GST_AJA_TIMECODE_INDEX_VITC)
|
||||
#define DEFAULT_REFERENCE_SOURCE (GST_AJA_REFERENCE_SOURCE_AUTO)
|
||||
#define DEFAULT_QUEUE_SIZE (16)
|
||||
#define DEFAULT_OUTPUT_CPU_CORE (G_MAXUINT)
|
||||
|
@ -420,6 +420,11 @@ static gboolean gst_aja_sink_stop(GstAjaSink *self) {
|
|||
gst_clear_object(&self->audio_buffer_pool);
|
||||
}
|
||||
|
||||
if (self->tc_indexes) {
|
||||
delete self->tc_indexes;
|
||||
self->tc_indexes = NULL;
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT(self, "Stopped");
|
||||
|
||||
return TRUE;
|
||||
|
@ -689,33 +694,66 @@ static gboolean gst_aja_sink_set_caps(GstBaseSink *bsink, GstCaps *caps) {
|
|||
NTV2OutputCrosspointID framebuffer_id =
|
||||
::GetFrameBufferOutputXptFromChannel(self->channel, false, false);
|
||||
|
||||
NTV2TCIndex tc_indexes_vitc[2] = {::NTV2_TCINDEX_INVALID,
|
||||
::NTV2_TCINDEX_INVALID};
|
||||
NTV2TCIndex tc_index_atc_ltc = ::NTV2_TCINDEX_INVALID;
|
||||
NTV2InputCrosspointID output_destination_id;
|
||||
switch (self->output_destination) {
|
||||
case GST_AJA_OUTPUT_DESTINATION_AUTO:
|
||||
tc_indexes_vitc[0] =
|
||||
::NTV2ChannelToTimecodeIndex(self->channel, false, false);
|
||||
tc_indexes_vitc[1] =
|
||||
::NTV2ChannelToTimecodeIndex(self->channel, false, true);
|
||||
tc_index_atc_ltc =
|
||||
::NTV2ChannelToTimecodeIndex(self->channel, false, true);
|
||||
output_destination_id = ::GetSDIOutputInputXpt(self->channel, false);
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI1:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI1;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI1_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI1_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut1Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI2:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI2;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI2_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI2_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut2Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI3:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI3;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI3_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI3_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut3Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI4:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI4;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI4_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI4_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut4Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI5:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI5;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI5_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI5_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut5Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI6:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI6;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI6_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI6_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut6Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI7:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI7;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI7_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI7_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut7Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_SDI8:
|
||||
tc_indexes_vitc[0] = ::NTV2_TCINDEX_SDI8;
|
||||
tc_indexes_vitc[1] = ::NTV2_TCINDEX_SDI8_2;
|
||||
tc_index_atc_ltc = ::NTV2_TCINDEX_SDI8_LTC;
|
||||
output_destination_id = ::NTV2_XptSDIOut8Input;
|
||||
break;
|
||||
case GST_AJA_OUTPUT_DESTINATION_ANALOG:
|
||||
|
@ -729,6 +767,29 @@ static gboolean gst_aja_sink_set_caps(GstBaseSink *bsink, GstCaps *caps) {
|
|||
break;
|
||||
}
|
||||
|
||||
if (!self->tc_indexes) self->tc_indexes = new NTV2TCIndexes;
|
||||
|
||||
switch (self->timecode_index) {
|
||||
case GST_AJA_TIMECODE_INDEX_VITC:
|
||||
self->tc_indexes->insert(tc_indexes_vitc[0]);
|
||||
if (self->configured_info.interlace_mode !=
|
||||
GST_VIDEO_INTERLACE_MODE_PROGRESSIVE)
|
||||
self->tc_indexes->insert(tc_indexes_vitc[1]);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_ATC_LTC:
|
||||
self->tc_indexes->insert(tc_index_atc_ltc);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC1:
|
||||
self->tc_indexes->insert(::NTV2_TCINDEX_LTC1);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC2:
|
||||
self->tc_indexes->insert(::NTV2_TCINDEX_LTC2);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
// Need to remove old routes for the output and framebuffer we're going to use
|
||||
NTV2ActualConnections connections = router.GetConnections();
|
||||
|
||||
|
@ -1154,75 +1215,6 @@ restart:
|
|||
GST_DEBUG_OBJECT(self, "Starting playing");
|
||||
g_mutex_unlock(&self->queue_lock);
|
||||
|
||||
NTV2TCIndexes tc_indexes;
|
||||
switch (self->timecode_index) {
|
||||
case GST_AJA_TIMECODE_INDEX_AUTO:
|
||||
tc_indexes.insert(::NTV2ChannelToTimecodeIndex(self->channel, false));
|
||||
tc_indexes.insert(::NTV2ChannelToTimecodeIndex(self->channel, true));
|
||||
if (self->configured_info.interlace_mode !=
|
||||
GST_VIDEO_INTERLACE_MODE_PROGRESSIVE)
|
||||
tc_indexes.insert(
|
||||
::NTV2ChannelToTimecodeIndex(self->channel, false, true));
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI1:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI1);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI2:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI2);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI3:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI3);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI4:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI4);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI5:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI5);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI6:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI6);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI7:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI7);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI8:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI8);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI1_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI1_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI2_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI2_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI3_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI3_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI4_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI4_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI5_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI5_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI6_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI6_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI7_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI7_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI8_LTC:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_SDI8_LTC);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC1:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_LTC1);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC2:
|
||||
tc_indexes.insert(::NTV2_TCINDEX_LTC2);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
// Make sure to globally lock here as the routing settings and others are
|
||||
// global shared state
|
||||
|
@ -1347,10 +1339,10 @@ restart:
|
|||
item.audio_buffer ? item.audio_map.size : 0);
|
||||
|
||||
// Set timecodes if provided by upstream
|
||||
if (item.tc.IsValid() && item.tc.fDBB != 0xffffffff) {
|
||||
if (item.tc.IsValid() && item.tc.fDBB != 0xffffffff && self->tc_indexes) {
|
||||
NTV2TimeCodes timecodes;
|
||||
|
||||
for (const auto &tc_index : tc_indexes) {
|
||||
for (const auto &tc_index : *self->tc_indexes) {
|
||||
timecodes[tc_index] = item.tc;
|
||||
}
|
||||
transfer.SetOutputTimeCodes(timecodes);
|
||||
|
|
|
@ -78,6 +78,7 @@ struct _GstAjaSink {
|
|||
NTV2AudioSystem audio_system;
|
||||
NTV2VideoFormat video_format;
|
||||
guint32 f2_start_line;
|
||||
NTV2TCIndexes *tc_indexes;
|
||||
|
||||
GstCaps *configured_caps;
|
||||
GstVideoInfo configured_info;
|
||||
|
|
143
gstajasrc.cpp
143
gstajasrc.cpp
|
@ -38,8 +38,7 @@ GST_DEBUG_CATEGORY_STATIC(gst_aja_src_debug);
|
|||
#define DEFAULT_AUDIO_SYSTEM (GST_AJA_AUDIO_SYSTEM_AUTO)
|
||||
#define DEFAULT_INPUT_SOURCE (GST_AJA_INPUT_SOURCE_AUTO)
|
||||
#define DEFAULT_AUDIO_SOURCE (GST_AJA_AUDIO_SOURCE_EMBEDDED)
|
||||
#define DEFAULT_EMBEDDED_AUDIO_INPUT (GST_AJA_EMBEDDED_AUDIO_INPUT_AUTO)
|
||||
#define DEFAULT_TIMECODE_INDEX (GST_AJA_TIMECODE_INDEX_AUTO)
|
||||
#define DEFAULT_TIMECODE_INDEX (GST_AJA_TIMECODE_INDEX_VITC)
|
||||
#define DEFAULT_REFERENCE_SOURCE (GST_AJA_REFERENCE_SOURCE_FREERUN)
|
||||
#define DEFAULT_QUEUE_SIZE (16)
|
||||
#define DEFAULT_CAPTURE_CPU_CORE (G_MAXUINT)
|
||||
|
@ -52,7 +51,6 @@ enum {
|
|||
PROP_AUDIO_SYSTEM,
|
||||
PROP_INPUT_SOURCE,
|
||||
PROP_AUDIO_SOURCE,
|
||||
PROP_EMBEDDED_AUDIO_INPUT,
|
||||
PROP_TIMECODE_INDEX,
|
||||
PROP_REFERENCE_SOURCE,
|
||||
PROP_QUEUE_SIZE,
|
||||
|
@ -169,15 +167,6 @@ static void gst_aja_src_class_init(GstAjaSrcClass *klass) {
|
|||
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
|
||||
G_PARAM_CONSTRUCT)));
|
||||
|
||||
g_object_class_install_property(
|
||||
gobject_class, PROP_EMBEDDED_AUDIO_INPUT,
|
||||
g_param_spec_enum(
|
||||
"embedded-audio-input", "Embedded Audio Input",
|
||||
"Embedded audio input to use", GST_TYPE_AJA_EMBEDDED_AUDIO_INPUT,
|
||||
DEFAULT_EMBEDDED_AUDIO_INPUT,
|
||||
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
|
||||
G_PARAM_CONSTRUCT)));
|
||||
|
||||
g_object_class_install_property(
|
||||
gobject_class, PROP_TIMECODE_INDEX,
|
||||
g_param_spec_enum(
|
||||
|
@ -239,7 +228,6 @@ static void gst_aja_src_init(GstAjaSrc *self) {
|
|||
self->audio_system_setting = DEFAULT_AUDIO_SYSTEM;
|
||||
self->input_source = DEFAULT_INPUT_SOURCE;
|
||||
self->audio_source = DEFAULT_AUDIO_SOURCE;
|
||||
self->embedded_audio_input = DEFAULT_EMBEDDED_AUDIO_INPUT;
|
||||
self->timecode_index = DEFAULT_TIMECODE_INDEX;
|
||||
self->reference_source = DEFAULT_REFERENCE_SOURCE;
|
||||
self->capture_cpu_core = DEFAULT_CAPTURE_CPU_CORE;
|
||||
|
@ -277,10 +265,6 @@ void gst_aja_src_set_property(GObject *object, guint property_id,
|
|||
case PROP_AUDIO_SOURCE:
|
||||
self->audio_source = (GstAjaAudioSource)g_value_get_enum(value);
|
||||
break;
|
||||
case PROP_EMBEDDED_AUDIO_INPUT:
|
||||
self->embedded_audio_input =
|
||||
(GstAjaEmbeddedAudioInput)g_value_get_enum(value);
|
||||
break;
|
||||
case PROP_TIMECODE_INDEX:
|
||||
self->timecode_index = (GstAjaTimecodeIndex)g_value_get_enum(value);
|
||||
break;
|
||||
|
@ -322,9 +306,6 @@ void gst_aja_src_get_property(GObject *object, guint property_id, GValue *value,
|
|||
case PROP_AUDIO_SOURCE:
|
||||
g_value_set_enum(value, self->audio_source);
|
||||
break;
|
||||
case PROP_EMBEDDED_AUDIO_INPUT:
|
||||
g_value_set_enum(value, self->embedded_audio_input);
|
||||
break;
|
||||
case PROP_TIMECODE_INDEX:
|
||||
g_value_set_enum(value, self->timecode_index);
|
||||
break;
|
||||
|
@ -683,43 +664,9 @@ static gboolean gst_aja_src_start(GstAjaSrc *self) {
|
|||
break;
|
||||
}
|
||||
|
||||
NTV2EmbeddedAudioInput embedded_audio_input;
|
||||
switch (self->embedded_audio_input) {
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_AUTO:
|
||||
embedded_audio_input =
|
||||
::NTV2InputSourceToEmbeddedAudioInput(input_source);
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_1:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_1;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_2:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_2;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_3:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_3;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_4:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_4;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_5:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_5;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_6:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_6;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_7:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_7;
|
||||
break;
|
||||
case GST_AJA_EMBEDDED_AUDIO_INPUT_VIDEO_8:
|
||||
embedded_audio_input = ::NTV2_EMBEDDED_AUDIO_INPUT_VIDEO_8;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
self->device->device->SetAudioSystemInputSource(
|
||||
self->audio_system, audio_source, embedded_audio_input);
|
||||
self->audio_system, audio_source,
|
||||
::NTV2InputSourceToEmbeddedAudioInput(input_source));
|
||||
self->configured_audio_channels =
|
||||
::NTV2DeviceGetMaxAudioChannels(self->device_id);
|
||||
self->device->device->SetNumberAudioChannels(
|
||||
|
@ -778,6 +725,24 @@ static gboolean gst_aja_src_start(GstAjaSrc *self) {
|
|||
(int)reference_source);
|
||||
|
||||
self->device->device->SetReference(reference_source);
|
||||
|
||||
switch (self->timecode_index) {
|
||||
case GST_AJA_TIMECODE_INDEX_VITC:
|
||||
self->tc_index = ::NTV2InputSourceToTimecodeIndex(input_source, false);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_ATC_LTC:
|
||||
self->tc_index = ::NTV2InputSourceToTimecodeIndex(input_source, true);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC1:
|
||||
self->tc_index = ::NTV2_TCINDEX_LTC1;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC2:
|
||||
self->tc_index = ::NTV2_TCINDEX_LTC2;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
guint video_buffer_size = ::GetVideoActiveSize(
|
||||
|
@ -1182,70 +1147,6 @@ restart:
|
|||
gst_clear_object(&clock);
|
||||
clock = gst_element_get_clock(GST_ELEMENT_CAST(self));
|
||||
|
||||
NTV2TCIndex tc_index;
|
||||
switch (self->timecode_index) {
|
||||
case GST_AJA_TIMECODE_INDEX_AUTO:
|
||||
tc_index = ::NTV2ChannelToTimecodeIndex(self->channel, false);
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI1:
|
||||
tc_index = ::NTV2_TCINDEX_SDI1;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI2:
|
||||
tc_index = ::NTV2_TCINDEX_SDI2;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI3:
|
||||
tc_index = ::NTV2_TCINDEX_SDI3;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI4:
|
||||
tc_index = ::NTV2_TCINDEX_SDI4;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI5:
|
||||
tc_index = ::NTV2_TCINDEX_SDI5;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI6:
|
||||
tc_index = ::NTV2_TCINDEX_SDI6;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI7:
|
||||
tc_index = ::NTV2_TCINDEX_SDI7;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI8:
|
||||
tc_index = ::NTV2_TCINDEX_SDI8;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI1_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI1_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI2_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI2_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI3_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI3_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI4_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI4_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI5_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI5_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI6_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI6_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI7_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI7_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_SDI8_LTC:
|
||||
tc_index = ::NTV2_TCINDEX_SDI8_LTC;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC1:
|
||||
tc_index = ::NTV2_TCINDEX_LTC1;
|
||||
break;
|
||||
case GST_AJA_TIMECODE_INDEX_LTC2:
|
||||
tc_index = ::NTV2_TCINDEX_LTC2;
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
break;
|
||||
}
|
||||
|
||||
g_mutex_lock(&self->queue_lock);
|
||||
while (self->playing && !self->shutdown) {
|
||||
AUTOCIRCULATE_STATUS status;
|
||||
|
@ -1363,7 +1264,7 @@ restart:
|
|||
|
||||
NTV2_RP188 time_code;
|
||||
transfer.acTransferStatus.acFrameStamp.GetInputTimeCode(time_code,
|
||||
tc_index);
|
||||
self->tc_index);
|
||||
|
||||
gint64 frame_time = transfer.acTransferStatus.acFrameStamp.acFrameTime;
|
||||
gint64 now_sys = g_get_real_time();
|
||||
|
|
|
@ -66,7 +66,6 @@ struct _GstAjaSrc {
|
|||
GstAjaVideoFormat video_format_setting;
|
||||
GstAjaInputSource input_source;
|
||||
GstAjaAudioSource audio_source;
|
||||
GstAjaEmbeddedAudioInput embedded_audio_input;
|
||||
GstAjaTimecodeIndex timecode_index;
|
||||
GstAjaReferenceSource reference_source;
|
||||
guint queue_size;
|
||||
|
@ -75,6 +74,7 @@ struct _GstAjaSrc {
|
|||
NTV2AudioSystem audio_system;
|
||||
NTV2VideoFormat video_format;
|
||||
guint32 f2_start_line;
|
||||
NTV2TCIndex tc_index;
|
||||
|
||||
GstCaps *configured_caps;
|
||||
GstVideoInfo configured_info;
|
||||
|
|
Loading…
Reference in a new issue