Simplify configuration of timecode index and embedded audio source

This commit is contained in:
Sebastian Dröge 2021-02-09 15:08:26 +02:00
parent 00c2fcfc8e
commit 12380026e6
6 changed files with 94 additions and 269 deletions

View file

@ -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)) {

View file

@ -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;

View file

@ -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);

View file

@ -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;

View file

@ -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();

View file

@ -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;