mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-05-22 18:28:17 +00:00
Merge branch 'decklink2' into 'main'
Draft: decklink2: Add new Blackmagic DeckLink plugin See merge request gstreamer/gstreamer!3746
This commit is contained in:
commit
78e4b4043c
|
@ -8,6 +8,7 @@ subprojects/gst-plugins-bad/gst-libs/gst/winrt
|
|||
subprojects/gst-plugins-bad/sys/amfcodec
|
||||
subprojects/gst-plugins-bad/sys/d3d11
|
||||
subprojects/gst-plugins-bad/sys/d3d12
|
||||
^(subprojects/gst-plugins-bad/sys/decklink2/)+(\w)+([^/])+(cpp$)
|
||||
subprojects/gst-plugins-bad/sys/dwrite
|
||||
subprojects/gst-plugins-bad/sys/mediafoundation
|
||||
subprojects/gst-plugins-bad/sys/nvcodec
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -107,6 +107,7 @@ option('d3d12', type : 'feature', value : 'auto', description : 'Direct3D12 plug
|
|||
option('dash', type : 'feature', value : 'auto', description : 'DASH demuxer plugin')
|
||||
option('dc1394', type : 'feature', value : 'auto', description : 'libdc1394 IIDC camera source plugin')
|
||||
option('decklink', type : 'feature', value : 'auto', description : 'DeckLink audio/video source/sink plugin')
|
||||
option('decklink2', type : 'feature', value : 'auto', description : 'DeckLink plugin')
|
||||
option('directfb', type : 'feature', value : 'auto', description : 'DirectFB video sink plugin')
|
||||
option('directsound', type : 'feature', value : 'auto', description : 'Directsound audio source plugin')
|
||||
option('directshow', type : 'feature', value : 'auto', description : 'Directshow audio/video plugins')
|
||||
|
|
|
@ -0,0 +1,646 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstdecklink2combiner.h"
|
||||
#include "gstdecklink2utils.h"
|
||||
#include <string.h>
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_decklink2_combiner_debug);
|
||||
#define GST_CAT_DEFAULT gst_decklink2_combiner_debug
|
||||
|
||||
static GstStaticPadTemplate audio_template = GST_STATIC_PAD_TEMPLATE ("audio",
|
||||
GST_PAD_SINK,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS ("audio/x-raw, format = (string) { S16LE, S32LE }, "
|
||||
"rate = (int) 48000, channels = (int) { 2, 8, 16 }, "
|
||||
"layout = (string) interleaved"));
|
||||
|
||||
struct _GstDeckLink2Combiner
|
||||
{
|
||||
GstAggregator parent;
|
||||
|
||||
GstAggregatorPad *video_pad;
|
||||
GstAggregatorPad *audio_pad;
|
||||
|
||||
GstCaps *video_caps;
|
||||
GstCaps *audio_caps;
|
||||
|
||||
GstVideoInfo video_info;
|
||||
GstAudioInfo audio_info;
|
||||
|
||||
GstClockTime video_start_time;
|
||||
GstClockTime audio_start_time;
|
||||
|
||||
GstClockTime video_running_time;
|
||||
GstClockTime audio_running_time;
|
||||
|
||||
guint64 num_video_buffers;
|
||||
guint64 num_audio_buffers;
|
||||
};
|
||||
|
||||
static gboolean gst_decklink2_combiner_sink_event (GstAggregator * agg,
|
||||
GstAggregatorPad * pad, GstEvent * event);
|
||||
static gboolean gst_decklink2_combiner_sink_query (GstAggregator * agg,
|
||||
GstAggregatorPad * aggpad, GstQuery * query);
|
||||
static GstFlowReturn gst_decklink2_combiner_aggregate (GstAggregator * agg,
|
||||
gboolean timeout);
|
||||
static gboolean gst_decklink2_combiner_start (GstAggregator * agg);
|
||||
static gboolean gst_decklink2_combiner_stop (GstAggregator * agg);
|
||||
static GstBuffer *gst_decklink2_combiner_clip (GstAggregator * agg,
|
||||
GstAggregatorPad * aggpad, GstBuffer * buffer);
|
||||
|
||||
#define gst_decklink2_combiner_parent_class parent_class
|
||||
G_DEFINE_TYPE (GstDeckLink2Combiner, gst_decklink2_combiner,
|
||||
GST_TYPE_AGGREGATOR);
|
||||
GST_ELEMENT_REGISTER_DEFINE (decklink2combiner, "decklink2combiner",
|
||||
GST_RANK_NONE, GST_TYPE_DECKLINK2_COMBINER);
|
||||
|
||||
static void
|
||||
gst_decklink2_combiner_class_init (GstDeckLink2CombinerClass * klass)
|
||||
{
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||
GstAggregatorClass *agg_class = GST_AGGREGATOR_CLASS (klass);
|
||||
GstCaps *templ_caps;
|
||||
|
||||
gst_element_class_add_static_pad_template_with_gtype (element_class,
|
||||
&audio_template, GST_TYPE_AGGREGATOR_PAD);
|
||||
|
||||
templ_caps = gst_decklink2_get_default_template_caps ();
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new_with_gtype ("video", GST_PAD_SINK, GST_PAD_ALWAYS,
|
||||
templ_caps, GST_TYPE_AGGREGATOR_PAD));
|
||||
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new_with_gtype ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
||||
templ_caps, GST_TYPE_AGGREGATOR_PAD));
|
||||
gst_caps_unref (templ_caps);
|
||||
|
||||
gst_element_class_set_static_metadata (element_class,
|
||||
"DeckLink2 Combiner",
|
||||
"Combiner", "Combines video and audio frames",
|
||||
"Seungha Yang <seungha@centricular.com>");
|
||||
|
||||
agg_class->sink_event = GST_DEBUG_FUNCPTR (gst_decklink2_combiner_sink_event);
|
||||
agg_class->sink_query = GST_DEBUG_FUNCPTR (gst_decklink2_combiner_sink_query);
|
||||
agg_class->aggregate = GST_DEBUG_FUNCPTR (gst_decklink2_combiner_aggregate);
|
||||
agg_class->start = GST_DEBUG_FUNCPTR (gst_decklink2_combiner_start);
|
||||
agg_class->stop = GST_DEBUG_FUNCPTR (gst_decklink2_combiner_stop);
|
||||
agg_class->clip = GST_DEBUG_FUNCPTR (gst_decklink2_combiner_clip);
|
||||
agg_class->get_next_time =
|
||||
GST_DEBUG_FUNCPTR (gst_aggregator_simple_get_next_time);
|
||||
/* No negotiation needed */
|
||||
agg_class->negotiate = NULL;
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (gst_decklink2_combiner_debug,
|
||||
"decklink2combiner", 0, "decklink2combiner");
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_combiner_init (GstDeckLink2Combiner * self)
|
||||
{
|
||||
GstPadTemplate *templ;
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (self);
|
||||
|
||||
templ = gst_element_class_get_pad_template (klass, "video");
|
||||
self->video_pad = (GstAggregatorPad *)
|
||||
g_object_new (GST_TYPE_AGGREGATOR_PAD, "name", "video", "direction",
|
||||
GST_PAD_SINK, "template", templ, NULL);
|
||||
gst_object_unref (templ);
|
||||
gst_element_add_pad (GST_ELEMENT_CAST (self), GST_PAD_CAST (self->video_pad));
|
||||
|
||||
templ = gst_static_pad_template_get (&audio_template);
|
||||
self->audio_pad = (GstAggregatorPad *)
|
||||
g_object_new (GST_TYPE_AGGREGATOR_PAD, "name", "audio", "direction",
|
||||
GST_PAD_SINK, "template", templ, NULL);
|
||||
gst_object_unref (templ);
|
||||
gst_element_add_pad (GST_ELEMENT_CAST (self), GST_PAD_CAST (self->audio_pad));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_combiner_sink_event (GstAggregator * agg,
|
||||
GstAggregatorPad * aggpad, GstEvent * event)
|
||||
{
|
||||
GstDeckLink2Combiner *self = GST_DECKLINK2_COMBINER (agg);
|
||||
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
case GST_EVENT_CAPS:
|
||||
{
|
||||
GstCaps *caps;
|
||||
|
||||
gst_event_parse_caps (event, &caps);
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Got caps from %s pad %" GST_PTR_FORMAT,
|
||||
aggpad == self->video_pad ? "video" : "audio", caps);
|
||||
|
||||
if (aggpad == self->video_pad) {
|
||||
gst_caps_replace (&self->video_caps, caps);
|
||||
gst_video_info_from_caps (&self->video_info, caps);
|
||||
} else {
|
||||
/* FIXME: flush audio if audio info is changed or disallow audio update */
|
||||
gst_caps_replace (&self->audio_caps, caps);
|
||||
gst_audio_info_from_caps (&self->audio_info, caps);
|
||||
}
|
||||
|
||||
if (self->video_caps) {
|
||||
gint fps_n, fps_d;
|
||||
GstClockTime latency;
|
||||
|
||||
caps = gst_caps_copy (self->video_caps);
|
||||
if (GST_AUDIO_INFO_IS_VALID (&self->audio_info)) {
|
||||
gst_caps_set_simple (caps, "audio-channels", G_TYPE_INT,
|
||||
self->audio_info.channels,
|
||||
"audio-format", G_TYPE_STRING,
|
||||
gst_audio_format_to_string (self->audio_info.finfo->format),
|
||||
NULL);
|
||||
} else {
|
||||
gst_caps_set_simple (caps, "audio-channels", G_TYPE_INT, 0, NULL);
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Set caps %" GST_PTR_FORMAT, caps);
|
||||
|
||||
if (self->video_info.fps_n > 0 && self->video_info.fps_d > 0) {
|
||||
fps_n = self->video_info.fps_n;
|
||||
fps_d = self->video_info.fps_d;
|
||||
} else {
|
||||
fps_n = 30;
|
||||
fps_d = 1;
|
||||
}
|
||||
|
||||
latency = gst_util_uint64_scale (GST_SECOND, fps_d, fps_n);
|
||||
gst_aggregator_set_latency (agg, latency, latency);
|
||||
|
||||
gst_aggregator_set_src_caps (agg, caps);
|
||||
gst_caps_unref (caps);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GST_EVENT_SEGMENT:
|
||||
{
|
||||
const GstSegment *segment;
|
||||
|
||||
gst_event_parse_segment (event, &segment);
|
||||
|
||||
/* pass through video segment as-is */
|
||||
gst_aggregator_update_segment (agg, segment);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GST_AGGREGATOR_CLASS (parent_class)->sink_event (agg, aggpad, event);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_combiner_sink_query (GstAggregator * agg,
|
||||
GstAggregatorPad * aggpad, GstQuery * query)
|
||||
{
|
||||
GstDeckLink2Combiner *self = GST_DECKLINK2_COMBINER (agg);
|
||||
gboolean ret;
|
||||
|
||||
switch (GST_QUERY_TYPE (query)) {
|
||||
case GST_QUERY_CAPS:
|
||||
{
|
||||
GstQuery *caps_query;
|
||||
GstCaps *filter = NULL;
|
||||
GstStructure *s;
|
||||
GstCaps *caps = NULL;
|
||||
GstCaps *templ_caps = gst_pad_get_pad_template_caps (GST_PAD (aggpad));
|
||||
|
||||
gst_query_parse_caps (query, &filter);
|
||||
|
||||
GST_LOG_OBJECT (aggpad, "Handle query caps with filter %" GST_PTR_FORMAT,
|
||||
filter);
|
||||
|
||||
if (filter)
|
||||
caps_query = gst_query_new_caps (filter);
|
||||
else
|
||||
caps_query = gst_query_new_caps (templ_caps);
|
||||
|
||||
ret = gst_pad_peer_query (GST_AGGREGATOR_SRC_PAD (agg), caps_query);
|
||||
gst_query_parse_caps_result (caps_query, &caps);
|
||||
|
||||
GST_LOG_OBJECT (aggpad, "Downstream query caps result %d, %"
|
||||
GST_PTR_FORMAT, ret, caps);
|
||||
|
||||
if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps)) {
|
||||
if (filter) {
|
||||
GstCaps *temp = gst_caps_intersect_full (filter, templ_caps,
|
||||
GST_CAPS_INTERSECT_FIRST);
|
||||
gst_query_set_caps_result (query, temp);
|
||||
gst_caps_unref (temp);
|
||||
} else {
|
||||
gst_query_set_caps_result (query, templ_caps);
|
||||
}
|
||||
gst_caps_unref (templ_caps);
|
||||
gst_query_unref (caps_query);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
caps = gst_caps_copy (caps);
|
||||
gst_query_unref (caps_query);
|
||||
|
||||
if (aggpad == self->video_pad) {
|
||||
/* Remove audio related fields */
|
||||
for (guint i = 0; i < gst_caps_get_size (caps); i++) {
|
||||
s = gst_caps_get_structure (caps, i);
|
||||
gst_structure_remove_field (s, "audio-channels");
|
||||
}
|
||||
gst_query_set_caps_result (query, caps);
|
||||
gst_caps_unref (caps);
|
||||
} else {
|
||||
GstCaps *audio_caps = gst_caps_copy (templ_caps);
|
||||
const GValue *ch;
|
||||
|
||||
/* construct caps with updated channels field */
|
||||
s = gst_caps_get_structure (caps, 0);
|
||||
ch = gst_structure_get_value (s, "audio-channels");
|
||||
if (ch)
|
||||
gst_caps_set_value (audio_caps, "channels", ch);
|
||||
|
||||
gst_caps_unref (caps);
|
||||
|
||||
if (filter) {
|
||||
GstCaps *temp = gst_caps_intersect_full (filter, audio_caps,
|
||||
GST_CAPS_INTERSECT_FIRST);
|
||||
gst_query_set_caps_result (query, temp);
|
||||
gst_caps_unref (temp);
|
||||
} else {
|
||||
gst_query_set_caps_result (query, audio_caps);
|
||||
}
|
||||
gst_caps_unref (audio_caps);
|
||||
}
|
||||
gst_caps_unref (templ_caps);
|
||||
return TRUE;
|
||||
}
|
||||
case GST_QUERY_ACCEPT_CAPS:
|
||||
GST_DEBUG_OBJECT (aggpad, "Handle accept caps");
|
||||
|
||||
if (aggpad == self->video_pad) {
|
||||
ret = gst_pad_peer_query (GST_AGGREGATOR_SRC_PAD (agg), query);
|
||||
GST_DEBUG_OBJECT (aggpad, "Video accept caps result %d", ret);
|
||||
} else {
|
||||
GstQuery *caps_query;
|
||||
GstCaps *audio_caps;
|
||||
GstCaps *caps = NULL;
|
||||
const GValue *ch;
|
||||
GstStructure *s;
|
||||
|
||||
caps_query = gst_query_new_caps (NULL);
|
||||
ret = gst_pad_peer_query (GST_AGGREGATOR_SRC_PAD (agg), caps_query);
|
||||
|
||||
gst_query_parse_caps_result (caps_query, &caps);
|
||||
GST_LOG_OBJECT (aggpad, "Downstream query caps result %d, %"
|
||||
GST_PTR_FORMAT, ret, caps);
|
||||
|
||||
if (!caps || gst_caps_is_empty (caps) || gst_caps_is_any (caps)) {
|
||||
gst_query_unref (caps_query);
|
||||
gst_query_set_accept_caps_result (query, TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
audio_caps = gst_static_pad_template_get_caps (&audio_template);
|
||||
/* construct caps with updated channels field */
|
||||
audio_caps = gst_caps_copy (audio_caps);
|
||||
|
||||
s = gst_caps_get_structure (caps, 0);
|
||||
ch = gst_structure_get_value (s, "audio-channels");
|
||||
if (ch)
|
||||
gst_caps_set_value (audio_caps, "channels", ch);
|
||||
|
||||
gst_query_unref (caps_query);
|
||||
|
||||
gst_query_parse_accept_caps (query, &caps);
|
||||
gst_query_set_accept_caps_result (query, gst_caps_is_subset (caps,
|
||||
audio_caps));
|
||||
gst_caps_unref (audio_caps);
|
||||
ret = TRUE;
|
||||
}
|
||||
return ret;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GST_AGGREGATOR_CLASS (parent_class)->sink_query (agg, aggpad, query);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_combiner_reset (GstDeckLink2Combiner * self)
|
||||
{
|
||||
gst_clear_caps (&self->video_caps);
|
||||
gst_clear_caps (&self->audio_caps);
|
||||
|
||||
gst_video_info_init (&self->video_info);
|
||||
gst_audio_info_init (&self->audio_info);
|
||||
|
||||
self->video_start_time = GST_CLOCK_TIME_NONE;
|
||||
self->audio_start_time = GST_CLOCK_TIME_NONE;
|
||||
self->video_running_time = GST_CLOCK_TIME_NONE;
|
||||
self->audio_running_time = GST_CLOCK_TIME_NONE;
|
||||
self->num_video_buffers = 0;
|
||||
self->num_audio_buffers = 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_combiner_start (GstAggregator * agg)
|
||||
{
|
||||
GstDeckLink2Combiner *self = GST_DECKLINK2_COMBINER (agg);
|
||||
|
||||
gst_decklink2_combiner_reset (self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_combiner_stop (GstAggregator * agg)
|
||||
{
|
||||
GstDeckLink2Combiner *self = GST_DECKLINK2_COMBINER (agg);
|
||||
|
||||
gst_decklink2_combiner_reset (self);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GstBuffer *
|
||||
gst_decklink2_combiner_clip (GstAggregator * agg, GstAggregatorPad * aggpad,
|
||||
GstBuffer * buffer)
|
||||
{
|
||||
GstDeckLink2Combiner *self = GST_DECKLINK2_COMBINER (agg);
|
||||
GstClockTime pts;
|
||||
|
||||
pts = GST_BUFFER_PTS (buffer);
|
||||
|
||||
if (!GST_CLOCK_TIME_IS_VALID (pts)) {
|
||||
GST_ERROR_OBJECT (self, "Only buffers with PTS supported");
|
||||
return buffer;
|
||||
}
|
||||
|
||||
if (aggpad == self->video_pad) {
|
||||
GstClockTime dur;
|
||||
GstClockTime start, stop, cstart, cstop;
|
||||
|
||||
dur = GST_BUFFER_DURATION (buffer);
|
||||
if (!GST_CLOCK_TIME_IS_VALID (dur) &&
|
||||
self->video_info.fps_n > 0 && self->video_info.fps_d > 0) {
|
||||
dur = gst_util_uint64_scale_int (GST_SECOND, self->video_info.fps_d,
|
||||
self->video_info.fps_n);
|
||||
}
|
||||
|
||||
start = pts;
|
||||
if (GST_CLOCK_TIME_IS_VALID (dur))
|
||||
stop = start + dur;
|
||||
else
|
||||
stop = GST_CLOCK_TIME_NONE;
|
||||
|
||||
if (!gst_segment_clip (&aggpad->segment, GST_FORMAT_TIME, start, stop,
|
||||
&cstart, &cstop)) {
|
||||
GST_LOG_OBJECT (self, "Dropping buffer outside segment");
|
||||
gst_buffer_unref (buffer);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (GST_BUFFER_PTS (buffer) != cstart) {
|
||||
buffer = gst_buffer_make_writable (buffer);
|
||||
GST_BUFFER_PTS (buffer) = cstart;
|
||||
}
|
||||
|
||||
if (GST_CLOCK_TIME_IS_VALID (stop) && GST_CLOCK_TIME_IS_VALID (cstop)) {
|
||||
dur = cstop - cstart;
|
||||
|
||||
if (GST_BUFFER_DURATION (buffer) != dur)
|
||||
buffer = gst_buffer_make_writable (buffer);
|
||||
|
||||
GST_BUFFER_DURATION (buffer) = dur;
|
||||
}
|
||||
} else {
|
||||
buffer = gst_audio_buffer_clip (buffer, &aggpad->segment,
|
||||
self->audio_info.rate, self->audio_info.bpf);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_decklink2_combiner_aggregate (GstAggregator * agg, gboolean timeout)
|
||||
{
|
||||
GstDeckLink2Combiner *self = GST_DECKLINK2_COMBINER (agg);
|
||||
GstBuffer *video_buf = NULL;
|
||||
GstBuffer *audio_buf = NULL;
|
||||
GstDeckLink2AudioMeta *meta;
|
||||
GstClockTime video_running_time = GST_CLOCK_TIME_NONE;
|
||||
GstClockTime video_running_time_end = GST_CLOCK_TIME_NONE;
|
||||
GstClockTime audio_running_time, audio_running_time_end;
|
||||
GstSample *audio_sample;
|
||||
|
||||
if (gst_aggregator_pad_is_eos (self->video_pad) &&
|
||||
gst_aggregator_pad_is_eos (self->audio_pad)) {
|
||||
GST_DEBUG_OBJECT (self, "All EOS");
|
||||
return GST_FLOW_EOS;
|
||||
}
|
||||
|
||||
video_buf = gst_aggregator_pad_peek_buffer (self->video_pad);
|
||||
if (!video_buf) {
|
||||
GST_LOG_OBJECT (self, "Waiting for video");
|
||||
goto need_data;
|
||||
}
|
||||
|
||||
/* Drop empty buffer */
|
||||
if (gst_buffer_get_size (video_buf) == 0) {
|
||||
GST_LOG_OBJECT (self, "Dropping empty video buffer");
|
||||
gst_aggregator_pad_drop_buffer (self->video_pad);
|
||||
goto need_data;
|
||||
}
|
||||
|
||||
video_running_time = video_running_time_end =
|
||||
gst_segment_to_running_time (&self->video_pad->segment,
|
||||
GST_FORMAT_TIME, GST_BUFFER_PTS (video_buf));
|
||||
if (GST_BUFFER_DURATION_IS_VALID (video_buf)) {
|
||||
video_running_time_end += GST_BUFFER_DURATION (video_buf);
|
||||
} else if (self->video_info.fps_n > 0 && self->video_info.fps_d > 0) {
|
||||
video_running_time_end += gst_util_uint64_scale_int (GST_SECOND,
|
||||
self->video_info.fps_d, self->video_info.fps_n);
|
||||
} else {
|
||||
/* XXX: shouldn't happen */
|
||||
video_running_time_end = video_running_time;
|
||||
}
|
||||
|
||||
if (!GST_CLOCK_TIME_IS_VALID (self->video_start_time)) {
|
||||
self->video_start_time = video_running_time;
|
||||
GST_DEBUG_OBJECT (self, "Video start time %" GST_TIME_FORMAT,
|
||||
GST_TIME_ARGS (self->video_start_time));
|
||||
}
|
||||
|
||||
self->video_running_time = video_running_time_end;
|
||||
|
||||
audio_buf = gst_aggregator_pad_peek_buffer (self->audio_pad);
|
||||
if (!audio_buf) {
|
||||
GST_LOG_OBJECT (self, "Waiting for audio buffer");
|
||||
goto need_data;
|
||||
}
|
||||
|
||||
if (gst_buffer_get_size (audio_buf) == 0) {
|
||||
GST_LOG_OBJECT (self, "Dropping empty audio buffer");
|
||||
gst_aggregator_pad_drop_buffer (self->audio_pad);
|
||||
goto need_data;
|
||||
}
|
||||
|
||||
audio_running_time = gst_segment_to_running_time (&self->audio_pad->segment,
|
||||
GST_FORMAT_TIME, GST_BUFFER_PTS (audio_buf));
|
||||
if (GST_BUFFER_DURATION_IS_VALID (audio_buf)) {
|
||||
audio_running_time_end = audio_running_time +
|
||||
GST_BUFFER_DURATION (audio_buf);
|
||||
} else {
|
||||
audio_running_time_end = gst_util_uint64_scale (GST_SECOND,
|
||||
gst_buffer_get_size (audio_buf),
|
||||
self->audio_info.rate * self->audio_info.bpf);
|
||||
audio_running_time_end += audio_running_time;
|
||||
}
|
||||
|
||||
self->audio_running_time = audio_running_time_end;
|
||||
|
||||
/* Do initial video/audio align */
|
||||
if (!GST_CLOCK_TIME_IS_VALID (self->audio_start_time)) {
|
||||
GST_DEBUG_OBJECT (self, "Initial audio running time %" GST_TIME_FORMAT,
|
||||
GST_TIME_ARGS (audio_running_time));
|
||||
|
||||
if (audio_running_time_end <= self->video_start_time) {
|
||||
GST_DEBUG_OBJECT (self, "audio running-time end %" GST_TIME_FORMAT
|
||||
" < video-start-time %" GST_TIME_FORMAT,
|
||||
GST_TIME_ARGS (self->video_start_time),
|
||||
GST_TIME_ARGS (audio_running_time_end));
|
||||
/* completely outside */
|
||||
gst_aggregator_pad_drop_buffer (self->audio_pad);
|
||||
goto need_data;
|
||||
} else if (audio_running_time < self->video_start_time &&
|
||||
audio_running_time_end >= self->video_start_time) {
|
||||
/* partial overlap */
|
||||
GstClockTime diff;
|
||||
gsize in_samples, diff_samples;
|
||||
GstAudioMeta *meta;
|
||||
GstBuffer *trunc_buf;
|
||||
|
||||
meta = gst_buffer_get_audio_meta (audio_buf);
|
||||
in_samples = meta ? meta->samples :
|
||||
gst_buffer_get_size (audio_buf) / self->audio_info.bpf;
|
||||
|
||||
diff = self->video_start_time - audio_running_time;
|
||||
diff_samples = gst_util_uint64_scale (diff,
|
||||
self->audio_info.rate, GST_SECOND);
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Truncate initial audio buffer duration %"
|
||||
GST_TIME_FORMAT, GST_TIME_ARGS (diff));
|
||||
|
||||
trunc_buf = gst_audio_buffer_truncate (
|
||||
(GstBuffer *) g_steal_pointer (&audio_buf),
|
||||
self->audio_info.bpf, diff_samples, in_samples - diff_samples);
|
||||
gst_aggregator_pad_drop_buffer (self->audio_pad);
|
||||
if (!trunc_buf) {
|
||||
GST_DEBUG_OBJECT (self, "Empty truncated buffer");
|
||||
gst_aggregator_pad_drop_buffer (self->audio_pad);
|
||||
goto need_data;
|
||||
}
|
||||
|
||||
self->audio_start_time = self->video_start_time;
|
||||
audio_buf = trunc_buf;
|
||||
} else if (audio_running_time >= self->video_start_time) {
|
||||
/* fill silence if needed */
|
||||
GstClockTime diff;
|
||||
gsize diff_samples;
|
||||
|
||||
diff = audio_running_time - self->video_start_time;
|
||||
if (diff > 0) {
|
||||
gsize fill_size;
|
||||
|
||||
diff_samples = gst_util_uint64_scale (diff,
|
||||
self->audio_info.rate, GST_SECOND);
|
||||
|
||||
fill_size = diff_samples * self->audio_info.bpf;
|
||||
if (fill_size > 0) {
|
||||
GstBuffer *fill_buf;
|
||||
GstMapInfo map;
|
||||
GstMapInfo origin_map;
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Fill initial %" G_GSIZE_FORMAT
|
||||
" audio samples", diff_samples);
|
||||
|
||||
gst_buffer_map (audio_buf, &origin_map, GST_MAP_READ);
|
||||
|
||||
fill_buf = gst_buffer_new_and_alloc (fill_size + origin_map.size);
|
||||
gst_buffer_map (fill_buf, &map, GST_MAP_WRITE);
|
||||
gst_audio_format_info_fill_silence (self->audio_info.finfo,
|
||||
map.data, fill_size);
|
||||
memcpy ((guint8 *) map.data + fill_size,
|
||||
origin_map.data, origin_map.size);
|
||||
gst_buffer_unmap (fill_buf, &map);
|
||||
gst_buffer_unmap (audio_buf, &origin_map);
|
||||
gst_buffer_unref (audio_buf);
|
||||
audio_buf = fill_buf;
|
||||
}
|
||||
}
|
||||
|
||||
self->audio_start_time = self->video_start_time;
|
||||
gst_aggregator_pad_drop_buffer (self->audio_pad);
|
||||
}
|
||||
|
||||
self->num_audio_buffers++;
|
||||
} else {
|
||||
gst_aggregator_pad_drop_buffer (self->audio_pad);
|
||||
self->num_audio_buffers++;
|
||||
}
|
||||
|
||||
gst_aggregator_pad_drop_buffer (self->video_pad);
|
||||
video_buf = gst_buffer_make_writable (video_buf);
|
||||
self->num_video_buffers++;
|
||||
|
||||
/* Remove external audio meta if any */
|
||||
meta = gst_buffer_get_decklink2_audio_meta (video_buf);
|
||||
if (meta) {
|
||||
GST_LOG_OBJECT (self, "Removing old audio meta");
|
||||
gst_buffer_remove_meta (video_buf, GST_META_CAST (meta));
|
||||
}
|
||||
|
||||
audio_sample = gst_sample_new (audio_buf, self->audio_caps, NULL, NULL);
|
||||
gst_buffer_unref (audio_buf);
|
||||
gst_buffer_add_decklink2_audio_meta (video_buf, audio_sample);
|
||||
gst_sample_unref (audio_sample);
|
||||
|
||||
GST_LOG_OBJECT (self, "Finish buffer %" GST_PTR_FORMAT
|
||||
", total video/audio buffers %" GST_TIME_FORMAT
|
||||
" (%" G_GUINT64_FORMAT ") / %" GST_TIME_FORMAT " (%"
|
||||
G_GUINT64_FORMAT ")", video_buf, GST_TIME_ARGS (self->video_running_time),
|
||||
self->num_video_buffers, GST_TIME_ARGS (self->audio_running_time),
|
||||
self->num_audio_buffers);
|
||||
|
||||
GST_AGGREGATOR_PAD (agg->srcpad)->segment.position = self->video_running_time;
|
||||
|
||||
return gst_aggregator_finish_buffer (agg, video_buf);
|
||||
|
||||
need_data:
|
||||
gst_clear_buffer (&video_buf);
|
||||
gst_clear_buffer (&audio_buf);
|
||||
|
||||
return GST_AGGREGATOR_FLOW_NEED_DATA;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/base.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_COMBINER (gst_decklink2_combiner_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Combiner, gst_decklink2_combiner,
|
||||
GST, DECKLINK2_COMBINER, GstAggregator);
|
||||
|
||||
GST_ELEMENT_REGISTER_DECLARE (decklink2combiner);
|
||||
|
||||
G_END_DECLS
|
299
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2demux.cpp
Normal file
299
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2demux.cpp
Normal file
|
@ -0,0 +1,299 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstdecklink2demux.h"
|
||||
#include "gstdecklink2utils.h"
|
||||
#include "gstdecklink2object.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_decklink2_demux_debug);
|
||||
#define GST_CAT_DEFAULT gst_decklink2_demux_debug
|
||||
|
||||
static GstStaticPadTemplate audio_template = GST_STATIC_PAD_TEMPLATE ("audio",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_SOMETIMES,
|
||||
GST_STATIC_CAPS ("audio/x-raw, format = (string) { S16LE, S32LE }, "
|
||||
"rate = (int) 48000, channels = (int) { 2, 8, 16 }, "
|
||||
"layout = (string) interleaved"));
|
||||
|
||||
struct _GstDeckLink2Demux
|
||||
{
|
||||
GstElement parent;
|
||||
|
||||
GstPad *sink_pad;
|
||||
GstPad *video_pad;
|
||||
GstPad *audio_pad;
|
||||
GstVideoInfo video_info;
|
||||
|
||||
GstFlowCombiner *flow_combiner;
|
||||
GstCaps *audio_caps;
|
||||
|
||||
guint drop_count;
|
||||
};
|
||||
|
||||
static void gst_decklink2_demux_finalize (GObject * object);
|
||||
static GstStateChangeReturn
|
||||
gst_decklink2_demux_change_state (GstElement * element,
|
||||
GstStateChange transition);
|
||||
static GstFlowReturn gst_decklink2_demux_chain (GstPad * sinkpad,
|
||||
GstObject * parent, GstBuffer * inbuf);
|
||||
static gboolean gst_decklink2_demux_sink_event (GstPad * sinkpad,
|
||||
GstObject * parent, GstEvent * event);
|
||||
|
||||
#define gst_decklink2_demux_parent_class parent_class
|
||||
G_DEFINE_TYPE (GstDeckLink2Demux, gst_decklink2_demux, GST_TYPE_ELEMENT);
|
||||
GST_ELEMENT_REGISTER_DEFINE (decklink2demux, "decklink2demux",
|
||||
GST_RANK_NONE, GST_TYPE_DECKLINK2_DEMUX);
|
||||
|
||||
static void
|
||||
gst_decklink2_demux_class_init (GstDeckLink2DemuxClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||
|
||||
object_class->finalize = gst_decklink2_demux_finalize;
|
||||
|
||||
GstCaps *templ_caps = gst_decklink2_get_default_template_caps ();
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, templ_caps));
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new ("video", GST_PAD_SRC, GST_PAD_ALWAYS, templ_caps));
|
||||
gst_caps_unref (templ_caps);
|
||||
gst_element_class_add_static_pad_template (element_class, &audio_template);
|
||||
|
||||
gst_element_class_set_static_metadata (element_class,
|
||||
"Decklink2 Demux", "Video/Audio/Demuxer/Hardware", "Decklink2 Demux",
|
||||
"Seungha Yang <seungha@centricular.com>");
|
||||
|
||||
element_class->change_state =
|
||||
GST_DEBUG_FUNCPTR (gst_decklink2_demux_change_state);
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (gst_decklink2_demux_debug, "decklink2demux",
|
||||
0, "decklink2demux");
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_demux_init (GstDeckLink2Demux * self)
|
||||
{
|
||||
GstPadTemplate *templ;
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (self);
|
||||
|
||||
templ = gst_element_class_get_pad_template (klass, "sink");
|
||||
self->sink_pad = gst_pad_new_from_template (templ, "sink");
|
||||
gst_pad_set_chain_function (self->sink_pad, gst_decklink2_demux_chain);
|
||||
gst_pad_set_event_function (self->sink_pad, gst_decklink2_demux_sink_event);
|
||||
gst_element_add_pad (GST_ELEMENT (self), self->sink_pad);
|
||||
gst_object_unref (templ);
|
||||
|
||||
templ = gst_element_class_get_pad_template (klass, "video");
|
||||
self->video_pad = gst_pad_new_from_template (templ, "video");
|
||||
gst_element_add_pad (GST_ELEMENT (self), self->video_pad);
|
||||
gst_pad_use_fixed_caps (self->video_pad);
|
||||
gst_object_unref (templ);
|
||||
|
||||
self->flow_combiner = gst_flow_combiner_new ();
|
||||
gst_flow_combiner_add_pad (self->flow_combiner, self->video_pad);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_demux_finalize (GObject * object)
|
||||
{
|
||||
GstDeckLink2Demux *self = GST_DECKLINK2_DEMUX (object);
|
||||
|
||||
gst_flow_combiner_free (self->flow_combiner);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static GstStateChangeReturn
|
||||
gst_decklink2_demux_change_state (GstElement * element,
|
||||
GstStateChange transition)
|
||||
{
|
||||
GstDeckLink2Demux *self = GST_DECKLINK2_DEMUX (element);
|
||||
GstStateChangeReturn ret;
|
||||
|
||||
switch (transition) {
|
||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||
gst_clear_caps (&self->audio_caps);
|
||||
self->drop_count = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
|
||||
|
||||
switch (transition) {
|
||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||
if (self->audio_pad) {
|
||||
gst_flow_combiner_remove_pad (self->flow_combiner, self->audio_pad);
|
||||
gst_element_remove_pad (element, self->audio_pad);
|
||||
self->audio_pad = NULL;
|
||||
}
|
||||
gst_clear_caps (&self->audio_caps);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_decklink2_demux_chain (GstPad * sinkpad, GstObject * parent,
|
||||
GstBuffer * inbuf)
|
||||
{
|
||||
GstDeckLink2Demux *self = GST_DECKLINK2_DEMUX (parent);
|
||||
GstDeckLink2AudioMeta *meta;
|
||||
GstSample *audio_sample = NULL;
|
||||
GstFlowReturn ret;
|
||||
gsize buf_size;
|
||||
|
||||
meta = gst_buffer_get_decklink2_audio_meta (inbuf);
|
||||
if (meta) {
|
||||
audio_sample = gst_sample_ref (meta->sample);
|
||||
inbuf = gst_buffer_make_writable (inbuf);
|
||||
gst_buffer_remove_meta (inbuf, GST_META_CAST (meta));
|
||||
}
|
||||
|
||||
if (audio_sample) {
|
||||
GstCaps *audio_caps = gst_sample_get_caps (audio_sample);
|
||||
GstBuffer *audio_buf = gst_sample_get_buffer (audio_sample);
|
||||
|
||||
if (!audio_caps) {
|
||||
GST_WARNING_OBJECT (self, "Audio sample without caps");
|
||||
gst_sample_unref (audio_sample);
|
||||
audio_sample = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!audio_buf) {
|
||||
GST_WARNING_OBJECT (self, "Audio sample without buffer");
|
||||
gst_sample_unref (audio_sample);
|
||||
audio_sample = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!self->audio_pad) {
|
||||
GstEvent *event;
|
||||
|
||||
self->audio_pad = gst_pad_new_from_static_template (&audio_template,
|
||||
"audio");
|
||||
gst_pad_set_active (self->audio_pad, TRUE);
|
||||
|
||||
event = gst_pad_get_sticky_event (self->sink_pad,
|
||||
GST_EVENT_STREAM_START, 0);
|
||||
|
||||
gst_pad_store_sticky_event (self->audio_pad, event);
|
||||
gst_event_unref (event);
|
||||
|
||||
gst_caps_replace (&self->audio_caps, audio_caps);
|
||||
|
||||
event = gst_event_new_caps (self->audio_caps);
|
||||
gst_pad_store_sticky_event (self->audio_pad, event);
|
||||
gst_event_unref (event);
|
||||
|
||||
event = gst_pad_get_sticky_event (self->sink_pad, GST_EVENT_SEGMENT, 0);
|
||||
if (event) {
|
||||
gst_pad_store_sticky_event (self->audio_pad, event);
|
||||
gst_event_unref (event);
|
||||
}
|
||||
|
||||
gst_element_add_pad (GST_ELEMENT (self), self->audio_pad);
|
||||
gst_flow_combiner_add_pad (self->flow_combiner, self->audio_pad);
|
||||
|
||||
gst_element_no_more_pads (GST_ELEMENT (self));
|
||||
} else if (!self->audio_caps || !gst_caps_is_equal (self->audio_caps,
|
||||
audio_caps)) {
|
||||
GstEvent *event;
|
||||
|
||||
gst_caps_replace (&self->audio_caps, audio_caps);
|
||||
|
||||
event = gst_event_new_caps (self->audio_caps);
|
||||
gst_pad_push_event (self->audio_pad, event);
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
buf_size = gst_buffer_get_size (inbuf);
|
||||
if (buf_size < self->video_info.size) {
|
||||
GST_WARNING_OBJECT (self, "Too small buffer size %" G_GSIZE_FORMAT
|
||||
" < %" G_GSIZE_FORMAT, buf_size, self->video_info.size);
|
||||
gst_buffer_unref (inbuf);
|
||||
self->drop_count++;
|
||||
|
||||
if (self->drop_count > 30) {
|
||||
GST_ERROR_OBJECT (self, "Too many buffers were dropped");
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
self->drop_count = 0;
|
||||
|
||||
GST_LOG_OBJECT (self, "Pushing video buffer %" GST_PTR_FORMAT, inbuf);
|
||||
ret = gst_pad_push (self->video_pad, inbuf);
|
||||
ret = gst_flow_combiner_update_pad_flow (self->flow_combiner,
|
||||
self->video_pad, ret);
|
||||
|
||||
if (audio_sample) {
|
||||
GstBuffer *audio_buf = gst_sample_get_buffer (audio_sample);
|
||||
gst_buffer_ref (audio_buf);
|
||||
gst_sample_unref (audio_sample);
|
||||
|
||||
GST_LOG_OBJECT (self, "Pushing audio buffer %" GST_PTR_FORMAT, audio_buf);
|
||||
ret = gst_pad_push (self->audio_pad, audio_buf);
|
||||
ret = gst_flow_combiner_update_pad_flow (self->flow_combiner,
|
||||
self->audio_pad, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_demux_sink_event (GstPad * sinkpad, GstObject * parent,
|
||||
GstEvent * event)
|
||||
{
|
||||
GstDeckLink2Demux *self = GST_DECKLINK2_DEMUX (parent);
|
||||
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
case GST_EVENT_CAPS:{
|
||||
GstCaps *caps;
|
||||
|
||||
gst_event_parse_caps (event, &caps);
|
||||
GST_DEBUG_OBJECT (self, "Forwarding %" GST_PTR_FORMAT, caps);
|
||||
|
||||
gst_video_info_from_caps (&self->video_info, caps);
|
||||
|
||||
return gst_pad_push_event (self->video_pad, event);
|
||||
}
|
||||
case GST_EVENT_FLUSH_STOP:
|
||||
gst_flow_combiner_reset (self->flow_combiner);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return gst_pad_event_default (sinkpad, parent, event);
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/base.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_DEMUX (gst_decklink2_demux_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Demux, gst_decklink2_demux,
|
||||
GST, DECKLINK2_DEMUX, GstElement);
|
||||
|
||||
GST_ELEMENT_REGISTER_DECLARE (decklink2demux);
|
||||
|
||||
G_END_DECLS
|
|
@ -0,0 +1,158 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstdecklink2deviceprovider.h"
|
||||
#include <string.h>
|
||||
|
||||
GST_DEBUG_CATEGORY_EXTERN (gst_decklink2_debug);
|
||||
#define GST_CAT_DEFAULT gst_decklink2_debug
|
||||
|
||||
struct _GstDeckLink2Device
|
||||
{
|
||||
GstDevice parent;
|
||||
|
||||
gboolean is_src;
|
||||
guint device_number;
|
||||
gint64 persistent_id;
|
||||
};
|
||||
|
||||
static GstElement *gst_decklink2_device_create_element (GstDevice * device,
|
||||
const gchar * name);
|
||||
|
||||
G_DEFINE_TYPE (GstDeckLink2Device, gst_decklink2_device, GST_TYPE_DEVICE);
|
||||
|
||||
static void
|
||||
gst_decklink2_device_class_init (GstDeckLink2DeviceClass * klass)
|
||||
{
|
||||
GstDeviceClass *dev_class = GST_DEVICE_CLASS (klass);
|
||||
|
||||
dev_class->create_element =
|
||||
GST_DEBUG_FUNCPTR (gst_decklink2_device_create_element);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_device_init (GstDeckLink2Device * self)
|
||||
{
|
||||
}
|
||||
|
||||
static GstElement *
|
||||
gst_decklink2_device_create_element (GstDevice * device, const gchar * name)
|
||||
{
|
||||
GstDeckLink2Device *self = GST_DECKLINK2_DEVICE (device);
|
||||
GstElement *elem;
|
||||
|
||||
if (self->is_src) {
|
||||
elem = gst_element_factory_make ("decklink2src", name);
|
||||
} else {
|
||||
elem = gst_element_factory_make ("decklink2sink", name);
|
||||
}
|
||||
|
||||
g_object_set (elem, "persistent-id", self->persistent_id, NULL);
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
GstDevice *
|
||||
gst_decklink2_device_new (gboolean is_src, const gchar * model_name,
|
||||
const gchar * display_name, const gchar * serial_number, GstCaps * caps,
|
||||
gint64 persistent_id, guint device_number, guint max_audio_channels,
|
||||
const gchar * driver_ver, const gchar * api_ver)
|
||||
{
|
||||
GstDevice *device;
|
||||
GstDeckLink2Device *self;
|
||||
const gchar *device_class;
|
||||
GstStructure *props;
|
||||
|
||||
if (is_src)
|
||||
device_class = "Video/Audio/Source/Hardware";
|
||||
else
|
||||
device_class = "Video/Audio/Sink/Hardware";
|
||||
|
||||
props = gst_structure_new ("properties",
|
||||
"driver-version", G_TYPE_STRING, driver_ver,
|
||||
"api-version", G_TYPE_STRING, api_ver,
|
||||
"device-number", G_TYPE_UINT, device_number,
|
||||
"persistent-id", G_TYPE_INT64, persistent_id, NULL);
|
||||
|
||||
if (max_audio_channels > 0) {
|
||||
gst_structure_set (props,
|
||||
"max-channels", G_TYPE_UINT, max_audio_channels, NULL);
|
||||
}
|
||||
|
||||
if (serial_number && serial_number[0] != '\0') {
|
||||
gst_structure_set (props,
|
||||
"serial-number", G_TYPE_STRING, serial_number, NULL);
|
||||
}
|
||||
|
||||
device = (GstDevice *) g_object_new (GST_TYPE_DECKLINK2_DEVICE,
|
||||
"display-name", display_name, "device-class", device_class,
|
||||
"caps", caps, "properties", props, NULL);
|
||||
|
||||
self = GST_DECKLINK2_DEVICE (device);
|
||||
self->device_number = device_number;
|
||||
self->persistent_id = persistent_id;
|
||||
self->is_src = is_src;
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
struct _GstDeckLink2DeviceProvider
|
||||
{
|
||||
GstDeviceProvider parent;
|
||||
};
|
||||
|
||||
static GList *gst_decklink2_device_provider_probe (GstDeviceProvider *
|
||||
provider);
|
||||
|
||||
G_DEFINE_TYPE (GstDeckLink2DeviceProvider, gst_decklink2_device_provider,
|
||||
GST_TYPE_DEVICE_PROVIDER);
|
||||
GST_DEVICE_PROVIDER_REGISTER_DEFINE (decklink2deviceprovider,
|
||||
"decklink2deviceprovider", GST_RANK_SECONDARY,
|
||||
GST_TYPE_DECKLINK2_DEVICE_PROVIDER);
|
||||
|
||||
static void
|
||||
gst_decklink2_device_provider_class_init (GstDeckLink2DeviceProviderClass *
|
||||
klass)
|
||||
{
|
||||
GstDeviceProviderClass *provider_class = GST_DEVICE_PROVIDER_CLASS (klass);
|
||||
|
||||
provider_class->probe =
|
||||
GST_DEBUG_FUNCPTR (gst_decklink2_device_provider_probe);
|
||||
|
||||
gst_device_provider_class_set_static_metadata (provider_class,
|
||||
"Decklink Device Provider", "Hardware/Source/Sink/Audio/Video",
|
||||
"Lists and provides Decklink devices",
|
||||
"Seungha Yang <seungha@centricular.com>");
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_device_provider_init (GstDeckLink2DeviceProvider * self)
|
||||
{
|
||||
}
|
||||
|
||||
static GList *
|
||||
gst_decklink2_device_provider_probe (GstDeviceProvider * provider)
|
||||
{
|
||||
return gst_decklink2_get_devices ();
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include "gstdecklink2utils.h"
|
||||
#include "gstdecklink2object.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_DEVICE (gst_decklink2_device_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Device, gst_decklink2_device,
|
||||
GST, DECKLINK2_DEVICE, GstDevice);
|
||||
|
||||
#define GST_TYPE_DECKLINK2_DEVICE_PROVIDER (gst_decklink2_device_provider_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2DeviceProvider, gst_decklink2_device_provider,
|
||||
GST, DECKLINK2_DEVICE_PROVIDER, GstDeviceProvider);
|
||||
|
||||
GstDevice * gst_decklink2_device_new (gboolean is_src,
|
||||
const gchar * model_name,
|
||||
const gchar * display_name,
|
||||
const gchar * serial_number,
|
||||
GstCaps * caps,
|
||||
gint64 persistent_id,
|
||||
guint device_number,
|
||||
guint max_audio_channels,
|
||||
const gchar * driver_ver,
|
||||
const gchar * api_ver);
|
||||
|
||||
GST_DEVICE_PROVIDER_REGISTER_DECLARE (decklink2deviceprovider);
|
||||
|
||||
G_END_DECLS
|
2232
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2input.cpp
Normal file
2232
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2input.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include "gstdecklink2utils.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_INPUT (gst_decklink2_input_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Input, gst_decklink2_input,
|
||||
GST, DECKLINK2_INPUT, GstObject);
|
||||
|
||||
#define GST_DECKLINK2_INPUT_FLOW_STOPPED GST_FLOW_CUSTOM_ERROR
|
||||
|
||||
typedef struct _GstDeckLink2InputVideoConfig
|
||||
{
|
||||
BMDVideoConnection connection;
|
||||
GstDeckLink2DisplayMode display_mode;
|
||||
BMDPixelFormat pixel_format;
|
||||
gboolean auto_detect;
|
||||
gboolean output_cc;
|
||||
gboolean output_afd_bar;
|
||||
} GstDeckLink2InputVideoConfig;
|
||||
|
||||
typedef struct _GstDeckLink2InputAudioConfig
|
||||
{
|
||||
BMDAudioConnection connection;
|
||||
BMDAudioSampleType sample_type;
|
||||
GstDeckLink2AudioChannels channels;
|
||||
} GstDeckLink2InputAudioConfig;
|
||||
|
||||
GstDeckLink2Input * gst_decklink2_input_new (IDeckLink * device,
|
||||
GstDeckLink2APILevel api_level);
|
||||
|
||||
GstCaps * gst_decklink2_input_get_caps (GstDeckLink2Input * input,
|
||||
BMDDisplayMode mode,
|
||||
BMDPixelFormat format);
|
||||
|
||||
gboolean gst_decklink2_input_get_display_mode (GstDeckLink2Input * input,
|
||||
const GstVideoInfo * info,
|
||||
GstDeckLink2DisplayMode * display_mode);
|
||||
|
||||
HRESULT gst_decklink2_input_start (GstDeckLink2Input * input,
|
||||
GstElement * client,
|
||||
BMDProfileID profile_id,
|
||||
guint buffer_size,
|
||||
GstClockTime skip_first_time,
|
||||
const GstDeckLink2InputVideoConfig * video_config,
|
||||
const GstDeckLink2InputAudioConfig * audio_config);
|
||||
|
||||
void gst_decklink2_input_schedule_restart (GstDeckLink2Input * input);
|
||||
|
||||
void gst_decklink2_input_stop (GstDeckLink2Input * input);
|
||||
|
||||
void gst_decklink2_input_set_flushing (GstDeckLink2Input * input,
|
||||
gboolean flush);
|
||||
|
||||
GstFlowReturn gst_decklink2_input_get_data (GstDeckLink2Input * input,
|
||||
GstBuffer ** buffer,
|
||||
GstCaps ** caps,
|
||||
GstClockTimeDiff * av_sync);
|
||||
|
||||
gboolean gst_decklink2_input_has_signal (GstDeckLink2Input * input);
|
||||
|
||||
G_END_DECLS
|
712
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2object.cpp
Normal file
712
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2object.cpp
Normal file
|
@ -0,0 +1,712 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstdecklink2object.h"
|
||||
#include "gstdecklink2deviceprovider.h"
|
||||
#include <stdlib.h>
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
GST_DEBUG_CATEGORY_EXTERN (gst_decklink2_debug);
|
||||
#define GST_CAT_DEFAULT gst_decklink2_debug
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
static std::vector<GstDeckLink2Object *> device_list;
|
||||
static std::mutex device_lock;
|
||||
/* *INDENT-ON* */
|
||||
|
||||
struct _GstDeckLink2Object
|
||||
{
|
||||
GstObject parent;
|
||||
|
||||
GstDeckLink2APILevel api_level;
|
||||
|
||||
IDeckLink *device;
|
||||
IDeckLinkProfileAttributes *attr;
|
||||
IDeckLinkAttributes_v10_11 *attr_10_11;
|
||||
IDeckLinkConfiguration *config;
|
||||
IDeckLinkConfiguration_v10_11 *config_10_11;
|
||||
IDeckLinkProfileManager *profile_manager;
|
||||
|
||||
GstDeckLink2Input *input;
|
||||
GstDevice *input_device;
|
||||
|
||||
GstDeckLink2Output *output;
|
||||
GstDevice *output_device;
|
||||
|
||||
guint device_number;
|
||||
gint64 persistent_id;
|
||||
gchar *serial_number;
|
||||
gchar *model_name;
|
||||
gchar *display_name;
|
||||
|
||||
gboolean input_acquired;
|
||||
gboolean output_acquired;
|
||||
};
|
||||
|
||||
static void gst_decklink2_object_dispose (GObject * object);
|
||||
static void gst_decklink2_object_finalize (GObject * object);
|
||||
|
||||
#define gst_decklink2_object_parent_class parent_class
|
||||
G_DEFINE_TYPE (GstDeckLink2Object, gst_decklink2_object, GST_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
gst_decklink2_object_class_init (GstDeckLink2ObjectClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->dispose = gst_decklink2_object_dispose;
|
||||
object_class->finalize = gst_decklink2_object_finalize;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_object_init (GstDeckLink2Object * self)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_object_dispose (GObject * object)
|
||||
{
|
||||
GstDeckLink2Object *self = GST_DECKLINK2_OBJECT (object);
|
||||
|
||||
if (self->input) {
|
||||
gst_object_unparent (GST_OBJECT (self->input));
|
||||
self->input = NULL;
|
||||
}
|
||||
|
||||
if (self->output) {
|
||||
gst_object_unparent (GST_OBJECT (self->output));
|
||||
self->output = NULL;
|
||||
}
|
||||
|
||||
gst_clear_object (&self->input_device);
|
||||
gst_clear_object (&self->output_device);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_object_finalize (GObject * object)
|
||||
{
|
||||
GstDeckLink2Object *self = GST_DECKLINK2_OBJECT (object);
|
||||
|
||||
GST_DECKLINK2_CLEAR_COM (self->attr);
|
||||
GST_DECKLINK2_CLEAR_COM (self->attr_10_11);
|
||||
GST_DECKLINK2_CLEAR_COM (self->config);
|
||||
GST_DECKLINK2_CLEAR_COM (self->config_10_11);
|
||||
GST_DECKLINK2_CLEAR_COM (self->profile_manager);
|
||||
GST_DECKLINK2_CLEAR_COM (self->device);
|
||||
|
||||
g_free (self->serial_number);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static GstDeckLink2Object *
|
||||
gst_decklink2_object_new (IDeckLink * device, guint index,
|
||||
GstDeckLink2APILevel api_level, const gchar * api_ver_str,
|
||||
const gchar * driver_ver_str)
|
||||
{
|
||||
HRESULT hr;
|
||||
GstDeckLink2Input *input;
|
||||
GstDeckLink2Output *output;
|
||||
GstDeckLink2Object *self;
|
||||
dlstring_t str;
|
||||
gint64 max_num_audio_channels = 0;
|
||||
GstCaps *caps = NULL;
|
||||
|
||||
input = gst_decklink2_input_new (device, api_level);
|
||||
output = gst_decklink2_output_new (device, api_level);
|
||||
|
||||
if (!output && !input)
|
||||
return NULL;
|
||||
|
||||
self = (GstDeckLink2Object *)
|
||||
g_object_new (GST_TYPE_DECKLINK2_OBJECT, NULL);
|
||||
gst_object_ref_sink (self);
|
||||
|
||||
self->api_level = api_level;
|
||||
|
||||
if (input)
|
||||
gst_object_set_parent (GST_OBJECT (input), GST_OBJECT (self));
|
||||
|
||||
if (output)
|
||||
gst_object_set_parent (GST_OBJECT (output), GST_OBJECT (self));
|
||||
|
||||
self->input = input;
|
||||
self->output = output;
|
||||
self->device_number = index;
|
||||
self->device = device;
|
||||
device->AddRef ();
|
||||
|
||||
if (api_level == GST_DECKLINK2_API_LEVEL_10_11) {
|
||||
IDeckLinkConfiguration_v10_11 *config_10_11 = NULL;
|
||||
hr = device->QueryInterface (IID_IDeckLinkConfiguration_v10_11,
|
||||
(void **) &config_10_11);
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (self, "Couldn't get config object");
|
||||
gst_object_unref (self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
hr = config_10_11->GetString
|
||||
(bmdDeckLinkConfigDeviceInformationSerialNumber, &str);
|
||||
|
||||
if (gst_decklink2_result (hr)) {
|
||||
std::string serial_number = DlToStdString (str);
|
||||
DeleteString (str);
|
||||
|
||||
self->serial_number = g_strdup (serial_number.c_str ());
|
||||
GST_DEBUG_OBJECT (self, "device %d has serial number %s", index,
|
||||
GST_STR_NULL (self->serial_number));
|
||||
}
|
||||
|
||||
self->config_10_11 = config_10_11;
|
||||
} else {
|
||||
IDeckLinkConfiguration *config = NULL;
|
||||
hr = device->QueryInterface (IID_IDeckLinkConfiguration, (void **) &config);
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (self, "Couldn't get config object");
|
||||
gst_object_unref (self);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
hr = config->GetString (bmdDeckLinkConfigDeviceInformationSerialNumber,
|
||||
&str);
|
||||
if (gst_decklink2_result (hr)) {
|
||||
std::string serial_number = DlToStdString (str);
|
||||
DeleteString (str);
|
||||
|
||||
self->serial_number = g_strdup (serial_number.c_str ());
|
||||
GST_DEBUG_OBJECT (self, "device %d has serial number %s", index,
|
||||
GST_STR_NULL (self->serial_number));
|
||||
}
|
||||
|
||||
self->config = config;
|
||||
device->QueryInterface (IID_IDeckLinkProfileManager,
|
||||
(void **) &self->profile_manager);
|
||||
}
|
||||
|
||||
if (api_level == GST_DECKLINK2_API_LEVEL_10_11) {
|
||||
hr = device->QueryInterface (IID_IDeckLinkAttributes_v10_11,
|
||||
(void **) &self->attr_10_11);
|
||||
} else {
|
||||
hr = device->QueryInterface (IID_IDeckLinkProfileAttributes,
|
||||
(void **) &self->attr);
|
||||
}
|
||||
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (self,
|
||||
"IDeckLinkProfileAttributes interface is not available");
|
||||
self->persistent_id = self->device_number;
|
||||
} else {
|
||||
hr = E_FAIL;
|
||||
if (self->attr) {
|
||||
hr = self->attr->GetInt (BMDDeckLinkPersistentID, &self->persistent_id);
|
||||
if (!gst_decklink2_result (hr))
|
||||
self->persistent_id = self->device_number;
|
||||
hr = self->attr->GetInt (BMDDeckLinkMaximumAudioChannels,
|
||||
&max_num_audio_channels);
|
||||
} else if (self->attr_10_11) {
|
||||
hr = self->attr_10_11->GetInt (BMDDeckLinkPersistentID,
|
||||
&self->persistent_id);
|
||||
if (!gst_decklink2_result (hr))
|
||||
self->persistent_id = self->device_number;
|
||||
hr = self->attr_10_11->GetInt (BMDDeckLinkMaximumAudioChannels,
|
||||
&max_num_audio_channels);
|
||||
}
|
||||
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (self, "Couldn't query max audio channels");
|
||||
max_num_audio_channels = 0;
|
||||
}
|
||||
}
|
||||
|
||||
hr = device->GetModelName (&str);
|
||||
if (gst_decklink2_result (hr)) {
|
||||
std::string model_name = DlToStdString (str);
|
||||
DeleteString (str);
|
||||
|
||||
self->model_name = g_strdup (model_name.c_str ());
|
||||
}
|
||||
|
||||
hr = device->GetDisplayName (&str);
|
||||
if (gst_decklink2_result (hr)) {
|
||||
std::string display_name = DlToStdString (str);
|
||||
DeleteString (str);
|
||||
|
||||
self->display_name = g_strdup (display_name.c_str ());
|
||||
}
|
||||
|
||||
if (self->input) {
|
||||
caps = gst_decklink2_input_get_caps (self->input,
|
||||
bmdModeUnknown, bmdFormatUnspecified);
|
||||
self->input_device = gst_decklink2_device_new (TRUE, self->model_name,
|
||||
self->display_name, self->serial_number, caps, self->persistent_id,
|
||||
self->device_number, (guint) max_num_audio_channels, driver_ver_str,
|
||||
api_ver_str);
|
||||
gst_clear_caps (&caps);
|
||||
gst_object_ref_sink (self->input_device);
|
||||
}
|
||||
|
||||
if (self->output) {
|
||||
caps = gst_decklink2_output_get_caps (self->output,
|
||||
bmdModeUnknown, bmdFormatUnspecified);
|
||||
self->output_device = gst_decklink2_device_new (FALSE, self->model_name,
|
||||
self->display_name, self->serial_number, caps, self->persistent_id,
|
||||
self->device_number, (guint) max_num_audio_channels, driver_ver_str,
|
||||
api_ver_str);
|
||||
gst_clear_caps (&caps);
|
||||
gst_object_ref_sink (self->output_device);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
static IDeckLinkIterator *
|
||||
CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
IDeckLinkIterator *iter = NULL;
|
||||
CoCreateInstance (CLSID_CDeckLinkIterator, NULL, CLSCTX_ALL,
|
||||
IID_IDeckLinkIterator, (void **) &iter);
|
||||
|
||||
return iter;
|
||||
}
|
||||
|
||||
static IDeckLinkIterator *
|
||||
CreateDeckLinkIteratorInstance_v10_11 (void)
|
||||
{
|
||||
IDeckLinkIterator *iter = NULL;
|
||||
CoCreateInstance (CLSID_CDeckLinkIterator_v10_11, NULL, CLSCTX_ALL,
|
||||
IID_IDeckLinkIterator, (void **) &iter);
|
||||
|
||||
return iter;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
gst_decklink2_device_init (void)
|
||||
{
|
||||
GstDeckLink2APILevel api_level = gst_decklink2_get_api_level ();
|
||||
IDeckLinkIterator *iter = NULL;
|
||||
HRESULT hr = S_OK;
|
||||
guint major, minor, sub, extra;
|
||||
std::string driver_version;
|
||||
std::string api_version;
|
||||
|
||||
if (api_level == GST_DECKLINK2_API_LEVEL_UNKNOWN)
|
||||
return;
|
||||
|
||||
api_version = gst_decklink2_api_level_to_string (api_level);
|
||||
|
||||
gst_decklink2_get_api_version (&major, &minor, &sub, &extra);
|
||||
driver_version = std::to_string (major) + "." + std::to_string (minor)
|
||||
+ "." + std::to_string (sub) + "." + std::to_string (extra);
|
||||
|
||||
if (api_level == GST_DECKLINK2_API_LEVEL_10_11) {
|
||||
iter = CreateDeckLinkIteratorInstance_v10_11 ();
|
||||
} else {
|
||||
iter = CreateDeckLinkIteratorInstance ();
|
||||
}
|
||||
|
||||
if (!iter) {
|
||||
GST_DEBUG ("Couldn't create device iterator");
|
||||
return;
|
||||
}
|
||||
|
||||
guint i = 0;
|
||||
do {
|
||||
IDeckLink *device = NULL;
|
||||
GstDeckLink2Object *object;
|
||||
hr = iter->Next (&device);
|
||||
if (!gst_decklink2_result (hr))
|
||||
break;
|
||||
|
||||
object = gst_decklink2_object_new (device, i, api_level,
|
||||
api_version.c_str (), driver_version.c_str ());
|
||||
device->Release ();
|
||||
|
||||
if (object)
|
||||
device_list.push_back (object);
|
||||
|
||||
i++;
|
||||
} while (gst_decklink2_result (hr));
|
||||
|
||||
iter->Release ();
|
||||
|
||||
std::sort (device_list.begin (), device_list.end (),
|
||||
[](const GstDeckLink2Object * a, const GstDeckLink2Object * b)->bool
|
||||
{
|
||||
{
|
||||
return a->persistent_id < b->persistent_id;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
GST_DEBUG ("Found %u device", (guint) device_list.size ());
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_device_init_once (void)
|
||||
{
|
||||
GST_DECKLINK2_CALL_ONCE_BEGIN {
|
||||
std::lock_guard < std::mutex > lk (device_lock);
|
||||
gst_decklink2_device_init ();
|
||||
} GST_DECKLINK2_CALL_ONCE_END;
|
||||
}
|
||||
|
||||
GstDeckLink2Input *
|
||||
gst_decklink2_acquire_input (guint device_number, gint64 persistent_id)
|
||||
{
|
||||
GstDeckLink2Object *target = NULL;
|
||||
|
||||
gst_decklink2_device_init_once ();
|
||||
|
||||
std::lock_guard < std::mutex > lk (device_lock);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
if (persistent_id != -1) {
|
||||
auto object = std::find_if (device_list.begin (), device_list.end (),
|
||||
[&](const GstDeckLink2Object * obj) {
|
||||
return obj->persistent_id == persistent_id;
|
||||
});
|
||||
|
||||
if (object == device_list.end ()) {
|
||||
GST_WARNING ("Couldn't find object for persistent id %" G_GINT64_FORMAT,
|
||||
persistent_id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
target = *object;
|
||||
}
|
||||
|
||||
if (!target) {
|
||||
auto object = std::find_if (device_list.begin (), device_list.end (),
|
||||
[&](const GstDeckLink2Object * obj) {
|
||||
return obj->device_number == device_number;
|
||||
});
|
||||
|
||||
if (object == device_list.end ()) {
|
||||
GST_WARNING ("Couldn't find object for device number %u", device_number);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
target = *object;
|
||||
}
|
||||
/* *INDENT-ON* */
|
||||
|
||||
if (!target->input) {
|
||||
GST_WARNING_OBJECT (target, "Device does not support input");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (target->input_acquired) {
|
||||
GST_WARNING_OBJECT (target, "Input was already acquired");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
target->input_acquired = TRUE;
|
||||
return (GstDeckLink2Input *) gst_object_ref (target->input);
|
||||
}
|
||||
|
||||
GstDeckLink2Output *
|
||||
gst_decklink2_acquire_output (guint device_number, gint64 persistent_id)
|
||||
{
|
||||
GstDeckLink2Object *target = NULL;
|
||||
|
||||
gst_decklink2_device_init_once ();
|
||||
|
||||
std::lock_guard < std::mutex > lk (device_lock);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
if (persistent_id != -1) {
|
||||
auto object = std::find_if (device_list.begin (), device_list.end (),
|
||||
[&](const GstDeckLink2Object * obj) {
|
||||
return obj->persistent_id == persistent_id;
|
||||
});
|
||||
|
||||
if (object == device_list.end ()) {
|
||||
GST_WARNING ("Couldn't find object for persistent id %" G_GINT64_FORMAT,
|
||||
persistent_id);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
target = *object;
|
||||
}
|
||||
|
||||
if (!target) {
|
||||
auto object = std::find_if (device_list.begin (), device_list.end (),
|
||||
[&](const GstDeckLink2Object * obj) {
|
||||
return obj->device_number == device_number;
|
||||
});
|
||||
|
||||
if (object == device_list.end ()) {
|
||||
GST_WARNING ("Couldn't find object for device number %u", device_number);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
target = *object;
|
||||
}
|
||||
/* *INDENT-ON* */
|
||||
|
||||
if (!target->output) {
|
||||
GST_WARNING_OBJECT (target, "Device does not support output");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (target->output_acquired) {
|
||||
GST_WARNING_OBJECT (target, "Output was already acquired");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
target->output_acquired = TRUE;
|
||||
return (GstDeckLink2Output *) gst_object_ref (target->output);
|
||||
}
|
||||
|
||||
void
|
||||
gst_decklink2_release_input (GstDeckLink2Input * input)
|
||||
{
|
||||
std::unique_lock < std::mutex > lk (device_lock);
|
||||
auto object = std::find_if (device_list.begin (), device_list.end (),
|
||||
[&](const GstDeckLink2Object * obj) {
|
||||
return obj->input == input;
|
||||
}
|
||||
);
|
||||
|
||||
if (object == device_list.end ()) {
|
||||
GST_ERROR_OBJECT (input, "Couldn't find parent object");
|
||||
} else {
|
||||
(*object)->input_acquired = FALSE;
|
||||
}
|
||||
lk.unlock ();
|
||||
|
||||
gst_object_unref (input);
|
||||
}
|
||||
|
||||
void
|
||||
gst_decklink2_release_output (GstDeckLink2Output * output)
|
||||
{
|
||||
std::unique_lock < std::mutex > lk (device_lock);
|
||||
auto object = std::find_if (device_list.begin (), device_list.end (),
|
||||
[&](const GstDeckLink2Object * obj) {
|
||||
return obj->output == output;
|
||||
}
|
||||
);
|
||||
|
||||
if (object == device_list.end ()) {
|
||||
GST_ERROR_OBJECT (output, "Couldn't find parent object");
|
||||
} else {
|
||||
(*object)->output_acquired = FALSE;
|
||||
}
|
||||
lk.unlock ();
|
||||
|
||||
gst_object_unref (output);
|
||||
}
|
||||
|
||||
void
|
||||
gst_decklink2_object_deinit (void)
|
||||
{
|
||||
std::lock_guard < std::mutex > lk (device_lock);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
for (auto iter : device_list)
|
||||
gst_object_unref (iter);
|
||||
/* *INDENT-ON* */
|
||||
|
||||
device_list.clear ();
|
||||
}
|
||||
|
||||
GList *
|
||||
gst_decklink2_get_devices (void)
|
||||
{
|
||||
GList *list = NULL;
|
||||
|
||||
gst_decklink2_device_init_once ();
|
||||
|
||||
std::lock_guard < std::mutex > lk (device_lock);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
for (auto iter : device_list) {
|
||||
if (iter->input_device)
|
||||
list = g_list_append (list, gst_object_ref (iter->input_device));
|
||||
|
||||
if (iter->output_device)
|
||||
list = g_list_append (list, gst_object_ref (iter->output_device));
|
||||
}
|
||||
/* *INDENT-ON* */
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
static HRESULT
|
||||
gst_decklink2_set_duplex_mode (gint64 persistent_id, BMDDuplexMode_v10_11 mode)
|
||||
{
|
||||
GstDeckLink2Object *object = NULL;
|
||||
HRESULT hr = E_FAIL;
|
||||
dlbool_t duplex_supported = FALSE;
|
||||
|
||||
std::lock_guard < std::mutex > lk (device_lock);
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
for (auto iter : device_list) {
|
||||
if (iter->persistent_id == persistent_id) {
|
||||
object = iter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* *INDENT-ON* */
|
||||
|
||||
if (!object) {
|
||||
GST_ERROR ("Couldn't find device for persistent id %" G_GINT64_FORMAT,
|
||||
persistent_id);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if (!object->attr_10_11 || !object->config_10_11) {
|
||||
GST_WARNING_OBJECT (object,
|
||||
"Couldn't set duplex mode, missing required interface");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
hr = object->attr_10_11->GetFlag ((BMDDeckLinkAttributeID)
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration_v10_11, &duplex_supported);
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (object, "Couldn't query duplex mode support");
|
||||
return hr;
|
||||
}
|
||||
|
||||
if (!duplex_supported) {
|
||||
GST_WARNING_OBJECT (object, "Duplex mode is not supported");
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
return object->config_10_11->SetInt ((BMDDeckLinkConfigurationID)
|
||||
bmdDeckLinkConfigDuplexMode_v10_11, mode);
|
||||
}
|
||||
|
||||
HRESULT
|
||||
gst_decklink2_object_set_profile_id (GstDeckLink2Object * object,
|
||||
BMDProfileID profile_id)
|
||||
{
|
||||
gchar *profile_id_str = NULL;
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
g_return_val_if_fail (GST_IS_DECKLINK2_OBJECT (object), E_INVALIDARG);
|
||||
|
||||
if (profile_id == bmdProfileDefault)
|
||||
return S_OK;
|
||||
|
||||
profile_id_str = g_enum_to_string (GST_TYPE_DECKLINK2_PROFILE_ID, profile_id);
|
||||
|
||||
GST_DEBUG_OBJECT (object, "Setting profile id \"%s\"", profile_id_str);
|
||||
|
||||
if (object->api_level == GST_DECKLINK2_API_LEVEL_10_11) {
|
||||
dlbool_t duplex_supported = FALSE;
|
||||
BMDDuplexMode_v10_11 duplex_mode = bmdDuplexModeHalf_v10_11;
|
||||
|
||||
if (!object->attr_10_11 || !object->config_10_11) {
|
||||
GST_WARNING_OBJECT (object,
|
||||
"Couldn't set duplex mode, missing required interface");
|
||||
hr = E_FAIL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (profile_id) {
|
||||
case bmdProfileOneSubDeviceHalfDuplex:
|
||||
case bmdProfileTwoSubDevicesHalfDuplex:
|
||||
case bmdProfileFourSubDevicesHalfDuplex:
|
||||
duplex_mode = bmdDuplexModeHalf_v10_11;
|
||||
GST_DEBUG_OBJECT (object, "Mapping \"%s\" to bmdDuplexModeHalf");
|
||||
break;
|
||||
default:
|
||||
GST_DEBUG_OBJECT (object, "Mapping \"%s\" to bmdDuplexModeFull");
|
||||
duplex_mode = bmdDuplexModeFull_v10_11;
|
||||
break;
|
||||
}
|
||||
|
||||
hr = object->attr_10_11->GetFlag ((BMDDeckLinkAttributeID)
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration_v10_11, &duplex_supported);
|
||||
if (!gst_decklink2_result (hr))
|
||||
duplex_supported = FALSE;
|
||||
|
||||
if (!duplex_supported) {
|
||||
gint64 paired_device_id = 0;
|
||||
if (duplex_mode == bmdDuplexModeFull_v10_11) {
|
||||
GST_WARNING_OBJECT (object, "Device does not support Full-Duplex-Mode");
|
||||
goto out;
|
||||
}
|
||||
|
||||
hr = object->attr_10_11->GetInt ((BMDDeckLinkAttributeID)
|
||||
BMDDeckLinkPairedDevicePersistentID_v10_11, &paired_device_id);
|
||||
if (gst_decklink2_result (hr)) {
|
||||
GST_DEBUG_OBJECT (object,
|
||||
"Device has paired device, Setting duplex mode to paired device");
|
||||
hr = gst_decklink2_set_duplex_mode (paired_device_id, duplex_mode);
|
||||
} else {
|
||||
GST_WARNING_OBJECT (object, "Device does not support Half-Duplex-Mode");
|
||||
}
|
||||
} else {
|
||||
hr = object->config_10_11->SetInt ((BMDDeckLinkConfigurationID)
|
||||
bmdDeckLinkConfigDuplexMode_v10_11, duplex_mode);
|
||||
}
|
||||
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (object,
|
||||
"Couldn't set profile \"%s\"", profile_id_str);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (object, "Profile \"%s\" is configured", profile_id_str);
|
||||
}
|
||||
} else {
|
||||
IDeckLinkProfile *profile = NULL;
|
||||
|
||||
if (!object->profile_manager) {
|
||||
GST_WARNING_OBJECT (object,
|
||||
"Profile \"%s\" is requested but profile manager is not available",
|
||||
profile_id_str);
|
||||
goto out;
|
||||
}
|
||||
|
||||
hr = object->profile_manager->GetProfile (profile_id, &profile);
|
||||
if (gst_decklink2_result (hr)) {
|
||||
hr = profile->SetActive ();
|
||||
profile->Release ();
|
||||
}
|
||||
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_WARNING_OBJECT (object,
|
||||
"Couldn't set profile \"%s\"", profile_id_str);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (object, "Profile \"%s\" is configured", profile_id_str);
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
g_free (profile_id_str);
|
||||
|
||||
return hr;
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include "gstdecklink2utils.h"
|
||||
#include "gstdecklink2input.h"
|
||||
#include "gstdecklink2output.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_OBJECT (gst_decklink2_object_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Object, gst_decklink2_object,
|
||||
GST, DECKLINK2_OBJECT, GstObject);
|
||||
|
||||
GstDeckLink2Input * gst_decklink2_acquire_input (guint device_number,
|
||||
gint64 persistent_id);
|
||||
|
||||
GstDeckLink2Output * gst_decklink2_acquire_output (guint device_number,
|
||||
gint64 persistent_id);
|
||||
|
||||
void gst_decklink2_release_input (GstDeckLink2Input * input);
|
||||
|
||||
void gst_decklink2_release_output (GstDeckLink2Output * output);
|
||||
|
||||
void gst_decklink2_object_deinit (void);
|
||||
|
||||
GList * gst_decklink2_get_devices (void);
|
||||
|
||||
HRESULT gst_decklink2_object_set_profile_id (GstDeckLink2Object * object,
|
||||
BMDProfileID profile_id);
|
||||
|
||||
G_END_DECLS
|
2347
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2output.cpp
Normal file
2347
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2output.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include "gstdecklink2utils.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_OUTPUT (gst_decklink2_output_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Output, gst_decklink2_output,
|
||||
GST, DECKLINK2_OUTPUT, GstObject);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
guint buffered_video;
|
||||
guint buffered_audio;
|
||||
GstClockTime video_running_time;
|
||||
GstClockTime audio_running_time;
|
||||
GstClockTime hw_time;
|
||||
GstClockTime buffered_video_time;
|
||||
GstClockTime buffered_audio_time;
|
||||
guint64 scheduled_video_frames;
|
||||
guint64 scheduled_audio_samples;
|
||||
guint64 late_count;
|
||||
guint64 drop_count;
|
||||
guint64 overrun_count;
|
||||
guint64 underrun_count;
|
||||
guint64 duplicate_count;
|
||||
guint64 dropped_sample_count;
|
||||
guint64 silent_sample_count;
|
||||
} GstDecklink2OutputStats;
|
||||
|
||||
GstDeckLink2Output * gst_decklink2_output_new (IDeckLink * device,
|
||||
GstDeckLink2APILevel api_level);
|
||||
|
||||
GstCaps * gst_decklink2_output_get_caps (GstDeckLink2Output * output,
|
||||
BMDDisplayMode mode,
|
||||
BMDPixelFormat format);
|
||||
|
||||
gboolean gst_decklink2_output_get_display_mode (GstDeckLink2Output * output,
|
||||
const GstVideoInfo * info,
|
||||
GstDeckLink2DisplayMode * display_mode);
|
||||
|
||||
guint gst_decklink2_output_get_max_audio_channels (GstDeckLink2Output * output);
|
||||
|
||||
HRESULT gst_decklink2_output_configure (GstDeckLink2Output * output,
|
||||
guint n_preroll_frames,
|
||||
guint min_buffered,
|
||||
guint max_buffered,
|
||||
const GstDeckLink2DisplayMode * display_mode,
|
||||
BMDVideoOutputFlags output_flags,
|
||||
BMDProfileID profile_id,
|
||||
GstDeckLink2KeyerMode keyer_mode,
|
||||
guint8 keyer_level,
|
||||
GstDeckLink2MappingFormat mapping_format,
|
||||
BMDAudioSampleType audio_sample_type,
|
||||
guint audio_channels);
|
||||
|
||||
IDeckLinkVideoFrame * gst_decklink2_output_upload (GstDeckLink2Output * output,
|
||||
const GstVideoInfo * info,
|
||||
GstBuffer * buffer,
|
||||
gint caption_line,
|
||||
gint afd_bar_line);
|
||||
|
||||
|
||||
HRESULT gst_decklink2_output_schedule_stream (GstDeckLink2Output * output,
|
||||
IDeckLinkVideoFrame * frame,
|
||||
guint8 *audio_buf,
|
||||
gsize audio_buf_size,
|
||||
GstDecklink2OutputStats *stats);
|
||||
|
||||
HRESULT gst_decklink2_output_stop (GstDeckLink2Output * output);
|
||||
|
||||
G_END_DECLS
|
1076
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2sink.cpp
Normal file
1076
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2sink.cpp
Normal file
File diff suppressed because it is too large
Load diff
34
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2sink.h
Normal file
34
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2sink.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/base.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_SINK (gst_decklink2_sink_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Sink, gst_decklink2_sink,
|
||||
GST, DECKLINK2_SINK, GstBaseSink);
|
||||
|
||||
GST_ELEMENT_REGISTER_DECLARE (decklink2sink);
|
||||
|
||||
G_END_DECLS
|
802
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2src.cpp
Normal file
802
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2src.cpp
Normal file
|
@ -0,0 +1,802 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstdecklink2src.h"
|
||||
#include "gstdecklink2utils.h"
|
||||
#include "gstdecklink2object.h"
|
||||
|
||||
#include <mutex>
|
||||
#include <string.h>
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_decklink2_src_debug);
|
||||
#define GST_CAT_DEFAULT gst_decklink2_src_debug
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_MODE,
|
||||
PROP_DEVICE_NUMBER,
|
||||
PROP_PERSISTENT_ID,
|
||||
PROP_VIDEO_CONNECTION,
|
||||
PROP_AUDIO_CONNECTION,
|
||||
PROP_VIDEO_FORMAT,
|
||||
PROP_AUDIO_CHANNELS,
|
||||
PROP_PROFILE_ID,
|
||||
PROP_TIMECODE_FORMAT,
|
||||
PROP_OUTPUT_CC,
|
||||
PROP_OUTPUT_AFD_BAR,
|
||||
PROP_BUFFER_SIZE,
|
||||
PROP_SIGNAL,
|
||||
PROP_SKIP_FIRST_TIME,
|
||||
PROP_DESYNC_THRESHOLD,
|
||||
};
|
||||
|
||||
#define DEFAULT_MODE bmdModeUnknown
|
||||
#define DEFAULT_DEVICE_NUMBER 0
|
||||
#define DEFAULT_PERSISTENT_ID -1
|
||||
#define DEFAULT_VIDEO_CONNECTION bmdVideoConnectionUnspecified
|
||||
#define DEFAULT_AUDIO_CONNECTION bmdAudioConnectionUnspecified
|
||||
#define DEFAULT_VIDEO_FORMAT bmdFormat8BitYUV
|
||||
#define DEFAULT_PROFILE_ID bmdProfileDefault
|
||||
#define DEFAULT_TIMECODE_FORMAT bmdTimecodeRP188Any
|
||||
#define DEFAULT_OUTPUT_CC FALSE
|
||||
#define DEFAULT_OUTPUT_AFD_BAR FALSE
|
||||
#define DEFAULT_BUFFER_SIZE 5
|
||||
#define DEFAULT_AUDIO_CHANNELS GST_DECKLINK2_AUDIO_CHANNELS_2
|
||||
#define DEFAULT_SKIP_FIRST_TIME 0
|
||||
#define DEFAULT_DESYNC_THRESHOLD (250 * GST_MSECOND)
|
||||
|
||||
enum
|
||||
{
|
||||
/* actions */
|
||||
SIGNAL_RESTART,
|
||||
|
||||
SIGNAL_LAST,
|
||||
};
|
||||
|
||||
static guint gst_decklink2_src_signals[SIGNAL_LAST] = { 0, };
|
||||
|
||||
struct GstDeckLink2SrcPrivate
|
||||
{
|
||||
std::mutex lock;
|
||||
};
|
||||
|
||||
struct _GstDeckLink2Src
|
||||
{
|
||||
GstPushSrc parent;
|
||||
|
||||
GstDeckLink2SrcPrivate *priv;
|
||||
|
||||
GstVideoInfo video_info;
|
||||
|
||||
GstDeckLink2Input *input;
|
||||
GstDeckLink2DisplayMode selected_mode;
|
||||
GstCaps *selected_caps;
|
||||
gboolean is_gap_buf;
|
||||
|
||||
gboolean running;
|
||||
|
||||
/* properties */
|
||||
BMDDisplayMode display_mode;
|
||||
gint device_number;
|
||||
gint64 persistent_id;
|
||||
BMDVideoConnection video_conn;
|
||||
BMDAudioConnection audio_conn;
|
||||
BMDPixelFormat video_format;
|
||||
GstDeckLink2AudioChannels audio_channels;
|
||||
BMDProfileID profile_id;
|
||||
BMDTimecodeFormat timecode_format;
|
||||
gboolean output_cc;
|
||||
gboolean output_afd_bar;
|
||||
guint buffer_size;
|
||||
GstClockTime skip_first_time;
|
||||
GstClockTime desync_threshold;
|
||||
};
|
||||
|
||||
static void gst_decklink2_src_finalize (GObject * object);
|
||||
static void gst_decklink2_src_set_property (GObject * object,
|
||||
guint prop_id, const GValue * value, GParamSpec * pspec);
|
||||
static void gst_decklink2_src_get_property (GObject * object,
|
||||
guint prop_id, GValue * value, GParamSpec * pspec);
|
||||
static GstCaps *gst_decklink2_src_get_caps (GstBaseSrc * src, GstCaps * filter);
|
||||
static gboolean gst_decklink2_src_set_caps (GstBaseSrc * src, GstCaps * caps);
|
||||
static gboolean gst_decklink2_src_query (GstBaseSrc * src, GstQuery * query);
|
||||
static gboolean gst_decklink2_src_start (GstBaseSrc * src);
|
||||
static gboolean gst_decklink2_src_stop (GstBaseSrc * src);
|
||||
static gboolean gst_decklink2_src_unlock (GstBaseSrc * src);
|
||||
static gboolean gst_decklink2_src_unlock_stop (GstBaseSrc * src);
|
||||
|
||||
static GstFlowReturn gst_decklink2_src_create (GstPushSrc * src,
|
||||
GstBuffer ** buffer);
|
||||
|
||||
#define gst_decklink2_src_parent_class parent_class
|
||||
G_DEFINE_TYPE (GstDeckLink2Src, gst_decklink2_src, GST_TYPE_PUSH_SRC);
|
||||
GST_ELEMENT_REGISTER_DEFINE (decklink2src, "decklink2src",
|
||||
GST_RANK_NONE, GST_TYPE_DECKLINK2_SRC);
|
||||
|
||||
static void
|
||||
gst_decklink2_src_class_init (GstDeckLink2SrcClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||
GstBaseSrcClass *basesrc_class = GST_BASE_SRC_CLASS (klass);
|
||||
GstPushSrcClass *pushsrc_class = GST_PUSH_SRC_CLASS (klass);
|
||||
GstCaps *templ_caps;
|
||||
|
||||
object_class->finalize = gst_decklink2_src_finalize;
|
||||
object_class->set_property = gst_decklink2_src_set_property;
|
||||
object_class->get_property = gst_decklink2_src_get_property;
|
||||
|
||||
gst_decklink2_src_install_properties (object_class);
|
||||
|
||||
gst_decklink2_src_signals[SIGNAL_RESTART] =
|
||||
g_signal_new_class_handler ("restart", G_TYPE_FROM_CLASS (klass),
|
||||
(GSignalFlags) (G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
|
||||
G_CALLBACK (gst_decklink2_src_restart), NULL, NULL, NULL, G_TYPE_NONE, 0);
|
||||
|
||||
templ_caps = gst_decklink2_get_default_template_caps ();
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, templ_caps));
|
||||
gst_caps_unref (templ_caps);
|
||||
|
||||
gst_element_class_set_static_metadata (element_class,
|
||||
"Decklink2 Source", "Video/Audio/Source/Hardware", "Decklink2 Source",
|
||||
"Seungha Yang <seungha@centricular.com>");
|
||||
|
||||
basesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_decklink2_src_get_caps);
|
||||
basesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_decklink2_src_set_caps);
|
||||
basesrc_class->query = GST_DEBUG_FUNCPTR (gst_decklink2_src_query);
|
||||
basesrc_class->start = GST_DEBUG_FUNCPTR (gst_decklink2_src_start);
|
||||
basesrc_class->stop = GST_DEBUG_FUNCPTR (gst_decklink2_src_stop);
|
||||
basesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_decklink2_src_unlock);
|
||||
basesrc_class->unlock_stop =
|
||||
GST_DEBUG_FUNCPTR (gst_decklink2_src_unlock_stop);
|
||||
|
||||
pushsrc_class->create = GST_DEBUG_FUNCPTR (gst_decklink2_src_create);
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (gst_decklink2_src_debug, "decklink2src",
|
||||
0, "decklink2src");
|
||||
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_MODE, (GstPluginAPIFlags) 0);
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_VIDEO_CONNECTION,
|
||||
(GstPluginAPIFlags) 0);
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_AUDIO_CONNECTION,
|
||||
(GstPluginAPIFlags) 0);
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_VIDEO_FORMAT,
|
||||
(GstPluginAPIFlags) 0);
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_AUDIO_CHANNELS,
|
||||
(GstPluginAPIFlags) 0);
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_PROFILE_ID,
|
||||
(GstPluginAPIFlags) 0);
|
||||
gst_type_mark_as_plugin_api (GST_TYPE_DECKLINK2_TIMECODE_FORMAT,
|
||||
(GstPluginAPIFlags) 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_init (GstDeckLink2Src * self)
|
||||
{
|
||||
self->display_mode = DEFAULT_MODE;
|
||||
self->device_number = DEFAULT_DEVICE_NUMBER;
|
||||
self->persistent_id = DEFAULT_PERSISTENT_ID;
|
||||
self->video_conn = DEFAULT_VIDEO_CONNECTION;
|
||||
self->audio_conn = DEFAULT_AUDIO_CONNECTION;
|
||||
self->video_format = DEFAULT_VIDEO_FORMAT;
|
||||
self->profile_id = DEFAULT_PROFILE_ID;
|
||||
self->audio_channels = DEFAULT_AUDIO_CHANNELS;
|
||||
self->timecode_format = DEFAULT_TIMECODE_FORMAT;
|
||||
self->output_cc = DEFAULT_OUTPUT_CC;
|
||||
self->output_afd_bar = DEFAULT_OUTPUT_AFD_BAR;
|
||||
self->buffer_size = DEFAULT_BUFFER_SIZE;
|
||||
self->is_gap_buf = FALSE;
|
||||
self->desync_threshold = DEFAULT_DESYNC_THRESHOLD;
|
||||
|
||||
self->priv = new GstDeckLink2SrcPrivate ();
|
||||
|
||||
gst_base_src_set_live (GST_BASE_SRC (self), TRUE);
|
||||
gst_base_src_set_format (GST_BASE_SRC (self), GST_FORMAT_TIME);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_finalize (GObject * object)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (object);
|
||||
|
||||
delete self->priv;
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (object);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_MODE:
|
||||
self->display_mode = (BMDDisplayMode) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_DEVICE_NUMBER:
|
||||
self->device_number = g_value_get_int (value);
|
||||
break;
|
||||
case PROP_PERSISTENT_ID:
|
||||
self->persistent_id = g_value_get_int64 (value);
|
||||
break;
|
||||
case PROP_VIDEO_CONNECTION:
|
||||
self->video_conn = (BMDVideoConnection) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_AUDIO_CONNECTION:
|
||||
self->audio_conn = (BMDAudioConnection) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_VIDEO_FORMAT:
|
||||
self->video_format = (BMDPixelFormat) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_AUDIO_CHANNELS:
|
||||
self->audio_channels =
|
||||
(GstDeckLink2AudioChannels) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_PROFILE_ID:
|
||||
self->profile_id = (BMDProfileID) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_TIMECODE_FORMAT:
|
||||
self->timecode_format = (BMDTimecodeFormat) g_value_get_enum (value);
|
||||
break;
|
||||
case PROP_OUTPUT_CC:
|
||||
self->output_cc = g_value_get_boolean (value);
|
||||
break;
|
||||
case PROP_OUTPUT_AFD_BAR:
|
||||
self->output_afd_bar = g_value_get_boolean (value);
|
||||
break;
|
||||
case PROP_BUFFER_SIZE:
|
||||
self->buffer_size = g_value_get_uint (value);
|
||||
break;
|
||||
case PROP_SKIP_FIRST_TIME:
|
||||
self->skip_first_time = g_value_get_uint64 (value);
|
||||
break;
|
||||
case PROP_DESYNC_THRESHOLD:
|
||||
self->desync_threshold = g_value_get_uint64 (value);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_get_property (GObject * object, guint prop_id, GValue * value,
|
||||
GParamSpec * pspec)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (object);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
switch (prop_id) {
|
||||
case PROP_MODE:
|
||||
g_value_set_enum (value, self->display_mode);
|
||||
break;
|
||||
case PROP_DEVICE_NUMBER:
|
||||
g_value_set_int (value, self->device_number);
|
||||
break;
|
||||
case PROP_PERSISTENT_ID:
|
||||
g_value_set_int64 (value, self->persistent_id);
|
||||
break;
|
||||
case PROP_VIDEO_CONNECTION:
|
||||
g_value_set_enum (value, self->video_conn);
|
||||
break;
|
||||
case PROP_AUDIO_CONNECTION:
|
||||
g_value_set_enum (value, self->audio_conn);
|
||||
break;
|
||||
case PROP_VIDEO_FORMAT:
|
||||
g_value_set_enum (value, self->video_format);
|
||||
break;
|
||||
case PROP_AUDIO_CHANNELS:
|
||||
g_value_set_enum (value, self->audio_channels);
|
||||
break;
|
||||
case PROP_PROFILE_ID:
|
||||
g_value_set_enum (value, self->profile_id);
|
||||
break;
|
||||
case PROP_TIMECODE_FORMAT:
|
||||
g_value_set_enum (value, self->timecode_format);
|
||||
break;
|
||||
case PROP_OUTPUT_CC:
|
||||
g_value_set_boolean (value, self->output_cc);
|
||||
break;
|
||||
case PROP_OUTPUT_AFD_BAR:
|
||||
g_value_set_boolean (value, self->output_afd_bar);
|
||||
break;
|
||||
case PROP_BUFFER_SIZE:
|
||||
g_value_set_uint (value, self->buffer_size);
|
||||
break;
|
||||
case PROP_SIGNAL:
|
||||
{
|
||||
gboolean has_signal = FALSE;
|
||||
if (self->input)
|
||||
has_signal = gst_decklink2_input_has_signal (self->input);
|
||||
|
||||
g_value_set_boolean (value, has_signal);
|
||||
break;
|
||||
}
|
||||
case PROP_SKIP_FIRST_TIME:
|
||||
g_value_set_uint64 (value, self->skip_first_time);
|
||||
break;
|
||||
case PROP_DESYNC_THRESHOLD:
|
||||
g_value_set_uint64 (value, self->desync_threshold);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static GstCaps *
|
||||
gst_decklink2_src_get_caps (GstBaseSrc * src, GstCaps * filter)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
GstCaps *caps;
|
||||
GstCaps *ret;
|
||||
std::unique_lock < std::mutex > lk (priv->lock);
|
||||
|
||||
if (!self->input) {
|
||||
lk.unlock ();
|
||||
return GST_BASE_SRC_CLASS (parent_class)->get_caps (src, filter);
|
||||
}
|
||||
|
||||
if (self->selected_caps) {
|
||||
caps = gst_caps_ref (self->selected_caps);
|
||||
} else {
|
||||
caps = gst_decklink2_input_get_caps (self->input, self->display_mode,
|
||||
self->video_format);
|
||||
}
|
||||
|
||||
if (!caps) {
|
||||
GST_WARNING_OBJECT (self, "Couldn't get caps");
|
||||
caps = gst_caps_new_empty ();
|
||||
}
|
||||
|
||||
if (filter) {
|
||||
ret = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
|
||||
gst_caps_unref (caps);
|
||||
} else {
|
||||
ret = caps;
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Returning caps %" GST_PTR_FORMAT, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_set_caps (GstBaseSrc * src, GstCaps * caps)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
BMDPixelFormat pixel_format;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Set caps %" GST_PTR_FORMAT, caps);
|
||||
|
||||
if (!self->input) {
|
||||
GST_WARNING_OBJECT (self,
|
||||
"Couldn't accept caps without configured input object");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (self->running)
|
||||
return TRUE;
|
||||
|
||||
if (!gst_video_info_from_caps (&self->video_info, caps)) {
|
||||
GST_WARNING_OBJECT (self, "Invalid caps %" GST_PTR_FORMAT, caps);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!gst_decklink2_input_get_display_mode (self->input, &self->video_info,
|
||||
&self->selected_mode)) {
|
||||
GST_ERROR_OBJECT (self, "Not a supported caps");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gst_clear_caps (&self->selected_caps);
|
||||
pixel_format =
|
||||
gst_decklink2_pixel_format_from_video_format (GST_VIDEO_INFO_FORMAT
|
||||
(&self->video_info));
|
||||
self->selected_caps =
|
||||
gst_decklink2_input_get_caps (self->input, self->selected_mode.mode,
|
||||
pixel_format);
|
||||
|
||||
if (!self->selected_caps) {
|
||||
GST_ERROR_OBJECT (self, "Couldn't get caps from selected mode");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_query (GstBaseSrc * src, GstQuery * query)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
|
||||
switch (GST_QUERY_TYPE (query)) {
|
||||
case GST_QUERY_LATENCY:
|
||||
{
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
gint fps_n, fps_d;
|
||||
GstClockTime min, max;
|
||||
if (self->selected_mode.fps_n > 0 && self->selected_mode.fps_d > 0) {
|
||||
fps_n = self->selected_mode.fps_n;
|
||||
fps_d = self->selected_mode.fps_d;
|
||||
} else {
|
||||
fps_n = 30;
|
||||
fps_d = 1;
|
||||
}
|
||||
|
||||
min = gst_util_uint64_scale (GST_SECOND, fps_d, fps_n);
|
||||
max = self->buffer_size * min;
|
||||
gst_query_set_latency (query, TRUE, min, max);
|
||||
return TRUE;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return GST_BASE_SRC_CLASS (parent_class)->query (src, query);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_start (GstBaseSrc * src)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
self->running = FALSE;
|
||||
memset (&self->selected_mode, 0, sizeof (GstDeckLink2DisplayMode));
|
||||
|
||||
gst_clear_caps (&self->selected_caps);
|
||||
self->input = gst_decklink2_acquire_input (self->device_number,
|
||||
self->persistent_id);
|
||||
|
||||
if (!self->input) {
|
||||
GST_ERROR_OBJECT (self, "Couldn't acquire input object");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_stop (GstBaseSrc * src)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
if (self->input) {
|
||||
gst_decklink2_input_stop (self->input);
|
||||
gst_decklink2_release_input (self->input);
|
||||
self->input = NULL;
|
||||
}
|
||||
|
||||
gst_clear_caps (&self->selected_caps);
|
||||
memset (&self->selected_mode, 0, sizeof (GstDeckLink2DisplayMode));
|
||||
|
||||
self->running = FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_unlock (GstBaseSrc * src)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
if (self->input)
|
||||
gst_decklink2_input_set_flushing (self->input, TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_unlock_stop (GstBaseSrc * src)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
if (self->input)
|
||||
gst_decklink2_input_set_flushing (self->input, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_run_unlocked (GstDeckLink2Src * self, gboolean auto_restart)
|
||||
{
|
||||
HRESULT hr;
|
||||
GstDeckLink2InputVideoConfig video_config;
|
||||
GstDeckLink2InputAudioConfig audio_config;
|
||||
|
||||
video_config.connection = self->video_conn;
|
||||
video_config.display_mode = self->selected_mode;
|
||||
video_config.pixel_format = self->video_format;
|
||||
video_config.auto_detect = self->display_mode == bmdModeUnknown;
|
||||
video_config.output_cc = self->output_cc;
|
||||
video_config.output_afd_bar = self->output_afd_bar;
|
||||
|
||||
audio_config.connection = self->audio_conn;
|
||||
audio_config.sample_type = bmdAudioSampleType32bitInteger;
|
||||
audio_config.channels = self->audio_channels;
|
||||
|
||||
hr = gst_decklink2_input_start (self->input, GST_ELEMENT (self),
|
||||
self->profile_id, self->buffer_size,
|
||||
auto_restart ? 0 : self->skip_first_time, &video_config, &audio_config);
|
||||
if (!gst_decklink2_result (hr)) {
|
||||
GST_ERROR_OBJECT (self, "Couldn't start stream, hr: 0x%x", (guint) hr);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
self->running = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_decklink2_src_run (GstDeckLink2Src * self)
|
||||
{
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
if (self->running)
|
||||
return TRUE;
|
||||
|
||||
if (!self->input) {
|
||||
GST_ERROR_OBJECT (self, "Input object was not configured");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return gst_decklink2_src_run_unlocked (self, FALSE);
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
gst_decklink2_src_create (GstPushSrc * src, GstBuffer ** buffer)
|
||||
{
|
||||
GstDeckLink2Src *self = GST_DECKLINK2_SRC (src);
|
||||
GstBuffer *buf = nullptr;
|
||||
GstCaps *caps = nullptr;
|
||||
GstFlowReturn ret;
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
gboolean is_gap_buf = FALSE;
|
||||
GstClockTimeDiff av_sync;
|
||||
guint retry_count = 0;
|
||||
gsize buf_size;
|
||||
|
||||
again:
|
||||
if (retry_count > 30) {
|
||||
GST_ERROR_OBJECT (self, "Too many buffers were dropped");
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
|
||||
if (!gst_decklink2_src_run (self)) {
|
||||
GST_ELEMENT_ERROR (self, STREAM, FAILED, (NULL),
|
||||
("Failed to start stream"));
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
|
||||
ret = gst_decklink2_input_get_data (self->input, &buf, &caps, &av_sync);
|
||||
if (ret != GST_FLOW_OK) {
|
||||
if (ret == GST_DECKLINK2_INPUT_FLOW_STOPPED) {
|
||||
GST_DEBUG_OBJECT (self, "Input was stopped for restarting");
|
||||
retry_count++;
|
||||
goto again;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!caps) {
|
||||
GST_WARNING_OBJECT (self, "Buffer without caps");
|
||||
gst_clear_buffer (&buf);
|
||||
retry_count++;
|
||||
goto again;
|
||||
}
|
||||
|
||||
priv->lock.lock ();
|
||||
if (!gst_caps_is_equal (caps, self->selected_caps)) {
|
||||
GST_DEBUG_OBJECT (self, "Set updated caps %" GST_PTR_FORMAT, caps);
|
||||
gst_caps_replace (&self->selected_caps, caps);
|
||||
gst_video_info_from_caps (&self->video_info, caps);
|
||||
priv->lock.unlock ();
|
||||
if (!gst_pad_set_caps (GST_BASE_SRC_PAD (self), caps)) {
|
||||
GST_ERROR_OBJECT (self, "Couldn't set caps");
|
||||
gst_clear_buffer (&buf);
|
||||
gst_clear_caps (&caps);
|
||||
|
||||
return GST_FLOW_NOT_NEGOTIATED;
|
||||
}
|
||||
} else {
|
||||
priv->lock.unlock ();
|
||||
}
|
||||
gst_clear_caps (&caps);
|
||||
|
||||
if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_GAP))
|
||||
is_gap_buf = TRUE;
|
||||
|
||||
if (is_gap_buf != self->is_gap_buf) {
|
||||
self->is_gap_buf = is_gap_buf;
|
||||
g_object_notify (G_OBJECT (self), "signal");
|
||||
}
|
||||
|
||||
buf_size = gst_buffer_get_size (buf);
|
||||
if (buf_size < self->video_info.size) {
|
||||
GST_WARNING_OBJECT (self, "Too small buffer size %" G_GSIZE_FORMAT
|
||||
" < %" G_GSIZE_FORMAT, buf_size, self->video_info.size);
|
||||
gst_clear_buffer (&buf);
|
||||
retry_count++;
|
||||
goto again;
|
||||
}
|
||||
|
||||
std::unique_lock < std::mutex > lk (priv->lock);
|
||||
*buffer = buf;
|
||||
|
||||
if (self->desync_threshold != 0 &&
|
||||
GST_CLOCK_TIME_IS_VALID (self->desync_threshold)) {
|
||||
GstClockTime diff;
|
||||
if (av_sync >= 0)
|
||||
diff = av_sync;
|
||||
else
|
||||
diff = -av_sync;
|
||||
|
||||
GST_LOG_OBJECT (self, "Current AV sync %" GST_STIME_FORMAT,
|
||||
GST_STIME_ARGS (av_sync));
|
||||
|
||||
if (diff >= self->desync_threshold) {
|
||||
GST_WARNING_OBJECT (self, "Large AV desync is detected, desync %"
|
||||
GST_STIME_FORMAT ", threshold %" GST_TIME_FORMAT,
|
||||
GST_STIME_ARGS (av_sync), GST_TIME_ARGS (self->desync_threshold));
|
||||
|
||||
gst_decklink2_input_schedule_restart (self->input);
|
||||
}
|
||||
}
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
void
|
||||
gst_decklink2_src_install_properties (GObjectClass * object_class)
|
||||
{
|
||||
GParamFlags param_flags = (GParamFlags) (G_PARAM_READWRITE |
|
||||
GST_PARAM_MUTABLE_READY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_property (object_class, PROP_MODE,
|
||||
g_param_spec_enum ("mode", "Playback Mode",
|
||||
"Video Mode to use for playback",
|
||||
GST_TYPE_DECKLINK2_MODE, DEFAULT_MODE, param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_DEVICE_NUMBER,
|
||||
g_param_spec_int ("device-number", "Device number",
|
||||
"Output device instance to use", 0, G_MAXINT, DEFAULT_DEVICE_NUMBER,
|
||||
param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_PERSISTENT_ID,
|
||||
g_param_spec_int64 ("persistent-id", "Persistent id",
|
||||
"Output device instance to use. Higher priority than \"device-number\".",
|
||||
DEFAULT_PERSISTENT_ID, G_MAXINT64, DEFAULT_PERSISTENT_ID,
|
||||
param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_VIDEO_CONNECTION,
|
||||
g_param_spec_enum ("video-connection", "Video Connection",
|
||||
"Video input connection to use",
|
||||
GST_TYPE_DECKLINK2_VIDEO_CONNECTION, DEFAULT_VIDEO_CONNECTION,
|
||||
param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_AUDIO_CONNECTION,
|
||||
g_param_spec_enum ("audio-connection", "Audio Connection",
|
||||
"Audio input connection to use",
|
||||
GST_TYPE_DECKLINK2_AUDIO_CONNECTION, DEFAULT_AUDIO_CONNECTION,
|
||||
param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_VIDEO_FORMAT,
|
||||
g_param_spec_enum ("video-format", "Video format",
|
||||
"Video format type to use for playback",
|
||||
GST_TYPE_DECKLINK2_VIDEO_FORMAT, DEFAULT_VIDEO_FORMAT, param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_AUDIO_CHANNELS,
|
||||
g_param_spec_enum ("audio-channels", "Audio Channels",
|
||||
"Audio Channels",
|
||||
GST_TYPE_DECKLINK2_AUDIO_CHANNELS, DEFAULT_AUDIO_CHANNELS,
|
||||
param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_PROFILE_ID,
|
||||
g_param_spec_enum ("profile", "Profile",
|
||||
"Certain DeckLink devices such as the DeckLink 8K Pro, the DeckLink "
|
||||
"Quad 2 and the DeckLink Duo 2 support multiple profiles to "
|
||||
"configure the capture and playback behavior of its sub-devices."
|
||||
"For the DeckLink Duo 2 and DeckLink Quad 2, a profile is shared "
|
||||
"between any 2 sub-devices that utilize the same connectors. For the "
|
||||
"DeckLink 8K Pro, a profile is shared between all 4 sub-devices. Any "
|
||||
"sub-devices that share a profile are considered to be part of the "
|
||||
"same profile group."
|
||||
"DeckLink Duo 2 support configuration of the duplex mode of "
|
||||
"individual sub-devices.",
|
||||
GST_TYPE_DECKLINK2_PROFILE_ID, DEFAULT_PROFILE_ID, param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_TIMECODE_FORMAT,
|
||||
g_param_spec_enum ("timecode-format", "Timecode format",
|
||||
"Timecode format type to use for playback",
|
||||
GST_TYPE_DECKLINK2_TIMECODE_FORMAT, DEFAULT_TIMECODE_FORMAT,
|
||||
param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_OUTPUT_CC,
|
||||
g_param_spec_boolean ("output-cc", "Output Closed Caption",
|
||||
"Extract and output CC as GstMeta (if present)",
|
||||
DEFAULT_OUTPUT_CC, param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_OUTPUT_AFD_BAR,
|
||||
g_param_spec_boolean ("output-afd-bar", "Output AFD/Bar data",
|
||||
"Extract and output AFD/Bar as GstMeta (if present)",
|
||||
DEFAULT_OUTPUT_AFD_BAR, param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_BUFFER_SIZE,
|
||||
g_param_spec_uint ("buffer-size", "Buffer Size",
|
||||
"Size of internal buffer in number of video frames", 1,
|
||||
16, DEFAULT_BUFFER_SIZE, param_flags));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_SIGNAL,
|
||||
g_param_spec_boolean ("signal", "Signal",
|
||||
"True if there is a valid input signal available",
|
||||
FALSE, (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_SKIP_FIRST_TIME,
|
||||
g_param_spec_uint64 ("skip-first-time", "Skip First Time",
|
||||
"Skip that much time of initial frames after starting", 0,
|
||||
G_MAXUINT64, DEFAULT_SKIP_FIRST_TIME,
|
||||
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||
|
||||
g_object_class_install_property (object_class, PROP_DESYNC_THRESHOLD,
|
||||
g_param_spec_uint64 ("desync-threshold", "Desync Threshold",
|
||||
"Maximum allowed a/v desync threshold. "
|
||||
"If larger desync is detected, streaming will be restarted "
|
||||
"(0 = disable auto-restart)", 0,
|
||||
G_MAXUINT64, DEFAULT_DESYNC_THRESHOLD,
|
||||
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||
}
|
||||
|
||||
void
|
||||
gst_decklink2_src_restart (GstDeckLink2Src * self)
|
||||
{
|
||||
g_return_if_fail (GST_IS_DECKLINK2_SRC (self));
|
||||
|
||||
GstDeckLink2SrcPrivate *priv = self->priv;
|
||||
std::lock_guard < std::mutex > lk (priv->lock);
|
||||
|
||||
if (self->input && self->running) {
|
||||
GST_INFO_OBJECT (self, "Scheduling restart");
|
||||
gst_decklink2_input_schedule_restart (self->input);
|
||||
}
|
||||
}
|
38
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2src.h
Normal file
38
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2src.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/base.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_SRC (gst_decklink2_src_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2Src, gst_decklink2_src,
|
||||
GST, DECKLINK2_SRC, GstPushSrc);
|
||||
|
||||
GST_ELEMENT_REGISTER_DECLARE (decklink2src);
|
||||
|
||||
void gst_decklink2_src_install_properties (GObjectClass * object_class);
|
||||
|
||||
void gst_decklink2_src_restart (GstDeckLink2Src * self);
|
||||
|
||||
G_END_DECLS
|
233
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2srcbin.cpp
Normal file
233
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2srcbin.cpp
Normal file
|
@ -0,0 +1,233 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstdecklink2srcbin.h"
|
||||
#include "gstdecklink2src.h"
|
||||
#include "gstdecklink2utils.h"
|
||||
|
||||
GST_DEBUG_CATEGORY_STATIC (gst_decklink2_src_bin_debug);
|
||||
#define GST_CAT_DEFAULT gst_decklink2_src_bin_debug
|
||||
|
||||
static GstStaticPadTemplate audio_template = GST_STATIC_PAD_TEMPLATE ("audio",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_SOMETIMES,
|
||||
GST_STATIC_CAPS ("audio/x-raw, format = (string) { S16LE, S32LE }, "
|
||||
"rate = (int) 48000, channels = (int) { 2, 8, 16 }, "
|
||||
"layout = (string) interleaved"));
|
||||
|
||||
enum
|
||||
{
|
||||
/* actions */
|
||||
SIGNAL_RESTART,
|
||||
|
||||
SIGNAL_LAST,
|
||||
};
|
||||
|
||||
static guint gst_decklink2_src_bin_signals[SIGNAL_LAST] = { 0, };
|
||||
|
||||
struct _GstDeckLink2SrcBin
|
||||
{
|
||||
GstBin parent;
|
||||
|
||||
GstElement *src;
|
||||
GstElement *demux;
|
||||
};
|
||||
|
||||
static void gst_decklink2_src_bin_set_property (GObject * object,
|
||||
guint prop_id, const GValue * value, GParamSpec * pspec);
|
||||
static void gst_decklink2_src_bin_get_property (GObject * object,
|
||||
guint prop_id, GValue * value, GParamSpec * pspec);
|
||||
|
||||
static void on_signal (GObject * object, GParamSpec * pspec, GstElement * self);
|
||||
static void on_pad_added (GstElement * demux, GstPad * pad,
|
||||
GstDeckLink2SrcBin * self);
|
||||
static void on_pad_removed (GstElement * demux, GstPad * pad,
|
||||
GstDeckLink2SrcBin * self);
|
||||
static void on_no_more_pads (GstElement * demux, GstDeckLink2SrcBin * self);
|
||||
static void on_restart (GstDeckLink2SrcBin * self);
|
||||
|
||||
#define gst_decklink2_src_bin_parent_class parent_class
|
||||
G_DEFINE_TYPE (GstDeckLink2SrcBin, gst_decklink2_src_bin, GST_TYPE_BIN);
|
||||
GST_ELEMENT_REGISTER_DEFINE (decklink2srcbin, "decklink2srcbin",
|
||||
GST_RANK_NONE, GST_TYPE_DECKLINK2_SRC_BIN);
|
||||
|
||||
static void
|
||||
gst_decklink2_src_bin_class_init (GstDeckLink2SrcBinClass * klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||
GstCaps *templ_caps;
|
||||
|
||||
object_class->set_property = gst_decklink2_src_bin_set_property;
|
||||
object_class->get_property = gst_decklink2_src_bin_get_property;
|
||||
|
||||
gst_decklink2_src_install_properties (object_class);
|
||||
|
||||
gst_decklink2_src_bin_signals[SIGNAL_RESTART] =
|
||||
g_signal_new_class_handler ("restart", G_TYPE_FROM_CLASS (klass),
|
||||
(GSignalFlags) (G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
|
||||
G_CALLBACK (on_restart), NULL, NULL, NULL, G_TYPE_NONE, 0);
|
||||
|
||||
templ_caps = gst_decklink2_get_default_template_caps ();
|
||||
gst_element_class_add_pad_template (element_class,
|
||||
gst_pad_template_new ("video", GST_PAD_SRC, GST_PAD_ALWAYS, templ_caps));
|
||||
gst_caps_unref (templ_caps);
|
||||
|
||||
gst_element_class_add_static_pad_template (element_class, &audio_template);
|
||||
|
||||
gst_element_class_set_static_metadata (element_class,
|
||||
"Decklink2 Source Bin", "Video/Audio/Source/Hardware",
|
||||
"Decklink2 Source Bin", "Seungha Yang <seungha@centricular.com>");
|
||||
|
||||
GST_DEBUG_CATEGORY_INIT (gst_decklink2_src_bin_debug, "decklink2srcbin",
|
||||
0, "decklink2srcbin");
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_bin_init (GstDeckLink2SrcBin * self)
|
||||
{
|
||||
GstPad *pad;
|
||||
GstPad *gpad;
|
||||
GstElement *queue;
|
||||
|
||||
self->src = gst_element_factory_make ("decklink2src", NULL);
|
||||
self->demux = gst_element_factory_make ("decklink2demux", NULL);
|
||||
|
||||
queue = gst_element_factory_make ("queue", NULL);
|
||||
|
||||
g_object_set (queue, "max-size-buffers", 3, "max-size-bytes", 0,
|
||||
"max-size-time", (guint64) 0, NULL);
|
||||
|
||||
gst_bin_add_many (GST_BIN (self), self->src, queue, self->demux, NULL);
|
||||
gst_element_link_many (self->src, queue, self->demux, NULL);
|
||||
|
||||
pad = gst_element_get_static_pad (self->demux, "video");
|
||||
gpad = gst_ghost_pad_new ("video", pad);
|
||||
gst_object_unref (pad);
|
||||
gst_element_add_pad (GST_ELEMENT (self), gpad);
|
||||
|
||||
g_signal_connect (self->src, "notify::signal", G_CALLBACK (on_signal), self);
|
||||
|
||||
g_signal_connect (self->demux, "pad-added", G_CALLBACK (on_pad_added), self);
|
||||
g_signal_connect (self->demux,
|
||||
"pad-removed", G_CALLBACK (on_pad_removed), self);
|
||||
g_signal_connect (self->demux, "no-more-pads",
|
||||
G_CALLBACK (on_no_more_pads), self);
|
||||
|
||||
gst_bin_set_suppressed_flags (GST_BIN (self),
|
||||
(GstElementFlags) (GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK));
|
||||
GST_OBJECT_FLAG_SET (self, GST_ELEMENT_FLAG_SOURCE);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_bin_set_property (GObject * object, guint prop_id,
|
||||
const GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
GstDeckLink2SrcBin *self = GST_DECKLINK2_SRC_BIN (object);
|
||||
|
||||
g_object_set_property (G_OBJECT (self->src), pspec->name, value);
|
||||
}
|
||||
|
||||
static void
|
||||
gst_decklink2_src_bin_get_property (GObject * object, guint prop_id,
|
||||
GValue * value, GParamSpec * pspec)
|
||||
{
|
||||
GstDeckLink2SrcBin *self = GST_DECKLINK2_SRC_BIN (object);
|
||||
|
||||
g_object_get_property (G_OBJECT (self->src), pspec->name, value);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
copy_sticky_events (GstPad * pad, GstEvent ** event, GstPad * gpad)
|
||||
{
|
||||
gst_pad_store_sticky_event (gpad, *event);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_signal (GObject * object, GParamSpec * pspec, GstElement * self)
|
||||
{
|
||||
g_object_notify (G_OBJECT (self), "signal");
|
||||
}
|
||||
|
||||
static void
|
||||
on_pad_added (GstElement * demux, GstPad * pad, GstDeckLink2SrcBin * self)
|
||||
{
|
||||
GstPad *gpad;
|
||||
gchar *pad_name;
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Pad added %" GST_PTR_FORMAT, pad);
|
||||
|
||||
if (!GST_PAD_IS_SRC (pad))
|
||||
return;
|
||||
|
||||
pad_name = gst_pad_get_name (pad);
|
||||
if (g_strcmp0 (pad_name, "audio") != 0) {
|
||||
g_free (pad_name);
|
||||
return;
|
||||
}
|
||||
|
||||
g_free (pad_name);
|
||||
|
||||
gpad = gst_ghost_pad_new ("audio", pad);
|
||||
g_object_set_data (G_OBJECT (pad), "decklink2srcbin.ghostpad", gpad);
|
||||
|
||||
gst_pad_set_active (gpad, TRUE);
|
||||
gst_pad_sticky_events_foreach (pad,
|
||||
(GstPadStickyEventsForeachFunction) copy_sticky_events, gpad);
|
||||
gst_element_add_pad (GST_ELEMENT (self), gpad);
|
||||
}
|
||||
|
||||
static void
|
||||
on_pad_removed (GstElement * demux, GstPad * pad, GstDeckLink2SrcBin * self)
|
||||
{
|
||||
GstPad *gpad;
|
||||
|
||||
GST_DEBUG_OBJECT (self, "Pad removed %" GST_PTR_FORMAT, pad);
|
||||
|
||||
if (!GST_PAD_IS_SRC (pad))
|
||||
return;
|
||||
|
||||
gpad = (GstPad *) g_object_get_data (G_OBJECT (pad),
|
||||
"decklink2srcbin.ghostpad");
|
||||
if (!gpad) {
|
||||
GST_DEBUG_OBJECT (self, "No ghost pad found");
|
||||
return;
|
||||
}
|
||||
|
||||
gst_element_remove_pad (GST_ELEMENT (self), gpad);
|
||||
}
|
||||
|
||||
static void
|
||||
on_no_more_pads (GstElement * demux, GstDeckLink2SrcBin * self)
|
||||
{
|
||||
gst_element_no_more_pads (GST_ELEMENT (self));
|
||||
}
|
||||
|
||||
static void
|
||||
on_restart (GstDeckLink2SrcBin * self)
|
||||
{
|
||||
gst_decklink2_src_restart (GST_DECKLINK2_SRC (self->src));
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/base/base.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_DECKLINK2_SRC_BIN (gst_decklink2_src_bin_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstDeckLink2SrcBin, gst_decklink2_src_bin,
|
||||
GST, DECKLINK2_SRC_BIN, GstBin);
|
||||
|
||||
GST_ELEMENT_REGISTER_DECLARE (decklink2srcbin);
|
||||
|
||||
G_END_DECLS
|
1254
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2utils.cpp
Normal file
1254
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2utils.cpp
Normal file
File diff suppressed because it is too large
Load diff
336
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2utils.h
Normal file
336
subprojects/gst-plugins-bad/sys/decklink2/gstdecklink2utils.h
Normal file
|
@ -0,0 +1,336 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2023 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the
|
||||
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/video/video.h>
|
||||
#include <gst/audio/audio.h>
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
#include <windows.h>
|
||||
#ifndef INITGUID
|
||||
#include <initguid.h>
|
||||
#endif /* INITGUID */
|
||||
#include <DeckLinkAPI_i.c>
|
||||
#else
|
||||
#include <DeckLinkAPI_v10_11.h>
|
||||
#include <DeckLinkAPI_v11_5.h>
|
||||
#include <DeckLinkAPI_v11_5_1.h>
|
||||
#include <DeckLinkAPIConfiguration_v10_11.h>
|
||||
#include <DeckLinkAPIVideoInput_v10_11.h>
|
||||
#include <DeckLinkAPIVideoInput_v11_4.h>
|
||||
#include <DeckLinkAPIVideoInput_v11_5_1.h>
|
||||
#include <DeckLinkAPIVideoOutput_v10_11.h>
|
||||
#include <DeckLinkAPIVideoOutput_v11_4.h>
|
||||
#endif /* G_OS_WIN32 */
|
||||
|
||||
#include <DeckLinkAPI.h>
|
||||
|
||||
#if defined(G_OS_WIN32)
|
||||
#define dlbool_t BOOL
|
||||
#define dlstring_t BSTR
|
||||
#elif defined(__APPLE__)
|
||||
#define dlbool_t bool
|
||||
#define dlstring_t CFStringRef
|
||||
#else
|
||||
#define dlbool_t bool
|
||||
#define dlstring_t const char*
|
||||
#endif
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef struct _GstDeckLink2AudioMeta GstDeckLink2AudioMeta;
|
||||
typedef struct _GstDeckLink2DisplayMode GstDeckLink2DisplayMode;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GST_DECKLINK2_API_LEVEL_UNKNOWN,
|
||||
GST_DECKLINK2_API_LEVEL_10_11,
|
||||
GST_DECKLINK2_API_LEVEL_11_4,
|
||||
GST_DECKLINK2_API_LEVEL_11_5_1,
|
||||
GST_DECKLINK2_API_LEVEL_LATEST,
|
||||
} GstDeckLink2APILevel;
|
||||
|
||||
/* defines custom display mode for wide screen */
|
||||
#define bmdModeNTSC_W ((BMDDisplayMode) 0x4E545343) /* 'NTSC' */
|
||||
#define bmdModeNTSC2398_W ((BMDDisplayMode) 0x4E543233) /* 'NT23' */
|
||||
#define bmdModePAL_W ((BMDDisplayMode) 0x50414C20) /* 'PAL ' */
|
||||
#define bmdModeNTSCp_W ((BMDDisplayMode) 0x4E545350) /* 'NTSP' */
|
||||
#define bmdModePALp_W ((BMDDisplayMode) 0x50414C50) /* 'PALP' */
|
||||
|
||||
#define GST_TYPE_DECKLINK2_MODE (gst_decklink2_mode_get_type ())
|
||||
GType gst_decklink2_mode_get_type (void);
|
||||
|
||||
#define GST_TYPE_DECKLINK2_VIDEO_FORMAT (gst_decklink2_video_format_get_type ())
|
||||
GType gst_decklink2_video_format_get_type (void);
|
||||
|
||||
#define bmdProfileDefault ((BMDProfileID) 0)
|
||||
#define GST_TYPE_DECKLINK2_PROFILE_ID (gst_decklink2_profile_id_get_type ())
|
||||
GType gst_decklink2_profile_id_get_type (void);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GST_DECKLINK2_KEYER_MODE_OFF,
|
||||
GST_DECKLINK2_KEYER_MODE_INTERNAL,
|
||||
GST_DECKLINK2_KEYER_MODE_EXTERNAL
|
||||
} GstDeckLink2KeyerMode;
|
||||
#define GST_TYPE_DECKLINK2_KEYER_MODE (gst_decklink2_keyer_mode_get_type ())
|
||||
GType gst_decklink2_keyer_mode_get_type (void);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GST_DECKLINK2_MAPPING_FORMAT_DEFAULT,
|
||||
GST_DECKLINK2_MAPPING_FORMAT_LEVEL_A, /* bmdDeckLinkConfigSMPTELevelAOutput = true */
|
||||
GST_DECKLINK2_MAPPING_FORMAT_LEVEL_B, /* bmdDeckLinkConfigSMPTELevelAOutput = false */
|
||||
} GstDeckLink2MappingFormat;
|
||||
#define GST_TYPE_DECKLINK2_MAPPING_FORMAT (gst_decklink2_mapping_format_get_type ())
|
||||
GType gst_decklink2_mapping_format_get_type (void);
|
||||
|
||||
#define GST_TYPE_DECKLINK2_TIMECODE_FORMAT (gst_decklink2_timecode_format_get_type ())
|
||||
GType gst_decklink2_timecode_format_get_type (void);
|
||||
|
||||
#define GST_TYPE_DECKLINK2_VIDEO_CONNECTION (gst_decklink2_video_connection_get_type ())
|
||||
GType gst_decklink2_video_connection_get_type (void);
|
||||
|
||||
#define bmdAudioConnectionUnspecified ((BMDAudioConnection) 0)
|
||||
#define GST_TYPE_DECKLINK2_AUDIO_CONNECTION (gst_decklink2_audio_connection_get_type ())
|
||||
GType gst_decklink2_audio_connection_get_type (void);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GST_DECKLINK2_AUDIO_CHANNELS_DISABLED = -1,
|
||||
GST_DECKLINK2_AUDIO_CHANNELS_MAX = 0,
|
||||
GST_DECKLINK2_AUDIO_CHANNELS_2 = 2,
|
||||
GST_DECKLINK2_AUDIO_CHANNELS_8 = 8,
|
||||
GST_DECKLINK2_AUDIO_CHANNELS_16 = 16,
|
||||
} GstDeckLink2AudioChannels;
|
||||
#define GST_TYPE_DECKLINK2_AUDIO_CHANNELS (gst_decklink2_audio_channels_get_type ())
|
||||
GType gst_decklink2_audio_channels_get_type (void);
|
||||
|
||||
struct _GstDeckLink2DisplayMode
|
||||
{
|
||||
BMDDisplayMode mode;
|
||||
gint width;
|
||||
gint height;
|
||||
gint fps_n;
|
||||
gint fps_d;
|
||||
gboolean interlaced;
|
||||
gint par_n;
|
||||
gint par_d;
|
||||
gboolean tff;
|
||||
};
|
||||
|
||||
gboolean gst_decklink2_init_once (void);
|
||||
|
||||
void gst_decklink2_deinit (void);
|
||||
|
||||
gboolean gst_decklink2_get_api_version (guint * major,
|
||||
guint * minor,
|
||||
guint * sub,
|
||||
guint * extra);
|
||||
|
||||
GstDeckLink2APILevel gst_decklink2_get_api_level (void);
|
||||
|
||||
const gchar * gst_decklink2_api_level_to_string (GstDeckLink2APILevel level);
|
||||
|
||||
GstCaps * gst_decklink2_get_default_template_caps (void);
|
||||
|
||||
BMDDisplayMode gst_decklink2_get_real_display_mode (BMDDisplayMode mode);
|
||||
|
||||
typedef gboolean (*GstDeckLink2DoesSupportVideoMode) (GstObject * object,
|
||||
BMDDisplayMode mode,
|
||||
BMDPixelFormat format);
|
||||
|
||||
GstCaps * gst_decklink2_build_caps (GstObject * io_object,
|
||||
IDeckLinkDisplayModeIterator * iter,
|
||||
BMDDisplayMode requested_mode,
|
||||
BMDPixelFormat format,
|
||||
GstDeckLink2DoesSupportVideoMode func);
|
||||
|
||||
GstCaps * gst_decklink2_build_template_caps (GstObject * io_object,
|
||||
IDeckLinkDisplayModeIterator * iter,
|
||||
GstDeckLink2DoesSupportVideoMode func,
|
||||
GArray * format_table);
|
||||
|
||||
GstCaps * gst_decklink2_get_caps_from_mode (const GstDeckLink2DisplayMode * mode);
|
||||
|
||||
|
||||
GstVideoFormat gst_decklink2_video_format_from_pixel_format (BMDPixelFormat format);
|
||||
|
||||
BMDPixelFormat gst_decklink2_pixel_format_from_video_format (GstVideoFormat format);
|
||||
|
||||
|
||||
struct _GstDeckLink2AudioMeta
|
||||
{
|
||||
GstMeta meta;
|
||||
|
||||
GstSample *sample;
|
||||
};
|
||||
|
||||
GType gst_decklink2_audio_meta_api_get_type (void);
|
||||
#define GST_DECKLINK2_AUDIO_META_API_TYPE (gst_decklink2_audio_meta_api_get_type())
|
||||
|
||||
const GstMetaInfo *gst_decklink2_audio_meta_get_info (void);
|
||||
#define GST_DECKLINK2_AUDIO_META_INFO (gst_decklink2_audio_meta_get_info())
|
||||
|
||||
#define gst_buffer_get_decklink2_audio_meta(b) \
|
||||
((GstDeckLink2AudioMeta*)gst_buffer_get_meta((b),GST_DECKLINK2_AUDIO_META_API_TYPE))
|
||||
|
||||
GstDeckLink2AudioMeta * gst_buffer_add_decklink2_audio_meta (GstBuffer * buffer,
|
||||
GstSample * audio_sample);
|
||||
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
static inline gboolean
|
||||
_gst_decklink2_result (HRESULT hr, GstDebugCategory * cat, const gchar * file,
|
||||
const gchar * function, gint line)
|
||||
{
|
||||
if (hr == S_OK)
|
||||
return TRUE;
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
{
|
||||
gchar *error_text = g_win32_error_message ((guint) hr);
|
||||
gst_debug_log (cat, GST_LEVEL_WARNING, file, function, line, NULL,
|
||||
"DeckLink call failed: 0x%x (%s)", (guint) hr,
|
||||
GST_STR_NULL (error_text));
|
||||
g_free (error_text);
|
||||
}
|
||||
#else
|
||||
gst_debug_log (cat, GST_LEVEL_WARNING, file, function, line, NULL,
|
||||
"DeckLink call failed: 0x%x", (guint) hr);
|
||||
#endif /* G_OS_WIN32 */
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define gst_decklink2_result(hr) \
|
||||
_gst_decklink2_result (hr, GST_CAT_DEFAULT, __FILE__, GST_FUNCTION, __LINE__)
|
||||
#else /* GST_DISABLE_GST_DEBUG */
|
||||
static inline gboolean
|
||||
gst_decklink2_result (HRESULT hr)
|
||||
{
|
||||
if (hr == S_OK)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
#endif /* GST_DISABLE_GST_DEBUG */
|
||||
|
||||
#define GST_DECKLINK2_PRINT_CHAR(c) \
|
||||
g_ascii_isprint(c) ? (c) : '.'
|
||||
|
||||
#define GST_DECKLINK2_FOURCC_ARGS(fourcc) \
|
||||
GST_DECKLINK2_PRINT_CHAR(((fourcc) >> 24) & 0xff), \
|
||||
GST_DECKLINK2_PRINT_CHAR(((fourcc) >> 16) & 0xff), \
|
||||
GST_DECKLINK2_PRINT_CHAR(((fourcc) >> 8) & 0xff), \
|
||||
GST_DECKLINK2_PRINT_CHAR((fourcc) & 0xff)
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <string>
|
||||
#include <functional>
|
||||
#include <stdint.h>
|
||||
#include <mutex>
|
||||
|
||||
#define GST_DECKLINK2_CALL_ONCE_BEGIN \
|
||||
static std::once_flag __once_flag; \
|
||||
std::call_once (__once_flag, [&]()
|
||||
|
||||
#define GST_DECKLINK2_CALL_ONCE_END )
|
||||
|
||||
#define GST_DECKLINK2_CLEAR_COM(obj) G_STMT_START { \
|
||||
if (obj) { \
|
||||
(obj)->Release (); \
|
||||
(obj) = NULL; \
|
||||
} \
|
||||
} G_STMT_END
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
#include <string.h>
|
||||
inline bool operator==(REFIID a, REFIID b)
|
||||
{
|
||||
if (memcmp (&a, &b, sizeof (REFIID)) != 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(G_OS_WIN32)
|
||||
const std::function<void(dlstring_t)> DeleteString = SysFreeString;
|
||||
|
||||
const std::function<std::string(dlstring_t)> DlToStdString = [](dlstring_t dl_str) -> std::string
|
||||
{
|
||||
int wlen = ::SysStringLen(dl_str);
|
||||
int mblen = ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)dl_str, wlen, NULL, 0, NULL, NULL);
|
||||
|
||||
std::string ret_str(mblen, '\0');
|
||||
mblen = ::WideCharToMultiByte(CP_ACP, 0, (wchar_t*)dl_str, wlen, &ret_str[0], mblen, NULL, NULL);
|
||||
|
||||
return ret_str;
|
||||
};
|
||||
|
||||
const std::function<dlstring_t(std::string)> StdToDlString = [](std::string std_str) -> dlstring_t
|
||||
{
|
||||
int wlen = ::MultiByteToWideChar(CP_ACP, 0, std_str.data(), (int)std_str.length(), NULL, 0);
|
||||
|
||||
dlstring_t ret_str = ::SysAllocStringLen(NULL, wlen);
|
||||
::MultiByteToWideChar(CP_ACP, 0, std_str.data(), (int)std_str.length(), ret_str, wlen);
|
||||
|
||||
return ret_str;
|
||||
};
|
||||
#elif defined(__APPLE__)
|
||||
const auto DeleteString = CFRelease;
|
||||
|
||||
const auto DlToStdString = [](dlstring_t dl_str) -> std::string
|
||||
{
|
||||
CFIndex len;
|
||||
CFStringGetBytes(dl_str, CFRangeMake(0, CFStringGetLength(dl_str)),
|
||||
kCFStringEncodingUTF8, 0, FALSE, NULL, 0, &len);
|
||||
std::string ret_str (len, '\0');
|
||||
CFStringGetCString (dl_str, &ret_str[0], len, kCFStringEncodingUTF8);
|
||||
|
||||
return ret_str;
|
||||
};
|
||||
|
||||
const auto StdToDlString = [](std::string std_str) -> dlstring_t
|
||||
{
|
||||
return CFStringCreateWithCString(kCFAllocatorMalloc, std_str.c_str(), kCFStringEncodingUTF8);
|
||||
};
|
||||
#else
|
||||
#include <string.h>
|
||||
|
||||
const std::function<void(dlstring_t)> DeleteString = [](dlstring_t dl_str)
|
||||
{
|
||||
free((void*)dl_str);
|
||||
};
|
||||
|
||||
const std::function<std::string(dlstring_t)> DlToStdString = [](dlstring_t dl_str) -> std::string
|
||||
{
|
||||
return dl_str;
|
||||
};
|
||||
|
||||
const std::function<dlstring_t(std::string)> StdToDlString = [](std::string std_str) -> dlstring_t
|
||||
{
|
||||
return strcpy((char*)malloc(std_str.length()+1), std_str.c_str());
|
||||
};
|
||||
#endif
|
||||
#endif /* __cplusplus */
|
1299
subprojects/gst-plugins-bad/sys/decklink2/linux/DeckLinkAPI.h
Normal file
1299
subprojects/gst-plugins-bad/sys/decklink2/linux/DeckLinkAPI.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,269 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* 912F634B-2D4E-40A4-8AAB-8D80B73F1289 */ { 0x91,0x2F,0x63,0x4B,0x2D,0x4E,0x40,0xA4,0x8A,0xAB,0x8D,0x80,0xB7,0x3F,0x12,0x89 };
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ { 0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E };
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID;
|
||||
enum _BMDDeckLinkConfigurationID {
|
||||
|
||||
/* Serial port Flags */
|
||||
|
||||
bmdDeckLinkConfigSwapSerialRxTx = /* 'ssrt' */ 0x73737274,
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066,
|
||||
bmdDeckLinkConfigBypass = /* 'byps' */ 0x62797073,
|
||||
bmdDeckLinkConfigClockTimingAdjustment = /* 'ctad' */ 0x63746164,
|
||||
|
||||
/* Audio Input/Output Flags */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioConsumerLevels = /* 'aacl' */ 0x6161636C,
|
||||
bmdDeckLinkConfigSwapHDMICh3AndCh4OnInput = /* 'hi34' */ 0x68693334,
|
||||
bmdDeckLinkConfigSwapHDMICh3AndCh4OnOutput = /* 'ho34' */ 0x686F3334,
|
||||
|
||||
/* Video Output Flags */
|
||||
|
||||
bmdDeckLinkConfigFieldFlickerRemoval = /* 'fdfr' */ 0x66646672,
|
||||
bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion = /* 'to59' */ 0x746F3539,
|
||||
bmdDeckLinkConfig444SDIVideoOutput = /* '444o' */ 0x3434346F,
|
||||
bmdDeckLinkConfigBlackVideoOutputDuringCapture = /* 'bvoc' */ 0x62766F63,
|
||||
bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F,
|
||||
bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F,
|
||||
bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461,
|
||||
bmdDeckLinkConfigRec2020Output = /* 'rec2' */ 0x72656332, // Ensure output is Rec.2020 colorspace
|
||||
bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = /* 'SDQS' */ 0x53445153,
|
||||
bmdDeckLinkConfigOutput1080pAsPsF = /* 'pfpr' */ 0x70667072,
|
||||
|
||||
/* Video Output Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoOutputConnection = /* 'vocn' */ 0x766F636E,
|
||||
bmdDeckLinkConfigVideoOutputConversionMode = /* 'vocm' */ 0x766F636D,
|
||||
bmdDeckLinkConfigAnalogVideoOutputFlags = /* 'avof' */ 0x61766F66,
|
||||
bmdDeckLinkConfigReferenceInputTimingOffset = /* 'glot' */ 0x676C6F74,
|
||||
bmdDeckLinkConfigVideoOutputIdleOperation = /* 'voio' */ 0x766F696F,
|
||||
bmdDeckLinkConfigDefaultVideoOutputMode = /* 'dvom' */ 0x64766F6D,
|
||||
bmdDeckLinkConfigDefaultVideoOutputModeFlags = /* 'dvof' */ 0x64766F66,
|
||||
bmdDeckLinkConfigSDIOutputLinkConfiguration = /* 'solc' */ 0x736F6C63,
|
||||
bmdDeckLinkConfigHDMITimecodePacking = /* 'htpk' */ 0x6874706B,
|
||||
bmdDeckLinkConfigPlaybackGroup = /* 'plgr' */ 0x706C6772,
|
||||
|
||||
/* Video Output Floats */
|
||||
|
||||
bmdDeckLinkConfigVideoOutputComponentLumaGain = /* 'oclg' */ 0x6F636C67,
|
||||
bmdDeckLinkConfigVideoOutputComponentChromaBlueGain = /* 'occb' */ 0x6F636362,
|
||||
bmdDeckLinkConfigVideoOutputComponentChromaRedGain = /* 'occr' */ 0x6F636372,
|
||||
bmdDeckLinkConfigVideoOutputCompositeLumaGain = /* 'oilg' */ 0x6F696C67,
|
||||
bmdDeckLinkConfigVideoOutputCompositeChromaGain = /* 'oicg' */ 0x6F696367,
|
||||
bmdDeckLinkConfigVideoOutputSVideoLumaGain = /* 'oslg' */ 0x6F736C67,
|
||||
bmdDeckLinkConfigVideoOutputSVideoChromaGain = /* 'oscg' */ 0x6F736367,
|
||||
|
||||
/* Video Input Flags */
|
||||
|
||||
bmdDeckLinkConfigVideoInputScanning = /* 'visc' */ 0x76697363, // Applicable to H264 Pro Recorder only
|
||||
bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream
|
||||
bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473,
|
||||
bmdDeckLinkConfigCapture1080pAsPsF = /* 'cfpr' */ 0x63667072,
|
||||
|
||||
/* Video Input Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoInputConnection = /* 'vicn' */ 0x7669636E,
|
||||
bmdDeckLinkConfigAnalogVideoInputFlags = /* 'avif' */ 0x61766966,
|
||||
bmdDeckLinkConfigVideoInputConversionMode = /* 'vicm' */ 0x7669636D,
|
||||
bmdDeckLinkConfig32PulldownSequenceInitialTimecodeFrame = /* 'pdif' */ 0x70646966,
|
||||
bmdDeckLinkConfigVANCSourceLine1Mapping = /* 'vsl1' */ 0x76736C31,
|
||||
bmdDeckLinkConfigVANCSourceLine2Mapping = /* 'vsl2' */ 0x76736C32,
|
||||
bmdDeckLinkConfigVANCSourceLine3Mapping = /* 'vsl3' */ 0x76736C33,
|
||||
bmdDeckLinkConfigCapturePassThroughMode = /* 'cptm' */ 0x6370746D,
|
||||
bmdDeckLinkConfigCaptureGroup = /* 'cpgr' */ 0x63706772,
|
||||
|
||||
/* Video Input Floats */
|
||||
|
||||
bmdDeckLinkConfigVideoInputComponentLumaGain = /* 'iclg' */ 0x69636C67,
|
||||
bmdDeckLinkConfigVideoInputComponentChromaBlueGain = /* 'iccb' */ 0x69636362,
|
||||
bmdDeckLinkConfigVideoInputComponentChromaRedGain = /* 'iccr' */ 0x69636372,
|
||||
bmdDeckLinkConfigVideoInputCompositeLumaGain = /* 'iilg' */ 0x69696C67,
|
||||
bmdDeckLinkConfigVideoInputCompositeChromaGain = /* 'iicg' */ 0x69696367,
|
||||
bmdDeckLinkConfigVideoInputSVideoLumaGain = /* 'islg' */ 0x69736C67,
|
||||
bmdDeckLinkConfigVideoInputSVideoChromaGain = /* 'iscg' */ 0x69736367,
|
||||
|
||||
/* Keying Integers */
|
||||
|
||||
bmdDeckLinkConfigInternalKeyingAncillaryDataSource = /* 'ikas' */ 0x696B6173,
|
||||
|
||||
/* Audio Input Flags */
|
||||
|
||||
bmdDeckLinkConfigMicrophonePhantomPower = /* 'mphp' */ 0x6D706870,
|
||||
|
||||
/* Audio Input Integers */
|
||||
|
||||
bmdDeckLinkConfigAudioInputConnection = /* 'aicn' */ 0x6169636E,
|
||||
|
||||
/* Audio Input Floats */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel1 = /* 'ais1' */ 0x61697331,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel2 = /* 'ais2' */ 0x61697332,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel3 = /* 'ais3' */ 0x61697333,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel4 = /* 'ais4' */ 0x61697334,
|
||||
bmdDeckLinkConfigDigitalAudioInputScale = /* 'dais' */ 0x64616973,
|
||||
bmdDeckLinkConfigMicrophoneInputGain = /* 'micg' */ 0x6D696367,
|
||||
|
||||
/* Audio Output Integers */
|
||||
|
||||
bmdDeckLinkConfigAudioOutputAESAnalogSwitch = /* 'aoaa' */ 0x616F6161,
|
||||
|
||||
/* Audio Output Floats */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel1 = /* 'aos1' */ 0x616F7331,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel2 = /* 'aos2' */ 0x616F7332,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel3 = /* 'aos3' */ 0x616F7333,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel4 = /* 'aos4' */ 0x616F7334,
|
||||
bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73,
|
||||
bmdDeckLinkConfigHeadphoneVolume = /* 'hvol' */ 0x68766F6C,
|
||||
|
||||
/* Device Information Strings */
|
||||
|
||||
bmdDeckLinkConfigDeviceInformationLabel = /* 'dila' */ 0x64696C61,
|
||||
bmdDeckLinkConfigDeviceInformationSerialNumber = /* 'disn' */ 0x6469736E,
|
||||
bmdDeckLinkConfigDeviceInformationCompany = /* 'dico' */ 0x6469636F,
|
||||
bmdDeckLinkConfigDeviceInformationPhone = /* 'diph' */ 0x64697068,
|
||||
bmdDeckLinkConfigDeviceInformationEmail = /* 'diem' */ 0x6469656D,
|
||||
bmdDeckLinkConfigDeviceInformationDate = /* 'dida' */ 0x64696461,
|
||||
|
||||
/* Deck Control Integers */
|
||||
|
||||
bmdDeckLinkConfigDeckControlConnection = /* 'dcco' */ 0x6463636F
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkEncoderConfigurationID;
|
||||
enum _BMDDeckLinkEncoderConfigurationID {
|
||||
|
||||
/* Video Encoder Integers */
|
||||
|
||||
bmdDeckLinkEncoderConfigPreferredBitDepth = /* 'epbr' */ 0x65706272,
|
||||
bmdDeckLinkEncoderConfigFrameCodingMode = /* 'efcm' */ 0x6566636D,
|
||||
|
||||
/* HEVC/H.265 Encoder Integers */
|
||||
|
||||
bmdDeckLinkEncoderConfigH265TargetBitrate = /* 'htbr' */ 0x68746272,
|
||||
|
||||
/* DNxHR/DNxHD Compression ID */
|
||||
|
||||
bmdDeckLinkEncoderConfigDNxHRCompressionID = /* 'dcid' */ 0x64636964,
|
||||
|
||||
/* DNxHR/DNxHD Level */
|
||||
|
||||
bmdDeckLinkEncoderConfigDNxHRLevel = /* 'dlev' */ 0x646C6576,
|
||||
|
||||
/* Encoded Sample Decriptions */
|
||||
|
||||
bmdDeckLinkEncoderConfigMPEG4SampleDescription = /* 'stsE' */ 0x73747345, // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
|
||||
bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration;
|
||||
class IDeckLinkEncoderConfiguration;
|
||||
|
||||
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char** value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char** value) = 0;
|
||||
virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_H) */
|
|
@ -0,0 +1,84 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_11_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_11_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_11 = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID_v10_11 - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_11;
|
||||
enum _BMDDeckLinkConfigurationID_v10_11 {
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigDuplexMode_v10_11 = /* 'dupx' */ 0x64757078,
|
||||
};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_11;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_11 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_11_H) */
|
|
@ -0,0 +1,73 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2014 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_2_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_2_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_2 = /* C679A35B-610C-4D09-B748-1D0478100FC0 */ {0xC6,0x79,0xA3,0x5B,0x61,0x0C,0x4D,0x09,0xB7,0x48,0x1D,0x04,0x78,0x10,0x0F,0xC0};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_2;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_2 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_2_H) */
|
|
@ -0,0 +1,76 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_4_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_4_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_4 = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
|
||||
|
||||
|
||||
//
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_4;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_4_H) */
|
|
@ -0,0 +1,73 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_5_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_5_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration_v10_5 = /* 67455668-0848-45DF-8D8E-350A77C9A028 */ {0x67,0x45,0x56,0x68,0x08,0x48,0x45,0xDF,0x8D,0x8E,0x35,0x0A,0x77,0xC9,0xA0,0x28};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkEncoderConfiguration_v10_5;
|
||||
|
||||
/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT GetDecoderConfigurationInfo (/* out */ void *buffer, /* in */ long bufferSize, /* out */ long *returnedSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderConfiguration_v10_5 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_5_H) */
|
|
@ -0,0 +1,75 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_9_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_9_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_9 = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
|
||||
|
||||
//
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_9;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_9 - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_9 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_9_H) */
|
|
@ -0,0 +1,223 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIDECKCONTROL_H
|
||||
#define BMD_DECKLINKAPIDECKCONTROL_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ { 0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF };
|
||||
BMD_CONST REFIID IID_IDeckLinkDeckControl = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ { 0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE };
|
||||
|
||||
/* Enum BMDDeckControlMode - DeckControl mode */
|
||||
|
||||
typedef uint32_t BMDDeckControlMode;
|
||||
enum _BMDDeckControlMode {
|
||||
bmdDeckControlNotOpened = /* 'ntop' */ 0x6E746F70,
|
||||
bmdDeckControlVTRControlMode = /* 'vtrc' */ 0x76747263,
|
||||
bmdDeckControlExportMode = /* 'expm' */ 0x6578706D,
|
||||
bmdDeckControlCaptureMode = /* 'capm' */ 0x6361706D
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlEvent - DeckControl event */
|
||||
|
||||
typedef uint32_t BMDDeckControlEvent;
|
||||
enum _BMDDeckControlEvent {
|
||||
bmdDeckControlAbortedEvent = /* 'abte' */ 0x61627465, // This event is triggered when a capture or edit-to-tape operation is aborted.
|
||||
|
||||
/* Export-To-Tape events */
|
||||
|
||||
bmdDeckControlPrepareForExportEvent = /* 'pfee' */ 0x70666565, // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback should be called at this point.
|
||||
bmdDeckControlExportCompleteEvent = /* 'exce' */ 0x65786365, // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
|
||||
|
||||
/* Capture events */
|
||||
|
||||
bmdDeckControlPrepareForCaptureEvent = /* 'pfce' */ 0x70666365, // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
|
||||
bmdDeckControlCaptureCompleteEvent = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlVTRControlState - VTR Control state */
|
||||
|
||||
typedef uint32_t BMDDeckControlVTRControlState;
|
||||
enum _BMDDeckControlVTRControlState {
|
||||
bmdDeckControlNotInVTRControlMode = /* 'nvcm' */ 0x6E76636D,
|
||||
bmdDeckControlVTRControlPlaying = /* 'vtrp' */ 0x76747270,
|
||||
bmdDeckControlVTRControlRecording = /* 'vtrr' */ 0x76747272,
|
||||
bmdDeckControlVTRControlStill = /* 'vtra' */ 0x76747261,
|
||||
bmdDeckControlVTRControlShuttleForward = /* 'vtsf' */ 0x76747366,
|
||||
bmdDeckControlVTRControlShuttleReverse = /* 'vtsr' */ 0x76747372,
|
||||
bmdDeckControlVTRControlJogForward = /* 'vtjf' */ 0x76746A66,
|
||||
bmdDeckControlVTRControlJogReverse = /* 'vtjr' */ 0x76746A72,
|
||||
bmdDeckControlVTRControlStopped = /* 'vtro' */ 0x7674726F
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlStatusFlags - Deck Control status flags */
|
||||
|
||||
typedef uint32_t BMDDeckControlStatusFlags;
|
||||
enum _BMDDeckControlStatusFlags {
|
||||
bmdDeckControlStatusDeckConnected = 1 << 0,
|
||||
bmdDeckControlStatusRemoteMode = 1 << 1,
|
||||
bmdDeckControlStatusRecordInhibited = 1 << 2,
|
||||
bmdDeckControlStatusCassetteOut = 1 << 3
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlExportModeOpsFlags - Export mode flags */
|
||||
|
||||
typedef uint32_t BMDDeckControlExportModeOpsFlags;
|
||||
enum _BMDDeckControlExportModeOpsFlags {
|
||||
bmdDeckControlExportModeInsertVideo = 1 << 0,
|
||||
bmdDeckControlExportModeInsertAudio1 = 1 << 1,
|
||||
bmdDeckControlExportModeInsertAudio2 = 1 << 2,
|
||||
bmdDeckControlExportModeInsertAudio3 = 1 << 3,
|
||||
bmdDeckControlExportModeInsertAudio4 = 1 << 4,
|
||||
bmdDeckControlExportModeInsertAudio5 = 1 << 5,
|
||||
bmdDeckControlExportModeInsertAudio6 = 1 << 6,
|
||||
bmdDeckControlExportModeInsertAudio7 = 1 << 7,
|
||||
bmdDeckControlExportModeInsertAudio8 = 1 << 8,
|
||||
bmdDeckControlExportModeInsertAudio9 = 1 << 9,
|
||||
bmdDeckControlExportModeInsertAudio10 = 1 << 10,
|
||||
bmdDeckControlExportModeInsertAudio11 = 1 << 11,
|
||||
bmdDeckControlExportModeInsertAudio12 = 1 << 12,
|
||||
bmdDeckControlExportModeInsertTimeCode = 1 << 13,
|
||||
bmdDeckControlExportModeInsertAssemble = 1 << 14,
|
||||
bmdDeckControlExportModeInsertPreview = 1 << 15,
|
||||
bmdDeckControlUseManualExport = 1 << 16
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlError - Deck Control error */
|
||||
|
||||
typedef uint32_t BMDDeckControlError;
|
||||
enum _BMDDeckControlError {
|
||||
bmdDeckControlNoError = /* 'noer' */ 0x6E6F6572,
|
||||
bmdDeckControlModeError = /* 'moer' */ 0x6D6F6572,
|
||||
bmdDeckControlMissedInPointError = /* 'mier' */ 0x6D696572,
|
||||
bmdDeckControlDeckTimeoutError = /* 'dter' */ 0x64746572,
|
||||
bmdDeckControlCommandFailedError = /* 'cfer' */ 0x63666572,
|
||||
bmdDeckControlDeviceAlreadyOpenedError = /* 'dalo' */ 0x64616C6F,
|
||||
bmdDeckControlFailedToOpenDeviceError = /* 'fder' */ 0x66646572,
|
||||
bmdDeckControlInLocalModeError = /* 'lmer' */ 0x6C6D6572,
|
||||
bmdDeckControlEndOfTapeError = /* 'eter' */ 0x65746572,
|
||||
bmdDeckControlUserAbortError = /* 'uaer' */ 0x75616572,
|
||||
bmdDeckControlNoTapeInDeckError = /* 'nter' */ 0x6E746572,
|
||||
bmdDeckControlNoVideoFromCardError = /* 'nvfc' */ 0x6E766663,
|
||||
bmdDeckControlNoCommunicationError = /* 'ncom' */ 0x6E636F6D,
|
||||
bmdDeckControlBufferTooSmallError = /* 'btsm' */ 0x6274736D,
|
||||
bmdDeckControlBadChecksumError = /* 'chks' */ 0x63686B73,
|
||||
bmdDeckControlUnknownError = /* 'uner' */ 0x756E6572
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDeckControlStatusCallback;
|
||||
class IDeckLinkDeckControl;
|
||||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
|
||||
virtual HRESULT VTRControlStateChanged (/* in */ BMDDeckControlVTRControlState newState, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlEventReceived (/* in */ BMDDeckControlEvent event, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlStatusChanged (/* in */ BMDDeckControlStatusFlags flags, /* in */ uint32_t mask) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControlStatusCallback () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDeckControl - Deck Control main interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Close (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode* mode, /* out */ BMDDeckControlVTRControlState* vtrControlState, /* out */ BMDDeckControlStatusFlags* flags) = 0;
|
||||
virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT SendCommand (/* in */ uint8_t* inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t* outBuffer, /* out */ uint32_t* outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Play (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Stop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Eject (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StepForward (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StepBack (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecodeString (/* out */ const char** currentTimeCode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode** currentTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD* currentTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
|
||||
virtual HRESULT GetPreroll (/* out */ uint32_t* prerollSeconds) = 0;
|
||||
virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
|
||||
virtual HRESULT GetExportOffset (/* out */ int32_t* exportOffsetFields) = 0;
|
||||
virtual HRESULT GetManualExportOffset (/* out */ int32_t* deckManualExportOffsetFields) = 0;
|
||||
virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
|
||||
virtual HRESULT GetCaptureOffset (/* out */ int32_t* captureOffsetFields) = 0;
|
||||
virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetDeviceID (/* out */ uint16_t* deviceId, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Abort (void) = 0;
|
||||
virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback* callback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControl () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIDECKCONTROL_H) */
|
|
@ -0,0 +1,79 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIDISCOVERY_H
|
||||
#define BMD_DECKLINKAPIDISCOVERY_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLink = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ { 0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91 };
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLink;
|
||||
|
||||
/* Interface IDeckLink - Represents a DeckLink device */
|
||||
|
||||
class BMD_PUBLIC IDeckLink : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ const char** modelName) = 0;
|
||||
virtual HRESULT GetDisplayName (/* out */ const char** displayName) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLink () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIDISCOVERY_H) */
|
|
@ -0,0 +1,188 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGL3ScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateOpenGL3ScreenPreviewHelperFunc gCreateOpenGL3PreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0004");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0003");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateOpenGL3PreviewFunc = (CreateOpenGL3ScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGL3ScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGL3PreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGL3ScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGL3PreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGL3PreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
|
@ -0,0 +1,175 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
#define fprintf(a,b,c) do{}while(0)
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0003");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0002");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)dlsym(libraryHandle, "CreateVideoFrameAncillaryPacketsInstance_0001");
|
||||
if (!gCreateVideoFrameAncillaryPacketsFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent_v10_11 (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
|
||||
#define fprintf(a,b,c) do{}while(0)
|
||||
|
||||
static void InitDeckLinkAPI(void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW | RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0002");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0001");
|
||||
if (!gCreateDeckLinkDiscoveryFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI(void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW | RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent(void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v7_6.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc_v7_6)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper_v7_6* (*CreateOpenGLScreenPreviewHelperFunc_v7_6)(void);
|
||||
typedef IDeckLinkVideoConversion_v7_6* (*CreateVideoConversionInstanceFunc_v7_6)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static CreateIteratorFunc_v7_6 gCreateIteratorFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc_v7_6 gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc_v7_6 gCreateVideoConversionFunc = NULL;
|
||||
|
||||
#define fprintf(a,b,c) do{}while(0)
|
||||
|
||||
static void InitDeckLinkAPI_v7_6 (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc_v7_6)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc_v7_6)dlsym(libraryHandle, "CreateVideoConversionInstance");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI_v7_6 (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc_v7_6)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI_v7_6);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2011 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
**/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "DeckLinkAPI_v8_0.h"
|
||||
|
||||
#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
|
||||
#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
|
||||
|
||||
typedef IDeckLinkIterator_v8_0* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
|
||||
|
||||
static bool gLoadedDeckLinkAPI = false;
|
||||
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
|
||||
#define fprintf(a,b,c) do{}while(0)
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
gLoadedDeckLinkAPI = true;
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0001");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
if (!gCreateAPIInformationFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
return;
|
||||
}
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
|
||||
if (!gCreateOpenGLPreviewFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent (void)
|
||||
{
|
||||
// If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
|
||||
return gLoadedDeckLinkAPI;
|
||||
}
|
||||
|
||||
IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
|
@ -0,0 +1,289 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIMODES_H
|
||||
#define BMD_DECKLINKAPIMODES_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ { 0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35 };
|
||||
BMD_CONST REFIID IID_IDeckLinkDisplayMode = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ { 0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78 };
|
||||
|
||||
/* Enum BMDDisplayMode - BMDDisplayMode enumerates the video modes supported. */
|
||||
|
||||
typedef uint32_t BMDDisplayMode;
|
||||
enum _BMDDisplayMode {
|
||||
|
||||
/* SD Modes */
|
||||
|
||||
bmdModeNTSC = /* 'ntsc' */ 0x6E747363,
|
||||
bmdModeNTSC2398 = /* 'nt23' */ 0x6E743233, // 3:2 pulldown
|
||||
bmdModePAL = /* 'pal ' */ 0x70616C20,
|
||||
bmdModeNTSCp = /* 'ntsp' */ 0x6E747370,
|
||||
bmdModePALp = /* 'palp' */ 0x70616C70,
|
||||
|
||||
/* HD 1080 Modes */
|
||||
|
||||
bmdModeHD1080p2398 = /* '23ps' */ 0x32337073,
|
||||
bmdModeHD1080p24 = /* '24ps' */ 0x32347073,
|
||||
bmdModeHD1080p25 = /* 'Hp25' */ 0x48703235,
|
||||
bmdModeHD1080p2997 = /* 'Hp29' */ 0x48703239,
|
||||
bmdModeHD1080p30 = /* 'Hp30' */ 0x48703330,
|
||||
bmdModeHD1080p4795 = /* 'Hp47' */ 0x48703437,
|
||||
bmdModeHD1080p48 = /* 'Hp48' */ 0x48703438,
|
||||
bmdModeHD1080p50 = /* 'Hp50' */ 0x48703530,
|
||||
bmdModeHD1080p5994 = /* 'Hp59' */ 0x48703539,
|
||||
bmdModeHD1080p6000 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080p9590 = /* 'Hp95' */ 0x48703935,
|
||||
bmdModeHD1080p96 = /* 'Hp96' */ 0x48703936,
|
||||
bmdModeHD1080p100 = /* 'Hp10' */ 0x48703130,
|
||||
bmdModeHD1080p11988 = /* 'Hp11' */ 0x48703131,
|
||||
bmdModeHD1080p120 = /* 'Hp12' */ 0x48703132,
|
||||
bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530,
|
||||
bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539,
|
||||
bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.
|
||||
|
||||
/* HD 720 Modes */
|
||||
|
||||
bmdModeHD720p50 = /* 'hp50' */ 0x68703530,
|
||||
bmdModeHD720p5994 = /* 'hp59' */ 0x68703539,
|
||||
bmdModeHD720p60 = /* 'hp60' */ 0x68703630,
|
||||
|
||||
/* 2K Modes */
|
||||
|
||||
bmdMode2k2398 = /* '2k23' */ 0x326B3233,
|
||||
bmdMode2k24 = /* '2k24' */ 0x326B3234,
|
||||
bmdMode2k25 = /* '2k25' */ 0x326B3235,
|
||||
|
||||
/* 2K DCI Modes */
|
||||
|
||||
bmdMode2kDCI2398 = /* '2d23' */ 0x32643233,
|
||||
bmdMode2kDCI24 = /* '2d24' */ 0x32643234,
|
||||
bmdMode2kDCI25 = /* '2d25' */ 0x32643235,
|
||||
bmdMode2kDCI2997 = /* '2d29' */ 0x32643239,
|
||||
bmdMode2kDCI30 = /* '2d30' */ 0x32643330,
|
||||
bmdMode2kDCI4795 = /* '2d47' */ 0x32643437,
|
||||
bmdMode2kDCI48 = /* '2d48' */ 0x32643438,
|
||||
bmdMode2kDCI50 = /* '2d50' */ 0x32643530,
|
||||
bmdMode2kDCI5994 = /* '2d59' */ 0x32643539,
|
||||
bmdMode2kDCI60 = /* '2d60' */ 0x32643630,
|
||||
bmdMode2kDCI9590 = /* '2d95' */ 0x32643935,
|
||||
bmdMode2kDCI96 = /* '2d96' */ 0x32643936,
|
||||
bmdMode2kDCI100 = /* '2d10' */ 0x32643130,
|
||||
bmdMode2kDCI11988 = /* '2d11' */ 0x32643131,
|
||||
bmdMode2kDCI120 = /* '2d12' */ 0x32643132,
|
||||
|
||||
/* 4K UHD Modes */
|
||||
|
||||
bmdMode4K2160p2398 = /* '4k23' */ 0x346B3233,
|
||||
bmdMode4K2160p24 = /* '4k24' */ 0x346B3234,
|
||||
bmdMode4K2160p25 = /* '4k25' */ 0x346B3235,
|
||||
bmdMode4K2160p2997 = /* '4k29' */ 0x346B3239,
|
||||
bmdMode4K2160p30 = /* '4k30' */ 0x346B3330,
|
||||
bmdMode4K2160p4795 = /* '4k47' */ 0x346B3437,
|
||||
bmdMode4K2160p48 = /* '4k48' */ 0x346B3438,
|
||||
bmdMode4K2160p50 = /* '4k50' */ 0x346B3530,
|
||||
bmdMode4K2160p5994 = /* '4k59' */ 0x346B3539,
|
||||
bmdMode4K2160p60 = /* '4k60' */ 0x346B3630,
|
||||
bmdMode4K2160p9590 = /* '4k95' */ 0x346B3935,
|
||||
bmdMode4K2160p96 = /* '4k96' */ 0x346B3936,
|
||||
bmdMode4K2160p100 = /* '4k10' */ 0x346B3130,
|
||||
bmdMode4K2160p11988 = /* '4k11' */ 0x346B3131,
|
||||
bmdMode4K2160p120 = /* '4k12' */ 0x346B3132,
|
||||
|
||||
/* 4K DCI Modes */
|
||||
|
||||
bmdMode4kDCI2398 = /* '4d23' */ 0x34643233,
|
||||
bmdMode4kDCI24 = /* '4d24' */ 0x34643234,
|
||||
bmdMode4kDCI25 = /* '4d25' */ 0x34643235,
|
||||
bmdMode4kDCI2997 = /* '4d29' */ 0x34643239,
|
||||
bmdMode4kDCI30 = /* '4d30' */ 0x34643330,
|
||||
bmdMode4kDCI4795 = /* '4d47' */ 0x34643437,
|
||||
bmdMode4kDCI48 = /* '4d48' */ 0x34643438,
|
||||
bmdMode4kDCI50 = /* '4d50' */ 0x34643530,
|
||||
bmdMode4kDCI5994 = /* '4d59' */ 0x34643539,
|
||||
bmdMode4kDCI60 = /* '4d60' */ 0x34643630,
|
||||
bmdMode4kDCI9590 = /* '4d95' */ 0x34643935,
|
||||
bmdMode4kDCI96 = /* '4d96' */ 0x34643936,
|
||||
bmdMode4kDCI100 = /* '4d10' */ 0x34643130,
|
||||
bmdMode4kDCI11988 = /* '4d11' */ 0x34643131,
|
||||
bmdMode4kDCI120 = /* '4d12' */ 0x34643132,
|
||||
|
||||
/* 8K UHD Modes */
|
||||
|
||||
bmdMode8K4320p2398 = /* '8k23' */ 0x386B3233,
|
||||
bmdMode8K4320p24 = /* '8k24' */ 0x386B3234,
|
||||
bmdMode8K4320p25 = /* '8k25' */ 0x386B3235,
|
||||
bmdMode8K4320p2997 = /* '8k29' */ 0x386B3239,
|
||||
bmdMode8K4320p30 = /* '8k30' */ 0x386B3330,
|
||||
bmdMode8K4320p4795 = /* '8k47' */ 0x386B3437,
|
||||
bmdMode8K4320p48 = /* '8k48' */ 0x386B3438,
|
||||
bmdMode8K4320p50 = /* '8k50' */ 0x386B3530,
|
||||
bmdMode8K4320p5994 = /* '8k59' */ 0x386B3539,
|
||||
bmdMode8K4320p60 = /* '8k60' */ 0x386B3630,
|
||||
|
||||
/* 8K DCI Modes */
|
||||
|
||||
bmdMode8kDCI2398 = /* '8d23' */ 0x38643233,
|
||||
bmdMode8kDCI24 = /* '8d24' */ 0x38643234,
|
||||
bmdMode8kDCI25 = /* '8d25' */ 0x38643235,
|
||||
bmdMode8kDCI2997 = /* '8d29' */ 0x38643239,
|
||||
bmdMode8kDCI30 = /* '8d30' */ 0x38643330,
|
||||
bmdMode8kDCI4795 = /* '8d47' */ 0x38643437,
|
||||
bmdMode8kDCI48 = /* '8d48' */ 0x38643438,
|
||||
bmdMode8kDCI50 = /* '8d50' */ 0x38643530,
|
||||
bmdMode8kDCI5994 = /* '8d59' */ 0x38643539,
|
||||
bmdMode8kDCI60 = /* '8d60' */ 0x38643630,
|
||||
|
||||
/* PC Modes */
|
||||
|
||||
bmdMode640x480p60 = /* 'vga6' */ 0x76676136,
|
||||
bmdMode800x600p60 = /* 'svg6' */ 0x73766736,
|
||||
bmdMode1440x900p50 = /* 'wxg5' */ 0x77786735,
|
||||
bmdMode1440x900p60 = /* 'wxg6' */ 0x77786736,
|
||||
bmdMode1440x1080p50 = /* 'sxg5' */ 0x73786735,
|
||||
bmdMode1440x1080p60 = /* 'sxg6' */ 0x73786736,
|
||||
bmdMode1600x1200p50 = /* 'uxg5' */ 0x75786735,
|
||||
bmdMode1600x1200p60 = /* 'uxg6' */ 0x75786736,
|
||||
bmdMode1920x1200p50 = /* 'wux5' */ 0x77757835,
|
||||
bmdMode1920x1200p60 = /* 'wux6' */ 0x77757836,
|
||||
bmdMode1920x1440p50 = /* '1945' */ 0x31393435,
|
||||
bmdMode1920x1440p60 = /* '1946' */ 0x31393436,
|
||||
bmdMode2560x1440p50 = /* 'wqh5' */ 0x77716835,
|
||||
bmdMode2560x1440p60 = /* 'wqh6' */ 0x77716836,
|
||||
bmdMode2560x1600p50 = /* 'wqx5' */ 0x77717835,
|
||||
bmdMode2560x1600p60 = /* 'wqx6' */ 0x77717836,
|
||||
|
||||
/* Special Modes */
|
||||
|
||||
bmdModeUnknown = /* 'iunk' */ 0x69756E6B
|
||||
};
|
||||
|
||||
/* Enum BMDFieldDominance - BMDFieldDominance enumerates settings applicable to video fields. */
|
||||
|
||||
typedef uint32_t BMDFieldDominance;
|
||||
enum _BMDFieldDominance {
|
||||
bmdUnknownFieldDominance = 0,
|
||||
bmdLowerFieldFirst = /* 'lowr' */ 0x6C6F7772,
|
||||
bmdUpperFieldFirst = /* 'uppr' */ 0x75707072,
|
||||
bmdProgressiveFrame = /* 'prog' */ 0x70726F67,
|
||||
bmdProgressiveSegmentedFrame = /* 'psf ' */ 0x70736620
|
||||
};
|
||||
|
||||
/* Enum BMDPixelFormat - Video pixel formats supported for output/input */
|
||||
|
||||
typedef uint32_t BMDPixelFormat;
|
||||
enum _BMDPixelFormat {
|
||||
bmdFormatUnspecified = 0,
|
||||
bmdFormat8BitYUV = /* '2vuy' */ 0x32767579,
|
||||
bmdFormat10BitYUV = /* 'v210' */ 0x76323130,
|
||||
bmdFormat8BitARGB = 32,
|
||||
bmdFormat8BitBGRA = /* 'BGRA' */ 0x42475241,
|
||||
bmdFormat10BitRGB = /* 'r210' */ 0x72323130, // Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10
|
||||
bmdFormat12BitRGB = /* 'R12B' */ 0x52313242, // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
|
||||
bmdFormat12BitRGBLE = /* 'R12L' */ 0x5231324C, // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
|
||||
bmdFormat10BitRGBXLE = /* 'R10l' */ 0x5231306C, // Little-endian 10-bit RGB with SMPTE video levels (64-940)
|
||||
bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062, // Big-endian 10-bit RGB with SMPTE video levels (64-940)
|
||||
bmdFormatH265 = /* 'hev1' */ 0x68657631, // High Efficiency Video Coding (HEVC/h.265)
|
||||
|
||||
/* AVID DNxHR */
|
||||
|
||||
bmdFormatDNxHR = /* 'AVdh' */ 0x41566468
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
|
||||
|
||||
typedef uint32_t BMDDisplayModeFlags;
|
||||
enum _BMDDisplayModeFlags {
|
||||
bmdDisplayModeSupports3D = 1 << 0,
|
||||
bmdDisplayModeColorspaceRec601 = 1 << 1,
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2,
|
||||
bmdDisplayModeColorspaceRec2020 = 1 << 3
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDisplayModeIterator;
|
||||
class IDeckLinkDisplayMode;
|
||||
|
||||
/* Interface IDeckLinkDisplayModeIterator - Enumerates over supported input/output display modes. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode** deckLinkDisplayMode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayModeIterator () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDisplayMode - Represents a display mode */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ const char** name) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual HRESULT GetFrameRate (/* out */ BMDTimeValue* frameDuration, /* out */ BMDTimeScale* timeScale) = 0;
|
||||
virtual BMDFieldDominance GetFieldDominance (void) = 0;
|
||||
virtual BMDDisplayModeFlags GetFlags (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayMode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIMODES_H) */
|
|
@ -0,0 +1,132 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPITYPES_H
|
||||
#define BMD_DECKLINKAPITYPES_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
typedef int64_t BMDTimeValue;
|
||||
typedef int64_t BMDTimeScale;
|
||||
typedef uint32_t BMDTimecodeBCD;
|
||||
typedef uint32_t BMDTimecodeUserBits;
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkTimecode = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ { 0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40 };
|
||||
|
||||
/* Enum BMDTimecodeFlags - Timecode flags */
|
||||
|
||||
typedef uint32_t BMDTimecodeFlags;
|
||||
enum _BMDTimecodeFlags {
|
||||
bmdTimecodeFlagDefault = 0,
|
||||
bmdTimecodeIsDropFrame = 1 << 0,
|
||||
bmdTimecodeFieldMark = 1 << 1,
|
||||
bmdTimecodeColorFrame = 1 << 2,
|
||||
bmdTimecodeEmbedRecordingTrigger = 1 << 3, // On SDI recording trigger utilises a user-bit.
|
||||
bmdTimecodeRecordingTriggered = 1 << 4
|
||||
};
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
||||
typedef uint32_t BMDVideoConnection;
|
||||
enum _BMDVideoConnection {
|
||||
bmdVideoConnectionUnspecified = 0,
|
||||
bmdVideoConnectionSDI = 1 << 0,
|
||||
bmdVideoConnectionHDMI = 1 << 1,
|
||||
bmdVideoConnectionOpticalSDI = 1 << 2,
|
||||
bmdVideoConnectionComponent = 1 << 3,
|
||||
bmdVideoConnectionComposite = 1 << 4,
|
||||
bmdVideoConnectionSVideo = 1 << 5
|
||||
};
|
||||
|
||||
/* Enum BMDAudioConnection - Audio connection types */
|
||||
|
||||
typedef uint32_t BMDAudioConnection;
|
||||
enum _BMDAudioConnection {
|
||||
bmdAudioConnectionEmbedded = 1 << 0,
|
||||
bmdAudioConnectionAESEBU = 1 << 1,
|
||||
bmdAudioConnectionAnalog = 1 << 2,
|
||||
bmdAudioConnectionAnalogXLR = 1 << 3,
|
||||
bmdAudioConnectionAnalogRCA = 1 << 4,
|
||||
bmdAudioConnectionMicrophone = 1 << 5,
|
||||
bmdAudioConnectionHeadphones = 1 << 6
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlConnection - Deck control connections */
|
||||
|
||||
typedef uint32_t BMDDeckControlConnection;
|
||||
enum _BMDDeckControlConnection {
|
||||
bmdDeckControlConnectionRS422Remote1 = 1 << 0,
|
||||
bmdDeckControlConnectionRS422Remote2 = 1 << 1
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkTimecode;
|
||||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkTimecode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
virtual HRESULT GetComponents (/* out */ uint8_t* hours, /* out */ uint8_t* minutes, /* out */ uint8_t* seconds, /* out */ uint8_t* frames) = 0;
|
||||
virtual HRESULT GetString (/* out */ const char** timecode) = 0;
|
||||
virtual BMDTimecodeFlags GetFlags (void) = 0;
|
||||
virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits* userBits) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkTimecode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPITYPES_H) */
|
|
@ -0,0 +1,50 @@
|
|||
/* -LICENSE-START-
|
||||
* ** Copyright (c) 2014 Blackmagic Design
|
||||
* **
|
||||
* ** Permission is hereby granted, free of charge, to any person or organization
|
||||
* ** obtaining a copy of the software and accompanying documentation (the
|
||||
* ** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
* ** and transmit the Software, and to prepare derivative works of the Software,
|
||||
* ** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
* ** accordance with:
|
||||
* **
|
||||
* ** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
* ** Agreement for the Software Development Kit (“EULA”) available at
|
||||
* ** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
* **
|
||||
* ** (2) if the Software is obtained from any third party, such licensing terms
|
||||
* ** as notified by that third party,
|
||||
* **
|
||||
* ** and all subject to the following:
|
||||
* **
|
||||
* ** (3) the copyright notices in the Software and this entire statement,
|
||||
* ** including the above license grant, this restriction and the following
|
||||
* ** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
* ** part, and all derivative works of the Software, unless such copies or
|
||||
* ** derivative works are solely in the form of machine-executable object code
|
||||
* ** generated by a source language processor.
|
||||
* **
|
||||
* ** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* ** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* ** DEALINGS IN THE SOFTWARE.
|
||||
* **
|
||||
* ** A copy of the Software is available free of charge at
|
||||
* ** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
* **
|
||||
* ** -LICENSE-END-
|
||||
* */
|
||||
|
||||
/* DeckLinkAPIVersion.h */
|
||||
|
||||
#ifndef __DeckLink_API_Version_h__
|
||||
#define __DeckLink_API_Version_h__
|
||||
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x0c040200
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "12.4.2"
|
||||
|
||||
#endif // __DeckLink_API_Version_h__
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderInput_v10_11 = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
|
||||
|
||||
/* Interface IDeckLinkEncoderInput_v10_11 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkEncoderInput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
|
||||
virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderInput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H) */
|
|
@ -0,0 +1,90 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v10_11 = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
|
||||
|
||||
/* Interface IDeckLinkInput_v10_11 - DeckLink input interface. */
|
||||
|
||||
class IDeckLinkInput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1 *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v10_11_H) */
|
|
@ -0,0 +1,89 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v11_4 = /* 2A88CF76-F494-4216-A7EF-DC74EEB83882 */ { 0x2A,0x88,0xCF,0x76,0xF4,0x94,0x42,0x16,0xA7,0xEF,0xDC,0x74,0xEE,0xB8,0x38,0x82 };
|
||||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v11_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v11_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_4_H) */
|
|
@ -0,0 +1,102 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkInputCallback_v11_5_1 = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ { 0xDD, 0x04, 0xE5, 0xEC, 0x74, 0x15, 0x42, 0xAB, 0xAE, 0x4A, 0xE8, 0x0C, 0x4D, 0xFC, 0x04, 0x4A };
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v11_5_1 = /* 9434C6E4-B15D-4B1C-979E-661E3DDCB4B9 */ { 0x94, 0x34, 0xC6, 0xE4, 0xB1, 0x5D, 0x4B, 0x1C, 0x97, 0x9E, 0x66, 0x1E, 0x3D, 0xDC, 0xB4, 0xB9 };
|
||||
|
||||
/* Interface IDeckLinkInputCallback_v11_5_1 - Frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v11_5_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v11_5_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkInput_v11_5_1 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v11_5_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v11_5_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H) */
|
|
@ -0,0 +1,107 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v10_11 = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
|
||||
|
||||
/* Interface IDeckLinkOutput_v10_11 - DeckLink output interface. */
|
||||
|
||||
class IDeckLinkOutput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H) */
|
|
@ -0,0 +1,100 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v11_4 = /* 065A0F6C-C508-4D0D-B919-F5EB0EBFC96B */ { 0x06,0x5A,0x0F,0x6C,0xC5,0x08,0x4D,0x0D,0xB9,0x19,0xF5,0xEB,0x0E,0xBF,0xC9,0x6B };
|
||||
|
||||
/* Interface IDeckLinkOutput_v11_4 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v11_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v11_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H) */
|
|
@ -0,0 +1,134 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2018 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_11_H
|
||||
#define BMD_DECKLINKAPI_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkAttributes_v10_11 = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
|
||||
BMD_CONST REFIID IID_IDeckLinkNotification_v10_11 = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
|
||||
|
||||
/* Enum BMDDisplayModeSupport_v10_11 - Output mode supported flags */
|
||||
|
||||
typedef uint32_t BMDDisplayModeSupport_v10_11;
|
||||
enum _BMDDisplayModeSupport_v10_11 {
|
||||
bmdDisplayModeNotSupported_v10_11 = 0,
|
||||
bmdDisplayModeSupported_v10_11,
|
||||
bmdDisplayModeSupportedWithConversion_v10_11
|
||||
};
|
||||
|
||||
/* Enum BMDDuplexMode_v10_11 - Duplex for configurable ports */
|
||||
|
||||
typedef uint32_t BMDDuplexMode_v10_11;
|
||||
enum _BMDDuplexMode_v10_11 {
|
||||
bmdDuplexModeFull_v10_11 = /* 'fdup' */ 0x66647570,
|
||||
bmdDuplexModeHalf_v10_11 = /* 'hdup' */ 0x68647570
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID_v10_11 - DeckLink Attribute ID */
|
||||
|
||||
enum _BMDDeckLinkAttributeID_v10_11 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration_v10_11 = 'dupx',
|
||||
BMDDeckLinkSupportsHDKeying_v10_11 = 'keyh',
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkPairedDevicePersistentID_v10_11 = 'ppid',
|
||||
BMDDeckLinkSupportsFullDuplex_v10_11 = 'fdup',
|
||||
};
|
||||
|
||||
enum _BMDDeckLinkStatusID_v10_11 {
|
||||
bmdDeckLinkStatusDuplexMode_v10_11 = 'dupx',
|
||||
};
|
||||
|
||||
typedef uint32_t BMDDuplexStatus_v10_11;
|
||||
enum _BMDDuplexStatus_v10_11 {
|
||||
bmdDuplexFullDuplex_v10_11 = 'fdup',
|
||||
bmdDuplexHalfDuplex_v10_11 = 'hdup',
|
||||
bmdDuplexSimplex_v10_11 = 'splx',
|
||||
bmdDuplexInactive_v10_11 = 'inac',
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkAttributes_v10_11 - DeckLink Attribute interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAttributes_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ const char **value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAttributes_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkNotification_v10_11 - DeckLink Notification interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkNotification_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
BMD_PUBLIC IDeckLinkIterator* CreateDeckLinkIteratorInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void);
|
||||
BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
|
||||
}
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_11_H) */
|
|
@ -0,0 +1,68 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2014 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_2_H
|
||||
#define BMD_DECKLINKAPI_v10_2_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_2;
|
||||
enum _BMDDeckLinkConfigurationID_v10_2 {
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = '3gbs',
|
||||
};
|
||||
|
||||
/* Enum BMDAudioConnection_v10_2 - Audio connection types */
|
||||
|
||||
typedef uint32_t BMDAudioConnection_v10_2;
|
||||
enum _BMDAudioConnection_v10_2 {
|
||||
bmdAudioConnectionEmbedded_v10_2 = /* 'embd' */ 0x656D6264,
|
||||
bmdAudioConnectionAESEBU_v10_2 = /* 'aes ' */ 0x61657320,
|
||||
bmdAudioConnectionAnalog_v10_2 = /* 'anlg' */ 0x616E6C67,
|
||||
bmdAudioConnectionAnalogXLR_v10_2 = /* 'axlr' */ 0x61786C72,
|
||||
bmdAudioConnectionAnalogRCA_v10_2 = /* 'arca' */ 0x61726361
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_2_H) */
|
|
@ -0,0 +1,58 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_4_H
|
||||
#define BMD_DECKLINKAPI_v10_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_4;
|
||||
enum _BMDDeckLinkConfigurationID_v10_4 {
|
||||
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkConfigSingleLinkVideoOutput_v10_4 = /* 'sglo' */ 0x73676C6F,
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_4_H) */
|
|
@ -0,0 +1,59 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_5_H
|
||||
#define BMD_DECKLINKAPI_v10_5_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_v10_5;
|
||||
enum _BMDDeckLinkAttributeID_v10_5 {
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkDeviceBusyState_v10_5 = /* 'dbst' */ 0x64627374,
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_5_H) */
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_6_H
|
||||
#define BMD_DECKLINKAPI_v10_6_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_c10_6;
|
||||
enum _BMDDeckLinkAttributeID_v10_6 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
BMDDeckLinkSupportsDesktopDisplay_v10_6 = /* 'extd' */ 0x65787464,
|
||||
};
|
||||
|
||||
typedef uint32_t BMDIdleVideoOutputOperation_v10_6;
|
||||
enum _BMDIdleVideoOutputOperation_v10_6 {
|
||||
bmdIdleVideoOutputDesktop_v10_6 = /* 'desk' */ 0x6465736B
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_6_H) */
|
|
@ -0,0 +1,58 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_9_H
|
||||
#define BMD_DECKLINKAPI_v10_9_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_9;
|
||||
enum _BMDDeckLinkConfigurationID_v10_9 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
bmdDeckLinkConfig1080pNotPsF_v10_9 = 'fpro',
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_9_H) */
|
|
@ -0,0 +1,113 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v11_5_H
|
||||
#define BMD_DECKLINKAPI_v11_5_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions_v11_5 = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
|
||||
|
||||
/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkFrameMetadataID_v11_5;
|
||||
enum _BMDDeckLinkFrameMetadataID_v11_5 {
|
||||
bmdDeckLinkFrameMetadataCintelFilmType_v11_5 = /* 'cfty' */ 0x63667479, // Current film type
|
||||
bmdDeckLinkFrameMetadataCintelFilmGauge_v11_5 = /* 'cfga' */ 0x63666761, // Current film gauge
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeLow_v11_5 = /* 'ckkl' */ 0x636B6B6C, // Raw keykode value - low 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeHigh_v11_5 = /* 'ckkh' */ 0x636B6B68, // Raw keykode value - high 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelTile1Size_v11_5 = /* 'ct1s' */ 0x63743173, // Size in bytes of compressed raw tile 1
|
||||
bmdDeckLinkFrameMetadataCintelTile2Size_v11_5 = /* 'ct2s' */ 0x63743273, // Size in bytes of compressed raw tile 2
|
||||
bmdDeckLinkFrameMetadataCintelTile3Size_v11_5 = /* 'ct3s' */ 0x63743373, // Size in bytes of compressed raw tile 3
|
||||
bmdDeckLinkFrameMetadataCintelTile4Size_v11_5 = /* 'ct4s' */ 0x63743473, // Size in bytes of compressed raw tile 4
|
||||
bmdDeckLinkFrameMetadataCintelImageWidth_v11_5 = /* 'IWPx' */ 0x49575078, // Width in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelImageHeight_v11_5 = /* 'IHPx' */ 0x49485078, // Height in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed_v11_5 = /* 'mrir' */ 0x6D726972, // Red in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed_v11_5 = /* 'mgir' */ 0x6D676972, // Green in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed_v11_5 = /* 'mbir' */ 0x6D626972, // Blue in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen_v11_5 = /* 'mrig' */ 0x6D726967, // Red in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen_v11_5 = /* 'mgig' */ 0x6D676967, // Green in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen_v11_5 = /* 'mbig' */ 0x6D626967, // Blue in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue_v11_5 = /* 'mrib' */ 0x6D726962, // Red in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue_v11_5 = /* 'mgib' */ 0x6D676962, // Green in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue_v11_5 = /* 'mbib' */ 0x6D626962, // Blue in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed_v11_5 = /* 'mlrr' */ 0x6D6C7272, // Red in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed_v11_5 = /* 'mlgr' */ 0x6D6C6772, // Green in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed_v11_5 = /* 'mlbr' */ 0x6D6C6272, // Blue in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen_v11_5 = /* 'mlrg' */ 0x6D6C7267, // Red in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen_v11_5 = /* 'mlgg' */ 0x6D6C6767, // Green in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen_v11_5 = /* 'mlbg' */ 0x6D6C6267, // Blue in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue_v11_5 = /* 'mlrb' */ 0x6D6C7262, // Red in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue_v11_5 = /* 'mlgb' */ 0x6D6C6762, // Green in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue_v11_5 = /* 'mlbb' */ 0x6D6C6262, // Blue in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelFilmFrameRate_v11_5 = /* 'cffr' */ 0x63666672, // Film frame rate
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal_v11_5 = /* 'otah' */ 0x6F746168, // Horizontal offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical_v11_5 = /* 'otav' */ 0x6F746176, // Vertical offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelGainRed_v11_5 = /* 'LfRd' */ 0x4C665264, // Red gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainGreen_v11_5 = /* 'LfGr' */ 0x4C664772, // Green gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainBlue_v11_5 = /* 'LfBl' */ 0x4C66426C, // Blue gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelLiftRed_v11_5 = /* 'GnRd' */ 0x476E5264, // Red lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftGreen_v11_5 = /* 'GnGr' */ 0x476E4772, // Green lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftBlue_v11_5 = /* 'GnBl' */ 0x476E426C, // Blue lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainRed_v11_5 = /* 'HGRd' */ 0x48475264, // Red gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainGreen_v11_5 = /* 'HGGr' */ 0x48474772, // Green gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainBlue_v11_5 = /* 'HGBl' */ 0x4847426C, // Blue gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintel16mmCropRequired_v11_5 = /* 'c16c' */ 0x63313663, // The image should be cropped to 16mm size
|
||||
bmdDeckLinkFrameMetadataCintelInversionRequired_v11_5 = /* 'cinv' */ 0x63696E76, // The image should be colour inverted
|
||||
bmdDeckLinkFrameMetadataCintelFlipRequired_v11_5 = /* 'cflr' */ 0x63666C72, // The image should be flipped horizontally
|
||||
bmdDeckLinkFrameMetadataCintelFocusAssistEnabled_v11_5 = /* 'cfae' */ 0x63666165, // Focus Assist is currently enabled
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeIsInterpolated_v11_5 = /* 'kkii' */ 0x6B6B6969 // The keykode for this frame is interpolated from nearby keykodes
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions_v11_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ double *value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ const char **value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrameMetadataExtensions_v11_5 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v11_5_H) */
|
|
@ -0,0 +1,57 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v11_5_1_H
|
||||
#define BMD_DECKLINKAPI_v11_5_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkStatusID_v11_5_1;
|
||||
enum _BMDDeckLinkStatusID_v11_5_1 {
|
||||
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkStatusDetectedVideoInputFlags_v11_5_1 = /* 'dvif' */ 0x64766966,
|
||||
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v11_5_1_H) */
|
|
@ -0,0 +1,212 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPI_v7_1.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_1_h__
|
||||
#define __DeckLink_API_v7_1_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// "B28131B6-59AC-4857-B5AC-CD75D5883E2F"
|
||||
#define IID_IDeckLinkDisplayModeIterator_v7_1 (REFIID){0xB2,0x81,0x31,0xB6,0x59,0xAC,0x48,0x57,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F}
|
||||
|
||||
// "AF0CD6D5-8376-435E-8433-54F9DD530AC3"
|
||||
#define IID_IDeckLinkDisplayMode_v7_1 (REFIID){0xAF,0x0C,0xD6,0xD5,0x83,0x76,0x43,0x5E,0x84,0x33,0x54,0xF9,0xDD,0x53,0x0A,0xC3}
|
||||
|
||||
// "EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9"
|
||||
#define IID_IDeckLinkVideoOutputCallback_v7_1 (REFIID){0xEB,0xD0,0x1A,0xFA,0xE4,0xB0,0x49,0xC6,0xA0,0x1D,0xED,0xB9,0xD1,0xB5,0x5F,0xD9}
|
||||
|
||||
// "7F94F328-5ED4-4E9F-9729-76A86BDC99CC"
|
||||
#define IID_IDeckLinkInputCallback_v7_1 (REFIID){0x7F,0x94,0xF3,0x28,0x5E,0xD4,0x4E,0x9F,0x97,0x29,0x76,0xA8,0x6B,0xDC,0x99,0xCC}
|
||||
|
||||
// "AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5"
|
||||
#define IID_IDeckLinkOutput_v7_1 (REFIID){0xAE,0x5B,0x3E,0x9B,0x4E,0x1E,0x45,0x35,0xB6,0xE8,0x48,0x0F,0xF5,0x2F,0x6C,0xE5}
|
||||
|
||||
// "2B54EDEF-5B32-429F-BA11-BB990596EACD"
|
||||
#define IID_IDeckLinkInput_v7_1 (REFIID){0x2B,0x54,0xED,0xEF,0x5B,0x32,0x42,0x9F,0xBA,0x11,0xBB,0x99,0x05,0x96,0xEA,0xCD}
|
||||
|
||||
// "333F3A10-8C2D-43CF-B79D-46560FEEA1CE"
|
||||
#define IID_IDeckLinkVideoFrame_v7_1 (REFIID){0x33,0x3F,0x3A,0x10,0x8C,0x2D,0x43,0xCF,0xB7,0x9D,0x46,0x56,0x0F,0xEE,0xA1,0xCE}
|
||||
|
||||
// "C8B41D95-8848-40EE-9B37-6E3417FB114B"
|
||||
#define IID_IDeckLinkVideoInputFrame_v7_1 (REFIID){0xC8,0xB4,0x1D,0x95,0x88,0x48,0x40,0xEE,0x9B,0x37,0x6E,0x34,0x17,0xFB,0x11,0x4B}
|
||||
|
||||
// "C86DE4F6-A29F-42E3-AB3A-1363E29F0788"
|
||||
#define IID_IDeckLinkAudioInputPacket_v7_1 (REFIID){0xC8,0x6D,0xE4,0xF6,0xA2,0x9F,0x42,0xE3,0xAB,0x3A,0x13,0x63,0xE2,0x9F,0x07,0x88}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
class IDeckLinkDisplayModeIterator_v7_1;
|
||||
class IDeckLinkDisplayMode_v7_1;
|
||||
class IDeckLinkVideoFrame_v7_1;
|
||||
class IDeckLinkVideoInputFrame_v7_1;
|
||||
class IDeckLinkAudioInputPacket_v7_1;
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE Next (IDeckLinkDisplayMode_v7_1* *deckLinkDisplayMode) = 0;
|
||||
};
|
||||
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE GetName (const char **name) = 0;
|
||||
virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetWidth () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetHeight () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFrameRate (BMDTimeValue *frameDuration, BMDTimeScale *timeScale) = 0;
|
||||
};
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted (IDeckLinkVideoFrame_v7_1* completedFrame, BMDOutputFrameCompletionResult result) = 0;
|
||||
};
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived (IDeckLinkVideoInputFrame_v7_1* videoFrame, IDeckLinkAudioInputPacket_v7_1* audioPacket) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkOutput_v7_1. Created by QueryInterface from IDeckLink.
|
||||
class BMD_PUBLIC IDeckLinkOutput_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
// Display mode predicates
|
||||
virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1* *iterator) = 0;
|
||||
|
||||
|
||||
// Video output
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput (BMDDisplayMode displayMode) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput () = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator (IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateVideoFrameFromBuffer (void* buffer, int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync (IDeckLinkVideoFrame_v7_1* theFrame) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame (IDeckLinkVideoFrame_v7_1* theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback (IDeckLinkVideoOutputCallback_v7_1* theCallback) = 0;
|
||||
|
||||
|
||||
// Audio output
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput () = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples (void* buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples () = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetAudioCallback (IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
|
||||
// Output control
|
||||
virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkInput_v7_1. Created by QueryInterface from IDeckLink.
|
||||
class BMD_PUBLIC IDeckLinkInput_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;
|
||||
|
||||
// Video input
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableVideoInput () = 0;
|
||||
|
||||
// Audio input
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableAudioInput () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE ReadAudioSamples (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesRead, BMDTimeValue *audioPacketTime, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
|
||||
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE StartStreams () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE StopStreams () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE PauseStreams () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE SetCallback (IDeckLinkInputCallback_v7_1* theCallback) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkVideoFrame_v7_1. Created by IDeckLinkOutput::CreateVideoFrame.
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long STDMETHODCALLTYPE GetWidth () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetHeight () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetRowBytes () = 0;
|
||||
virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat () = 0;
|
||||
virtual BMDFrameFlags STDMETHODCALLTYPE GetFlags () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkVideoInputFrame_v7_1. Provided by the IDeckLinkInput_v7_1 frame arrival callback.
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame_v7_1 : public IDeckLinkVideoFrame_v7_1
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFrameTime (BMDTimeValue *frameTime, BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkAudioInputPacket_v7_1. Provided by the IDeckLinkInput_v7_1 callback.
|
||||
class BMD_PUBLIC IDeckLinkAudioInputPacket_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long STDMETHODCALLTYPE GetSampleCount () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetAudioPacketTime (BMDTimeValue *packetTime, BMDTimeScale timeScale) = 0;
|
||||
};
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
|
||||
#endif // __DeckLink_API_v7_1_h__
|
||||
|
|
@ -0,0 +1,187 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/* DeckLinkAPI_v7_3.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_3_h__
|
||||
#define __DeckLink_API_v7_3_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v7_6.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
/* Interface ID Declarations */
|
||||
|
||||
#define IID_IDeckLinkInputCallback_v7_3 /* FD6F311D-4D00-444B-9ED4-1F25B5730AD0 */ (REFIID){0xFD,0x6F,0x31,0x1D,0x4D,0x00,0x44,0x4B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0}
|
||||
#define IID_IDeckLinkOutput_v7_3 /* 271C65E3-C323-4344-A30F-D908BCB20AA3 */ (REFIID){0x27,0x1C,0x65,0xE3,0xC3,0x23,0x43,0x44,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3}
|
||||
#define IID_IDeckLinkInput_v7_3 /* 4973F012-9925-458C-871C-18774CDBBECB */ (REFIID){0x49,0x73,0xF0,0x12,0x99,0x25,0x45,0x8C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB}
|
||||
#define IID_IDeckLinkVideoInputFrame_v7_3 /* CF317790-2894-11DE-8C30-0800200C9A66 */ (REFIID){0xCF,0x31,0x77,0x90,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66}
|
||||
|
||||
/* End Interface ID Declarations */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Forward Declarations */
|
||||
|
||||
class IDeckLinkVideoInputFrame_v7_3;
|
||||
|
||||
/* End Forward Declarations */
|
||||
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (BMDDisplayMode displayMode, BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount, BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkOutput */
|
||||
|
||||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_3 *videoFrame, /* in */ IDeckLinkAudioInputPacket *audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkInputCallback */
|
||||
|
||||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_3 *theCallback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkInput */
|
||||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoInputFrame_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkVideoInputFrame */
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // __DeckLink_API_v7_3_h__
|
|
@ -0,0 +1,418 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/* DeckLinkAPI_v7_6.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_6_h__
|
||||
#define __DeckLink_API_v7_6_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLinkVideoOutputCallback_v7_6 /* E763A626-4A3C-49D1-BF13-E7AD3692AE52 */ (REFIID){0xE7,0x63,0xA6,0x26,0x4A,0x3C,0x49,0xD1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52}
|
||||
#define IID_IDeckLinkInputCallback_v7_6 /* 31D28EE7-88B6-4CB1-897A-CDBF79A26414 */ (REFIID){0x31,0xD2,0x8E,0xE7,0x88,0xB6,0x4C,0xB1,0x89,0x7A,0xCD,0xBF,0x79,0xA2,0x64,0x14}
|
||||
#define IID_IDeckLinkDisplayModeIterator_v7_6 /* 455D741F-1779-4800-86F5-0B5D13D79751 */ (REFIID){0x45,0x5D,0x74,0x1F,0x17,0x79,0x48,0x00,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51}
|
||||
#define IID_IDeckLinkDisplayMode_v7_6 /* 87451E84-2B7E-439E-A629-4393EA4A8550 */ (REFIID){0x87,0x45,0x1E,0x84,0x2B,0x7E,0x43,0x9E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50}
|
||||
#define IID_IDeckLinkOutput_v7_6 /* 29228142-EB8C-4141-A621-F74026450955 */ (REFIID){0x29,0x22,0x81,0x42,0xEB,0x8C,0x41,0x41,0xA6,0x21,0xF7,0x40,0x26,0x45,0x09,0x55}
|
||||
#define IID_IDeckLinkInput_v7_6 /* 300C135A-9F43-48E2-9906-6D7911D93CF1 */ (REFIID){0x30,0x0C,0x13,0x5A,0x9F,0x43,0x48,0xE2,0x99,0x06,0x6D,0x79,0x11,0xD9,0x3C,0xF1}
|
||||
#define IID_IDeckLinkTimecode_v7_6 /* EFB9BCA6-A521-44F7-BD69-2332F24D9EE6 */ (REFIID){0xEF,0xB9,0xBC,0xA6,0xA5,0x21,0x44,0xF7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6}
|
||||
#define IID_IDeckLinkVideoFrame_v7_6 /* A8D8238E-6B18-4196-99E1-5AF717B83D32 */ (REFIID){0xA8,0xD8,0x23,0x8E,0x6B,0x18,0x41,0x96,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32}
|
||||
#define IID_IDeckLinkMutableVideoFrame_v7_6 /* 46FCEE00-B4E6-43D0-91C0-023A7FCEB34F */ (REFIID){0x46,0xFC,0xEE,0x00,0xB4,0xE6,0x43,0xD0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F}
|
||||
#define IID_IDeckLinkVideoInputFrame_v7_6 /* 9A74FA41-AE9F-47AC-8CF4-01F42DD59965 */ (REFIID){0x9A,0x74,0xFA,0x41,0xAE,0x9F,0x47,0xAC,0x8C,0xF4,0x01,0xF4,0x2D,0xD5,0x99,0x65}
|
||||
#define IID_IDeckLinkScreenPreviewCallback_v7_6 /* 373F499D-4B4D-4518-AD22-6354E5A5825E */ (REFIID){0x37,0x3F,0x49,0x9D,0x4B,0x4D,0x45,0x18,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E}
|
||||
#define IID_IDeckLinkGLScreenPreviewHelper_v7_6 /* BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA */ (REFIID){0xBA,0x57,0x5C,0xD9,0xA1,0x5E,0x49,0x7B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA}
|
||||
#define IID_IDeckLinkVideoConversion_v7_6 /* 3EB504C9-F97D-40FE-A158-D407D48CB53B */ (REFIID){0x3E,0xB5,0x04,0xC9,0xF9,0x7D,0x40,0xFE,0xA1,0x58,0xD4,0x07,0xD4,0x8C,0xB5,0x3B}
|
||||
#define IID_IDeckLinkConfiguration_v7_6 /* B8EAD569-B764-47F0-A73F-AE40DF6CBF10 */ (REFIID){0xB8,0xEA,0xD5,0x69,0xB7,0x64,0x47,0xF0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10}
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
||||
typedef uint32_t BMDVideoConnection_v7_6;
|
||||
enum _BMDVideoConnection_v7_6 {
|
||||
bmdVideoConnectionSDI_v7_6 = 'sdi ',
|
||||
bmdVideoConnectionHDMI_v7_6 = 'hdmi',
|
||||
bmdVideoConnectionOpticalSDI_v7_6 = 'opti',
|
||||
bmdVideoConnectionComponent_v7_6 = 'cpnt',
|
||||
bmdVideoConnectionComposite_v7_6 = 'cmst',
|
||||
bmdVideoConnectionSVideo_v7_6 = 'svid'
|
||||
};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkVideoOutputCallback_v7_6;
|
||||
class IDeckLinkInputCallback_v7_6;
|
||||
class IDeckLinkDisplayModeIterator_v7_6;
|
||||
class IDeckLinkDisplayMode_v7_6;
|
||||
class IDeckLinkOutput_v7_6;
|
||||
class IDeckLinkInput_v7_6;
|
||||
class IDeckLinkTimecode_v7_6;
|
||||
class IDeckLinkVideoFrame_v7_6;
|
||||
class IDeckLinkMutableVideoFrame_v7_6;
|
||||
class IDeckLinkVideoInputFrame_v7_6;
|
||||
class IDeckLinkScreenPreviewCallback_v7_6;
|
||||
class IDeckLinkGLScreenPreviewHelper_v7_6;
|
||||
class IDeckLinkVideoConversion_v7_6;
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame_v7_6 *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
|
||||
virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoOutputCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_6* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode_v7_6 **deckLinkDisplayMode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayModeIterator_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkDisplayMode - represents a display mode */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ const char **name) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
|
||||
virtual BMDFieldDominance GetFieldDominance (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayMode_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v7_6 *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkInput_v7_6 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_6 *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkTimecode_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
|
||||
virtual HRESULT GetString (/* out */ const char **timecode) = 0;
|
||||
virtual BMDTimecodeFlags GetFlags (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkTimecode_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual long GetRowBytes (void) = 0;
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
virtual BMDFrameFlags GetFlags (void) = 0;
|
||||
virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
|
||||
|
||||
virtual HRESULT GetTimecode (BMDTimecodeFormat format, /* out */ IDeckLinkTimecode_v7_6 **timecode) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrame_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkMutableVideoFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlags (BMDFrameFlags newFlags) = 0;
|
||||
|
||||
virtual HRESULT SetTimecode (BMDTimecodeFormat format, /* in */ IDeckLinkTimecode_v7_6 *timecode) = 0;
|
||||
virtual HRESULT SetTimecodeFromComponents (BMDTimecodeFormat format, uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t frames, BMDTimecodeFlags flags) = 0;
|
||||
virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkMutableVideoFrame_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT GetHardwareReferenceTimestamp (BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoInputFrame_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkScreenPreviewCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkScreenPreviewCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
/* Methods must be called with OpenGL context set */
|
||||
|
||||
virtual HRESULT InitializeGL (void) = 0;
|
||||
virtual HRESULT PaintGL (void) = 0;
|
||||
virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkGLScreenPreviewHelper_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoConversion_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame_v7_6* srcFrame, /* in */ IDeckLinkVideoFrame_v7_6* dstFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoConversion_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetConfigurationValidator (/* out */ IDeckLinkConfiguration_v7_6 **configObject) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
/* Video Output Configuration */
|
||||
|
||||
virtual HRESULT SetVideoOutputFormat (/* in */ BMDVideoConnection_v7_6 videoOutputConnection) = 0;
|
||||
virtual HRESULT IsVideoOutputActive (/* in */ BMDVideoConnection_v7_6 videoOutputConnection, /* out */ bool *active) = 0;
|
||||
|
||||
virtual HRESULT SetAnalogVideoOutputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
|
||||
virtual HRESULT GetAnalogVideoOutputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
|
||||
|
||||
virtual HRESULT EnableFieldFlickerRemovalWhenPaused (/* in */ bool enable) = 0;
|
||||
virtual HRESULT IsEnabledFieldFlickerRemovalWhenPaused (/* out */ bool *enabled) = 0;
|
||||
|
||||
virtual HRESULT Set444And3GBpsVideoOutput (/* in */ bool enable444VideoOutput, /* in */ bool enable3GbsOutput) = 0;
|
||||
virtual HRESULT Get444And3GBpsVideoOutput (/* out */ bool *is444VideoOutputEnabled, /* out */ bool *threeGbsOutputEnabled) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputConversionMode (/* in */ BMDVideoOutputConversionMode conversionMode) = 0;
|
||||
virtual HRESULT GetVideoOutputConversionMode (/* out */ BMDVideoOutputConversionMode *conversionMode) = 0;
|
||||
|
||||
virtual HRESULT Set_HD1080p24_to_HD1080i5994_Conversion (/* in */ bool enable) = 0;
|
||||
virtual HRESULT Get_HD1080p24_to_HD1080i5994_Conversion (/* out */ bool *enabled) = 0;
|
||||
|
||||
/* Video Input Configuration */
|
||||
|
||||
virtual HRESULT SetVideoInputFormat (/* in */ BMDVideoConnection_v7_6 videoInputFormat) = 0;
|
||||
virtual HRESULT GetVideoInputFormat (/* out */ BMDVideoConnection_v7_6 *videoInputFormat) = 0;
|
||||
|
||||
virtual HRESULT SetAnalogVideoInputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
|
||||
virtual HRESULT GetAnalogVideoInputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
|
||||
|
||||
virtual HRESULT SetVideoInputConversionMode (/* in */ BMDVideoInputConversionMode conversionMode) = 0;
|
||||
virtual HRESULT GetVideoInputConversionMode (/* out */ BMDVideoInputConversionMode *conversionMode) = 0;
|
||||
|
||||
virtual HRESULT SetBlackVideoOutputDuringCapture (/* in */ bool blackOutInCapture) = 0;
|
||||
virtual HRESULT GetBlackVideoOutputDuringCapture (/* out */ bool *blackOutInCapture) = 0;
|
||||
|
||||
virtual HRESULT Set32PulldownSequenceInitialTimecodeFrame (/* in */ uint32_t aFrameTimecode) = 0;
|
||||
virtual HRESULT Get32PulldownSequenceInitialTimecodeFrame (/* out */ uint32_t *aFrameTimecode) = 0;
|
||||
|
||||
virtual HRESULT SetVancSourceLineMapping (/* in */ uint32_t activeLine1VANCsource, /* in */ uint32_t activeLine2VANCsource, /* in */ uint32_t activeLine3VANCsource) = 0;
|
||||
virtual HRESULT GetVancSourceLineMapping (/* out */ uint32_t *activeLine1VANCsource, /* out */ uint32_t *activeLine2VANCsource, /* out */ uint32_t *activeLine3VANCsource) = 0;
|
||||
|
||||
/* Audio Input Configuration */
|
||||
|
||||
virtual HRESULT SetAudioInputFormat (/* in */ BMDAudioConnection audioInputFormat) = 0;
|
||||
virtual HRESULT GetAudioInputFormat (/* out */ BMDAudioConnection *audioInputFormat) = 0;
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
BMD_PUBLIC IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void);
|
||||
BMD_PUBLIC IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void);
|
||||
BMD_PUBLIC IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void);
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // __DeckLink_API_v7_6_h__
|
|
@ -0,0 +1,101 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2010 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/* DeckLinkAPI_v7_9.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_9_h__
|
||||
#define __DeckLink_API_v7_9_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
#define IID_IDeckLinkDeckControl_v7_9 /* A4D81043-0619-42B7-8ED6-602D29041DF7 */ (REFIID){0xA4,0xD8,0x10,0x43,0x06,0x19,0x42,0xB7,0x8E,0xD6,0x60,0x2D,0x29,0x04,0x1D,0xF7}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
|
||||
// Forward Declarations
|
||||
class IDeckLinkDeckControl_v7_9;
|
||||
|
||||
/* Interface IDeckLinkDeckControl_v7_9 - Deck Control main interface */
|
||||
class BMD_PUBLIC IDeckLinkDeckControl_v7_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Close (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
|
||||
virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecodeString (/* out */ const char **currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
|
||||
virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
|
||||
virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
|
||||
virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
|
||||
virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
|
||||
virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
|
||||
virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
|
||||
virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Abort (void) = 0;
|
||||
virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback *callback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControl_v7_9 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // __DeckLink_API_v7_9_h__
|
|
@ -0,0 +1,76 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2011 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v8_0_H
|
||||
#define BMD_DECKLINKAPI_v8_0_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLink_v8_0 /* 62BFF75D-6569-4E55-8D4D-66AA03829ABC */ (REFIID){0x62,0xBF,0xF7,0x5D,0x65,0x69,0x4E,0x55,0x8D,0x4D,0x66,0xAA,0x03,0x82,0x9A,0xBC}
|
||||
#define IID_IDeckLinkIterator_v8_0 /* 74E936FC-CC28-4A67-81A0-1E94E52D4E69 */ (REFIID){0x74,0xE9,0x36,0xFC,0xCC,0x28,0x4A,0x67,0x81,0xA0,0x1E,0x94,0xE5,0x2D,0x4E,0x69}
|
||||
|
||||
#if defined (__cplusplus)
|
||||
|
||||
/* Interface IDeckLink_v8_0 - represents a DeckLink device */
|
||||
|
||||
class BMD_PUBLIC IDeckLink_v8_0 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ const char **modelName) = 0;
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkIterator_v8_0 - enumerates installed DeckLink hardware */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkIterator_v8_0 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLink_v8_0 **deckLinkInstance) = 0;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
BMD_PUBLIC IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance_v8_0 (void);
|
||||
};
|
||||
|
||||
#endif // defined __cplusplus
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v8_0_H) */
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2011 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v8_1_H
|
||||
#define BMD_DECKLINKAPI_v8_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLinkDeckControlStatusCallback_v8_1 /* E5F693C1-4283-4716-B18F-C1431521955B */ (REFIID){0xE5,0xF6,0x93,0xC1,0x42,0x83,0x47,0x16,0xB1,0x8F,0xC1,0x43,0x15,0x21,0x95,0x5B}
|
||||
#define IID_IDeckLinkDeckControl_v8_1 /* 522A9E39-0F3C-4742-94EE-D80DE335DA1D */ (REFIID){0x52,0x2A,0x9E,0x39,0x0F,0x3C,0x47,0x42,0x94,0xEE,0xD8,0x0D,0xE3,0x35,0xDA,0x1D}
|
||||
|
||||
|
||||
/* Enum BMDDeckControlVTRControlState_v8_1 - VTR Control state */
|
||||
|
||||
typedef uint32_t BMDDeckControlVTRControlState_v8_1;
|
||||
enum _BMDDeckControlVTRControlState_v8_1 {
|
||||
bmdDeckControlNotInVTRControlMode_v8_1 = 'nvcm',
|
||||
bmdDeckControlVTRControlPlaying_v8_1 = 'vtrp',
|
||||
bmdDeckControlVTRControlRecording_v8_1 = 'vtrr',
|
||||
bmdDeckControlVTRControlStill_v8_1 = 'vtra',
|
||||
bmdDeckControlVTRControlSeeking_v8_1 = 'vtrs',
|
||||
bmdDeckControlVTRControlStopped_v8_1 = 'vtro'
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback_v8_1 - Deck control state change callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControlStatusCallback_v8_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
|
||||
virtual HRESULT VTRControlStateChanged (/* in */ BMDDeckControlVTRControlState_v8_1 newState, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlEventReceived (/* in */ BMDDeckControlEvent event, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlStatusChanged (/* in */ BMDDeckControlStatusFlags flags, /* in */ uint32_t mask) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControlStatusCallback_v8_1 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDeckControl_v8_1 - Deck Control main interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControl_v8_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Close (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState_v8_1 *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
|
||||
virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT SendCommand (/* in */ uint8_t *inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t *outBuffer, /* out */ uint32_t *outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecodeString (/* out */ const char **currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
|
||||
virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
|
||||
virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
|
||||
virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
|
||||
virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
|
||||
virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
|
||||
virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
|
||||
virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Abort (void) = 0;
|
||||
virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback_v8_1 *callback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControl_v8_1 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif // BMD_DECKLINKAPI_v8_1_H
|
|
@ -0,0 +1,96 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2012 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v9_2_H
|
||||
#define BMD_DECKLINKAPI_v9_2_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLinkInput_v9_2 /* 6D40EF78-28B9-4E21-990D-95BB7750A04F */ (REFIID){0x6D,0x40,0xEF,0x78,0x28,0xB9,0x4E,0x21,0x99,0x0D,0x95,0xBB,0x77,0x50,0xA0,0x4F}
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v9_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1 *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v9_2 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // BMD_DECKLINKAPI_v9_2_H
|
|
@ -0,0 +1,112 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2013 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v9_9_H
|
||||
#define BMD_DECKLINKAPI_v9_9_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLinkOutput_v9_9 /* A3EF0963-0862-44ED-92A9-EE89ABF431C7 */ (REFIID){0xA3,0xEF,0x09,0x63,0x08,0x62,0x44,0xED,0x92,0xA9,0xEE,0x89,0xAB,0xF4,0x31,0xC7}
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v9_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v9_9 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // BMD_DECKLINKAPI_v9_9_H
|
116
subprojects/gst-plugins-bad/sys/decklink2/linux/LinuxCOM.h
Normal file
116
subprojects/gst-plugins-bad/sys/decklink2/linux/LinuxCOM.h
Normal file
|
@ -0,0 +1,116 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_COM_H_
|
||||
#define __LINUX_COM_H_
|
||||
|
||||
struct REFIID
|
||||
{
|
||||
unsigned char byte0;
|
||||
unsigned char byte1;
|
||||
unsigned char byte2;
|
||||
unsigned char byte3;
|
||||
unsigned char byte4;
|
||||
unsigned char byte5;
|
||||
unsigned char byte6;
|
||||
unsigned char byte7;
|
||||
unsigned char byte8;
|
||||
unsigned char byte9;
|
||||
unsigned char byte10;
|
||||
unsigned char byte11;
|
||||
unsigned char byte12;
|
||||
unsigned char byte13;
|
||||
unsigned char byte14;
|
||||
unsigned char byte15;
|
||||
};
|
||||
|
||||
typedef REFIID CFUUIDBytes;
|
||||
#define CFUUIDGetUUIDBytes(x) x
|
||||
|
||||
typedef int HRESULT;
|
||||
typedef unsigned long ULONG;
|
||||
typedef void *LPVOID;
|
||||
|
||||
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
|
||||
#define FAILED(Status) ((HRESULT)(Status)<0)
|
||||
|
||||
#define IS_ERROR(Status) ((unsigned long)(Status) >> 31 == SEVERITY_ERROR)
|
||||
#define HRESULT_CODE(hr) ((hr) & 0xFFFF)
|
||||
#define HRESULT_FACILITY(hr) (((hr) >> 16) & 0x1fff)
|
||||
#define HRESULT_SEVERITY(hr) (((hr) >> 31) & 0x1)
|
||||
#define SEVERITY_SUCCESS 0
|
||||
#define SEVERITY_ERROR 1
|
||||
|
||||
#define MAKE_HRESULT(sev,fac,code) ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
|
||||
|
||||
#define S_OK ((HRESULT)0x00000000L)
|
||||
#define S_FALSE ((HRESULT)0x00000001L)
|
||||
#define E_UNEXPECTED ((HRESULT)0x8000FFFFL)
|
||||
#define E_NOTIMPL ((HRESULT)0x80000001L)
|
||||
#define E_OUTOFMEMORY ((HRESULT)0x80000002L)
|
||||
#define E_INVALIDARG ((HRESULT)0x80000003L)
|
||||
#define E_NOINTERFACE ((HRESULT)0x80000004L)
|
||||
#define E_POINTER ((HRESULT)0x80000005L)
|
||||
#define E_HANDLE ((HRESULT)0x80000006L)
|
||||
#define E_ABORT ((HRESULT)0x80000007L)
|
||||
#define E_FAIL ((HRESULT)0x80000008L)
|
||||
#define E_ACCESSDENIED ((HRESULT)0x80000009L)
|
||||
|
||||
#define STDMETHODCALLTYPE
|
||||
|
||||
#define IID_IUnknown (REFIID){0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}
|
||||
#define IUnknownUUID IID_IUnknown
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
class BMD_PUBLIC IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
1332
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI.h
Normal file
1332
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI.h
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,269 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* 912F634B-2D4E-40A4-8AAB-8D80B73F1289 */ { 0x91,0x2F,0x63,0x4B,0x2D,0x4E,0x40,0xA4,0x8A,0xAB,0x8D,0x80,0xB7,0x3F,0x12,0x89 };
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ { 0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E };
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID;
|
||||
enum _BMDDeckLinkConfigurationID {
|
||||
|
||||
/* Serial port Flags */
|
||||
|
||||
bmdDeckLinkConfigSwapSerialRxTx = /* 'ssrt' */ 0x73737274,
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066,
|
||||
bmdDeckLinkConfigBypass = /* 'byps' */ 0x62797073,
|
||||
bmdDeckLinkConfigClockTimingAdjustment = /* 'ctad' */ 0x63746164,
|
||||
|
||||
/* Audio Input/Output Flags */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioConsumerLevels = /* 'aacl' */ 0x6161636C,
|
||||
bmdDeckLinkConfigSwapHDMICh3AndCh4OnInput = /* 'hi34' */ 0x68693334,
|
||||
bmdDeckLinkConfigSwapHDMICh3AndCh4OnOutput = /* 'ho34' */ 0x686F3334,
|
||||
|
||||
/* Video Output Flags */
|
||||
|
||||
bmdDeckLinkConfigFieldFlickerRemoval = /* 'fdfr' */ 0x66646672,
|
||||
bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion = /* 'to59' */ 0x746F3539,
|
||||
bmdDeckLinkConfig444SDIVideoOutput = /* '444o' */ 0x3434346F,
|
||||
bmdDeckLinkConfigBlackVideoOutputDuringCapture = /* 'bvoc' */ 0x62766F63,
|
||||
bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F,
|
||||
bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F,
|
||||
bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461,
|
||||
bmdDeckLinkConfigRec2020Output = /* 'rec2' */ 0x72656332, // Ensure output is Rec.2020 colorspace
|
||||
bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = /* 'SDQS' */ 0x53445153,
|
||||
bmdDeckLinkConfigOutput1080pAsPsF = /* 'pfpr' */ 0x70667072,
|
||||
|
||||
/* Video Output Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoOutputConnection = /* 'vocn' */ 0x766F636E,
|
||||
bmdDeckLinkConfigVideoOutputConversionMode = /* 'vocm' */ 0x766F636D,
|
||||
bmdDeckLinkConfigAnalogVideoOutputFlags = /* 'avof' */ 0x61766F66,
|
||||
bmdDeckLinkConfigReferenceInputTimingOffset = /* 'glot' */ 0x676C6F74,
|
||||
bmdDeckLinkConfigVideoOutputIdleOperation = /* 'voio' */ 0x766F696F,
|
||||
bmdDeckLinkConfigDefaultVideoOutputMode = /* 'dvom' */ 0x64766F6D,
|
||||
bmdDeckLinkConfigDefaultVideoOutputModeFlags = /* 'dvof' */ 0x64766F66,
|
||||
bmdDeckLinkConfigSDIOutputLinkConfiguration = /* 'solc' */ 0x736F6C63,
|
||||
bmdDeckLinkConfigHDMITimecodePacking = /* 'htpk' */ 0x6874706B,
|
||||
bmdDeckLinkConfigPlaybackGroup = /* 'plgr' */ 0x706C6772,
|
||||
|
||||
/* Video Output Floats */
|
||||
|
||||
bmdDeckLinkConfigVideoOutputComponentLumaGain = /* 'oclg' */ 0x6F636C67,
|
||||
bmdDeckLinkConfigVideoOutputComponentChromaBlueGain = /* 'occb' */ 0x6F636362,
|
||||
bmdDeckLinkConfigVideoOutputComponentChromaRedGain = /* 'occr' */ 0x6F636372,
|
||||
bmdDeckLinkConfigVideoOutputCompositeLumaGain = /* 'oilg' */ 0x6F696C67,
|
||||
bmdDeckLinkConfigVideoOutputCompositeChromaGain = /* 'oicg' */ 0x6F696367,
|
||||
bmdDeckLinkConfigVideoOutputSVideoLumaGain = /* 'oslg' */ 0x6F736C67,
|
||||
bmdDeckLinkConfigVideoOutputSVideoChromaGain = /* 'oscg' */ 0x6F736367,
|
||||
|
||||
/* Video Input Flags */
|
||||
|
||||
bmdDeckLinkConfigVideoInputScanning = /* 'visc' */ 0x76697363, // Applicable to H264 Pro Recorder only
|
||||
bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream
|
||||
bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473,
|
||||
bmdDeckLinkConfigCapture1080pAsPsF = /* 'cfpr' */ 0x63667072,
|
||||
|
||||
/* Video Input Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoInputConnection = /* 'vicn' */ 0x7669636E,
|
||||
bmdDeckLinkConfigAnalogVideoInputFlags = /* 'avif' */ 0x61766966,
|
||||
bmdDeckLinkConfigVideoInputConversionMode = /* 'vicm' */ 0x7669636D,
|
||||
bmdDeckLinkConfig32PulldownSequenceInitialTimecodeFrame = /* 'pdif' */ 0x70646966,
|
||||
bmdDeckLinkConfigVANCSourceLine1Mapping = /* 'vsl1' */ 0x76736C31,
|
||||
bmdDeckLinkConfigVANCSourceLine2Mapping = /* 'vsl2' */ 0x76736C32,
|
||||
bmdDeckLinkConfigVANCSourceLine3Mapping = /* 'vsl3' */ 0x76736C33,
|
||||
bmdDeckLinkConfigCapturePassThroughMode = /* 'cptm' */ 0x6370746D,
|
||||
bmdDeckLinkConfigCaptureGroup = /* 'cpgr' */ 0x63706772,
|
||||
|
||||
/* Video Input Floats */
|
||||
|
||||
bmdDeckLinkConfigVideoInputComponentLumaGain = /* 'iclg' */ 0x69636C67,
|
||||
bmdDeckLinkConfigVideoInputComponentChromaBlueGain = /* 'iccb' */ 0x69636362,
|
||||
bmdDeckLinkConfigVideoInputComponentChromaRedGain = /* 'iccr' */ 0x69636372,
|
||||
bmdDeckLinkConfigVideoInputCompositeLumaGain = /* 'iilg' */ 0x69696C67,
|
||||
bmdDeckLinkConfigVideoInputCompositeChromaGain = /* 'iicg' */ 0x69696367,
|
||||
bmdDeckLinkConfigVideoInputSVideoLumaGain = /* 'islg' */ 0x69736C67,
|
||||
bmdDeckLinkConfigVideoInputSVideoChromaGain = /* 'iscg' */ 0x69736367,
|
||||
|
||||
/* Keying Integers */
|
||||
|
||||
bmdDeckLinkConfigInternalKeyingAncillaryDataSource = /* 'ikas' */ 0x696B6173,
|
||||
|
||||
/* Audio Input Flags */
|
||||
|
||||
bmdDeckLinkConfigMicrophonePhantomPower = /* 'mphp' */ 0x6D706870,
|
||||
|
||||
/* Audio Input Integers */
|
||||
|
||||
bmdDeckLinkConfigAudioInputConnection = /* 'aicn' */ 0x6169636E,
|
||||
|
||||
/* Audio Input Floats */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel1 = /* 'ais1' */ 0x61697331,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel2 = /* 'ais2' */ 0x61697332,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel3 = /* 'ais3' */ 0x61697333,
|
||||
bmdDeckLinkConfigAnalogAudioInputScaleChannel4 = /* 'ais4' */ 0x61697334,
|
||||
bmdDeckLinkConfigDigitalAudioInputScale = /* 'dais' */ 0x64616973,
|
||||
bmdDeckLinkConfigMicrophoneInputGain = /* 'micg' */ 0x6D696367,
|
||||
|
||||
/* Audio Output Integers */
|
||||
|
||||
bmdDeckLinkConfigAudioOutputAESAnalogSwitch = /* 'aoaa' */ 0x616F6161,
|
||||
|
||||
/* Audio Output Floats */
|
||||
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel1 = /* 'aos1' */ 0x616F7331,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel2 = /* 'aos2' */ 0x616F7332,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel3 = /* 'aos3' */ 0x616F7333,
|
||||
bmdDeckLinkConfigAnalogAudioOutputScaleChannel4 = /* 'aos4' */ 0x616F7334,
|
||||
bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73,
|
||||
bmdDeckLinkConfigHeadphoneVolume = /* 'hvol' */ 0x68766F6C,
|
||||
|
||||
/* Device Information Strings */
|
||||
|
||||
bmdDeckLinkConfigDeviceInformationLabel = /* 'dila' */ 0x64696C61,
|
||||
bmdDeckLinkConfigDeviceInformationSerialNumber = /* 'disn' */ 0x6469736E,
|
||||
bmdDeckLinkConfigDeviceInformationCompany = /* 'dico' */ 0x6469636F,
|
||||
bmdDeckLinkConfigDeviceInformationPhone = /* 'diph' */ 0x64697068,
|
||||
bmdDeckLinkConfigDeviceInformationEmail = /* 'diem' */ 0x6469656D,
|
||||
bmdDeckLinkConfigDeviceInformationDate = /* 'dida' */ 0x64696461,
|
||||
|
||||
/* Deck Control Integers */
|
||||
|
||||
bmdDeckLinkConfigDeckControlConnection = /* 'dcco' */ 0x6463636F
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkEncoderConfigurationID;
|
||||
enum _BMDDeckLinkEncoderConfigurationID {
|
||||
|
||||
/* Video Encoder Integers */
|
||||
|
||||
bmdDeckLinkEncoderConfigPreferredBitDepth = /* 'epbr' */ 0x65706272,
|
||||
bmdDeckLinkEncoderConfigFrameCodingMode = /* 'efcm' */ 0x6566636D,
|
||||
|
||||
/* HEVC/H.265 Encoder Integers */
|
||||
|
||||
bmdDeckLinkEncoderConfigH265TargetBitrate = /* 'htbr' */ 0x68746272,
|
||||
|
||||
/* DNxHR/DNxHD Compression ID */
|
||||
|
||||
bmdDeckLinkEncoderConfigDNxHRCompressionID = /* 'dcid' */ 0x64636964,
|
||||
|
||||
/* DNxHR/DNxHD Level */
|
||||
|
||||
bmdDeckLinkEncoderConfigDNxHRLevel = /* 'dlev' */ 0x646C6576,
|
||||
|
||||
/* Encoded Sample Decriptions */
|
||||
|
||||
bmdDeckLinkEncoderConfigMPEG4SampleDescription = /* 'stsE' */ 0x73747345, // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
|
||||
bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration;
|
||||
class IDeckLinkEncoderConfiguration;
|
||||
|
||||
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef* value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ CFStringRef* value) = 0;
|
||||
virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void* buffer /* optional */, /* in, out */ uint32_t* bufferSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_H) */
|
|
@ -0,0 +1,84 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_11_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_11_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_11 = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID_v10_11 - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_11;
|
||||
enum _BMDDeckLinkConfigurationID_v10_11 {
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigDuplexMode_v10_11 = 'dupx',
|
||||
};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_11;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_11 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_11_H) */
|
|
@ -0,0 +1,73 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2014 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_2_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_2_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_2 = /* C679A35B-610C-4D09-B748-1D0478100FC0 */ {0xC6,0x79,0xA3,0x5B,0x61,0x0C,0x4D,0x09,0xB7,0x48,0x1D,0x04,0x78,0x10,0x0F,0xC0};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_2;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v10_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_2 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_2_H) */
|
|
@ -0,0 +1,75 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_4_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_4_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_4 = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
|
||||
|
||||
//
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_4;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v10_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_4_H) */
|
|
@ -0,0 +1,73 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_5_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_5_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration_v10_5 = /* 67455668-0848-45DF-8D8E-350A77C9A028 */ {0x67,0x45,0x56,0x68,0x08,0x48,0x45,0xDF,0x8D,0x8E,0x35,0x0A,0x77,0xC9,0xA0,0x28};
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_5;
|
||||
|
||||
/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
|
||||
virtual HRESULT GetDecoderConfigurationInfo (/* out */ void *buffer, /* in */ long bufferSize, /* out */ long *returnedSize) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderConfiguration_v10_5 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_5_H) */
|
|
@ -0,0 +1,75 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPICONFIGURATION_v10_9_H
|
||||
#define BMD_DECKLINKAPICONFIGURATION_v10_9_H
|
||||
|
||||
#include "DeckLinkAPIConfiguration.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_9 = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
|
||||
|
||||
//
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkConfiguration_v10_9;
|
||||
|
||||
/* Interface IDeckLinkConfiguration_v10_9 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v10_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkConfiguration_v10_9 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_9_H) */
|
|
@ -0,0 +1,223 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIDECKCONTROL_H
|
||||
#define BMD_DECKLINKAPIDECKCONTROL_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkDeckControlStatusCallback = /* 53436FFB-B434-4906-BADC-AE3060FFE8EF */ { 0x53,0x43,0x6F,0xFB,0xB4,0x34,0x49,0x06,0xBA,0xDC,0xAE,0x30,0x60,0xFF,0xE8,0xEF };
|
||||
BMD_CONST REFIID IID_IDeckLinkDeckControl = /* 8E1C3ACE-19C7-4E00-8B92-D80431D958BE */ { 0x8E,0x1C,0x3A,0xCE,0x19,0xC7,0x4E,0x00,0x8B,0x92,0xD8,0x04,0x31,0xD9,0x58,0xBE };
|
||||
|
||||
/* Enum BMDDeckControlMode - DeckControl mode */
|
||||
|
||||
typedef uint32_t BMDDeckControlMode;
|
||||
enum _BMDDeckControlMode {
|
||||
bmdDeckControlNotOpened = /* 'ntop' */ 0x6E746F70,
|
||||
bmdDeckControlVTRControlMode = /* 'vtrc' */ 0x76747263,
|
||||
bmdDeckControlExportMode = /* 'expm' */ 0x6578706D,
|
||||
bmdDeckControlCaptureMode = /* 'capm' */ 0x6361706D
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlEvent - DeckControl event */
|
||||
|
||||
typedef uint32_t BMDDeckControlEvent;
|
||||
enum _BMDDeckControlEvent {
|
||||
bmdDeckControlAbortedEvent = /* 'abte' */ 0x61627465, // This event is triggered when a capture or edit-to-tape operation is aborted.
|
||||
|
||||
/* Export-To-Tape events */
|
||||
|
||||
bmdDeckControlPrepareForExportEvent = /* 'pfee' */ 0x70666565, // This event is triggered a few frames before reaching the in-point. IDeckLinkInput::StartScheduledPlayback should be called at this point.
|
||||
bmdDeckControlExportCompleteEvent = /* 'exce' */ 0x65786365, // This event is triggered a few frames after reaching the out-point. At this point, it is safe to stop playback. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
|
||||
|
||||
/* Capture events */
|
||||
|
||||
bmdDeckControlPrepareForCaptureEvent = /* 'pfce' */ 0x70666365, // This event is triggered a few frames before reaching the in-point. The serial timecode attached to IDeckLinkVideoInputFrames is now valid.
|
||||
bmdDeckControlCaptureCompleteEvent = /* 'ccev' */ 0x63636576 // This event is triggered a few frames after reaching the out-point. Upon reception of this event the deck's control mode is set back to bmdDeckControlVTRControlMode.
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlVTRControlState - VTR Control state */
|
||||
|
||||
typedef uint32_t BMDDeckControlVTRControlState;
|
||||
enum _BMDDeckControlVTRControlState {
|
||||
bmdDeckControlNotInVTRControlMode = /* 'nvcm' */ 0x6E76636D,
|
||||
bmdDeckControlVTRControlPlaying = /* 'vtrp' */ 0x76747270,
|
||||
bmdDeckControlVTRControlRecording = /* 'vtrr' */ 0x76747272,
|
||||
bmdDeckControlVTRControlStill = /* 'vtra' */ 0x76747261,
|
||||
bmdDeckControlVTRControlShuttleForward = /* 'vtsf' */ 0x76747366,
|
||||
bmdDeckControlVTRControlShuttleReverse = /* 'vtsr' */ 0x76747372,
|
||||
bmdDeckControlVTRControlJogForward = /* 'vtjf' */ 0x76746A66,
|
||||
bmdDeckControlVTRControlJogReverse = /* 'vtjr' */ 0x76746A72,
|
||||
bmdDeckControlVTRControlStopped = /* 'vtro' */ 0x7674726F
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlStatusFlags - Deck Control status flags */
|
||||
|
||||
typedef uint32_t BMDDeckControlStatusFlags;
|
||||
enum _BMDDeckControlStatusFlags {
|
||||
bmdDeckControlStatusDeckConnected = 1 << 0,
|
||||
bmdDeckControlStatusRemoteMode = 1 << 1,
|
||||
bmdDeckControlStatusRecordInhibited = 1 << 2,
|
||||
bmdDeckControlStatusCassetteOut = 1 << 3
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlExportModeOpsFlags - Export mode flags */
|
||||
|
||||
typedef uint32_t BMDDeckControlExportModeOpsFlags;
|
||||
enum _BMDDeckControlExportModeOpsFlags {
|
||||
bmdDeckControlExportModeInsertVideo = 1 << 0,
|
||||
bmdDeckControlExportModeInsertAudio1 = 1 << 1,
|
||||
bmdDeckControlExportModeInsertAudio2 = 1 << 2,
|
||||
bmdDeckControlExportModeInsertAudio3 = 1 << 3,
|
||||
bmdDeckControlExportModeInsertAudio4 = 1 << 4,
|
||||
bmdDeckControlExportModeInsertAudio5 = 1 << 5,
|
||||
bmdDeckControlExportModeInsertAudio6 = 1 << 6,
|
||||
bmdDeckControlExportModeInsertAudio7 = 1 << 7,
|
||||
bmdDeckControlExportModeInsertAudio8 = 1 << 8,
|
||||
bmdDeckControlExportModeInsertAudio9 = 1 << 9,
|
||||
bmdDeckControlExportModeInsertAudio10 = 1 << 10,
|
||||
bmdDeckControlExportModeInsertAudio11 = 1 << 11,
|
||||
bmdDeckControlExportModeInsertAudio12 = 1 << 12,
|
||||
bmdDeckControlExportModeInsertTimeCode = 1 << 13,
|
||||
bmdDeckControlExportModeInsertAssemble = 1 << 14,
|
||||
bmdDeckControlExportModeInsertPreview = 1 << 15,
|
||||
bmdDeckControlUseManualExport = 1 << 16
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlError - Deck Control error */
|
||||
|
||||
typedef uint32_t BMDDeckControlError;
|
||||
enum _BMDDeckControlError {
|
||||
bmdDeckControlNoError = /* 'noer' */ 0x6E6F6572,
|
||||
bmdDeckControlModeError = /* 'moer' */ 0x6D6F6572,
|
||||
bmdDeckControlMissedInPointError = /* 'mier' */ 0x6D696572,
|
||||
bmdDeckControlDeckTimeoutError = /* 'dter' */ 0x64746572,
|
||||
bmdDeckControlCommandFailedError = /* 'cfer' */ 0x63666572,
|
||||
bmdDeckControlDeviceAlreadyOpenedError = /* 'dalo' */ 0x64616C6F,
|
||||
bmdDeckControlFailedToOpenDeviceError = /* 'fder' */ 0x66646572,
|
||||
bmdDeckControlInLocalModeError = /* 'lmer' */ 0x6C6D6572,
|
||||
bmdDeckControlEndOfTapeError = /* 'eter' */ 0x65746572,
|
||||
bmdDeckControlUserAbortError = /* 'uaer' */ 0x75616572,
|
||||
bmdDeckControlNoTapeInDeckError = /* 'nter' */ 0x6E746572,
|
||||
bmdDeckControlNoVideoFromCardError = /* 'nvfc' */ 0x6E766663,
|
||||
bmdDeckControlNoCommunicationError = /* 'ncom' */ 0x6E636F6D,
|
||||
bmdDeckControlBufferTooSmallError = /* 'btsm' */ 0x6274736D,
|
||||
bmdDeckControlBadChecksumError = /* 'chks' */ 0x63686B73,
|
||||
bmdDeckControlUnknownError = /* 'uner' */ 0x756E6572
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDeckControlStatusCallback;
|
||||
class IDeckLinkDeckControl;
|
||||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
|
||||
virtual HRESULT VTRControlStateChanged (/* in */ BMDDeckControlVTRControlState newState, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlEventReceived (/* in */ BMDDeckControlEvent event, /* in */ BMDDeckControlError error) = 0;
|
||||
virtual HRESULT DeckControlStatusChanged (/* in */ BMDDeckControlStatusFlags flags, /* in */ uint32_t mask) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControlStatusCallback () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDeckControl - Deck Control main interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Close (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode* mode, /* out */ BMDDeckControlVTRControlState* vtrControlState, /* out */ BMDDeckControlStatusFlags* flags) = 0;
|
||||
virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT SendCommand (/* in */ uint8_t* inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t* outBuffer, /* out */ uint32_t* outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Play (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Stop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Eject (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StepForward (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StepBack (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecodeString (/* out */ CFStringRef* currentTimeCode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode** currentTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD* currentTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
|
||||
virtual HRESULT GetPreroll (/* out */ uint32_t* prerollSeconds) = 0;
|
||||
virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
|
||||
virtual HRESULT GetExportOffset (/* out */ int32_t* exportOffsetFields) = 0;
|
||||
virtual HRESULT GetManualExportOffset (/* out */ int32_t* deckManualExportOffsetFields) = 0;
|
||||
virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
|
||||
virtual HRESULT GetCaptureOffset (/* out */ int32_t* captureOffsetFields) = 0;
|
||||
virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT GetDeviceID (/* out */ uint16_t* deviceId, /* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT Abort (void) = 0;
|
||||
virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError* error) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback* callback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControl () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIDECKCONTROL_H) */
|
|
@ -0,0 +1,79 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIDISCOVERY_H
|
||||
#define BMD_DECKLINKAPIDISCOVERY_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLink = /* C418FBDD-0587-48ED-8FE5-640F0A14AF91 */ { 0xC4,0x18,0xFB,0xDD,0x05,0x87,0x48,0xED,0x8F,0xE5,0x64,0x0F,0x0A,0x14,0xAF,0x91 };
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLink;
|
||||
|
||||
/* Interface IDeckLink - Represents a DeckLink device */
|
||||
|
||||
class BMD_PUBLIC IDeckLink : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ CFStringRef* modelName) = 0;
|
||||
virtual HRESULT GetDisplayName (/* out */ CFStringRef* displayName) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLink () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIDISCOVERY_H) */
|
|
@ -0,0 +1,245 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPIDispatch.cpp */
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#if BLACKMAGIC_DECKLINK_API_MAGIC != 1
|
||||
#error The DeckLink API version of DeckLinkAPIDispatch.cpp is not the same version as DeckLinkAPI.h
|
||||
#endif
|
||||
|
||||
#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
|
||||
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGL3ScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkMetalScreenPreviewHelper* (*CreateMetalScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gDeckLinkAPIBundleRef = NULL;
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateOpenGL3ScreenPreviewHelperFunc gCreateOpenGL3PreviewFunc = NULL;
|
||||
static CreateMetalScreenPreviewHelperFunc gCreateMetalPreviewFunc = NULL;
|
||||
static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc= NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0004"));
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
|
||||
gCreateOpenGL3PreviewFunc = (CreateOpenGL3ScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGL3ScreenPreviewHelper_0001"));
|
||||
gCreateMetalPreviewFunc = (CreateMetalScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateMetalScreenPreviewHelper_0001"));
|
||||
gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0003"));
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoFrameAncillaryPacketsInstance_0001"));
|
||||
}
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent (void)
|
||||
{
|
||||
// If the DeckLink API bundle was successfully loaded, return this knowledge to the caller
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGL3ScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateOpenGL3PreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateOpenGL3PreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkMetalScreenPreviewHelper* CreateMetalScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateMetalPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateMetalPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview (void* parentView)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateCocoaPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateCocoaPreviewFunc(parentView);
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
|
||||
|
||||
#define kBMDStreamingAPI_BundlePath "/Library/Application Support/Blackmagic Design/Streaming/BMDStreamingAPI.bundle"
|
||||
|
||||
typedef IBMDStreamingDiscovery* (*CreateDiscoveryFunc)(void);
|
||||
typedef IBMDStreamingH264NALParser* (*CreateNALParserFunc)(void);
|
||||
|
||||
static pthread_once_t gBMDStreamingOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gBMDStreamingAPIBundleRef = NULL;
|
||||
static CreateDiscoveryFunc gCreateDiscoveryFunc = NULL;
|
||||
static CreateNALParserFunc gCreateNALParserFunc = NULL;
|
||||
|
||||
static void InitBMDStreamingAPI(void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kBMDStreamingAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gBMDStreamingAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gBMDStreamingAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0002"));
|
||||
gCreateNALParserFunc = (CreateNALParserFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingH264NALParser_0001"));
|
||||
}
|
||||
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance()
|
||||
{
|
||||
pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
|
||||
|
||||
if (gCreateDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateDiscoveryFunc();
|
||||
}
|
||||
|
||||
IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser()
|
||||
{
|
||||
pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
|
||||
|
||||
if (gCreateNALParserFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateNALParserFunc();
|
||||
}
|
|
@ -0,0 +1,219 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPIDispatch.cpp */
|
||||
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#if BLACKMAGIC_DECKLINK_API_MAGIC != 1
|
||||
#error The DeckLink API version of DeckLinkAPIDispatch.cpp is not the same version as DeckLinkAPI.h
|
||||
#endif
|
||||
|
||||
#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
|
||||
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
typedef IDeckLinkVideoFrameAncillaryPackets* (*CreateVideoFrameAncillaryPacketsInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gDeckLinkAPIBundleRef = NULL;
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc= NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0003"));
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
|
||||
gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0002"));
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoFrameAncillaryPacketsInstance_0001"));
|
||||
}
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent_v10_11 (void)
|
||||
{
|
||||
// If the DeckLink API bundle was successfully loaded, return this knowledge to the caller
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview_v10_11 (void* parentView)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateCocoaPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateCocoaPreviewFunc(parentView);
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
IDeckLinkVideoFrameAncillaryPackets* CreateVideoFrameAncillaryPacketsInstance_v10_11 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoFrameAncillaryPacketsFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoFrameAncillaryPacketsFunc();
|
||||
}
|
||||
|
||||
|
||||
#define kBMDStreamingAPI_BundlePath "/Library/Application Support/Blackmagic Design/Streaming/BMDStreamingAPI.bundle"
|
||||
|
||||
typedef IBMDStreamingDiscovery* (*CreateDiscoveryFunc)(void);
|
||||
typedef IBMDStreamingH264NALParser* (*CreateNALParserFunc)(void);
|
||||
|
||||
static pthread_once_t gBMDStreamingOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gBMDStreamingAPIBundleRef = NULL;
|
||||
static CreateDiscoveryFunc gCreateDiscoveryFunc = NULL;
|
||||
static CreateNALParserFunc gCreateNALParserFunc = NULL;
|
||||
|
||||
static void InitBMDStreamingAPI(void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kBMDStreamingAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gBMDStreamingAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gBMDStreamingAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0002"));
|
||||
gCreateNALParserFunc = (CreateNALParserFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingH264NALParser_0001"));
|
||||
}
|
||||
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance_v10_11()
|
||||
{
|
||||
pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
|
||||
|
||||
if (gCreateDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateDiscoveryFunc();
|
||||
}
|
||||
|
||||
IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser_v10_11()
|
||||
{
|
||||
pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
|
||||
|
||||
if (gCreateNALParserFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateNALParserFunc();
|
||||
}
|
|
@ -0,0 +1,206 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPIDispatch.cpp */
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#if BLACKMAGIC_DECKLINK_API_MAGIC != 1
|
||||
#error The DeckLink API version of DeckLinkAPIDispatch.cpp is not the same version as DeckLinkAPI.h
|
||||
#endif
|
||||
|
||||
#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
|
||||
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
typedef IDeckLinkDiscovery* (*CreateDeckLinkDiscoveryInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gDeckLinkAPIBundleRef = NULL;
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
|
||||
|
||||
static void InitDeckLinkAPI(void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0002"));
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
|
||||
gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0001"));
|
||||
}
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent(void)
|
||||
{
|
||||
// If the DeckLink API bundle was successfully loaded, return this knowledge to the caller
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview(void* parentView)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateCocoaPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateCocoaPreviewFunc(parentView);
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance(void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateDeckLinkDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateDeckLinkDiscoveryFunc();
|
||||
}
|
||||
|
||||
|
||||
#define kBMDStreamingAPI_BundlePath "/Library/Application Support/Blackmagic Design/Streaming/BMDStreamingAPI.bundle"
|
||||
|
||||
typedef IBMDStreamingDiscovery* (*CreateDiscoveryFunc)(void);
|
||||
typedef IBMDStreamingH264NALParser* (*CreateNALParserFunc)(void);
|
||||
|
||||
static pthread_once_t gBMDStreamingOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gBMDStreamingAPIBundleRef = NULL;
|
||||
static CreateDiscoveryFunc gCreateDiscoveryFunc = NULL;
|
||||
static CreateNALParserFunc gCreateNALParserFunc = NULL;
|
||||
|
||||
static void InitBMDStreamingAPI(void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kBMDStreamingAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gBMDStreamingAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gBMDStreamingAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0001"));
|
||||
gCreateNALParserFunc = (CreateNALParserFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingH264NALParser_0001"));
|
||||
}
|
||||
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance()
|
||||
{
|
||||
pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
|
||||
|
||||
if (gCreateDiscoveryFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateDiscoveryFunc();
|
||||
}
|
||||
|
||||
IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser()
|
||||
{
|
||||
pthread_once(&gBMDStreamingOnceControl, InitBMDStreamingAPI);
|
||||
|
||||
if (gCreateNALParserFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateNALParserFunc();
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPIDispatch_v7_6.cpp */
|
||||
|
||||
#include "DeckLinkAPI_v7_6.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
|
||||
|
||||
typedef IDeckLinkIterator* (*CreateIteratorFunc_v7_6)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper_v7_6* (*CreateOpenGLScreenPreviewHelperFunc_v7_6)(void);
|
||||
typedef IDeckLinkCocoaScreenPreviewCallback_v7_6* (*CreateCocoaScreenPreviewFunc_v7_6)(void*);
|
||||
typedef IDeckLinkVideoConversion_v7_6* (*CreateVideoConversionInstanceFunc_v7_6)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gBundleRef = NULL;
|
||||
static CreateIteratorFunc_v7_6 gCreateIteratorFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc_v7_6 gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateCocoaScreenPreviewFunc_v7_6 gCreateCocoaPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc_v7_6 gCreateVideoConversionFunc = NULL;
|
||||
|
||||
|
||||
static void InitDeckLinkAPI_v7_6 (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gBundleRef != NULL)
|
||||
{
|
||||
gCreateIteratorFunc = (CreateIteratorFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateDeckLinkIteratorInstance"));
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper"));
|
||||
gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateCocoaScreenPreview"));
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateVideoConversionInstance"));
|
||||
}
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkCocoaScreenPreviewCallback_v7_6* CreateCocoaScreenPreview_v7_6 (void* parentView)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
if (gCreateCocoaPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateCocoaPreviewFunc(parentView);
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2011 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPIDispatch.cpp */
|
||||
|
||||
#include "DeckLinkAPI_v8_0.h"
|
||||
#include <pthread.h>
|
||||
|
||||
#if BLACKMAGIC_DECKLINK_API_MAGIC != 1
|
||||
#error The DeckLink API version of DeckLinkAPIDispatch.cpp is not the same version as DeckLinkAPI.h
|
||||
#endif
|
||||
|
||||
#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
|
||||
|
||||
typedef IDeckLinkIterator_v8_0* (*CreateIteratorFunc)(void);
|
||||
typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
|
||||
typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
|
||||
typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*);
|
||||
typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
|
||||
|
||||
static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
|
||||
static CFBundleRef gDeckLinkAPIBundleRef = NULL;
|
||||
static CreateIteratorFunc gCreateIteratorFunc = NULL;
|
||||
static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
||||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
|
||||
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
|
||||
if (bundleURL != NULL)
|
||||
{
|
||||
gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0001"));
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
|
||||
gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
|
||||
gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
|
||||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
|
||||
}
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
}
|
||||
|
||||
bool IsDeckLinkAPIPresent (void)
|
||||
{
|
||||
// If the DeckLink API bundle was successfully loaded, return this knowledge to the caller
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateIteratorFunc();
|
||||
}
|
||||
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateAPIInformationFunc();
|
||||
}
|
||||
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
}
|
||||
|
||||
IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview (void* parentView)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateCocoaPreviewFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateCocoaPreviewFunc(parentView);
|
||||
}
|
||||
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
|
||||
return gCreateVideoConversionFunc();
|
||||
}
|
||||
|
289
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPIModes.h
Normal file
289
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPIModes.h
Normal file
|
@ -0,0 +1,289 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIMODES_H
|
||||
#define BMD_DECKLINKAPIMODES_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkDisplayModeIterator = /* 9C88499F-F601-4021-B80B-032E4EB41C35 */ { 0x9C,0x88,0x49,0x9F,0xF6,0x01,0x40,0x21,0xB8,0x0B,0x03,0x2E,0x4E,0xB4,0x1C,0x35 };
|
||||
BMD_CONST REFIID IID_IDeckLinkDisplayMode = /* 3EB2C1AB-0A3D-4523-A3AD-F40D7FB14E78 */ { 0x3E,0xB2,0xC1,0xAB,0x0A,0x3D,0x45,0x23,0xA3,0xAD,0xF4,0x0D,0x7F,0xB1,0x4E,0x78 };
|
||||
|
||||
/* Enum BMDDisplayMode - BMDDisplayMode enumerates the video modes supported. */
|
||||
|
||||
typedef uint32_t BMDDisplayMode;
|
||||
enum _BMDDisplayMode {
|
||||
|
||||
/* SD Modes */
|
||||
|
||||
bmdModeNTSC = /* 'ntsc' */ 0x6E747363,
|
||||
bmdModeNTSC2398 = /* 'nt23' */ 0x6E743233, // 3:2 pulldown
|
||||
bmdModePAL = /* 'pal ' */ 0x70616C20,
|
||||
bmdModeNTSCp = /* 'ntsp' */ 0x6E747370,
|
||||
bmdModePALp = /* 'palp' */ 0x70616C70,
|
||||
|
||||
/* HD 1080 Modes */
|
||||
|
||||
bmdModeHD1080p2398 = /* '23ps' */ 0x32337073,
|
||||
bmdModeHD1080p24 = /* '24ps' */ 0x32347073,
|
||||
bmdModeHD1080p25 = /* 'Hp25' */ 0x48703235,
|
||||
bmdModeHD1080p2997 = /* 'Hp29' */ 0x48703239,
|
||||
bmdModeHD1080p30 = /* 'Hp30' */ 0x48703330,
|
||||
bmdModeHD1080p4795 = /* 'Hp47' */ 0x48703437,
|
||||
bmdModeHD1080p48 = /* 'Hp48' */ 0x48703438,
|
||||
bmdModeHD1080p50 = /* 'Hp50' */ 0x48703530,
|
||||
bmdModeHD1080p5994 = /* 'Hp59' */ 0x48703539,
|
||||
bmdModeHD1080p6000 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080p9590 = /* 'Hp95' */ 0x48703935,
|
||||
bmdModeHD1080p96 = /* 'Hp96' */ 0x48703936,
|
||||
bmdModeHD1080p100 = /* 'Hp10' */ 0x48703130,
|
||||
bmdModeHD1080p11988 = /* 'Hp11' */ 0x48703131,
|
||||
bmdModeHD1080p120 = /* 'Hp12' */ 0x48703132,
|
||||
bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530,
|
||||
bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539,
|
||||
bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.
|
||||
|
||||
/* HD 720 Modes */
|
||||
|
||||
bmdModeHD720p50 = /* 'hp50' */ 0x68703530,
|
||||
bmdModeHD720p5994 = /* 'hp59' */ 0x68703539,
|
||||
bmdModeHD720p60 = /* 'hp60' */ 0x68703630,
|
||||
|
||||
/* 2K Modes */
|
||||
|
||||
bmdMode2k2398 = /* '2k23' */ 0x326B3233,
|
||||
bmdMode2k24 = /* '2k24' */ 0x326B3234,
|
||||
bmdMode2k25 = /* '2k25' */ 0x326B3235,
|
||||
|
||||
/* 2K DCI Modes */
|
||||
|
||||
bmdMode2kDCI2398 = /* '2d23' */ 0x32643233,
|
||||
bmdMode2kDCI24 = /* '2d24' */ 0x32643234,
|
||||
bmdMode2kDCI25 = /* '2d25' */ 0x32643235,
|
||||
bmdMode2kDCI2997 = /* '2d29' */ 0x32643239,
|
||||
bmdMode2kDCI30 = /* '2d30' */ 0x32643330,
|
||||
bmdMode2kDCI4795 = /* '2d47' */ 0x32643437,
|
||||
bmdMode2kDCI48 = /* '2d48' */ 0x32643438,
|
||||
bmdMode2kDCI50 = /* '2d50' */ 0x32643530,
|
||||
bmdMode2kDCI5994 = /* '2d59' */ 0x32643539,
|
||||
bmdMode2kDCI60 = /* '2d60' */ 0x32643630,
|
||||
bmdMode2kDCI9590 = /* '2d95' */ 0x32643935,
|
||||
bmdMode2kDCI96 = /* '2d96' */ 0x32643936,
|
||||
bmdMode2kDCI100 = /* '2d10' */ 0x32643130,
|
||||
bmdMode2kDCI11988 = /* '2d11' */ 0x32643131,
|
||||
bmdMode2kDCI120 = /* '2d12' */ 0x32643132,
|
||||
|
||||
/* 4K UHD Modes */
|
||||
|
||||
bmdMode4K2160p2398 = /* '4k23' */ 0x346B3233,
|
||||
bmdMode4K2160p24 = /* '4k24' */ 0x346B3234,
|
||||
bmdMode4K2160p25 = /* '4k25' */ 0x346B3235,
|
||||
bmdMode4K2160p2997 = /* '4k29' */ 0x346B3239,
|
||||
bmdMode4K2160p30 = /* '4k30' */ 0x346B3330,
|
||||
bmdMode4K2160p4795 = /* '4k47' */ 0x346B3437,
|
||||
bmdMode4K2160p48 = /* '4k48' */ 0x346B3438,
|
||||
bmdMode4K2160p50 = /* '4k50' */ 0x346B3530,
|
||||
bmdMode4K2160p5994 = /* '4k59' */ 0x346B3539,
|
||||
bmdMode4K2160p60 = /* '4k60' */ 0x346B3630,
|
||||
bmdMode4K2160p9590 = /* '4k95' */ 0x346B3935,
|
||||
bmdMode4K2160p96 = /* '4k96' */ 0x346B3936,
|
||||
bmdMode4K2160p100 = /* '4k10' */ 0x346B3130,
|
||||
bmdMode4K2160p11988 = /* '4k11' */ 0x346B3131,
|
||||
bmdMode4K2160p120 = /* '4k12' */ 0x346B3132,
|
||||
|
||||
/* 4K DCI Modes */
|
||||
|
||||
bmdMode4kDCI2398 = /* '4d23' */ 0x34643233,
|
||||
bmdMode4kDCI24 = /* '4d24' */ 0x34643234,
|
||||
bmdMode4kDCI25 = /* '4d25' */ 0x34643235,
|
||||
bmdMode4kDCI2997 = /* '4d29' */ 0x34643239,
|
||||
bmdMode4kDCI30 = /* '4d30' */ 0x34643330,
|
||||
bmdMode4kDCI4795 = /* '4d47' */ 0x34643437,
|
||||
bmdMode4kDCI48 = /* '4d48' */ 0x34643438,
|
||||
bmdMode4kDCI50 = /* '4d50' */ 0x34643530,
|
||||
bmdMode4kDCI5994 = /* '4d59' */ 0x34643539,
|
||||
bmdMode4kDCI60 = /* '4d60' */ 0x34643630,
|
||||
bmdMode4kDCI9590 = /* '4d95' */ 0x34643935,
|
||||
bmdMode4kDCI96 = /* '4d96' */ 0x34643936,
|
||||
bmdMode4kDCI100 = /* '4d10' */ 0x34643130,
|
||||
bmdMode4kDCI11988 = /* '4d11' */ 0x34643131,
|
||||
bmdMode4kDCI120 = /* '4d12' */ 0x34643132,
|
||||
|
||||
/* 8K UHD Modes */
|
||||
|
||||
bmdMode8K4320p2398 = /* '8k23' */ 0x386B3233,
|
||||
bmdMode8K4320p24 = /* '8k24' */ 0x386B3234,
|
||||
bmdMode8K4320p25 = /* '8k25' */ 0x386B3235,
|
||||
bmdMode8K4320p2997 = /* '8k29' */ 0x386B3239,
|
||||
bmdMode8K4320p30 = /* '8k30' */ 0x386B3330,
|
||||
bmdMode8K4320p4795 = /* '8k47' */ 0x386B3437,
|
||||
bmdMode8K4320p48 = /* '8k48' */ 0x386B3438,
|
||||
bmdMode8K4320p50 = /* '8k50' */ 0x386B3530,
|
||||
bmdMode8K4320p5994 = /* '8k59' */ 0x386B3539,
|
||||
bmdMode8K4320p60 = /* '8k60' */ 0x386B3630,
|
||||
|
||||
/* 8K DCI Modes */
|
||||
|
||||
bmdMode8kDCI2398 = /* '8d23' */ 0x38643233,
|
||||
bmdMode8kDCI24 = /* '8d24' */ 0x38643234,
|
||||
bmdMode8kDCI25 = /* '8d25' */ 0x38643235,
|
||||
bmdMode8kDCI2997 = /* '8d29' */ 0x38643239,
|
||||
bmdMode8kDCI30 = /* '8d30' */ 0x38643330,
|
||||
bmdMode8kDCI4795 = /* '8d47' */ 0x38643437,
|
||||
bmdMode8kDCI48 = /* '8d48' */ 0x38643438,
|
||||
bmdMode8kDCI50 = /* '8d50' */ 0x38643530,
|
||||
bmdMode8kDCI5994 = /* '8d59' */ 0x38643539,
|
||||
bmdMode8kDCI60 = /* '8d60' */ 0x38643630,
|
||||
|
||||
/* PC Modes */
|
||||
|
||||
bmdMode640x480p60 = /* 'vga6' */ 0x76676136,
|
||||
bmdMode800x600p60 = /* 'svg6' */ 0x73766736,
|
||||
bmdMode1440x900p50 = /* 'wxg5' */ 0x77786735,
|
||||
bmdMode1440x900p60 = /* 'wxg6' */ 0x77786736,
|
||||
bmdMode1440x1080p50 = /* 'sxg5' */ 0x73786735,
|
||||
bmdMode1440x1080p60 = /* 'sxg6' */ 0x73786736,
|
||||
bmdMode1600x1200p50 = /* 'uxg5' */ 0x75786735,
|
||||
bmdMode1600x1200p60 = /* 'uxg6' */ 0x75786736,
|
||||
bmdMode1920x1200p50 = /* 'wux5' */ 0x77757835,
|
||||
bmdMode1920x1200p60 = /* 'wux6' */ 0x77757836,
|
||||
bmdMode1920x1440p50 = /* '1945' */ 0x31393435,
|
||||
bmdMode1920x1440p60 = /* '1946' */ 0x31393436,
|
||||
bmdMode2560x1440p50 = /* 'wqh5' */ 0x77716835,
|
||||
bmdMode2560x1440p60 = /* 'wqh6' */ 0x77716836,
|
||||
bmdMode2560x1600p50 = /* 'wqx5' */ 0x77717835,
|
||||
bmdMode2560x1600p60 = /* 'wqx6' */ 0x77717836,
|
||||
|
||||
/* Special Modes */
|
||||
|
||||
bmdModeUnknown = /* 'iunk' */ 0x69756E6B
|
||||
};
|
||||
|
||||
/* Enum BMDFieldDominance - BMDFieldDominance enumerates settings applicable to video fields. */
|
||||
|
||||
typedef uint32_t BMDFieldDominance;
|
||||
enum _BMDFieldDominance {
|
||||
bmdUnknownFieldDominance = 0,
|
||||
bmdLowerFieldFirst = /* 'lowr' */ 0x6C6F7772,
|
||||
bmdUpperFieldFirst = /* 'uppr' */ 0x75707072,
|
||||
bmdProgressiveFrame = /* 'prog' */ 0x70726F67,
|
||||
bmdProgressiveSegmentedFrame = /* 'psf ' */ 0x70736620
|
||||
};
|
||||
|
||||
/* Enum BMDPixelFormat - Video pixel formats supported for output/input */
|
||||
|
||||
typedef uint32_t BMDPixelFormat;
|
||||
enum _BMDPixelFormat {
|
||||
bmdFormatUnspecified = 0,
|
||||
bmdFormat8BitYUV = /* '2vuy' */ 0x32767579,
|
||||
bmdFormat10BitYUV = /* 'v210' */ 0x76323130,
|
||||
bmdFormat8BitARGB = 32,
|
||||
bmdFormat8BitBGRA = /* 'BGRA' */ 0x42475241,
|
||||
bmdFormat10BitRGB = /* 'r210' */ 0x72323130, // Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10
|
||||
bmdFormat12BitRGB = /* 'R12B' */ 0x52313242, // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
|
||||
bmdFormat12BitRGBLE = /* 'R12L' */ 0x5231324C, // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
|
||||
bmdFormat10BitRGBXLE = /* 'R10l' */ 0x5231306C, // Little-endian 10-bit RGB with SMPTE video levels (64-940)
|
||||
bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062, // Big-endian 10-bit RGB with SMPTE video levels (64-940)
|
||||
bmdFormatH265 = /* 'hev1' */ 0x68657631, // High Efficiency Video Coding (HEVC/h.265)
|
||||
|
||||
/* AVID DNxHR */
|
||||
|
||||
bmdFormatDNxHR = /* 'AVdh' */ 0x41566468
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
|
||||
|
||||
typedef uint32_t BMDDisplayModeFlags;
|
||||
enum _BMDDisplayModeFlags {
|
||||
bmdDisplayModeSupports3D = 1 << 0,
|
||||
bmdDisplayModeColorspaceRec601 = 1 << 1,
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2,
|
||||
bmdDisplayModeColorspaceRec2020 = 1 << 3
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDisplayModeIterator;
|
||||
class IDeckLinkDisplayMode;
|
||||
|
||||
/* Interface IDeckLinkDisplayModeIterator - Enumerates over supported input/output display modes. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode** deckLinkDisplayMode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayModeIterator () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkDisplayMode - Represents a display mode */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ CFStringRef* name) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual HRESULT GetFrameRate (/* out */ BMDTimeValue* frameDuration, /* out */ BMDTimeScale* timeScale) = 0;
|
||||
virtual BMDFieldDominance GetFieldDominance (void) = 0;
|
||||
virtual BMDDisplayModeFlags GetFlags (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayMode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPIMODES_H) */
|
|
@ -0,0 +1,383 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPISTREAMING_H
|
||||
#define BMD_DECKLINKAPISTREAMING_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IBMDStreamingDeviceNotificationCallback = /* F9531D64-3305-4B29-A387-7F74BB0D0E84 */ { 0xF9,0x53,0x1D,0x64,0x33,0x05,0x4B,0x29,0xA3,0x87,0x7F,0x74,0xBB,0x0D,0x0E,0x84 };
|
||||
BMD_CONST REFIID IID_IBMDStreamingH264InputCallback = /* 823C475F-55AE-46F9-890C-537CC5CEDCCA */ { 0x82,0x3C,0x47,0x5F,0x55,0xAE,0x46,0xF9,0x89,0x0C,0x53,0x7C,0xC5,0xCE,0xDC,0xCA };
|
||||
BMD_CONST REFIID IID_IBMDStreamingDiscovery = /* 2C837444-F989-4D87-901A-47C8A36D096D */ { 0x2C,0x83,0x74,0x44,0xF9,0x89,0x4D,0x87,0x90,0x1A,0x47,0xC8,0xA3,0x6D,0x09,0x6D };
|
||||
BMD_CONST REFIID IID_IBMDStreamingVideoEncodingMode = /* 1AB8035B-CD13-458D-B6DF-5E8F7C2141D9 */ { 0x1A,0xB8,0x03,0x5B,0xCD,0x13,0x45,0x8D,0xB6,0xDF,0x5E,0x8F,0x7C,0x21,0x41,0xD9 };
|
||||
BMD_CONST REFIID IID_IBMDStreamingMutableVideoEncodingMode = /* 19BF7D90-1E0A-400D-B2C6-FFC4E78AD49D */ { 0x19,0xBF,0x7D,0x90,0x1E,0x0A,0x40,0x0D,0xB2,0xC6,0xFF,0xC4,0xE7,0x8A,0xD4,0x9D };
|
||||
BMD_CONST REFIID IID_IBMDStreamingVideoEncodingModePresetIterator = /* 7AC731A3-C950-4AD0-804A-8377AA51C6C4 */ { 0x7A,0xC7,0x31,0xA3,0xC9,0x50,0x4A,0xD0,0x80,0x4A,0x83,0x77,0xAA,0x51,0xC6,0xC4 };
|
||||
BMD_CONST REFIID IID_IBMDStreamingDeviceInput = /* 24B6B6EC-1727-44BB-9818-34FF086ACF98 */ { 0x24,0xB6,0xB6,0xEC,0x17,0x27,0x44,0xBB,0x98,0x18,0x34,0xFF,0x08,0x6A,0xCF,0x98 };
|
||||
BMD_CONST REFIID IID_IBMDStreamingH264NALPacket = /* E260E955-14BE-4395-9775-9F02CC0A9D89 */ { 0xE2,0x60,0xE9,0x55,0x14,0xBE,0x43,0x95,0x97,0x75,0x9F,0x02,0xCC,0x0A,0x9D,0x89 };
|
||||
BMD_CONST REFIID IID_IBMDStreamingAudioPacket = /* D9EB5902-1AD2-43F4-9E2C-3CFA50B5EE19 */ { 0xD9,0xEB,0x59,0x02,0x1A,0xD2,0x43,0xF4,0x9E,0x2C,0x3C,0xFA,0x50,0xB5,0xEE,0x19 };
|
||||
BMD_CONST REFIID IID_IBMDStreamingMPEG2TSPacket = /* 91810D1C-4FB3-4AAA-AE56-FA301D3DFA4C */ { 0x91,0x81,0x0D,0x1C,0x4F,0xB3,0x4A,0xAA,0xAE,0x56,0xFA,0x30,0x1D,0x3D,0xFA,0x4C };
|
||||
BMD_CONST REFIID IID_IBMDStreamingH264NALParser = /* 5867F18C-5BFA-4CCC-B2A7-9DFD140417D2 */ { 0x58,0x67,0xF1,0x8C,0x5B,0xFA,0x4C,0xCC,0xB2,0xA7,0x9D,0xFD,0x14,0x04,0x17,0xD2 };
|
||||
|
||||
/* Enum BMDStreamingDeviceMode - Device modes */
|
||||
|
||||
typedef uint32_t BMDStreamingDeviceMode;
|
||||
enum _BMDStreamingDeviceMode {
|
||||
bmdStreamingDeviceIdle = /* 'idle' */ 0x69646C65,
|
||||
bmdStreamingDeviceEncoding = /* 'enco' */ 0x656E636F,
|
||||
bmdStreamingDeviceStopping = /* 'stop' */ 0x73746F70,
|
||||
bmdStreamingDeviceUnknown = /* 'munk' */ 0x6D756E6B
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingEncodingFrameRate - Encoded frame rates */
|
||||
|
||||
typedef uint32_t BMDStreamingEncodingFrameRate;
|
||||
enum _BMDStreamingEncodingFrameRate {
|
||||
|
||||
/* Interlaced rates */
|
||||
|
||||
bmdStreamingEncodedFrameRate50i = /* 'e50i' */ 0x65353069,
|
||||
bmdStreamingEncodedFrameRate5994i = /* 'e59i' */ 0x65353969,
|
||||
bmdStreamingEncodedFrameRate60i = /* 'e60i' */ 0x65363069,
|
||||
|
||||
/* Progressive rates */
|
||||
|
||||
bmdStreamingEncodedFrameRate2398p = /* 'e23p' */ 0x65323370,
|
||||
bmdStreamingEncodedFrameRate24p = /* 'e24p' */ 0x65323470,
|
||||
bmdStreamingEncodedFrameRate25p = /* 'e25p' */ 0x65323570,
|
||||
bmdStreamingEncodedFrameRate2997p = /* 'e29p' */ 0x65323970,
|
||||
bmdStreamingEncodedFrameRate30p = /* 'e30p' */ 0x65333070,
|
||||
bmdStreamingEncodedFrameRate50p = /* 'e50p' */ 0x65353070,
|
||||
bmdStreamingEncodedFrameRate5994p = /* 'e59p' */ 0x65353970,
|
||||
bmdStreamingEncodedFrameRate60p = /* 'e60p' */ 0x65363070
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingEncodingSupport - Output encoding mode supported flag */
|
||||
|
||||
typedef uint32_t BMDStreamingEncodingSupport;
|
||||
enum _BMDStreamingEncodingSupport {
|
||||
bmdStreamingEncodingModeNotSupported = 0,
|
||||
bmdStreamingEncodingModeSupported,
|
||||
bmdStreamingEncodingModeSupportedWithChanges
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingVideoCodec - Video codecs */
|
||||
|
||||
typedef uint32_t BMDStreamingVideoCodec;
|
||||
enum _BMDStreamingVideoCodec {
|
||||
bmdStreamingVideoCodecH264 = /* 'H264' */ 0x48323634
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingH264Profile - H264 encoding profile */
|
||||
|
||||
typedef uint32_t BMDStreamingH264Profile;
|
||||
enum _BMDStreamingH264Profile {
|
||||
bmdStreamingH264ProfileHigh = /* 'high' */ 0x68696768,
|
||||
bmdStreamingH264ProfileMain = /* 'main' */ 0x6D61696E,
|
||||
bmdStreamingH264ProfileBaseline = /* 'base' */ 0x62617365
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingH264Level - H264 encoding level */
|
||||
|
||||
typedef uint32_t BMDStreamingH264Level;
|
||||
enum _BMDStreamingH264Level {
|
||||
bmdStreamingH264Level12 = /* 'lv12' */ 0x6C763132,
|
||||
bmdStreamingH264Level13 = /* 'lv13' */ 0x6C763133,
|
||||
bmdStreamingH264Level2 = /* 'lv2 ' */ 0x6C763220,
|
||||
bmdStreamingH264Level21 = /* 'lv21' */ 0x6C763231,
|
||||
bmdStreamingH264Level22 = /* 'lv22' */ 0x6C763232,
|
||||
bmdStreamingH264Level3 = /* 'lv3 ' */ 0x6C763320,
|
||||
bmdStreamingH264Level31 = /* 'lv31' */ 0x6C763331,
|
||||
bmdStreamingH264Level32 = /* 'lv32' */ 0x6C763332,
|
||||
bmdStreamingH264Level4 = /* 'lv4 ' */ 0x6C763420,
|
||||
bmdStreamingH264Level41 = /* 'lv41' */ 0x6C763431,
|
||||
bmdStreamingH264Level42 = /* 'lv42' */ 0x6C763432
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingH264EntropyCoding - H264 entropy coding */
|
||||
|
||||
typedef uint32_t BMDStreamingH264EntropyCoding;
|
||||
enum _BMDStreamingH264EntropyCoding {
|
||||
bmdStreamingH264EntropyCodingCAVLC = /* 'EVLC' */ 0x45564C43,
|
||||
bmdStreamingH264EntropyCodingCABAC = /* 'EBAC' */ 0x45424143
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingAudioCodec - Audio codecs */
|
||||
|
||||
typedef uint32_t BMDStreamingAudioCodec;
|
||||
enum _BMDStreamingAudioCodec {
|
||||
bmdStreamingAudioCodecAAC = /* 'AAC ' */ 0x41414320
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingEncodingModePropertyID - Encoding mode properties */
|
||||
|
||||
typedef uint32_t BMDStreamingEncodingModePropertyID;
|
||||
enum _BMDStreamingEncodingModePropertyID {
|
||||
|
||||
/* Integers, Video Properties */
|
||||
|
||||
bmdStreamingEncodingPropertyVideoFrameRate = /* 'vfrt' */ 0x76667274, // Uses values of type BMDStreamingEncodingFrameRate
|
||||
bmdStreamingEncodingPropertyVideoBitRateKbps = /* 'vbrt' */ 0x76627274,
|
||||
|
||||
/* Integers, H264 Properties */
|
||||
|
||||
bmdStreamingEncodingPropertyH264Profile = /* 'hprf' */ 0x68707266,
|
||||
bmdStreamingEncodingPropertyH264Level = /* 'hlvl' */ 0x686C766C,
|
||||
bmdStreamingEncodingPropertyH264EntropyCoding = /* 'hent' */ 0x68656E74,
|
||||
|
||||
/* Flags, H264 Properties */
|
||||
|
||||
bmdStreamingEncodingPropertyH264HasBFrames = /* 'hBfr' */ 0x68426672,
|
||||
|
||||
/* Integers, Audio Properties */
|
||||
|
||||
bmdStreamingEncodingPropertyAudioCodec = /* 'acdc' */ 0x61636463,
|
||||
bmdStreamingEncodingPropertyAudioSampleRate = /* 'asrt' */ 0x61737274,
|
||||
bmdStreamingEncodingPropertyAudioChannelCount = /* 'achc' */ 0x61636863,
|
||||
bmdStreamingEncodingPropertyAudioBitRateKbps = /* 'abrt' */ 0x61627274
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IBMDStreamingDeviceNotificationCallback;
|
||||
class IBMDStreamingH264InputCallback;
|
||||
class IBMDStreamingDiscovery;
|
||||
class IBMDStreamingVideoEncodingMode;
|
||||
class IBMDStreamingMutableVideoEncodingMode;
|
||||
class IBMDStreamingVideoEncodingModePresetIterator;
|
||||
class IBMDStreamingDeviceInput;
|
||||
class IBMDStreamingH264NALPacket;
|
||||
class IBMDStreamingAudioPacket;
|
||||
class IBMDStreamingMPEG2TSPacket;
|
||||
class IBMDStreamingH264NALParser;
|
||||
|
||||
/* Interface IBMDStreamingDeviceNotificationCallback - Device notification callbacks. */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingDeviceNotificationCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT StreamingDeviceArrived (/* in */ IDeckLink* device) = 0;
|
||||
virtual HRESULT StreamingDeviceRemoved (/* in */ IDeckLink* device) = 0;
|
||||
virtual HRESULT StreamingDeviceModeChanged (/* in */ IDeckLink* device, /* in */ BMDStreamingDeviceMode mode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingDeviceNotificationCallback () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingH264InputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT H264NALPacketArrived (/* in */ IBMDStreamingH264NALPacket* nalPacket) = 0;
|
||||
virtual HRESULT H264AudioPacketArrived (/* in */ IBMDStreamingAudioPacket* audioPacket) = 0;
|
||||
virtual HRESULT MPEG2TSPacketArrived (/* in */ IBMDStreamingMPEG2TSPacket* tsPacket) = 0;
|
||||
virtual HRESULT H264VideoInputConnectorScanningChanged (void) = 0;
|
||||
virtual HRESULT H264VideoInputConnectorChanged (void) = 0;
|
||||
virtual HRESULT H264VideoInputModeChanged (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingH264InputCallback () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingDiscovery - Installs device notifications */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingDiscovery : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT InstallDeviceNotifications (/* in */ IBMDStreamingDeviceNotificationCallback* theCallback) = 0;
|
||||
virtual HRESULT UninstallDeviceNotifications (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingDiscovery () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingVideoEncodingMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ CFStringRef* name) = 0;
|
||||
virtual unsigned int GetPresetID (void) = 0;
|
||||
virtual unsigned int GetSourcePositionX (void) = 0;
|
||||
virtual unsigned int GetSourcePositionY (void) = 0;
|
||||
virtual unsigned int GetSourceWidth (void) = 0;
|
||||
virtual unsigned int GetSourceHeight (void) = 0;
|
||||
virtual unsigned int GetDestWidth (void) = 0;
|
||||
virtual unsigned int GetDestHeight (void) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ bool* value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ int64_t* value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ double* value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* out */ CFStringRef* value) = 0;
|
||||
virtual HRESULT CreateMutableVideoEncodingMode (/* out */ IBMDStreamingMutableVideoEncodingMode** newEncodingMode) = 0; // Creates a mutable copy of the encoding mode
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingVideoEncodingMode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingMutableVideoEncodingMode : public IBMDStreamingVideoEncodingMode
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetSourceRect (/* in */ uint32_t posX, /* in */ uint32_t posY, /* in */ uint32_t width, /* in */ uint32_t height) = 0;
|
||||
virtual HRESULT SetDestSize (/* in */ uint32_t width, /* in */ uint32_t height) = 0;
|
||||
virtual HRESULT SetFlag (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ bool value) = 0;
|
||||
virtual HRESULT SetInt (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT SetFloat (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ double value) = 0;
|
||||
virtual HRESULT SetString (/* in */ BMDStreamingEncodingModePropertyID cfgID, /* in */ CFStringRef value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingMutableVideoEncodingMode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingVideoEncodingModePresetIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IBMDStreamingVideoEncodingMode** videoEncodingMode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingVideoEncodingModePresetIterator () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingDeviceInput : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
/* Input modes */
|
||||
|
||||
virtual HRESULT DoesSupportVideoInputMode (/* in */ BMDDisplayMode inputMode, /* out */ bool* result) = 0;
|
||||
virtual HRESULT GetVideoInputModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetVideoInputMode (/* in */ BMDDisplayMode inputMode) = 0;
|
||||
virtual HRESULT GetCurrentDetectedVideoInputMode (/* out */ BMDDisplayMode* detectedMode) = 0;
|
||||
|
||||
/* Capture modes */
|
||||
|
||||
virtual HRESULT GetVideoEncodingMode (/* out */ IBMDStreamingVideoEncodingMode** encodingMode) = 0;
|
||||
virtual HRESULT GetVideoEncodingModePresetIterator (/* in */ BMDDisplayMode inputMode, /* out */ IBMDStreamingVideoEncodingModePresetIterator** iterator) = 0;
|
||||
virtual HRESULT DoesSupportVideoEncodingMode (/* in */ BMDDisplayMode inputMode, /* in */ IBMDStreamingVideoEncodingMode* encodingMode, /* out */ BMDStreamingEncodingSupport* result, /* out */ IBMDStreamingVideoEncodingMode** changedEncodingMode) = 0;
|
||||
virtual HRESULT SetVideoEncodingMode (/* in */ IBMDStreamingVideoEncodingMode* encodingMode) = 0;
|
||||
|
||||
/* Input control */
|
||||
|
||||
virtual HRESULT StartCapture (void) = 0;
|
||||
virtual HRESULT StopCapture (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IUnknown* theCallback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingDeviceInput () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingH264NALPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetPayloadSize (void) = 0;
|
||||
virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
|
||||
virtual HRESULT GetBytesWithSizePrefix (/* out */ void** buffer) = 0; // Contains a 32-bit unsigned big endian size prefix
|
||||
virtual HRESULT GetDisplayTime (/* in */ uint64_t requestedTimeScale, /* out */ uint64_t* displayTime) = 0;
|
||||
virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0; // Deprecated
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingH264NALPacket () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingAudioPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDStreamingAudioCodec GetCodec (void) = 0;
|
||||
virtual long GetPayloadSize (void) = 0;
|
||||
virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
|
||||
virtual HRESULT GetPlayTime (/* in */ uint64_t requestedTimeScale, /* out */ uint64_t* playTime) = 0;
|
||||
virtual HRESULT GetPacketIndex (/* out */ uint32_t* packetIndex) = 0; // Deprecated
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingAudioPacket () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingMPEG2TSPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetPayloadSize (void) = 0;
|
||||
virtual HRESULT GetBytes (/* out */ void** buffer) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingMPEG2TSPacket () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IBMDStreamingH264NALParser - For basic NAL parsing */
|
||||
|
||||
class BMD_PUBLIC IBMDStreamingH264NALParser : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT IsNALSequenceParameterSet (/* in */ IBMDStreamingH264NALPacket* nal) = 0;
|
||||
virtual HRESULT IsNALPictureParameterSet (/* in */ IBMDStreamingH264NALPacket* nal) = 0;
|
||||
virtual HRESULT GetProfileAndLevelFromSPS (/* in */ IBMDStreamingH264NALPacket* nal, /* out */ uint32_t* profileIdc, /* out */ uint32_t* profileCompatability, /* out */ uint32_t* levelIdc) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IBMDStreamingH264NALParser () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
BMD_PUBLIC IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance(void);
|
||||
BMD_PUBLIC IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser(void);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPISTREAMING_H) */
|
|
@ -0,0 +1,59 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2018 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPISTREAMING_H
|
||||
#define BMD_DECKLINKAPISTREAMING_H
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance_v10_11 (void);
|
||||
IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser_v10_11 (void);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPISTREAMING_H) */
|
132
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPITypes.h
Normal file
132
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPITypes.h
Normal file
|
@ -0,0 +1,132 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2022 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation covered by
|
||||
** this license (the "Software") to use, reproduce, display, distribute,
|
||||
** execute, and transmit the Software, and to prepare derivative works of the
|
||||
** Software, and to permit third-parties to whom the Software is furnished to
|
||||
** do so, all subject to the following:
|
||||
**
|
||||
** The copyright notices in the Software and this entire statement, including
|
||||
** the above license grant, this restriction and the following disclaimer,
|
||||
** must be included in all copies of the Software, in whole or in part, and
|
||||
** all derivative works of the Software, unless such copies or derivative
|
||||
** works are solely in the form of machine-executable object code generated by
|
||||
** a source language processor.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPITYPES_H
|
||||
#define BMD_DECKLINKAPITYPES_H
|
||||
|
||||
|
||||
#ifndef BMD_CONST
|
||||
#if defined(_MSC_VER)
|
||||
#define BMD_CONST __declspec(selectany) static const
|
||||
#else
|
||||
#define BMD_CONST static const
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
typedef int64_t BMDTimeValue;
|
||||
typedef int64_t BMDTimeScale;
|
||||
typedef uint32_t BMDTimecodeBCD;
|
||||
typedef uint32_t BMDTimecodeUserBits;
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkTimecode = /* BC6CFBD3-8317-4325-AC1C-1216391E9340 */ { 0xBC,0x6C,0xFB,0xD3,0x83,0x17,0x43,0x25,0xAC,0x1C,0x12,0x16,0x39,0x1E,0x93,0x40 };
|
||||
|
||||
/* Enum BMDTimecodeFlags - Timecode flags */
|
||||
|
||||
typedef uint32_t BMDTimecodeFlags;
|
||||
enum _BMDTimecodeFlags {
|
||||
bmdTimecodeFlagDefault = 0,
|
||||
bmdTimecodeIsDropFrame = 1 << 0,
|
||||
bmdTimecodeFieldMark = 1 << 1,
|
||||
bmdTimecodeColorFrame = 1 << 2,
|
||||
bmdTimecodeEmbedRecordingTrigger = 1 << 3, // On SDI recording trigger utilises a user-bit.
|
||||
bmdTimecodeRecordingTriggered = 1 << 4
|
||||
};
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
||||
typedef uint32_t BMDVideoConnection;
|
||||
enum _BMDVideoConnection {
|
||||
bmdVideoConnectionUnspecified = 0,
|
||||
bmdVideoConnectionSDI = 1 << 0,
|
||||
bmdVideoConnectionHDMI = 1 << 1,
|
||||
bmdVideoConnectionOpticalSDI = 1 << 2,
|
||||
bmdVideoConnectionComponent = 1 << 3,
|
||||
bmdVideoConnectionComposite = 1 << 4,
|
||||
bmdVideoConnectionSVideo = 1 << 5
|
||||
};
|
||||
|
||||
/* Enum BMDAudioConnection - Audio connection types */
|
||||
|
||||
typedef uint32_t BMDAudioConnection;
|
||||
enum _BMDAudioConnection {
|
||||
bmdAudioConnectionEmbedded = 1 << 0,
|
||||
bmdAudioConnectionAESEBU = 1 << 1,
|
||||
bmdAudioConnectionAnalog = 1 << 2,
|
||||
bmdAudioConnectionAnalogXLR = 1 << 3,
|
||||
bmdAudioConnectionAnalogRCA = 1 << 4,
|
||||
bmdAudioConnectionMicrophone = 1 << 5,
|
||||
bmdAudioConnectionHeadphones = 1 << 6
|
||||
};
|
||||
|
||||
/* Enum BMDDeckControlConnection - Deck control connections */
|
||||
|
||||
typedef uint32_t BMDDeckControlConnection;
|
||||
enum _BMDDeckControlConnection {
|
||||
bmdDeckControlConnectionRS422Remote1 = 1 << 0,
|
||||
bmdDeckControlConnectionRS422Remote2 = 1 << 1
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkTimecode;
|
||||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkTimecode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
virtual HRESULT GetComponents (/* out */ uint8_t* hours, /* out */ uint8_t* minutes, /* out */ uint8_t* seconds, /* out */ uint8_t* frames) = 0;
|
||||
virtual HRESULT GetString (/* out */ CFStringRef* timecode) = 0;
|
||||
virtual BMDTimecodeFlags GetFlags (void) = 0;
|
||||
virtual HRESULT GetTimecodeUserBits (/* out */ BMDTimecodeUserBits* userBits) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkTimecode () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* defined(__cplusplus) */
|
||||
#endif /* defined(BMD_DECKLINKAPITYPES_H) */
|
|
@ -0,0 +1,50 @@
|
|||
/* -LICENSE-START-
|
||||
* ** Copyright (c) 2014 Blackmagic Design
|
||||
* **
|
||||
* ** Permission is hereby granted, free of charge, to any person or organization
|
||||
* ** obtaining a copy of the software and accompanying documentation (the
|
||||
* ** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
* ** and transmit the Software, and to prepare derivative works of the Software,
|
||||
* ** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
* ** accordance with:
|
||||
* **
|
||||
* ** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
* ** Agreement for the Software Development Kit (“EULA”) available at
|
||||
* ** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
* **
|
||||
* ** (2) if the Software is obtained from any third party, such licensing terms
|
||||
* ** as notified by that third party,
|
||||
* **
|
||||
* ** and all subject to the following:
|
||||
* **
|
||||
* ** (3) the copyright notices in the Software and this entire statement,
|
||||
* ** including the above license grant, this restriction and the following
|
||||
* ** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
* ** part, and all derivative works of the Software, unless such copies or
|
||||
* ** derivative works are solely in the form of machine-executable object code
|
||||
* ** generated by a source language processor.
|
||||
* **
|
||||
* ** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* ** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
* ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
* ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
* ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* ** DEALINGS IN THE SOFTWARE.
|
||||
* **
|
||||
* ** A copy of the Software is available free of charge at
|
||||
* ** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
* **
|
||||
* ** -LICENSE-END-
|
||||
* */
|
||||
|
||||
/* DeckLinkAPIVersion.h */
|
||||
|
||||
#ifndef __DeckLink_API_Version_h__
|
||||
#define __DeckLink_API_Version_h__
|
||||
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x0c040200
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "12.4.2"
|
||||
|
||||
#endif // __DeckLink_API_Version_h__
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderInput_v10_11 = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
|
||||
|
||||
/* Interface IDeckLinkEncoderInput_v10_11 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkEncoderInput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
|
||||
virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkEncoderInput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOENCODERINPUT_v10_11_H) */
|
|
@ -0,0 +1,91 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v10_11 = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
|
||||
|
||||
/* Interface IDeckLinkInput_v10_11 - DeckLink input interface. */
|
||||
|
||||
class IDeckLinkInput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1 *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v10_11_H) */
|
|
@ -0,0 +1,90 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v11_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPIVideoInput_v11_5_1.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v11_4 = /* 2A88CF76-F494-4216-A7EF-DC74EEB83882 */ { 0x2A,0x88,0xCF,0x76,0xF4,0x94,0x42,0x16,0xA7,0xEF,0xDC,0x74,0xEE,0xB8,0x38,0x82 };
|
||||
|
||||
/* Interface IDeckLinkInput_v11_4 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v11_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v11_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_4_H) */
|
|
@ -0,0 +1,102 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
|
||||
#define BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkInputCallback_v11_5_1 = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ { 0xDD, 0x04, 0xE5, 0xEC, 0x74, 0x15, 0x42, 0xAB, 0xAE, 0x4A, 0xE8, 0x0C, 0x4D, 0xFC, 0x04, 0x4A };
|
||||
BMD_CONST REFIID IID_IDeckLinkInput_v11_5_1 = /* 9434C6E4-B15D-4B1C-979E-661E3DDCB4B9 */ { 0x94, 0x34, 0xC6, 0xE4, 0xB1, 0x5D, 0x4B, 0x1C, 0x97, 0x9E, 0x66, 0x1E, 0x3D, 0xDC, 0xB4, 0xB9 };
|
||||
|
||||
/* Interface IDeckLinkInputCallback_v11_5_1 - Frame arrival callback. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v11_5_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode* newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v11_5_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkInput_v11_5_1 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkInput_v11_5_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of bmdVideoConnectionUnspecified is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDVideoInputConversionMode conversionMode, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t* availableFrameCount) = 0;
|
||||
virtual HRESULT SetVideoInputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t* availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v11_5_1* theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v11_5_1 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOINPUT_v11_5_1_H) */
|
|
@ -0,0 +1,108 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v10_11 = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
|
||||
|
||||
/* Interface IDeckLinkOutput_v10_11 - DeckLink output interface. */
|
||||
|
||||
class IDeckLinkOutput_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport_v10_11 *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v10_11_H) */
|
|
@ -0,0 +1,101 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2019 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
|
||||
#define BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput_v11_4 = /* 065A0F6C-C508-4D0D-B919-F5EB0EBFC96B */ { 0x06,0x5A,0x0F,0x6C,0xC5,0x08,0x4D,0x0D,0xB9,0x19,0xF5,0xEB,0x0E,0xBF,0xC9,0x6B };
|
||||
|
||||
/* Interface IDeckLinkOutput_v11_4 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkOutput_v11_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDVideoConnection connection /* If a value of 0 is specified, the caller does not care about the connection */, /* in */ BMDDisplayMode requestedMode, /* in */ BMDPixelFormat requestedPixelFormat, /* in */ BMDSupportedVideoModeFlags flags, /* out */ BMDDisplayMode* actualMode, /* out */ bool* supported) = 0;
|
||||
virtual HRESULT GetDisplayMode (/* in */ BMDDisplayMode displayMode, /* out */ IDeckLinkDisplayMode** resultDisplayMode) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator** iterator) = 0;
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback* previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame** outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary** outBuffer) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame* theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback* theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t* bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void* buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t* sampleFramesWritten) = 0;
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t* bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue* actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool* active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* streamTime, /* out */ double* playbackSpeed) = 0;
|
||||
virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus* referenceStatus) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* hardwareTime, /* out */ BMDTimeValue* timeInFrame, /* out */ BMDTimeValue* ticksPerFrame) = 0;
|
||||
virtual HRESULT GetFrameCompletionReferenceTimestamp (/* in */ IDeckLinkVideoFrame* theFrame, /* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue* frameCompletionTimestamp) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v11_4 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPIVIDEOOUTPUT_v11_4_H) */
|
|
@ -0,0 +1,135 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2018 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_11_H
|
||||
#define BMD_DECKLINKAPI_v10_11_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkAttributes_v10_11 = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
|
||||
BMD_CONST REFIID IID_IDeckLinkNotification_v10_11 = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
|
||||
|
||||
/* Enum BMDDisplayModeSupport_v10_11 - Output mode supported flags */
|
||||
|
||||
typedef uint32_t BMDDisplayModeSupport_v10_11;
|
||||
enum _BMDDisplayModeSupport_v10_11 {
|
||||
bmdDisplayModeNotSupported_v10_11 = 0,
|
||||
bmdDisplayModeSupported_v10_11,
|
||||
bmdDisplayModeSupportedWithConversion_v10_11
|
||||
};
|
||||
|
||||
/* Enum BMDDuplexMode_v10_11 - Duplex for configurable ports */
|
||||
|
||||
typedef uint32_t BMDDuplexMode_v10_11;
|
||||
enum _BMDDuplexMode_v10_11 {
|
||||
bmdDuplexModeFull_v10_11 = 'fdup',
|
||||
bmdDuplexModeHalf_v10_11 = 'hdup'
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID_v10_11 - DeckLink Attribute ID */
|
||||
|
||||
enum _BMDDeckLinkAttributeID_v10_11 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration_v10_11 = 'dupx',
|
||||
BMDDeckLinkSupportsHDKeying_v10_11 = 'keyh',
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkPairedDevicePersistentID_v10_11 = 'ppid',
|
||||
BMDDeckLinkSupportsFullDuplex_v10_11 = 'fdup',
|
||||
};
|
||||
|
||||
enum _BMDDeckLinkStatusID_v10_11 {
|
||||
bmdDeckLinkStatusDuplexMode_v10_11 = 'dupx',
|
||||
};
|
||||
|
||||
typedef uint32_t BMDDuplexStatus_v10_11;
|
||||
enum _BMDDuplexStatus_v10_11 {
|
||||
bmdDuplexFullDuplex_v10_11 = 'fdup',
|
||||
bmdDuplexHalfDuplex_v10_11 = 'hdup',
|
||||
bmdDuplexSimplex_v10_11 = 'splx',
|
||||
bmdDuplexInactive_v10_11 = 'inac',
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Interface IDeckLinkAttributes_v10_11 - DeckLink Attribute interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAttributes_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ double *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ CFStringRef *value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAttributes_v10_11 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkNotification_v10_11 - DeckLink Notification interface */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkNotification_v10_11 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
virtual HRESULT Unsubscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
};
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance_v10_11 (void);
|
||||
IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance_v10_11 (void);
|
||||
IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance_v10_11 (void);
|
||||
IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper_v10_11 (void);
|
||||
IDeckLinkCocoaScreenPreviewCallback* BMD_PUBLIC CreateCocoaScreenPreview_v10_11 (void* /* (NSView*) */ parentView);
|
||||
IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance_v10_11 (void);
|
||||
IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance_v10_11 (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
|
||||
}
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_11_H) */
|
|
@ -0,0 +1,68 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2014 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_2_H
|
||||
#define BMD_DECKLINKAPI_v10_2_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_2;
|
||||
enum _BMDDeckLinkConfigurationID_v10_2 {
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = '3gbs',
|
||||
};
|
||||
|
||||
/* Enum BMDAudioConnection_v10_2 - Audio connection types */
|
||||
|
||||
typedef uint32_t BMDAudioConnection_v10_2;
|
||||
enum _BMDAudioConnection_v10_2 {
|
||||
bmdAudioConnectionEmbedded_v10_2 = 'embd',
|
||||
bmdAudioConnectionAESEBU_v10_2 = 'aes ',
|
||||
bmdAudioConnectionAnalog_v10_2 = 'anlg',
|
||||
bmdAudioConnectionAnalogXLR_v10_2 = 'axlr',
|
||||
bmdAudioConnectionAnalogRCA_v10_2 = 'arca'
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_2_H) */
|
|
@ -0,0 +1,58 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_4_H
|
||||
#define BMD_DECKLINKAPI_v10_4_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_4;
|
||||
enum _BMDDeckLinkConfigurationID_v10_4 {
|
||||
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkConfigSingleLinkVideoOutput_v10_4 = /* 'sglo' */ 0x73676C6F,
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_4_H) */
|
|
@ -0,0 +1,59 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2015 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_5_H
|
||||
#define BMD_DECKLINKAPI_v10_5_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_v10_5;
|
||||
enum _BMDDeckLinkAttributeID_v10_5 {
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkDeviceBusyState_v10_5 = /* 'dbst' */ 0x64627374,
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_5_H) */
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_6_H
|
||||
#define BMD_DECKLINKAPI_v10_6_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkAttributeID_c10_6;
|
||||
enum _BMDDeckLinkAttributeID_v10_6 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
BMDDeckLinkSupportsDesktopDisplay_v10_6 = 'extd',
|
||||
};
|
||||
|
||||
typedef uint32_t BMDIdleVideoOutputOperation_v10_6;
|
||||
enum _BMDIdleVideoOutputOperation_v10_6 {
|
||||
bmdIdleVideoOutputDesktop_v10_6 = 'desk'
|
||||
};
|
||||
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_6_H) */
|
|
@ -0,0 +1,58 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2017 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v10_9_H
|
||||
#define BMD_DECKLINKAPI_v10_9_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Type Declarations
|
||||
|
||||
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkConfigurationID_v10_9;
|
||||
enum _BMDDeckLinkConfigurationID_v10_9 {
|
||||
|
||||
/* Flags */
|
||||
|
||||
bmdDeckLinkConfig1080pNotPsF_v10_9 = 'fpro',
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v10_9_H) */
|
|
@ -0,0 +1,113 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v11_5_H
|
||||
#define BMD_DECKLINKAPI_v11_5_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions_v11_5 = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
|
||||
|
||||
/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkFrameMetadataID_v11_5;
|
||||
enum _BMDDeckLinkFrameMetadataID_v11_5 {
|
||||
bmdDeckLinkFrameMetadataCintelFilmType_v11_5 = /* 'cfty' */ 0x63667479, // Current film type
|
||||
bmdDeckLinkFrameMetadataCintelFilmGauge_v11_5 = /* 'cfga' */ 0x63666761, // Current film gauge
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeLow_v11_5 = /* 'ckkl' */ 0x636B6B6C, // Raw keykode value - low 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeHigh_v11_5 = /* 'ckkh' */ 0x636B6B68, // Raw keykode value - high 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelTile1Size_v11_5 = /* 'ct1s' */ 0x63743173, // Size in bytes of compressed raw tile 1
|
||||
bmdDeckLinkFrameMetadataCintelTile2Size_v11_5 = /* 'ct2s' */ 0x63743273, // Size in bytes of compressed raw tile 2
|
||||
bmdDeckLinkFrameMetadataCintelTile3Size_v11_5 = /* 'ct3s' */ 0x63743373, // Size in bytes of compressed raw tile 3
|
||||
bmdDeckLinkFrameMetadataCintelTile4Size_v11_5 = /* 'ct4s' */ 0x63743473, // Size in bytes of compressed raw tile 4
|
||||
bmdDeckLinkFrameMetadataCintelImageWidth_v11_5 = /* 'IWPx' */ 0x49575078, // Width in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelImageHeight_v11_5 = /* 'IHPx' */ 0x49485078, // Height in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed_v11_5 = /* 'mrir' */ 0x6D726972, // Red in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed_v11_5 = /* 'mgir' */ 0x6D676972, // Green in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed_v11_5 = /* 'mbir' */ 0x6D626972, // Blue in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen_v11_5 = /* 'mrig' */ 0x6D726967, // Red in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen_v11_5 = /* 'mgig' */ 0x6D676967, // Green in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen_v11_5 = /* 'mbig' */ 0x6D626967, // Blue in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue_v11_5 = /* 'mrib' */ 0x6D726962, // Red in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue_v11_5 = /* 'mgib' */ 0x6D676962, // Green in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue_v11_5 = /* 'mbib' */ 0x6D626962, // Blue in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed_v11_5 = /* 'mlrr' */ 0x6D6C7272, // Red in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed_v11_5 = /* 'mlgr' */ 0x6D6C6772, // Green in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed_v11_5 = /* 'mlbr' */ 0x6D6C6272, // Blue in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen_v11_5 = /* 'mlrg' */ 0x6D6C7267, // Red in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen_v11_5 = /* 'mlgg' */ 0x6D6C6767, // Green in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen_v11_5 = /* 'mlbg' */ 0x6D6C6267, // Blue in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue_v11_5 = /* 'mlrb' */ 0x6D6C7262, // Red in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue_v11_5 = /* 'mlgb' */ 0x6D6C6762, // Green in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue_v11_5 = /* 'mlbb' */ 0x6D6C6262, // Blue in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelFilmFrameRate_v11_5 = /* 'cffr' */ 0x63666672, // Film frame rate
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal_v11_5 = /* 'otah' */ 0x6F746168, // Horizontal offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical_v11_5 = /* 'otav' */ 0x6F746176, // Vertical offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelGainRed_v11_5 = /* 'LfRd' */ 0x4C665264, // Red gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainGreen_v11_5 = /* 'LfGr' */ 0x4C664772, // Green gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainBlue_v11_5 = /* 'LfBl' */ 0x4C66426C, // Blue gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelLiftRed_v11_5 = /* 'GnRd' */ 0x476E5264, // Red lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftGreen_v11_5 = /* 'GnGr' */ 0x476E4772, // Green lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftBlue_v11_5 = /* 'GnBl' */ 0x476E426C, // Blue lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainRed_v11_5 = /* 'HGRd' */ 0x48475264, // Red gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainGreen_v11_5 = /* 'HGGr' */ 0x48474772, // Green gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintelHDRGainBlue_v11_5 = /* 'HGBl' */ 0x4847426C, // Blue gain parameter to apply to linear data for HDR Combination
|
||||
bmdDeckLinkFrameMetadataCintel16mmCropRequired_v11_5 = /* 'c16c' */ 0x63313663, // The image should be cropped to 16mm size
|
||||
bmdDeckLinkFrameMetadataCintelInversionRequired_v11_5 = /* 'cinv' */ 0x63696E76, // The image should be colour inverted
|
||||
bmdDeckLinkFrameMetadataCintelFlipRequired_v11_5 = /* 'cflr' */ 0x63666C72, // The image should be flipped horizontally
|
||||
bmdDeckLinkFrameMetadataCintelFocusAssistEnabled_v11_5 = /* 'cfae' */ 0x63666165, // Focus Assist is currently enabled
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeIsInterpolated_v11_5 = /* 'kkii' */ 0x6B6B6969 // The keykode for this frame is interpolated from nearby keykodes
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions_v11_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ double *value) = 0;
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ bool *value) = 0;
|
||||
virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID_v11_5 metadataID, /* out */ CFStringRef *value) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrameMetadataExtensions_v11_5 () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v11_5_H) */
|
|
@ -0,0 +1,57 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2020 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
#ifndef BMD_DECKLINKAPI_v11_5_1_H
|
||||
#define BMD_DECKLINKAPI_v11_5_1_H
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkStatusID_v11_5_1;
|
||||
enum _BMDDeckLinkStatusID_v11_5_1 {
|
||||
|
||||
/* Video output flags */
|
||||
|
||||
bmdDeckLinkStatusDetectedVideoInputFlags_v11_5_1 = /* 'dvif' */ 0x64766966,
|
||||
|
||||
};
|
||||
|
||||
#endif /* defined(BMD_DECKLINKAPI_v11_5_1_H) */
|
212
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_1.h
Normal file
212
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_1.h
Normal file
|
@ -0,0 +1,212 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
/* DeckLinkAPI_v7_1.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_1_h__
|
||||
#define __DeckLink_API_v7_1_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// "B28131B6-59AC-4857-B5AC-CD75D5883E2F"
|
||||
#define IID_IDeckLinkDisplayModeIterator_v7_1 (REFIID){0xB2,0x81,0x31,0xB6,0x59,0xAC,0x48,0x57,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F}
|
||||
|
||||
// "AF0CD6D5-8376-435E-8433-54F9DD530AC3"
|
||||
#define IID_IDeckLinkDisplayMode_v7_1 (REFIID){0xAF,0x0C,0xD6,0xD5,0x83,0x76,0x43,0x5E,0x84,0x33,0x54,0xF9,0xDD,0x53,0x0A,0xC3}
|
||||
|
||||
// "EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9"
|
||||
#define IID_IDeckLinkVideoOutputCallback_v7_1 (REFIID){0xEB,0xD0,0x1A,0xFA,0xE4,0xB0,0x49,0xC6,0xA0,0x1D,0xED,0xB9,0xD1,0xB5,0x5F,0xD9}
|
||||
|
||||
// "7F94F328-5ED4-4E9F-9729-76A86BDC99CC"
|
||||
#define IID_IDeckLinkInputCallback_v7_1 (REFIID){0x7F,0x94,0xF3,0x28,0x5E,0xD4,0x4E,0x9F,0x97,0x29,0x76,0xA8,0x6B,0xDC,0x99,0xCC}
|
||||
|
||||
// "AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5"
|
||||
#define IID_IDeckLinkOutput_v7_1 (REFIID){0xAE,0x5B,0x3E,0x9B,0x4E,0x1E,0x45,0x35,0xB6,0xE8,0x48,0x0F,0xF5,0x2F,0x6C,0xE5}
|
||||
|
||||
// "2B54EDEF-5B32-429F-BA11-BB990596EACD"
|
||||
#define IID_IDeckLinkInput_v7_1 (REFIID){0x2B,0x54,0xED,0xEF,0x5B,0x32,0x42,0x9F,0xBA,0x11,0xBB,0x99,0x05,0x96,0xEA,0xCD}
|
||||
|
||||
// "333F3A10-8C2D-43CF-B79D-46560FEEA1CE"
|
||||
#define IID_IDeckLinkVideoFrame_v7_1 (REFIID){0x33,0x3F,0x3A,0x10,0x8C,0x2D,0x43,0xCF,0xB7,0x9D,0x46,0x56,0x0F,0xEE,0xA1,0xCE}
|
||||
|
||||
// "C8B41D95-8848-40EE-9B37-6E3417FB114B"
|
||||
#define IID_IDeckLinkVideoInputFrame_v7_1 (REFIID){0xC8,0xB4,0x1D,0x95,0x88,0x48,0x40,0xEE,0x9B,0x37,0x6E,0x34,0x17,0xFB,0x11,0x4B}
|
||||
|
||||
// "C86DE4F6-A29F-42E3-AB3A-1363E29F0788"
|
||||
#define IID_IDeckLinkAudioInputPacket_v7_1 (REFIID){0xC8,0x6D,0xE4,0xF6,0xA2,0x9F,0x42,0xE3,0xAB,0x3A,0x13,0x63,0xE2,0x9F,0x07,0x88}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
class IDeckLinkVideoFrame_v7_1;
|
||||
class IDeckLinkDisplayModeIterator_v7_1;
|
||||
class IDeckLinkDisplayMode_v7_1;
|
||||
class IDeckLinkVideoInputFrame_v7_1;
|
||||
class IDeckLinkAudioInputPacket_v7_1;
|
||||
|
||||
class IDeckLinkDisplayModeIterator_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE Next (IDeckLinkDisplayMode_v7_1* *deckLinkDisplayMode) = 0;
|
||||
};
|
||||
|
||||
|
||||
class IDeckLinkDisplayMode_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE GetName (CFStringRef* name) = 0;
|
||||
virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetWidth () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetHeight () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFrameRate (BMDTimeValue *frameDuration, BMDTimeScale *timeScale) = 0;
|
||||
};
|
||||
|
||||
class IDeckLinkVideoOutputCallback_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted (IDeckLinkVideoFrame_v7_1* completedFrame, BMDOutputFrameCompletionResult result) = 0;
|
||||
};
|
||||
|
||||
class IDeckLinkInputCallback_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived (IDeckLinkVideoInputFrame_v7_1* videoFrame, IDeckLinkAudioInputPacket_v7_1* audioPacket) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkOutput_v7_1. Created by QueryInterface from IDeckLink.
|
||||
class IDeckLinkOutput_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
// Display mode predicates
|
||||
virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1* *iterator) = 0;
|
||||
|
||||
|
||||
// Video output
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput (BMDDisplayMode displayMode) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput () = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator (IDeckLinkMemoryAllocator* theAllocator) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateVideoFrameFromBuffer (void* buffer, int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync (IDeckLinkVideoFrame_v7_1* theFrame) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame (IDeckLinkVideoFrame_v7_1* theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback (IDeckLinkVideoOutputCallback_v7_1* theCallback) = 0;
|
||||
|
||||
|
||||
// Audio output
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput () = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples (void* buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples () = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetAudioCallback (IDeckLinkAudioOutputCallback* theCallback) = 0;
|
||||
|
||||
|
||||
// Output control
|
||||
virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkInput_v7_1. Created by QueryInterface from IDeckLink.
|
||||
class IDeckLinkInput_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;
|
||||
|
||||
// Video input
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableVideoInput () = 0;
|
||||
|
||||
// Audio input
|
||||
virtual HRESULT STDMETHODCALLTYPE EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE DisableAudioInput () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE ReadAudioSamples (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesRead, BMDTimeValue *audioPacketTime, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
|
||||
|
||||
// Input control
|
||||
virtual HRESULT STDMETHODCALLTYPE StartStreams () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE StopStreams () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE PauseStreams () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE SetCallback (IDeckLinkInputCallback_v7_1* theCallback) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkVideoFrame_v7_1. Created by IDeckLinkOutput::CreateVideoFrame.
|
||||
class IDeckLinkVideoFrame_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long STDMETHODCALLTYPE GetWidth () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetHeight () = 0;
|
||||
virtual long STDMETHODCALLTYPE GetRowBytes () = 0;
|
||||
virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat () = 0;
|
||||
virtual BMDFrameFlags STDMETHODCALLTYPE GetFlags () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkVideoInputFrame_v7_1. Provided by the IDeckLinkInput_v7_1 frame arrival callback.
|
||||
class IDeckLinkVideoInputFrame_v7_1 : public IDeckLinkVideoFrame_v7_1
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFrameTime (BMDTimeValue *frameTime, BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
};
|
||||
|
||||
// IDeckLinkAudioInputPacket_v7_1. Provided by the IDeckLinkInput_v7_1 callback.
|
||||
class IDeckLinkAudioInputPacket_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long STDMETHODCALLTYPE GetSampleCount () = 0;
|
||||
virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetAudioPacketTime (BMDTimeValue *packetTime, BMDTimeScale timeScale) = 0;
|
||||
};
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
|
||||
#endif // __DeckLink_API_v7_1_h__
|
||||
|
186
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_3.h
Normal file
186
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_3.h
Normal file
|
@ -0,0 +1,186 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/* DeckLinkAPI_v7_3.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_3_h__
|
||||
#define __DeckLink_API_v7_3_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v7_6.h"
|
||||
|
||||
/* Interface ID Declarations */
|
||||
|
||||
#define IID_IDeckLinkInputCallback_v7_3 /* FD6F311D-4D00-444B-9ED4-1F25B5730AD0 */ (REFIID){0xFD,0x6F,0x31,0x1D,0x4D,0x00,0x44,0x4B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0}
|
||||
#define IID_IDeckLinkOutput_v7_3 /* 271C65E3-C323-4344-A30F-D908BCB20AA3 */ (REFIID){0x27,0x1C,0x65,0xE3,0xC3,0x23,0x43,0x44,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3}
|
||||
#define IID_IDeckLinkInput_v7_3 /* 4973F012-9925-458C-871C-18774CDBBECB */ (REFIID){0x49,0x73,0xF0,0x12,0x99,0x25,0x45,0x8C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB}
|
||||
#define IID_IDeckLinkVideoInputFrame_v7_3 /* CF317790-2894-11DE-8C30-0800200C9A66 */ (REFIID){0xCF,0x31,0x77,0x90,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66}
|
||||
|
||||
/* End Interface ID Declarations */
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Forward Declarations */
|
||||
|
||||
class IDeckLinkVideoInputFrame_v7_3;
|
||||
|
||||
/* End Forward Declarations */
|
||||
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (BMDDisplayMode displayMode, BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount, BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkOutput */
|
||||
|
||||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkInputCallback_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_3 *videoFrame, /* in */ IDeckLinkAudioInputPacket *audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkInputCallback */
|
||||
|
||||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_3 *theCallback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkInput */
|
||||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoInputFrame_v7_3 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* End Interface IDeckLinkVideoInputFrame */
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // __DeckLink_API_v7_3_h__
|
435
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_6.h
Normal file
435
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_6.h
Normal file
|
@ -0,0 +1,435 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2009 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/* DeckLinkAPI_v7_6.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_6_h__
|
||||
#define __DeckLink_API_v7_6_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
#include "DeckLinkAPI_v10_11.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLinkVideoOutputCallback_v7_6 /* E763A626-4A3C-49D1-BF13-E7AD3692AE52 */ (REFIID){0xE7,0x63,0xA6,0x26,0x4A,0x3C,0x49,0xD1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52}
|
||||
#define IID_IDeckLinkInputCallback_v7_6 /* 31D28EE7-88B6-4CB1-897A-CDBF79A26414 */ (REFIID){0x31,0xD2,0x8E,0xE7,0x88,0xB6,0x4C,0xB1,0x89,0x7A,0xCD,0xBF,0x79,0xA2,0x64,0x14}
|
||||
#define IID_IDeckLinkDisplayModeIterator_v7_6 /* 455D741F-1779-4800-86F5-0B5D13D79751 */ (REFIID){0x45,0x5D,0x74,0x1F,0x17,0x79,0x48,0x00,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51}
|
||||
#define IID_IDeckLinkDisplayMode_v7_6 /* 87451E84-2B7E-439E-A629-4393EA4A8550 */ (REFIID){0x87,0x45,0x1E,0x84,0x2B,0x7E,0x43,0x9E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50}
|
||||
#define IID_IDeckLinkOutput_v7_6 /* 29228142-EB8C-4141-A621-F74026450955 */ (REFIID){0x29,0x22,0x81,0x42,0xEB,0x8C,0x41,0x41,0xA6,0x21,0xF7,0x40,0x26,0x45,0x09,0x55}
|
||||
#define IID_IDeckLinkInput_v7_6 /* 300C135A-9F43-48E2-9906-6D7911D93CF1 */ (REFIID){0x30,0x0C,0x13,0x5A,0x9F,0x43,0x48,0xE2,0x99,0x06,0x6D,0x79,0x11,0xD9,0x3C,0xF1}
|
||||
#define IID_IDeckLinkTimecode_v7_6 /* EFB9BCA6-A521-44F7-BD69-2332F24D9EE6 */ (REFIID){0xEF,0xB9,0xBC,0xA6,0xA5,0x21,0x44,0xF7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6}
|
||||
#define IID_IDeckLinkVideoFrame_v7_6 /* A8D8238E-6B18-4196-99E1-5AF717B83D32 */ (REFIID){0xA8,0xD8,0x23,0x8E,0x6B,0x18,0x41,0x96,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32}
|
||||
#define IID_IDeckLinkMutableVideoFrame_v7_6 /* 46FCEE00-B4E6-43D0-91C0-023A7FCEB34F */ (REFIID){0x46,0xFC,0xEE,0x00,0xB4,0xE6,0x43,0xD0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F}
|
||||
#define IID_IDeckLinkVideoInputFrame_v7_6 /* 9A74FA41-AE9F-47AC-8CF4-01F42DD59965 */ (REFIID){0x9A,0x74,0xFA,0x41,0xAE,0x9F,0x47,0xAC,0x8C,0xF4,0x01,0xF4,0x2D,0xD5,0x99,0x65}
|
||||
#define IID_IDeckLinkScreenPreviewCallback_v7_6 /* 373F499D-4B4D-4518-AD22-6354E5A5825E */ (REFIID){0x37,0x3F,0x49,0x9D,0x4B,0x4D,0x45,0x18,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E}
|
||||
#define IID_IDeckLinkCocoaScreenPreviewCallback_v7_6 /* D174152F-8F96-4C07-83A5-DD5F5AF0A2AA */ (REFIID){0xD1,0x74,0x15,0x2F,0x8F,0x96,0x4C,0x07,0x83,0xA5,0xDD,0x5F,0x5A,0xF0,0xA2,0xAA}
|
||||
#define IID_IDeckLinkGLScreenPreviewHelper_v7_6 /* BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA */ (REFIID){0xBA,0x57,0x5C,0xD9,0xA1,0x5E,0x49,0x7B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA}
|
||||
#define IID_IDeckLinkVideoConversion_v7_6 /* 3EB504C9-F97D-40FE-A158-D407D48CB53B */ (REFIID){0x3E,0xB5,0x04,0xC9,0xF9,0x7D,0x40,0xFE,0xA1,0x58,0xD4,0x07,0xD4,0x8C,0xB5,0x3B}
|
||||
#define IID_IDeckLinkConfiguration_v7_6 /* B8EAD569-B764-47F0-A73F-AE40DF6CBF10 */ (REFIID){0xB8,0xEA,0xD5,0x69,0xB7,0x64,0x47,0xF0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10}
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
||||
typedef uint32_t BMDVideoConnection_v7_6;
|
||||
enum _BMDVideoConnection_v7_6 {
|
||||
bmdVideoConnectionSDI_v7_6 = 'sdi ',
|
||||
bmdVideoConnectionHDMI_v7_6 = 'hdmi',
|
||||
bmdVideoConnectionOpticalSDI_v7_6 = 'opti',
|
||||
bmdVideoConnectionComponent_v7_6 = 'cpnt',
|
||||
bmdVideoConnectionComposite_v7_6 = 'cmst',
|
||||
bmdVideoConnectionSVideo_v7_6 = 'svid'
|
||||
};
|
||||
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkVideoOutputCallback_v7_6;
|
||||
class IDeckLinkInputCallback_v7_6;
|
||||
class IDeckLinkDisplayModeIterator_v7_6;
|
||||
class IDeckLinkDisplayMode_v7_6;
|
||||
class IDeckLinkOutput_v7_6;
|
||||
class IDeckLinkInput_v7_6;
|
||||
class IDeckLinkTimecode_v7_6;
|
||||
class IDeckLinkVideoFrame_v7_6;
|
||||
class IDeckLinkMutableVideoFrame_v7_6;
|
||||
class IDeckLinkVideoInputFrame_v7_6;
|
||||
class IDeckLinkScreenPreviewCallback_v7_6;
|
||||
class IDeckLinkCocoaScreenPreviewCallback_v7_6;
|
||||
class IDeckLinkGLScreenPreviewHelper_v7_6;
|
||||
class IDeckLinkVideoConversion_v7_6;
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
|
||||
|
||||
class IDeckLinkVideoOutputCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame_v7_6 *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
|
||||
virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoOutputCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkInputCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_6* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInputCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
|
||||
|
||||
class IDeckLinkDisplayModeIterator_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode_v7_6 **deckLinkDisplayMode) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayModeIterator_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkDisplayMode - represents a display mode */
|
||||
|
||||
class IDeckLinkDisplayMode_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ CFStringRef *name) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
|
||||
virtual BMDFieldDominance GetFieldDominance (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDisplayMode_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
|
||||
|
||||
/* Video Output */
|
||||
|
||||
virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoOutput (void) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
|
||||
virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
|
||||
virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
|
||||
|
||||
virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v7_6 *theCallback) = 0;
|
||||
virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
|
||||
|
||||
/* Audio Output */
|
||||
|
||||
virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
|
||||
virtual HRESULT DisableAudioOutput (void) = 0;
|
||||
|
||||
virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT BeginAudioPreroll (void) = 0;
|
||||
virtual HRESULT EndAudioPreroll (void) = 0;
|
||||
virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
|
||||
|
||||
virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
|
||||
virtual HRESULT FlushBufferedAudioSamples (void) = 0;
|
||||
|
||||
virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
|
||||
|
||||
/* Output Control */
|
||||
|
||||
virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
|
||||
virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
|
||||
virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkOutput_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkInput_v7_6 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport_v10_11 *result) = 0;
|
||||
virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
|
||||
|
||||
virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
|
||||
|
||||
/* Video Input */
|
||||
|
||||
virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
|
||||
virtual HRESULT DisableVideoInput (void) = 0;
|
||||
virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
|
||||
|
||||
/* Audio Input */
|
||||
|
||||
virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
|
||||
virtual HRESULT DisableAudioInput (void) = 0;
|
||||
virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
|
||||
|
||||
/* Input Control */
|
||||
|
||||
virtual HRESULT StartStreams (void) = 0;
|
||||
virtual HRESULT StopStreams (void) = 0;
|
||||
virtual HRESULT PauseStreams (void) = 0;
|
||||
virtual HRESULT FlushStreams (void) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_6 *theCallback) = 0;
|
||||
|
||||
/* Hardware Timing */
|
||||
|
||||
virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkInput_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class IDeckLinkTimecode_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
|
||||
virtual HRESULT GetString (/* out */ CFStringRef *timecode) = 0;
|
||||
virtual BMDTimecodeFlags GetFlags (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkTimecode_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
|
||||
|
||||
class IDeckLinkVideoFrame_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetWidth (void) = 0;
|
||||
virtual long GetHeight (void) = 0;
|
||||
virtual long GetRowBytes (void) = 0;
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
virtual BMDFrameFlags GetFlags (void) = 0;
|
||||
virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
|
||||
|
||||
virtual HRESULT GetTimecode (BMDTimecodeFormat format, /* out */ IDeckLinkTimecode_v7_6 **timecode) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrame_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
|
||||
|
||||
class IDeckLinkMutableVideoFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlags (BMDFrameFlags newFlags) = 0;
|
||||
|
||||
virtual HRESULT SetTimecode (BMDTimecodeFormat format, /* in */ IDeckLinkTimecode_v7_6 *timecode) = 0;
|
||||
virtual HRESULT SetTimecodeFromComponents (BMDTimecodeFormat format, uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t frames, BMDTimecodeFlags flags) = 0;
|
||||
virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkMutableVideoFrame_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class IDeckLinkVideoInputFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
virtual HRESULT GetHardwareReferenceTimestamp (BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoInputFrame_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
|
||||
|
||||
class IDeckLinkScreenPreviewCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkScreenPreviewCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkCocoaScreenPreviewCallback - Screen preview callback for Cocoa-based applications */
|
||||
|
||||
class IDeckLinkCocoaScreenPreviewCallback_v7_6 : public IDeckLinkScreenPreviewCallback_v7_6
|
||||
{
|
||||
public:
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkCocoaScreenPreviewCallback_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkGLScreenPreviewHelper_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
/* Methods must be called with OpenGL context set */
|
||||
|
||||
virtual HRESULT InitializeGL (void) = 0;
|
||||
virtual HRESULT PaintGL (void) = 0;
|
||||
virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkGLScreenPreviewHelper_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkVideoConversion_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame_v7_6* srcFrame, /* in */ IDeckLinkVideoFrame_v7_6* dstFrame) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoConversion_v7_6 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkConfiguration_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetConfigurationValidator (/* out */ IDeckLinkConfiguration_v7_6 **configObject) = 0;
|
||||
virtual HRESULT WriteConfigurationToPreferences (void) = 0;
|
||||
|
||||
/* Video Output Configuration */
|
||||
|
||||
virtual HRESULT SetVideoOutputFormat (/* in */ BMDVideoConnection_v7_6 videoOutputConnection) = 0;
|
||||
virtual HRESULT IsVideoOutputActive (/* in */ BMDVideoConnection_v7_6 videoOutputConnection, /* out */ bool *active) = 0;
|
||||
|
||||
virtual HRESULT SetAnalogVideoOutputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
|
||||
virtual HRESULT GetAnalogVideoOutputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
|
||||
|
||||
virtual HRESULT EnableFieldFlickerRemovalWhenPaused (/* in */ bool enable) = 0;
|
||||
virtual HRESULT IsEnabledFieldFlickerRemovalWhenPaused (/* out */ bool *enabled) = 0;
|
||||
|
||||
virtual HRESULT Set444And3GBpsVideoOutput (/* in */ bool enable444VideoOutput, /* in */ bool enable3GbsOutput) = 0;
|
||||
virtual HRESULT Get444And3GBpsVideoOutput (/* out */ bool *is444VideoOutputEnabled, /* out */ bool *threeGbsOutputEnabled) = 0;
|
||||
|
||||
virtual HRESULT SetVideoOutputConversionMode (/* in */ BMDVideoOutputConversionMode conversionMode) = 0;
|
||||
virtual HRESULT GetVideoOutputConversionMode (/* out */ BMDVideoOutputConversionMode *conversionMode) = 0;
|
||||
|
||||
virtual HRESULT Set_HD1080p24_to_HD1080i5994_Conversion (/* in */ bool enable) = 0;
|
||||
virtual HRESULT Get_HD1080p24_to_HD1080i5994_Conversion (/* out */ bool *enabled) = 0;
|
||||
|
||||
/* Video Input Configuration */
|
||||
|
||||
virtual HRESULT SetVideoInputFormat (/* in */ BMDVideoConnection_v7_6 videoInputFormat) = 0;
|
||||
virtual HRESULT GetVideoInputFormat (/* out */ BMDVideoConnection_v7_6 *videoInputFormat) = 0;
|
||||
|
||||
virtual HRESULT SetAnalogVideoInputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
|
||||
virtual HRESULT GetAnalogVideoInputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
|
||||
|
||||
virtual HRESULT SetVideoInputConversionMode (/* in */ BMDVideoInputConversionMode conversionMode) = 0;
|
||||
virtual HRESULT GetVideoInputConversionMode (/* out */ BMDVideoInputConversionMode *conversionMode) = 0;
|
||||
|
||||
virtual HRESULT SetBlackVideoOutputDuringCapture (/* in */ bool blackOutInCapture) = 0;
|
||||
virtual HRESULT GetBlackVideoOutputDuringCapture (/* out */ bool *blackOutInCapture) = 0;
|
||||
|
||||
virtual HRESULT Set32PulldownSequenceInitialTimecodeFrame (/* in */ uint32_t aFrameTimecode) = 0;
|
||||
virtual HRESULT Get32PulldownSequenceInitialTimecodeFrame (/* out */ uint32_t *aFrameTimecode) = 0;
|
||||
|
||||
virtual HRESULT SetVancSourceLineMapping (/* in */ uint32_t activeLine1VANCsource, /* in */ uint32_t activeLine2VANCsource, /* in */ uint32_t activeLine3VANCsource) = 0;
|
||||
virtual HRESULT GetVancSourceLineMapping (/* out */ uint32_t *activeLine1VANCsource, /* out */ uint32_t *activeLine2VANCsource, /* out */ uint32_t *activeLine3VANCsource) = 0;
|
||||
|
||||
/* Audio Input Configuration */
|
||||
|
||||
virtual HRESULT SetAudioInputFormat (/* in */ BMDAudioConnection audioInputFormat) = 0;
|
||||
virtual HRESULT GetAudioInputFormat (/* out */ BMDAudioConnection *audioInputFormat) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
||||
extern "C" {
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void);
|
||||
IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void);
|
||||
IDeckLinkCocoaScreenPreviewCallback_v7_6* CreateCocoaScreenPreview_v7_6 (void* /* (NSView*) */ parentView);
|
||||
IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void);
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // __DeckLink_API_v7_6_h__
|
104
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_9.h
Normal file
104
subprojects/gst-plugins-bad/sys/decklink2/mac/DeckLinkAPI_v7_9.h
Normal file
|
@ -0,0 +1,104 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2010 Blackmagic Design
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person or organization
|
||||
** obtaining a copy of the software and accompanying documentation (the
|
||||
** "Software") to use, reproduce, display, distribute, sub-license, execute,
|
||||
** and transmit the Software, and to prepare derivative works of the Software,
|
||||
** and to permit third-parties to whom the Software is furnished to do so, in
|
||||
** accordance with:
|
||||
**
|
||||
** (1) if the Software is obtained from Blackmagic Design, the End User License
|
||||
** Agreement for the Software Development Kit (“EULA”) available at
|
||||
** https://www.blackmagicdesign.com/EULA/DeckLinkSDK; or
|
||||
**
|
||||
** (2) if the Software is obtained from any third party, such licensing terms
|
||||
** as notified by that third party,
|
||||
**
|
||||
** and all subject to the following:
|
||||
**
|
||||
** (3) the copyright notices in the Software and this entire statement,
|
||||
** including the above license grant, this restriction and the following
|
||||
** disclaimer, must be included in all copies of the Software, in whole or in
|
||||
** part, and all derivative works of the Software, unless such copies or
|
||||
** derivative works are solely in the form of machine-executable object code
|
||||
** generated by a source language processor.
|
||||
**
|
||||
** (4) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||
** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||
** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||
** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
** DEALINGS IN THE SOFTWARE.
|
||||
**
|
||||
** A copy of the Software is available free of charge at
|
||||
** https://www.blackmagicdesign.com/desktopvideo_sdk under the EULA.
|
||||
**
|
||||
** -LICENSE-END-
|
||||
*/
|
||||
|
||||
/* DeckLinkAPI_v7_9.h */
|
||||
|
||||
#ifndef __DeckLink_API_v7_9_h__
|
||||
#define __DeckLink_API_v7_9_h__
|
||||
|
||||
#include "DeckLinkAPI.h"
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
#define IID_IDeckLinkDeckControl_v7_9 /* A4D81043-0619-42B7-8ED6-602D29041DF7 */ (REFIID){0xA4,0xD8,0x10,0x43,0x06,0x19,0x42,0xB7,0x8E,0xD6,0x60,0x2D,0x29,0x04,0x1D,0xF7}
|
||||
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
// Forward Declarations
|
||||
|
||||
class IDeckLinkDeckControl_v7_9;
|
||||
|
||||
|
||||
/* Interface IDeckLinkDeckControl_v7_9 - Deck Control main interface */
|
||||
|
||||
class IDeckLinkDeckControl_v7_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Close (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
|
||||
virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
|
||||
virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecodeString (/* out */ BMDstring *currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
|
||||
virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
|
||||
virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
|
||||
virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
|
||||
virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
|
||||
virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
|
||||
virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
|
||||
virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT Abort (void) = 0;
|
||||
virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
|
||||
virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback *callback) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkDeckControl_v7_9 () {}; // call Release method to drop reference count
|
||||
};
|
||||
|
||||
|
||||
#endif // defined(__cplusplus)
|
||||
#endif // __DeckLink_API_v7_9_h__
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue