New upstream version 23.2.1+dfsg1
This commit is contained in:
parent
cdc9a9fc87
commit
b14f9eae6d
1017 changed files with 37232 additions and 11111 deletions
20
plugins/decklink/DecklinkBase.cpp
Normal file
20
plugins/decklink/DecklinkBase.cpp
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#include "DecklinkBase.h"
|
||||
|
||||
DecklinkBase::DecklinkBase(DeckLinkDeviceDiscovery *discovery_)
|
||||
: discovery(discovery_)
|
||||
{
|
||||
}
|
||||
|
||||
DeckLinkDevice *DecklinkBase::GetDevice() const
|
||||
{
|
||||
return instance ? instance->GetDevice() : nullptr;
|
||||
}
|
||||
|
||||
bool DecklinkBase::Activate(DeckLinkDevice*, long long)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void DecklinkBase::Deactivate()
|
||||
{
|
||||
}
|
||||
33
plugins/decklink/DecklinkBase.h
Normal file
33
plugins/decklink/DecklinkBase.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
|
||||
#include <obs-module.h>
|
||||
|
||||
#include "platform.hpp"
|
||||
|
||||
#include "decklink-device-discovery.hpp"
|
||||
#include "decklink-device-instance.hpp"
|
||||
#include "decklink-device-mode.hpp"
|
||||
|
||||
class DecklinkBase {
|
||||
|
||||
protected:
|
||||
DecklinkBase(DeckLinkDeviceDiscovery *discovery_);
|
||||
ComPtr<DeckLinkDeviceInstance> instance;
|
||||
DeckLinkDeviceDiscovery *discovery;
|
||||
std::recursive_mutex deviceMutex;
|
||||
volatile long activateRefs = 0;
|
||||
BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
|
||||
video_colorspace colorSpace = VIDEO_CS_DEFAULT;
|
||||
video_range_type colorRange = VIDEO_RANGE_DEFAULT;
|
||||
speaker_layout channelFormat = SPEAKERS_STEREO;
|
||||
|
||||
public:
|
||||
virtual bool Activate(DeckLinkDevice *device, long long modeId);
|
||||
virtual void Deactivate();
|
||||
|
||||
DeckLinkDevice *GetDevice() const;
|
||||
};
|
||||
|
|
@ -1,30 +1,23 @@
|
|||
#include "decklink.hpp"
|
||||
#include "decklink-device-discovery.hpp"
|
||||
#include "decklink-device-instance.hpp"
|
||||
#include "decklink-device-mode.hpp"
|
||||
#include "DecklinkInput.hpp"
|
||||
|
||||
#include <util/threading.h>
|
||||
|
||||
DeckLink::DeckLink(obs_source_t *source, DeckLinkDeviceDiscovery *discovery_) :
|
||||
discovery(discovery_), source(source)
|
||||
DeckLinkInput::DeckLinkInput(obs_source_t *source, DeckLinkDeviceDiscovery *discovery_)
|
||||
: DecklinkBase(discovery_),
|
||||
source(source)
|
||||
{
|
||||
discovery->AddCallback(DeckLink::DevicesChanged, this);
|
||||
discovery->AddCallback(DeckLinkInput::DevicesChanged, this);
|
||||
}
|
||||
|
||||
DeckLink::~DeckLink(void)
|
||||
DeckLinkInput::~DeckLinkInput(void)
|
||||
{
|
||||
discovery->RemoveCallback(DeckLink::DevicesChanged, this);
|
||||
discovery->RemoveCallback(DeckLinkInput::DevicesChanged, this);
|
||||
Deactivate();
|
||||
}
|
||||
|
||||
DeckLinkDevice *DeckLink::GetDevice() const
|
||||
void DeckLinkInput::DevicesChanged(void *param, DeckLinkDevice *device, bool added)
|
||||
{
|
||||
return instance ? instance->GetDevice() : nullptr;
|
||||
}
|
||||
|
||||
void DeckLink::DevicesChanged(void *param, DeckLinkDevice *device, bool added)
|
||||
{
|
||||
DeckLink *decklink = reinterpret_cast<DeckLink*>(param);
|
||||
DeckLinkInput *decklink = reinterpret_cast<DeckLinkInput*>(param);
|
||||
std::lock_guard<std::recursive_mutex> lock(decklink->deviceMutex);
|
||||
|
||||
obs_source_update_properties(decklink->source);
|
||||
|
|
@ -33,16 +26,20 @@ void DeckLink::DevicesChanged(void *param, DeckLinkDevice *device, bool added)
|
|||
const char *hash;
|
||||
long long mode;
|
||||
obs_data_t *settings;
|
||||
BMDVideoConnection videoConnection;
|
||||
BMDAudioConnection audioConnection;
|
||||
|
||||
settings = obs_source_get_settings(decklink->source);
|
||||
hash = obs_data_get_string(settings, "device_hash");
|
||||
videoConnection = (BMDVideoConnection) obs_data_get_int(settings, "video_connection");
|
||||
audioConnection = (BMDAudioConnection) obs_data_get_int(settings, "audio_connection");
|
||||
mode = obs_data_get_int(settings, "mode_id");
|
||||
obs_data_release(settings);
|
||||
|
||||
if (device->GetHash().compare(hash) == 0) {
|
||||
if (!decklink->activateRefs)
|
||||
return;
|
||||
if (decklink->Activate(device, mode))
|
||||
if (decklink->Activate(device, mode, videoConnection, audioConnection))
|
||||
os_atomic_dec_long(&decklink->activateRefs);
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +51,9 @@ void DeckLink::DevicesChanged(void *param, DeckLinkDevice *device, bool added)
|
|||
}
|
||||
}
|
||||
|
||||
bool DeckLink::Activate(DeckLinkDevice *device, long long modeId)
|
||||
bool DeckLinkInput::Activate(DeckLinkDevice *device, long long modeId,
|
||||
BMDVideoConnection bmdVideoConnection,
|
||||
BMDAudioConnection bmdAudioConnection)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(deviceMutex);
|
||||
DeckLinkDevice *curDevice = GetDevice();
|
||||
|
|
@ -65,49 +64,66 @@ bool DeckLink::Activate(DeckLinkDevice *device, long long modeId)
|
|||
if (!isActive)
|
||||
return false;
|
||||
if (instance->GetActiveModeId() == modeId &&
|
||||
instance->GetVideoConnection() == bmdVideoConnection &&
|
||||
instance->GetAudioConnection() == bmdAudioConnection &&
|
||||
instance->GetActivePixelFormat() == pixelFormat &&
|
||||
instance->GetActiveColorSpace() == colorSpace &&
|
||||
instance->GetActiveColorRange() == colorRange &&
|
||||
instance->GetActiveChannelFormat() == channelFormat)
|
||||
instance->GetActiveChannelFormat() == channelFormat &&
|
||||
instance->GetActiveSwapState() == swap)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isActive)
|
||||
instance->StopCapture();
|
||||
|
||||
isCapturing = false;
|
||||
if (!same)
|
||||
instance.Set(new DeckLinkDeviceInstance(this, device));
|
||||
|
||||
if (instance == nullptr)
|
||||
return false;
|
||||
|
||||
DeckLinkDeviceMode *mode = GetDevice()->FindMode(modeId);
|
||||
if (GetDevice() == nullptr) {
|
||||
LOG(LOG_ERROR, "Tried to activate an input with nullptr device.");
|
||||
return false;
|
||||
}
|
||||
|
||||
DeckLinkDeviceMode *mode = GetDevice()->FindInputMode(modeId);
|
||||
if (mode == nullptr) {
|
||||
instance = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!instance->StartCapture(mode)) {
|
||||
if (!instance->StartCapture(mode, bmdVideoConnection, bmdAudioConnection)) {
|
||||
instance = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
os_atomic_inc_long(&activateRefs);
|
||||
SaveSettings();
|
||||
id = modeId;
|
||||
isCapturing = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeckLink::Deactivate(void)
|
||||
void DeckLinkInput::Deactivate(void)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(deviceMutex);
|
||||
if (instance)
|
||||
instance->StopCapture();
|
||||
isCapturing = false;
|
||||
instance = nullptr;
|
||||
|
||||
os_atomic_dec_long(&activateRefs);
|
||||
}
|
||||
|
||||
void DeckLink::SaveSettings()
|
||||
bool DeckLinkInput::Capturing(void)
|
||||
{
|
||||
return isCapturing;
|
||||
}
|
||||
|
||||
void DeckLinkInput::SaveSettings()
|
||||
{
|
||||
if (!instance)
|
||||
return;
|
||||
|
|
@ -127,7 +143,7 @@ void DeckLink::SaveSettings()
|
|||
obs_data_release(settings);
|
||||
}
|
||||
|
||||
obs_source_t *DeckLink::GetSource(void) const
|
||||
obs_source_t *DeckLinkInput::GetSource(void) const
|
||||
{
|
||||
return source;
|
||||
}
|
||||
|
|
@ -1,40 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include "platform.hpp"
|
||||
#include "DecklinkBase.h"
|
||||
|
||||
#include <obs-module.h>
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
|
||||
class DeckLinkDeviceDiscovery;
|
||||
class DeckLinkDeviceInstance;
|
||||
class DeckLinkDevice;
|
||||
class DeckLinkDeviceMode;
|
||||
|
||||
class DeckLink {
|
||||
class DeckLinkInput : public DecklinkBase {
|
||||
protected:
|
||||
ComPtr<DeckLinkDeviceInstance> instance;
|
||||
DeckLinkDeviceDiscovery *discovery;
|
||||
bool isCapturing = false;
|
||||
obs_source_t *source;
|
||||
volatile long activateRefs = 0;
|
||||
std::recursive_mutex deviceMutex;
|
||||
BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
|
||||
video_colorspace colorSpace = VIDEO_CS_DEFAULT;
|
||||
video_range_type colorRange = VIDEO_RANGE_DEFAULT;
|
||||
speaker_layout channelFormat = SPEAKERS_STEREO;
|
||||
|
||||
void SaveSettings();
|
||||
static void DevicesChanged(void *param, DeckLinkDevice *device,
|
||||
bool added);
|
||||
|
||||
public:
|
||||
DeckLink(obs_source_t *source, DeckLinkDeviceDiscovery *discovery);
|
||||
virtual ~DeckLink(void);
|
||||
|
||||
DeckLinkDevice *GetDevice() const;
|
||||
DeckLinkInput(obs_source_t *source, DeckLinkDeviceDiscovery *discovery);
|
||||
virtual ~DeckLinkInput(void);
|
||||
|
||||
long long GetActiveModeId(void) const;
|
||||
obs_source_t *GetSource(void) const;
|
||||
|
|
@ -60,8 +39,17 @@ public:
|
|||
channelFormat = format;
|
||||
}
|
||||
|
||||
bool Activate(DeckLinkDevice *device, long long modeId);
|
||||
bool Activate(DeckLinkDevice *device, long long modeId,
|
||||
BMDVideoConnection bmdVideoConnection,
|
||||
BMDAudioConnection bmdAudioConnection);
|
||||
void Deactivate();
|
||||
bool Capturing();
|
||||
|
||||
bool buffering = false;
|
||||
bool dwns = false;
|
||||
std::string hash;
|
||||
long long id;
|
||||
bool swap = false;
|
||||
BMDVideoConnection videoConnection;
|
||||
BMDAudioConnection audioConnection;
|
||||
};
|
||||
110
plugins/decklink/DecklinkOutput.cpp
Normal file
110
plugins/decklink/DecklinkOutput.cpp
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
#include "DecklinkOutput.hpp"
|
||||
|
||||
#include <util/threading.h>
|
||||
|
||||
DeckLinkOutput::DeckLinkOutput(obs_output_t *output, DeckLinkDeviceDiscovery *discovery_)
|
||||
: DecklinkBase(discovery_),
|
||||
output(output)
|
||||
{
|
||||
discovery->AddCallback(DeckLinkOutput::DevicesChanged, this);
|
||||
}
|
||||
|
||||
DeckLinkOutput::~DeckLinkOutput(void)
|
||||
{
|
||||
discovery->RemoveCallback(DeckLinkOutput::DevicesChanged, this);
|
||||
Deactivate();
|
||||
}
|
||||
|
||||
void DeckLinkOutput::DevicesChanged(void *param, DeckLinkDevice *device, bool)
|
||||
{
|
||||
auto *decklink = reinterpret_cast<DeckLinkOutput*>(param);
|
||||
std::lock_guard<std::recursive_mutex> lock(decklink->deviceMutex);
|
||||
|
||||
blog(LOG_DEBUG, "%s", device->GetHash().c_str());
|
||||
}
|
||||
|
||||
bool DeckLinkOutput::Activate(DeckLinkDevice *device, long long modeId)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(deviceMutex);
|
||||
DeckLinkDevice *curDevice = GetDevice();
|
||||
const bool same = device == curDevice;
|
||||
const bool isActive = instance != nullptr;
|
||||
|
||||
if (same) {
|
||||
if (!isActive)
|
||||
return false;
|
||||
|
||||
if (instance->GetActiveModeId() == modeId &&
|
||||
instance->GetActivePixelFormat() == pixelFormat &&
|
||||
instance->GetActiveColorSpace() == colorSpace &&
|
||||
instance->GetActiveColorRange() == colorRange &&
|
||||
instance->GetActiveChannelFormat() == channelFormat)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isActive)
|
||||
instance->StopOutput();
|
||||
|
||||
if (!same)
|
||||
instance.Set(new DeckLinkDeviceInstance(this, device));
|
||||
|
||||
if (instance == nullptr)
|
||||
return false;
|
||||
|
||||
DeckLinkDeviceMode *mode = GetDevice()->FindOutputMode(modeId);
|
||||
if (mode == nullptr) {
|
||||
instance = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (!instance->StartOutput(mode)) {
|
||||
instance = nullptr;
|
||||
return false;
|
||||
}
|
||||
|
||||
os_atomic_inc_long(&activateRefs);
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeckLinkOutput::Deactivate(void)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(deviceMutex);
|
||||
if (instance)
|
||||
instance->StopOutput();
|
||||
|
||||
instance = nullptr;
|
||||
|
||||
os_atomic_dec_long(&activateRefs);
|
||||
}
|
||||
|
||||
obs_output_t *DeckLinkOutput::GetOutput(void) const
|
||||
{
|
||||
return output;
|
||||
}
|
||||
|
||||
void DeckLinkOutput::DisplayVideoFrame(video_data *frame)
|
||||
{
|
||||
instance->DisplayVideoFrame(frame);
|
||||
}
|
||||
|
||||
void DeckLinkOutput::WriteAudio(audio_data *frames)
|
||||
{
|
||||
instance->WriteAudio(frames);
|
||||
}
|
||||
|
||||
void DeckLinkOutput::SetSize(int width, int height)
|
||||
{
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
}
|
||||
|
||||
int DeckLinkOutput::GetWidth()
|
||||
{
|
||||
return width;
|
||||
}
|
||||
|
||||
int DeckLinkOutput::GetHeight()
|
||||
{
|
||||
return height;
|
||||
}
|
||||
34
plugins/decklink/DecklinkOutput.hpp
Normal file
34
plugins/decklink/DecklinkOutput.hpp
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#pragma once
|
||||
|
||||
#include "DecklinkBase.h"
|
||||
|
||||
#include "../../libobs/media-io/video-scaler.h"
|
||||
|
||||
class DeckLinkOutput : public DecklinkBase {
|
||||
protected:
|
||||
obs_output_t *output;
|
||||
int width;
|
||||
int height;
|
||||
|
||||
static void DevicesChanged(void *param, DeckLinkDevice *device, bool added);
|
||||
|
||||
public:
|
||||
const char *deviceHash;
|
||||
long long modeID;
|
||||
uint64_t start_timestamp;
|
||||
uint32_t audio_samplerate;
|
||||
size_t audio_planes;
|
||||
size_t audio_size;
|
||||
int keyerMode;
|
||||
|
||||
DeckLinkOutput(obs_output_t *output, DeckLinkDeviceDiscovery *discovery);
|
||||
virtual ~DeckLinkOutput(void);
|
||||
obs_output_t *GetOutput(void) const;
|
||||
bool Activate(DeckLinkDevice *device, long long modeId) override;
|
||||
void Deactivate() override;
|
||||
void DisplayVideoFrame(video_data *pData);
|
||||
void WriteAudio(audio_data *frames);
|
||||
void SetSize(int width, int height);
|
||||
int GetWidth();
|
||||
int GetHeight();
|
||||
};
|
||||
|
|
@ -21,38 +21,16 @@ int check_buffer(struct audio_repack *repack,
|
|||
}
|
||||
|
||||
/*
|
||||
* Swap channel 3 & 4, 5 & 7, 6 & 8 and squash arrays
|
||||
* Squash arrays.
|
||||
* For instance:
|
||||
* 2.1:
|
||||
*
|
||||
* | FL | FR | LFE | emp | emp | emp |emp |emp |
|
||||
* | | |
|
||||
* | FL | FR | LFE |
|
||||
* 4.0 (quad):
|
||||
*
|
||||
* | FL | FR | BR | BL | emp | emp |emp |emp |
|
||||
* | | x |
|
||||
* | FL | FR | BL | BC |
|
||||
*
|
||||
* 4.1:
|
||||
*
|
||||
* | FL | FR |LFE | FC | BC | emp |emp |emp |
|
||||
* | | x | |
|
||||
* | FL | FR | FC |LFE | BC |
|
||||
*
|
||||
* 5.1:
|
||||
*
|
||||
* | FL | FR |LFE | FC |(emp|emp)|(BL|BR)|
|
||||
* | | x x
|
||||
* | FL | FR | FC |LFE | BL | BR |
|
||||
*
|
||||
* 7.1:
|
||||
*
|
||||
* | FL | FR |LFE | FC |( SL | SR )|(BL |BR )|
|
||||
* | | x X
|
||||
* | FL | FR | FC |LFE |( BL | BR )|(SL |SR )|
|
||||
*/
|
||||
*/
|
||||
|
||||
int repack_squash_swap(struct audio_repack *repack,
|
||||
int repack_squash(struct audio_repack *repack,
|
||||
const uint8_t *bsrc, uint32_t frame_count)
|
||||
{
|
||||
if (check_buffer(repack, frame_count) < 0)
|
||||
|
|
@ -62,28 +40,39 @@ int repack_squash_swap(struct audio_repack *repack,
|
|||
const __m128i *src = (__m128i *)bsrc;
|
||||
const __m128i *esrc = src + frame_count;
|
||||
uint16_t *dst = (uint16_t *)repack->packet_buffer;
|
||||
/* 2.1 audio does not require re-ordering but still needs squashing
|
||||
* in order to avoid sampling issues.
|
||||
|
||||
/* Audio needs squashing in order to avoid resampling issues.
|
||||
* The condition checks for 7.1 audio for which no squash is needed.
|
||||
*/
|
||||
if (squash == 5) {
|
||||
if (squash > 0) {
|
||||
while (src != esrc) {
|
||||
__m128i target = _mm_load_si128(src++);
|
||||
_mm_storeu_si128((__m128i *)dst, target);
|
||||
dst += 8 - squash;
|
||||
}
|
||||
} else {
|
||||
while (src != esrc) {
|
||||
__m128i target = _mm_load_si128(src++);
|
||||
__m128i buf = _mm_shufflelo_epi16(target, _MM_SHUFFLE(2, 3, 1, 0));
|
||||
__m128i buf2 = _mm_shufflehi_epi16(buf, _MM_SHUFFLE(1, 0, 3, 2));
|
||||
_mm_storeu_si128((__m128i *)dst, buf2);
|
||||
dst += 8 - squash;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int repack_squash_swap(struct audio_repack *repack,
|
||||
const uint8_t *bsrc, uint32_t frame_count)
|
||||
{
|
||||
if (check_buffer(repack, frame_count) < 0)
|
||||
return -1;
|
||||
int squash = repack->extra_dst_size;
|
||||
const __m128i *src = (__m128i *)bsrc;
|
||||
const __m128i *esrc = src + frame_count;
|
||||
uint16_t *dst = (uint16_t *)repack->packet_buffer;
|
||||
while (src != esrc) {
|
||||
__m128i target = _mm_load_si128(src++);
|
||||
__m128i buf = _mm_shufflelo_epi16(target, _MM_SHUFFLE(2, 3, 1, 0));
|
||||
_mm_storeu_si128((__m128i *)dst, buf);
|
||||
dst += 8 - squash;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int audio_repack_init(struct audio_repack *repack,
|
||||
audio_repack_mode_t repack_mode, uint8_t sample_bit)
|
||||
{
|
||||
|
|
@ -91,44 +80,15 @@ int audio_repack_init(struct audio_repack *repack,
|
|||
|
||||
if (sample_bit != 16)
|
||||
return -1;
|
||||
|
||||
switch (repack_mode) {
|
||||
case repack_mode_8to3ch_swap23:
|
||||
repack->base_src_size = 8 * (16 / 8);
|
||||
repack->base_dst_size = 3 * (16 / 8);
|
||||
repack->extra_dst_size = 5;
|
||||
int _audio_repack_ch[8] = { 3, 4, 5, 6, 5, 6, 8, 8 };
|
||||
repack->base_src_size = 8 * (16 / 8);
|
||||
repack->base_dst_size = _audio_repack_ch[repack_mode] * (16 / 8);
|
||||
repack->extra_dst_size = 8 - _audio_repack_ch[repack_mode];
|
||||
repack->repack_func = &repack_squash;
|
||||
if (repack_mode == repack_mode_8to5ch_swap ||
|
||||
repack_mode == repack_mode_8to6ch_swap ||
|
||||
repack_mode == repack_mode_8ch_swap)
|
||||
repack->repack_func = &repack_squash_swap;
|
||||
break;
|
||||
case repack_mode_8to4ch_swap23:
|
||||
repack->base_src_size = 8 * (16 / 8);
|
||||
repack->base_dst_size = 4 * (16 / 8);
|
||||
repack->extra_dst_size = 4;
|
||||
repack->repack_func = &repack_squash_swap;
|
||||
break;
|
||||
|
||||
case repack_mode_8to5ch_swap23:
|
||||
repack->base_src_size = 8 * (16 / 8);
|
||||
repack->base_dst_size = 5 * (16 / 8);
|
||||
repack->extra_dst_size = 3;
|
||||
repack->repack_func = &repack_squash_swap;
|
||||
break;
|
||||
|
||||
case repack_mode_8to6ch_swap23:
|
||||
repack->base_src_size = 8 * (16 / 8);
|
||||
repack->base_dst_size = 6 * (16 / 8);
|
||||
repack->extra_dst_size = 2;
|
||||
repack->repack_func = &repack_squash_swap;
|
||||
break;
|
||||
|
||||
case repack_mode_8ch_swap23_swap46_swap57:
|
||||
repack->base_src_size = 8 * (16 / 8);
|
||||
repack->base_dst_size = 8 * (16 / 8);
|
||||
repack->extra_dst_size = 0;
|
||||
repack->repack_func = &repack_squash_swap;
|
||||
break;
|
||||
|
||||
default: return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,11 +26,14 @@ struct audio_repack {
|
|||
};
|
||||
|
||||
enum _audio_repack_mode {
|
||||
repack_mode_8to3ch_swap23,
|
||||
repack_mode_8to4ch_swap23,
|
||||
repack_mode_8to5ch_swap23,
|
||||
repack_mode_8to6ch_swap23,
|
||||
repack_mode_8ch_swap23_swap46_swap57,
|
||||
repack_mode_8to3ch=0,
|
||||
repack_mode_8to4ch,
|
||||
repack_mode_8to5ch,
|
||||
repack_mode_8to6ch,
|
||||
repack_mode_8to5ch_swap,
|
||||
repack_mode_8to6ch_swap,
|
||||
repack_mode_8ch_swap,
|
||||
repack_mode_8ch,
|
||||
};
|
||||
|
||||
typedef enum _audio_repack_mode audio_repack_mode_t;
|
||||
|
|
|
|||
41
plugins/decklink/const.h
Normal file
41
plugins/decklink/const.h
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#define DEVICE_HASH "device_hash"
|
||||
#define DEVICE_NAME "device_name"
|
||||
#define VIDEO_CONNECTION "video_connection"
|
||||
#define AUDIO_CONNECTION "audio_connection"
|
||||
#define MODE_ID "mode_id"
|
||||
#define MODE_NAME "mode_name"
|
||||
#define CHANNEL_FORMAT "channel_format"
|
||||
#define PIXEL_FORMAT "pixel_format"
|
||||
#define COLOR_SPACE "color_space"
|
||||
#define COLOR_RANGE "color_range"
|
||||
#define BUFFERING "buffering"
|
||||
#define DEACTIVATE_WNS "deactivate_when_not_showing"
|
||||
#define AUTO_START "auto_start"
|
||||
#define KEYER "keyer"
|
||||
#define SWAP "swap"
|
||||
|
||||
#define TEXT_DEVICE obs_module_text("Device")
|
||||
#define TEXT_VIDEO_CONNECTION obs_module_text("VideoConnection")
|
||||
#define TEXT_AUDIO_CONNECTION obs_module_text("AudioConnection")
|
||||
#define TEXT_MODE obs_module_text("Mode")
|
||||
#define TEXT_PIXEL_FORMAT obs_module_text("PixelFormat")
|
||||
#define TEXT_COLOR_SPACE obs_module_text("ColorSpace")
|
||||
#define TEXT_COLOR_SPACE_DEFAULT obs_module_text("ColorSpace.Default")
|
||||
#define TEXT_COLOR_RANGE obs_module_text("ColorRange")
|
||||
#define TEXT_COLOR_RANGE_DEFAULT obs_module_text("ColorRange.Default")
|
||||
#define TEXT_COLOR_RANGE_PARTIAL obs_module_text("ColorRange.Partial")
|
||||
#define TEXT_COLOR_RANGE_FULL obs_module_text("ColorRange.Full")
|
||||
#define TEXT_CHANNEL_FORMAT obs_module_text("ChannelFormat")
|
||||
#define TEXT_CHANNEL_FORMAT_NONE obs_module_text("ChannelFormat.None")
|
||||
#define TEXT_CHANNEL_FORMAT_2_0CH obs_module_text("ChannelFormat.2_0ch")
|
||||
#define TEXT_CHANNEL_FORMAT_2_1CH obs_module_text("ChannelFormat.2_1ch")
|
||||
#define TEXT_CHANNEL_FORMAT_4_0CH obs_module_text("ChannelFormat.4_0ch")
|
||||
#define TEXT_CHANNEL_FORMAT_4_1CH obs_module_text("ChannelFormat.4_1ch")
|
||||
#define TEXT_CHANNEL_FORMAT_5_1CH obs_module_text("ChannelFormat.5_1ch")
|
||||
#define TEXT_CHANNEL_FORMAT_7_1CH obs_module_text("ChannelFormat.7_1ch")
|
||||
#define TEXT_BUFFERING obs_module_text("Buffering")
|
||||
#define TEXT_DWNS obs_module_text("DeactivateWhenNotShowing")
|
||||
#define TEXT_AUTO_START obs_module_text("AutoStart")
|
||||
#define TEXT_ENABLE_KEYER obs_module_text("Keyer")
|
||||
#define TEXT_SWAP obs_module_text("SwapFC-LFE")
|
||||
#define TEXT_SWAP_TOOLTIP obs_module_text("SwapFC-LFE.Tooltip")
|
||||
|
|
@ -3,4 +3,18 @@ Device="الجهاز"
|
|||
Mode="الوضع"
|
||||
Buffering="استخدام التخزين المؤقت"
|
||||
PixelFormat="صيغة البكسل"
|
||||
ColorSpace.Default="الافتراضي"
|
||||
ColorRange.Default="الافتراضي"
|
||||
ColorRange.Partial="جزئي"
|
||||
ColorRange.Full="كامل"
|
||||
ChannelFormat="قناة"
|
||||
ChannelFormat.None="بلا"
|
||||
ChannelFormat.2_0ch="2ch"
|
||||
ChannelFormat.2_1ch="2.1ch"
|
||||
ChannelFormat.4_0ch="4ch"
|
||||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="التعطيل عندما لا يكون ظاهراً"
|
||||
AutoStart="البدء تلقائياً مع التشغيل"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
BlackmagicDevice="Blackmagic যন্ত্র"
|
||||
Device="ডিভাইস"
|
||||
PixelFormat="পিক্সেল বিন্যাস"
|
||||
ColorRange.Partial="আংশিক"
|
||||
ColorRange.Full="পূর্ণ"
|
||||
ChannelFormat="চ্যানেল"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Dispositiu"
|
|||
Mode="Mode"
|
||||
Buffering="Usa memòria intermèdia"
|
||||
PixelFormat="Format de píxel"
|
||||
ColorSpace="Espai de color YUV"
|
||||
ColorSpace="Espai de color"
|
||||
ColorSpace.Default="Per defecte"
|
||||
ColorRange="Gamma de color YUV"
|
||||
ColorRange="Gamma de colors"
|
||||
ColorRange.Default="Per defecte"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Complet"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4"
|
|||
ChannelFormat.4_1ch="4.1"
|
||||
ChannelFormat.5_1ch="Canals 5.1"
|
||||
ChannelFormat.7_1ch="Canals 7.1"
|
||||
DeactivateWhenNotShowing="Desactiva quan no es mostra"
|
||||
AutoStart="Executa automàticament a l'inici"
|
||||
SwapFC-LFE="Commuta FC i LFE"
|
||||
SwapFC-LFE.Tooltip="Commuta el centre del canal frontal i el subwoofer"
|
||||
VideoConnection="Connexió de vídeo"
|
||||
AudioConnection="Connexió d'àudio"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Zařízení"
|
|||
Mode="Mód"
|
||||
Buffering="Použít vyrovnávací paměť"
|
||||
PixelFormat="Formát pixelů"
|
||||
ColorSpace="Prostor barev YUV"
|
||||
ColorSpace="Barevný prostor"
|
||||
ColorSpace.Default="Výchozí"
|
||||
ColorRange="Rozsah barev YUV"
|
||||
ColorRange="Rozsah barev"
|
||||
ColorRange.Default="Výchozí"
|
||||
ColorRange.Partial="Částečný"
|
||||
ColorRange.Full="Plný"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Deaktivovat při skrytém"
|
||||
AutoStart="Spustit při startu"
|
||||
SwapFC-LFE="Prohodit FC a LFE"
|
||||
SwapFC-LFE.Tooltip="Prohodí přední prostřední kanál a LFE kanál (Subwoofer)"
|
||||
VideoConnection="Obrazové spojení"
|
||||
AudioConnection="Zvukové spojení"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,26 @@
|
|||
BlackmagicDevice="Blackmagic-enhed"
|
||||
Device="Enhed"
|
||||
Mode="Tilstand"
|
||||
Buffering="Brug buffering"
|
||||
Buffering="Benyt buffering"
|
||||
PixelFormat="Pixelformat"
|
||||
ColorSpace="YUV farverum"
|
||||
ColorSpace="Farverum"
|
||||
ColorSpace.Default="Standard"
|
||||
ColorRange="YUV-farveområde"
|
||||
ColorRange="Farveområde"
|
||||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Delvis"
|
||||
ColorRange.Full="Fuld"
|
||||
ChannelFormat="Kanal"
|
||||
ChannelFormat.None="Intet"
|
||||
ChannelFormat.2_0ch="2kan"
|
||||
ChannelFormat.2_1ch="2.1 kasnals"
|
||||
ChannelFormat.2_0ch="2 kanals"
|
||||
ChannelFormat.2_1ch="2.1 kanals"
|
||||
ChannelFormat.4_0ch="4 kanals"
|
||||
ChannelFormat.4_1ch="4.1 kanals"
|
||||
ChannelFormat.5_1ch="5.1 kanals"
|
||||
ChannelFormat.7_1ch="7.1 kanals"
|
||||
DeactivateWhenNotShowing="Deaktivér, hvis ikke synlig"
|
||||
AutoStart="Autostart ved opstart"
|
||||
SwapFC-LFE="Ombyt FC og LFE"
|
||||
SwapFC-LFE.Tooltip="Byt Front Center-kanal og LFE-kanal"
|
||||
VideoConnection="Videoforbindelse"
|
||||
AudioConnection="Lydforbindelse"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
BlackmagicDevice="Blackmagic Gerät"
|
||||
BlackmagicDevice="Blackmagic-Gerät"
|
||||
Device="Gerät"
|
||||
Mode="Modus"
|
||||
Buffering="Buffering benutzen"
|
||||
Buffering="Puffern benutzen"
|
||||
PixelFormat="Pixelformat"
|
||||
ColorSpace="YUV-Farbmatrix"
|
||||
ColorSpace="Farbraum"
|
||||
ColorSpace.Default="Standard"
|
||||
ColorRange="YUV-Farbbereich"
|
||||
ColorRange="Farbbereich"
|
||||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Begrenzt"
|
||||
ColorRange.Full="Voll"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4 Kanal"
|
|||
ChannelFormat.4_1ch="4.1 Kanal"
|
||||
ChannelFormat.5_1ch="5.1 Kanal"
|
||||
ChannelFormat.7_1ch="7.1 Kanal"
|
||||
DeactivateWhenNotShowing="Deaktivieren, wenn die Quelle nicht angezeigt wird"
|
||||
AutoStart="Automatisch beim Öffnen starten"
|
||||
SwapFC-LFE="FC und LFE tauschen"
|
||||
SwapFC-LFE.Tooltip="Vorderen Front-Center-Kanal und LFE-Kanal tauschen"
|
||||
VideoConnection="Videoverbindung"
|
||||
AudioConnection="Audioverbindung"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@ Device="Συσκευή"
|
|||
Mode="Λειτουργία"
|
||||
Buffering="Χρήση ενδιάμεσης μνήμης"
|
||||
PixelFormat="Μορφή pixel"
|
||||
ColorSpace="Χώρος Χρωμάτων YUV"
|
||||
ColorSpace.Default="Προεπιλογή"
|
||||
ColorRange="Έκταση Χρωμάτων YUV"
|
||||
ColorRange.Default="Προεπιλογή"
|
||||
ColorRange.Partial="Μερική"
|
||||
ColorRange.Full="Πλήρης"
|
||||
|
|
@ -17,4 +15,6 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Απενεργοποίηση όταν δεν εμφανίζεται"
|
||||
AutoStart="Αυτόματη εκκίνηση"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Device"
|
|||
Mode="Mode"
|
||||
Buffering="Use Buffering"
|
||||
PixelFormat="Pixel Format"
|
||||
ColorSpace="YUV Color Space"
|
||||
ColorSpace="Color Space"
|
||||
ColorSpace.Default="Default"
|
||||
ColorRange="YUV Color Range"
|
||||
ColorRange="Color Range"
|
||||
ColorRange.Default="Default"
|
||||
ColorRange.Partial="Partial"
|
||||
ColorRange.Full="Full"
|
||||
|
|
@ -17,3 +17,9 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Deactivate when not showing"
|
||||
AutoStart="Auto start on launch"
|
||||
SwapFC-LFE="Swap FC and LFE"
|
||||
SwapFC-LFE.Tooltip="Swap Front Center Channel and LFE Channel"
|
||||
VideoConnection="Video Connection"
|
||||
AudioConnection="Audio Connection"
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Dispositivo"
|
|||
Mode="Modo"
|
||||
Buffering="Utilizar el almacenamiento en búfer"
|
||||
PixelFormat="Formato de píxel"
|
||||
ColorSpace="Espacio de color YUV"
|
||||
ColorSpace="Espacio de color"
|
||||
ColorSpace.Default="Predeterminado"
|
||||
ColorRange="Rango de color YUV"
|
||||
ColorRange="Rango de color"
|
||||
ColorRange.Default="Predeterminado"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4 canales"
|
|||
ChannelFormat.4_1ch="4.1 canales"
|
||||
ChannelFormat.5_1ch="5.1 canales"
|
||||
ChannelFormat.7_1ch="7.1 canales"
|
||||
DeactivateWhenNotShowing="Desactivar cuando no se muestre"
|
||||
AutoStart="Comenzar al iniciar"
|
||||
SwapFC-LFE="Intercambiar FC y LFE"
|
||||
SwapFC-LFE.Tooltip="Intercambiar Canal Central Frontal y Canal LFE"
|
||||
VideoConnection="Conexión de vídeo"
|
||||
AudioConnection="Conexión de audio"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,18 +3,24 @@ Device="Gailua"
|
|||
Mode="Modua"
|
||||
Buffering="Erabili Bufferreratzea"
|
||||
PixelFormat="Pixel formatua"
|
||||
ColorSpace="YUV kolore espazioa"
|
||||
ColorSpace="Kolore-espazioa"
|
||||
ColorSpace.Default="Lehenetsia"
|
||||
ColorRange="YUV kolore tartea"
|
||||
ColorRange="Kolore tartea"
|
||||
ColorRange.Default="Lehenetsia"
|
||||
ColorRange.Partial="Partziala"
|
||||
ColorRange.Full="Osoa"
|
||||
ChannelFormat="Kanala"
|
||||
ChannelFormat.None="Ezer ez"
|
||||
ChannelFormat.2_0ch="2k"
|
||||
ChannelFormat.2_0ch="2 kanala"
|
||||
ChannelFormat.2_1ch="2.1 kanala"
|
||||
ChannelFormat.4_0ch="4kanala"
|
||||
ChannelFormat.4_1ch="4.1kanala"
|
||||
ChannelFormat.4_0ch="4 kanala"
|
||||
ChannelFormat.4_1ch="4.1 kanala"
|
||||
ChannelFormat.5_1ch="5.1 kanala"
|
||||
ChannelFormat.7_1ch="7.1 kanala"
|
||||
DeactivateWhenNotShowing="Desaktibatu ikusten ez denean"
|
||||
AutoStart="Hasi automatikoki abiatzean"
|
||||
SwapFC-LFE="Aldatu FC <-> LFE"
|
||||
SwapFC-LFE.Tooltip="Aldatu Aurreko Kanal Zentrala eta LFE kanala (subwooferra)"
|
||||
VideoConnection="Bideo-konexioa"
|
||||
AudioConnection="Audio-konexioa"
|
||||
|
||||
|
|
|
|||
22
plugins/decklink/data/locale/fa-IR.ini
Normal file
22
plugins/decklink/data/locale/fa-IR.ini
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
BlackmagicDevice="Blackmagic دستگاه"
|
||||
Device="دستگاه"
|
||||
Mode="نوع"
|
||||
Buffering="استفاده از بافرینگ"
|
||||
PixelFormat="فرمت پیکسل"
|
||||
ColorSpace.Default="پیش فرض"
|
||||
ColorRange.Default="پیش فرض"
|
||||
ColorRange.Partial="جزئی"
|
||||
ColorRange.Full="کامل"
|
||||
ChannelFormat="کانال"
|
||||
ChannelFormat.None="هیچکدام"
|
||||
ChannelFormat.2_0ch="2ch"
|
||||
ChannelFormat.2_1ch="2.1ch"
|
||||
ChannelFormat.4_0ch="4ch"
|
||||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="غیر فعال کردن زمانی که نمایش داده نشود"
|
||||
AutoStart="شروع خودکار در راه اندازی"
|
||||
VideoConnection="اتصال صوتی"
|
||||
AudioConnection="اتصال صوتی"
|
||||
|
||||
|
|
@ -3,9 +3,9 @@ Device="Laite"
|
|||
Mode="Tila"
|
||||
Buffering="Käytä puskurointia"
|
||||
PixelFormat="Pikselimuoto"
|
||||
ColorSpace="YUV väriavaruus"
|
||||
ColorSpace="Väriavaruus"
|
||||
ColorSpace.Default="Oletusarvo"
|
||||
ColorRange="YUV värialue"
|
||||
ColorRange="Värialue"
|
||||
ColorRange.Default="Oletusarvo"
|
||||
ColorRange.Partial="Osittainen"
|
||||
ColorRange.Full="Täysi"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Poista käytöstä piilotettaessa"
|
||||
AutoStart="Aloita automaattisesti käynnistyksessä"
|
||||
SwapFC-LFE="Vaihda FC ja LFE"
|
||||
SwapFC-LFE.Tooltip="Vaihda etummainen keskikanava ja LFE-kanava"
|
||||
VideoConnection="Kuvayhteys"
|
||||
AudioConnection="Ääniyhteys"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@ Device="Kagamitan"
|
|||
Mode="Mode"
|
||||
Buffering="Gamitin ang Buffering"
|
||||
PixelFormat="Format ng Pixel"
|
||||
ColorSpace="YUV Kulay Space"
|
||||
ColorSpace.Default="Pangunahin"
|
||||
ColorRange="Saklaw ng Kulay ng YUV"
|
||||
ColorRange.Default="Pangunahin"
|
||||
ColorRange.Partial="Bahagyang"
|
||||
ColorRange.Full="Buong"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ ColorSpace="Espace de couleurs YUV"
|
|||
ColorSpace.Default="Défaut"
|
||||
ColorRange="Gamme de couleurs YUV"
|
||||
ColorRange.Default="Défaut"
|
||||
ColorRange.Partial="Partiel"
|
||||
ColorRange.Partial="Partielle"
|
||||
ColorRange.Full="Complète"
|
||||
ChannelFormat="Canaux audio"
|
||||
ChannelFormat.None="Aucun"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4 canaux"
|
|||
ChannelFormat.4_1ch="4.1 canaux"
|
||||
ChannelFormat.5_1ch="5.1 canaux"
|
||||
ChannelFormat.7_1ch="7.1 canaux"
|
||||
DeactivateWhenNotShowing="Désactiver si non-affiché"
|
||||
AutoStart="Démarrer automatiquement au lancement"
|
||||
SwapFC-LFE="Permuter Canal FC (Centre Avant) et Caisson de Basses"
|
||||
SwapFC-LFE.Tooltip="Permuter le canal Centre Avant (FC) et le Caisson de Basses (LFE)"
|
||||
VideoConnection="Connexion vidéo"
|
||||
AudioConnection="Connexion audio"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
Device="Uidheam"
|
||||
Mode="Modh"
|
||||
Buffering="Cleachd bufaireadh"
|
||||
ColorSpace="Spàs dhathan YUV"
|
||||
ColorSpace.Default="Bun-roghainn"
|
||||
ColorRange="Rainse dhathan YUV"
|
||||
ColorRange.Default="Bun-roghainn"
|
||||
ColorRange.Partial="Leth-phàirteach"
|
||||
ColorRange.Full="Làn"
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Eszköz"
|
|||
Mode="Mód"
|
||||
Buffering="Pufferelés használata"
|
||||
PixelFormat="Képpont formátum"
|
||||
ColorSpace="YUV színtér"
|
||||
ColorSpace="Színtér"
|
||||
ColorSpace.Default="Alapértelmezett"
|
||||
ColorRange="YUV színtartomány"
|
||||
ColorRange="Színtartomány"
|
||||
ColorRange.Default="Alapértelmezett"
|
||||
ColorRange.Partial="Részleges"
|
||||
ColorRange.Full="Teljes"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4cs"
|
|||
ChannelFormat.4_1ch="4.1cs"
|
||||
ChannelFormat.5_1ch="5.1cs"
|
||||
ChannelFormat.7_1ch="7.1cs"
|
||||
DeactivateWhenNotShowing="Kikapcsolás, ha nem jelenik meg"
|
||||
AutoStart="Automatikus start induláskor"
|
||||
SwapFC-LFE="FC és LFE Megfordítása"
|
||||
SwapFC-LFE.Tooltip="Elülső középső csatorna és az LFE csatorna megcserélése"
|
||||
VideoConnection="Videó kapcsolat"
|
||||
AudioConnection="Audio kapcsolat"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
BlackmagicDevice="Dispositivo Blackmagic"
|
||||
Device="Dispositivo"
|
||||
Mode="Modalità"
|
||||
Buffering="Usa buffer"
|
||||
Buffering="Utilizza il buffering"
|
||||
PixelFormat="Formato pixel"
|
||||
ColorSpace="Spazio colore YUV"
|
||||
ColorSpace="Spazio colore"
|
||||
ColorSpace.Default="Predefinito"
|
||||
ColorRange="Gamma di colore YUV"
|
||||
ColorRange="Gamma di colori"
|
||||
ColorRange.Default="Predefinito"
|
||||
ColorRange.Partial="Parziale"
|
||||
ColorRange.Full="Intero"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4 canali"
|
|||
ChannelFormat.4_1ch="4.1 canali"
|
||||
ChannelFormat.5_1ch="5.1 canali"
|
||||
ChannelFormat.7_1ch="7.1 canali"
|
||||
DeactivateWhenNotShowing="Disattiva quando non visibile"
|
||||
AutoStart="Avvia assieme a OBS"
|
||||
SwapFC-LFE="Scambia FC e LFE"
|
||||
SwapFC-LFE.Tooltip="Scambia il canale centrale davanti con quello LFE"
|
||||
VideoConnection="Connessione video"
|
||||
AudioConnection="Connessione audio"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="デバイス"
|
|||
Mode="モード"
|
||||
Buffering="バッファリングを使用する"
|
||||
PixelFormat="ピクセルフォーマット"
|
||||
ColorSpace="YUV 色空間"
|
||||
ColorSpace="色空間"
|
||||
ColorSpace.Default="既定"
|
||||
ColorRange="YUV 色範囲"
|
||||
ColorRange="色範囲"
|
||||
ColorRange.Default="既定"
|
||||
ColorRange.Partial="一部"
|
||||
ColorRange.Full="全部"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4 ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="表示中でない場合非アクティブ化する"
|
||||
AutoStart="起動時に自動的に開始"
|
||||
SwapFC-LFE="FC と LFE を入れ替え"
|
||||
SwapFC-LFE.Tooltip="フロントセンターチャンネルとサブウーファーチャンネルを入れ替える"
|
||||
VideoConnection="映像接続"
|
||||
AudioConnection="音声接続"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,26 @@
|
|||
BlackmagicDevice="Blackmagic მოწყობილობა"
|
||||
BlackmagicDevice="Blackmagic-მოწყობილობა"
|
||||
Device="მოწყობილობა"
|
||||
Mode="რეჟიმი"
|
||||
Buffering="ბუფერიზაციის გამოყენება"
|
||||
PixelFormat="პიქსელის ფორმატი"
|
||||
ColorSpace="YUV ფერთა სისტემა"
|
||||
ColorSpace="ფერთა სივრცე"
|
||||
ColorSpace.Default="ნაგულისხმევი"
|
||||
ColorRange="YUV ფერთა გამა"
|
||||
ColorRange="ფერთა გამა"
|
||||
ColorRange.Default="ნაგულისხმევი"
|
||||
ColorRange.Partial="ნაწილობრივი"
|
||||
ColorRange.Full="სრული"
|
||||
ChannelFormat="არხი"
|
||||
ChannelFormat.None="არცერთი"
|
||||
ChannelFormat.2_0ch="2 არხიანი"
|
||||
ChannelFormat.2_1ch="2.1 არხიანი"
|
||||
ChannelFormat.4_0ch="4 არხიანი"
|
||||
ChannelFormat.4_1ch="4.1 არხიანი"
|
||||
ChannelFormat.5_1ch="5.1 არხიანი"
|
||||
ChannelFormat.7_1ch="7.1 არხიანი"
|
||||
ChannelFormat.2_0ch="2-არხიანი"
|
||||
ChannelFormat.2_1ch="2.1-არხიანი"
|
||||
ChannelFormat.4_0ch="4-არხიანი"
|
||||
ChannelFormat.4_1ch="4.1-არხიანი"
|
||||
ChannelFormat.5_1ch="5.1-არხიანი"
|
||||
ChannelFormat.7_1ch="7.1-არხიანი"
|
||||
DeactivateWhenNotShowing="გაუქმება, როცა არ ჩანს"
|
||||
AutoStart="ავტომატური ჩართვა გაშვებისას"
|
||||
SwapFC-LFE="შენაცვლდეს FC და LFE"
|
||||
SwapFC-LFE.Tooltip="წინა ცენტრის არხისა და დაბალი სიხშირის არხის შენაცვლება"
|
||||
VideoConnection="ვიდეოკავშირი"
|
||||
AudioConnection="ხმოვანი კავშირი"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="장치"
|
|||
Mode="방식"
|
||||
Buffering="버퍼링 사용"
|
||||
PixelFormat="픽셀 형식"
|
||||
ColorSpace="YUV 색 공간"
|
||||
ColorSpace="색 공간"
|
||||
ColorSpace.Default="기본값"
|
||||
ColorRange="YUV 색상 범위"
|
||||
ColorRange="색상 범위"
|
||||
ColorRange.Default="기본값"
|
||||
ColorRange.Partial="부분"
|
||||
ColorRange.Full="전체"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4채널"
|
|||
ChannelFormat.4_1ch="4.1채널"
|
||||
ChannelFormat.5_1ch="5.1 채널"
|
||||
ChannelFormat.7_1ch="7.1 채널"
|
||||
DeactivateWhenNotShowing="보이지 않을 경우 비활성화"
|
||||
AutoStart="OBS Studio 실행 시 자동 시작"
|
||||
SwapFC-LFE="FC 와 LFE 교환"
|
||||
SwapFC-LFE.Tooltip="전면 중앙 채널과 저주파 채널 교환"
|
||||
VideoConnection="비디오 연결"
|
||||
AudioConnection="오디오 연결"
|
||||
|
||||
|
|
|
|||
2
plugins/decklink/data/locale/mn-MN.ini
Normal file
2
plugins/decklink/data/locale/mn-MN.ini
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
DeactivateWhenNotShowing="Харуулаагүй байга үед идэвхгүй болгох"
|
||||
|
||||
|
|
@ -3,9 +3,9 @@ Device="Enhet"
|
|||
Mode="Modus"
|
||||
Buffering="Bruk bufring"
|
||||
PixelFormat="Pikselformat"
|
||||
ColorSpace="YUV fargerom"
|
||||
ColorSpace="Fargerom"
|
||||
ColorSpace.Default="Standard"
|
||||
ColorRange="YUV fargerom"
|
||||
ColorRange="Fargespekter"
|
||||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Delvis"
|
||||
ColorRange.Full="Hel"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Deaktiver når denne ikke vises"
|
||||
AutoStart="Automatisk start ved oppstart"
|
||||
SwapFC-LFE="Bytt FC og LFE"
|
||||
SwapFC-LFE.Tooltip="Bytt front-kanal og LFE-kanal"
|
||||
VideoConnection="Videotilkobling"
|
||||
AudioConnection="Lydtilkobling"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Apparaat"
|
|||
Mode="Modus"
|
||||
Buffering="Buffering Gebruiken"
|
||||
PixelFormat="Pixelindeling"
|
||||
ColorSpace="YUV-Kleurruimte"
|
||||
ColorSpace="Kleurruimte"
|
||||
ColorSpace.Default="Standaard"
|
||||
ColorRange="YUV Kleurbereik"
|
||||
ColorRange="Kleurbereik"
|
||||
ColorRange.Default="Standaard"
|
||||
ColorRange.Partial="Gedeeltelijk"
|
||||
ColorRange.Full="Volledig"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Deactiveer wanneer niet zichtbaar"
|
||||
AutoStart="Autostart bij lancering"
|
||||
SwapFC-LFE="Wissel FC en LFE"
|
||||
SwapFC-LFE.Tooltip="Verwissel midden voor kanaal en lage tonenkanaal"
|
||||
VideoConnection="Videoverbinding"
|
||||
AudioConnection="Audio-verbinding"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Urządzenie"
|
|||
Mode="Tryb"
|
||||
Buffering="Użyj buforowania"
|
||||
PixelFormat="Format pikseli"
|
||||
ColorSpace="Przestrzeń kolorów YUV"
|
||||
ColorSpace="Przestrzeń kolorów"
|
||||
ColorSpace.Default="Domyślne"
|
||||
ColorRange="Zakres kolorów YUV"
|
||||
ColorRange="Zakres kolorów"
|
||||
ColorRange.Default="Domyślne"
|
||||
ColorRange.Partial="Częściowy"
|
||||
ColorRange.Full="Pełny"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4.0"
|
|||
ChannelFormat.4_1ch="4.1"
|
||||
ChannelFormat.5_1ch="5.1"
|
||||
ChannelFormat.7_1ch="7.1"
|
||||
DeactivateWhenNotShowing="Wyłącz, gdy nie jest pokazywane"
|
||||
AutoStart="Uruchamiaj automatycznie przy starcie"
|
||||
SwapFC-LFE="Zamień FC i LFE"
|
||||
SwapFC-LFE.Tooltip="Zamień centralny kanał z subwooferem"
|
||||
VideoConnection="Połączenie wideo"
|
||||
AudioConnection="Połączenie audio"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Dispositivo"
|
|||
Mode="Modo"
|
||||
Buffering="Utilizar Buffering"
|
||||
PixelFormat="Formato de Pixel"
|
||||
ColorSpace="Espaço de cor YUV"
|
||||
ColorSpace="Espaço de cor"
|
||||
ColorSpace.Default="Padrão"
|
||||
ColorRange="Intervalo de Cores YUV"
|
||||
ColorRange="Faixa de cores"
|
||||
ColorRange.Default="Padrão"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4.0"
|
|||
ChannelFormat.4_1ch="4.1"
|
||||
ChannelFormat.5_1ch="5.1"
|
||||
ChannelFormat.7_1ch="7.1"
|
||||
DeactivateWhenNotShowing="Desativar quando não estiver visível"
|
||||
AutoStart="Iniciar ao abrir o OBS"
|
||||
SwapFC-LFE="Trocar C e SUB"
|
||||
SwapFC-LFE.Tooltip="Trocar canal Central com o Subwoofer"
|
||||
VideoConnection="Conexão de Vídeo"
|
||||
AudioConnection="Conexão de Áudio"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,18 @@ Device="Dispositivo"
|
|||
Mode="Modo"
|
||||
Buffering="Utilizar Buffering"
|
||||
PixelFormat="Formato de pixel"
|
||||
ColorSpace.Default="Predefinido"
|
||||
ColorRange.Default="Predefinido"
|
||||
ColorRange.Partial="Parcial"
|
||||
ColorRange.Full="Completo"
|
||||
ChannelFormat="Canal"
|
||||
ChannelFormat.None="Nenhum"
|
||||
ChannelFormat.2_0ch="2ch"
|
||||
ChannelFormat.2_1ch="2.1ch"
|
||||
ChannelFormat.4_0ch="4ch"
|
||||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Desativar quando não visível"
|
||||
AutoStart="Iniciar automaticamente ao arrancar"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
BlackmagicDevice="Dispozitiv Blackmagic"
|
||||
Device="Dispozitiv"
|
||||
Mode="Mod"
|
||||
Buffering="Folosește buffering"
|
||||
Buffering="Folosește zona tampon"
|
||||
PixelFormat="Formatul pixelilor"
|
||||
ColorSpace.Default="Implicit"
|
||||
ColorRange.Default="Implicit"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Устройство"
|
|||
Mode="Режим"
|
||||
Buffering="Использовать буферизацию"
|
||||
PixelFormat="Формат пикселей"
|
||||
ColorSpace="Цветовое пространство YUV"
|
||||
ColorSpace="Цветовое пространство"
|
||||
ColorSpace.Default="По умолчанию"
|
||||
ColorRange="Цветовой диапазон YUV"
|
||||
ColorRange="Цветовой диапазон"
|
||||
ColorRange.Default="По умолчанию"
|
||||
ColorRange.Partial="Частичный"
|
||||
ColorRange.Full="Полный"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4-канальный"
|
|||
ChannelFormat.4_1ch="4.1-канальный"
|
||||
ChannelFormat.5_1ch="5.1-канальный"
|
||||
ChannelFormat.7_1ch="7.1-канальный"
|
||||
DeactivateWhenNotShowing="Выключать, когда не показывается"
|
||||
AutoStart="Авто-старт при запуске"
|
||||
SwapFC-LFE="Обменять ПЦ и LFE"
|
||||
SwapFC-LFE.Tooltip="Обменять передний центральный канал и LFE канал"
|
||||
VideoConnection="Видео соединение"
|
||||
AudioConnection="Аудио соединение"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,15 +3,24 @@ Device="Zariadenie"
|
|||
Mode="Mód"
|
||||
Buffering="Použiť vyrovnávaciu pamäť"
|
||||
PixelFormat="Formát pixelov"
|
||||
ColorSpace="Farebný priestor YUV"
|
||||
ColorSpace="Farebný priestor"
|
||||
ColorSpace.Default="Predvolený"
|
||||
ColorRange="Rozsah farieb YUV"
|
||||
ColorRange="Farebný rozsah"
|
||||
ColorRange.Default="Predvolený"
|
||||
ColorRange.Partial="Čiastočný"
|
||||
ColorRange.Full="Plný"
|
||||
ChannelFormat="Kanál"
|
||||
ChannelFormat.None="Nič"
|
||||
ChannelFormat.2_0ch="2ch"
|
||||
ChannelFormat.2_1ch="2.1ch"
|
||||
ChannelFormat.4_0ch="4ch"
|
||||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Deaktivovať, keď je skrytý"
|
||||
AutoStart="Automaticky spustiť pri štarte"
|
||||
SwapFC-LFE="Vymeniť FC a LFE"
|
||||
SwapFC-LFE.Tooltip="Vymeniť kanál Front Center a kanál LFE"
|
||||
VideoConnection="Video pripojenie"
|
||||
AudioConnection="Audio pripojenie"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,18 @@ Device="Uređaj"
|
|||
Mode="Režim"
|
||||
Buffering="Koristi baferovanje"
|
||||
PixelFormat="Piksel format"
|
||||
ColorSpace.Default="Podrazumevan"
|
||||
ColorRange.Default="Podrazumevan"
|
||||
ColorRange.Partial="Delimičan"
|
||||
ColorRange.Full="Potpun"
|
||||
ChannelFormat="Kanal"
|
||||
ChannelFormat.None="Nijedan"
|
||||
ChannelFormat.2_0ch="2k"
|
||||
ChannelFormat.2_1ch="2.1k"
|
||||
ChannelFormat.4_0ch="4k"
|
||||
ChannelFormat.4_1ch="4.1k"
|
||||
ChannelFormat.5_1ch="5.1k"
|
||||
ChannelFormat.7_1ch="7.1k"
|
||||
DeactivateWhenNotShowing="U slučaju da se ne prikazuje - deaktiviraj"
|
||||
AutoStart="Automatski uključi pri pokretanju programa"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,18 @@ Device="Уређај"
|
|||
Mode="Режим"
|
||||
Buffering="Користи баферовање"
|
||||
PixelFormat="Пиксел формат"
|
||||
ColorSpace.Default="Подразумеван"
|
||||
ColorRange.Default="Подразумеван"
|
||||
ColorRange.Partial="Делимичан"
|
||||
ColorRange.Full="Потпун"
|
||||
ChannelFormat="Канал"
|
||||
ChannelFormat.None="Ниједан"
|
||||
ChannelFormat.2_0ch="2к"
|
||||
ChannelFormat.2_1ch="2.1к"
|
||||
ChannelFormat.4_0ch="4к"
|
||||
ChannelFormat.4_1ch="4.1к"
|
||||
ChannelFormat.5_1ch="5.1к"
|
||||
ChannelFormat.7_1ch="7.1к"
|
||||
DeactivateWhenNotShowing="У случају да се не приказује - деактивирај"
|
||||
AutoStart="Аутоматски укључи при покретању програма"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Enhet"
|
|||
Mode="Läge"
|
||||
Buffering="Använd buffert"
|
||||
PixelFormat="Bildpunktsformat"
|
||||
ColorSpace="YUV-färgrymd"
|
||||
ColorSpace="Färgrymd"
|
||||
ColorSpace.Default="Standard"
|
||||
ColorRange="YUV-färgområde"
|
||||
ColorRange="Färgintervall"
|
||||
ColorRange.Default="Standard"
|
||||
ColorRange.Partial="Partiell"
|
||||
ColorRange.Full="Full"
|
||||
|
|
@ -17,4 +17,10 @@ ChannelFormat.4_0ch="4 kanaler"
|
|||
ChannelFormat.4_1ch="4.1 kanaler"
|
||||
ChannelFormat.5_1ch="5.1 kanaler"
|
||||
ChannelFormat.7_1ch="7.1 kanaler"
|
||||
DeactivateWhenNotShowing="Inaktivera när den inte visas"
|
||||
AutoStart="Autostarta vid uppstart"
|
||||
SwapFC-LFE="Byt FC och LFE"
|
||||
SwapFC-LFE.Tooltip="Byt Front Center-kanal och LFE-kanal"
|
||||
VideoConnection="Videoanslutning"
|
||||
AudioConnection="Ljudanslutning"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@ Device="Aparato"
|
|||
Mode="I-mode"
|
||||
Buffering="Paggamit ng Buffering"
|
||||
PixelFormat="Ang Format ng Pixel"
|
||||
ColorSpace="Pagitan sa kulay na YUV"
|
||||
ColorSpace.Default="I-default"
|
||||
ColorRange="Ang Saklaw ng Kulay na YUV"
|
||||
ColorRange.Default="I-default"
|
||||
ColorRange.Partial="Bahagya"
|
||||
ColorRange.Full="Puno"
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ Device="Aygıt"
|
|||
Mode="Mod"
|
||||
Buffering="Arabelleğe Almayı Kullan"
|
||||
PixelFormat="Piksel Biçimi"
|
||||
ColorSpace="YUV Renk Alanı"
|
||||
ColorSpace="Renk Uzayı"
|
||||
ColorSpace.Default="Varsayılan"
|
||||
ColorRange="YUV Renk Aralığı"
|
||||
ColorRange="Renk Aralığı"
|
||||
ColorRange.Default="Varsayılan"
|
||||
ColorRange.Partial="Kısmi"
|
||||
ColorRange.Full="Tam"
|
||||
|
|
@ -17,4 +17,8 @@ ChannelFormat.4_0ch="4ch"
|
|||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
DeactivateWhenNotShowing="Gösterilmediğinde devre dışı bırak"
|
||||
AutoStart="Açılışta otomatik olarak başlat"
|
||||
VideoConnection="Video Bağlantısı"
|
||||
AudioConnection="Ses Bağlantısı"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@ Device="Пристрій"
|
|||
Mode="Режим"
|
||||
Buffering="Увімкнути буферизацію"
|
||||
PixelFormat="Формат пікселів"
|
||||
ColorSpace="Колірний простір YUV"
|
||||
ColorSpace.Default="За замовчуванням"
|
||||
ColorRange="Колірний діапазон YUV"
|
||||
ColorRange.Default="За замовчуванням"
|
||||
ColorRange.Partial="Частковий"
|
||||
ColorRange.Full="Повний"
|
||||
|
|
@ -17,4 +15,10 @@ ChannelFormat.4_0ch="4-канальний"
|
|||
ChannelFormat.4_1ch="4.1-канальний"
|
||||
ChannelFormat.5_1ch="5.1-канальний"
|
||||
ChannelFormat.7_1ch="7.1-канальний"
|
||||
DeactivateWhenNotShowing="Деактивувати, коли не виводиться"
|
||||
AutoStart="Запускати автоматично"
|
||||
SwapFC-LFE="Поміняти місцями FC та LFE"
|
||||
SwapFC-LFE.Tooltip="Міняє місцями Front Center та LFE канали"
|
||||
VideoConnection="Відео вхід"
|
||||
AudioConnection="Аудіо вхід"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,19 +2,25 @@ BlackmagicDevice="Blackmagic设备"
|
|||
Device="设备"
|
||||
Mode="模式"
|
||||
Buffering="使用缓冲"
|
||||
PixelFormat="像素格式"
|
||||
ColorSpace="YUV 颜色空间"
|
||||
PixelFormat="视频格式"
|
||||
ColorSpace="色彩空间"
|
||||
ColorSpace.Default="默认"
|
||||
ColorRange="YUV 颜色范围"
|
||||
ColorRange="色彩范围"
|
||||
ColorRange.Default="默认"
|
||||
ColorRange.Partial="局部"
|
||||
ColorRange.Full="全部"
|
||||
ChannelFormat="频道"
|
||||
ChannelFormat.None="无"
|
||||
ChannelFormat.2_0ch="2ch"
|
||||
ChannelFormat.2_1ch="2.1ch"
|
||||
ChannelFormat.4_0ch="4ch"
|
||||
ChannelFormat.4_1ch="4.1ch"
|
||||
ChannelFormat.5_1ch="5.1ch"
|
||||
ChannelFormat.7_1ch="7.1ch"
|
||||
ChannelFormat.2_0ch="双声道"
|
||||
ChannelFormat.2_1ch="2.1声道"
|
||||
ChannelFormat.4_0ch="4声道"
|
||||
ChannelFormat.4_1ch="4.1声道"
|
||||
ChannelFormat.5_1ch="5.1声道"
|
||||
ChannelFormat.7_1ch="7.1声道"
|
||||
DeactivateWhenNotShowing="当不显示时禁用"
|
||||
AutoStart="启动时自动启动"
|
||||
SwapFC-LFE="交换 FC 和 LFE"
|
||||
SwapFC-LFE.Tooltip="切换前中(FC)声道与低频效果(LFE)声道"
|
||||
VideoConnection="视频连接"
|
||||
AudioConnection="声音连接"
|
||||
|
||||
|
|
|
|||
|
|
@ -3,18 +3,24 @@ Device="裝置"
|
|||
Mode="模式"
|
||||
Buffering="使用緩衝"
|
||||
PixelFormat="像素格式"
|
||||
ColorSpace="YUV 色彩空間"
|
||||
ColorSpace="色彩空間"
|
||||
ColorSpace.Default="預設"
|
||||
ColorRange="YUV 色彩範圍"
|
||||
ColorRange="顏色範圍"
|
||||
ColorRange.Default="預設"
|
||||
ColorRange.Partial="部分"
|
||||
ColorRange.Full="完整"
|
||||
ChannelFormat="聲道"
|
||||
ChannelFormat.None="無"
|
||||
ChannelFormat.2_0ch="雙聲道"
|
||||
ChannelFormat.2_0ch="雙聲道(2ch)"
|
||||
ChannelFormat.2_1ch="2.1聲道"
|
||||
ChannelFormat.4_0ch="4聲道"
|
||||
ChannelFormat.4_1ch="4.1聲道"
|
||||
ChannelFormat.5_1ch="5.1聲道"
|
||||
ChannelFormat.7_1ch="7.1聲道"
|
||||
DeactivateWhenNotShowing="不顯示時停用"
|
||||
AutoStart="啟動時自動開啟"
|
||||
SwapFC-LFE="切換 FC 和 LFE"
|
||||
SwapFC-LFE.Tooltip="切換 Front Center (FC) 頻道和 LFE 頻道"
|
||||
VideoConnection="影像連接"
|
||||
AudioConnection="聲音連接"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <obs-module.h>
|
||||
#include "platform.hpp"
|
||||
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
|
||||
#include "decklink.hpp"
|
||||
|
||||
class DeckLinkDevice;
|
||||
|
||||
typedef void (*DeviceChangeCallback)(void *param, DeckLinkDevice *device,
|
||||
|
|
|
|||
|
|
@ -1,19 +1,14 @@
|
|||
#include "decklink-device-instance.hpp"
|
||||
#include "audio-repack.hpp"
|
||||
|
||||
#include "DecklinkInput.hpp"
|
||||
#include "DecklinkOutput.hpp"
|
||||
|
||||
#include <util/platform.h>
|
||||
#include <util/threading.h>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#define LOG(level, message, ...) blog(level, "%s: " message, \
|
||||
obs_source_get_name(this->decklink->GetSource()), ##__VA_ARGS__)
|
||||
|
||||
#ifdef _WIN32
|
||||
#define IS_WIN 1
|
||||
#else
|
||||
#define IS_WIN 0
|
||||
#endif
|
||||
#include <algorithm>
|
||||
|
||||
static inline enum video_format ConvertPixelFormat(BMDPixelFormat format)
|
||||
{
|
||||
|
|
@ -43,26 +38,26 @@ static inline int ConvertChannelFormat(speaker_layout format)
|
|||
}
|
||||
}
|
||||
|
||||
static inline audio_repack_mode_t ConvertRepackFormat(speaker_layout format)
|
||||
static inline audio_repack_mode_t ConvertRepackFormat(speaker_layout format, bool swap)
|
||||
{
|
||||
switch (format) {
|
||||
case SPEAKERS_2POINT1:
|
||||
return repack_mode_8to3ch_swap23;
|
||||
return repack_mode_8to3ch;
|
||||
case SPEAKERS_4POINT0:
|
||||
return repack_mode_8to4ch_swap23;
|
||||
return repack_mode_8to4ch;
|
||||
case SPEAKERS_4POINT1:
|
||||
return repack_mode_8to5ch_swap23;
|
||||
return swap? repack_mode_8to5ch_swap:repack_mode_8to5ch;
|
||||
case SPEAKERS_5POINT1:
|
||||
return repack_mode_8to6ch_swap23;
|
||||
return swap ? repack_mode_8to6ch_swap : repack_mode_8to6ch;
|
||||
case SPEAKERS_7POINT1:
|
||||
return repack_mode_8ch_swap23_swap46_swap57;
|
||||
return swap ? repack_mode_8ch_swap: repack_mode_8ch;
|
||||
default:
|
||||
assert(false && "No repack requested");
|
||||
return (audio_repack_mode_t)-1;
|
||||
}
|
||||
}
|
||||
|
||||
DeckLinkDeviceInstance::DeckLinkDeviceInstance(DeckLink *decklink_,
|
||||
DeckLinkDeviceInstance::DeckLinkDeviceInstance(DecklinkBase *decklink_,
|
||||
DeckLinkDevice *device_) :
|
||||
currentFrame(), currentPacket(), decklink(decklink_), device(device_)
|
||||
{
|
||||
|
|
@ -92,7 +87,7 @@ void DeckLinkDeviceInstance::HandleAudioPacket(
|
|||
currentPacket.frames = frameCount;
|
||||
currentPacket.timestamp = timestamp;
|
||||
|
||||
if (decklink && !decklink->buffering) {
|
||||
if (decklink && !static_cast<DeckLinkInput*>(decklink)->buffering) {
|
||||
currentPacket.timestamp = os_gettime_ns();
|
||||
currentPacket.timestamp -=
|
||||
(uint64_t)frameCount * 1000000000ULL /
|
||||
|
|
@ -100,13 +95,12 @@ void DeckLinkDeviceInstance::HandleAudioPacket(
|
|||
}
|
||||
|
||||
int maxdevicechannel = device->GetMaxChannel();
|
||||
bool isWin = IS_WIN;
|
||||
|
||||
if (channelFormat != SPEAKERS_UNKNOWN &&
|
||||
channelFormat != SPEAKERS_MONO &&
|
||||
channelFormat != SPEAKERS_STEREO &&
|
||||
maxdevicechannel >= 8 &&
|
||||
isWin) {
|
||||
(channelFormat != SPEAKERS_7POINT1 || static_cast<DeckLinkInput*>(decklink)->swap)
|
||||
&& maxdevicechannel >= 8) {
|
||||
|
||||
if (audioRepacker->repack((uint8_t *)bytes, frameCount) < 0) {
|
||||
LOG(LOG_ERROR, "Failed to convert audio packet data");
|
||||
|
|
@ -120,7 +114,7 @@ void DeckLinkDeviceInstance::HandleAudioPacket(
|
|||
nextAudioTS = timestamp +
|
||||
((uint64_t)frameCount * 1000000000ULL / 48000ULL) + 1;
|
||||
|
||||
obs_source_output_audio(decklink->GetSource(), ¤tPacket);
|
||||
obs_source_output_audio(static_cast<DeckLinkInput*>(decklink)->GetSource(), ¤tPacket);
|
||||
}
|
||||
|
||||
void DeckLinkDeviceInstance::HandleVideoFrame(
|
||||
|
|
@ -141,7 +135,7 @@ void DeckLinkDeviceInstance::HandleVideoFrame(
|
|||
currentFrame.height = (uint32_t)videoFrame->GetHeight();
|
||||
currentFrame.timestamp = timestamp;
|
||||
|
||||
obs_source_output_video(decklink->GetSource(), ¤tFrame);
|
||||
obs_source_output_video2(static_cast<DeckLinkInput*>(decklink)->GetSource(), ¤tFrame);
|
||||
}
|
||||
|
||||
void DeckLinkDeviceInstance::FinalizeStream()
|
||||
|
|
@ -169,7 +163,7 @@ void DeckLinkDeviceInstance::SetupVideoFormat(DeckLinkDeviceMode *mode_)
|
|||
|
||||
currentFrame.format = ConvertPixelFormat(pixelFormat);
|
||||
|
||||
colorSpace = decklink->GetColorSpace();
|
||||
colorSpace = static_cast<DeckLinkInput*>(decklink)->GetColorSpace();
|
||||
if (colorSpace == VIDEO_CS_DEFAULT) {
|
||||
const BMDDisplayModeFlags flags = mode_->GetDisplayModeFlags();
|
||||
if (flags & bmdDisplayModeColorspaceRec709)
|
||||
|
|
@ -182,8 +176,8 @@ void DeckLinkDeviceInstance::SetupVideoFormat(DeckLinkDeviceMode *mode_)
|
|||
activeColorSpace = colorSpace;
|
||||
}
|
||||
|
||||
colorRange = decklink->GetColorRange();
|
||||
currentFrame.full_range = colorRange == VIDEO_RANGE_FULL;
|
||||
colorRange = static_cast<DeckLinkInput*>(decklink)->GetColorRange();
|
||||
currentFrame.range = colorRange;
|
||||
|
||||
video_format_get_parameters(activeColorSpace, colorRange,
|
||||
currentFrame.color_matrix, currentFrame.color_range_min,
|
||||
|
|
@ -197,7 +191,9 @@ void DeckLinkDeviceInstance::SetupVideoFormat(DeckLinkDeviceMode *mode_)
|
|||
#endif
|
||||
}
|
||||
|
||||
bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_)
|
||||
bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_,
|
||||
BMDVideoConnection bmdVideoConnection,
|
||||
BMDAudioConnection bmdAudioConnection)
|
||||
{
|
||||
if (mode != nullptr)
|
||||
return false;
|
||||
|
|
@ -209,6 +205,40 @@ bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_)
|
|||
if (!device->GetInput(&input))
|
||||
return false;
|
||||
|
||||
|
||||
IDeckLinkConfiguration *deckLinkConfiguration = NULL;
|
||||
HRESULT result = input->QueryInterface(IID_IDeckLinkConfiguration,
|
||||
(void**)&deckLinkConfiguration);
|
||||
if (result != S_OK)
|
||||
{
|
||||
LOG(LOG_ERROR,
|
||||
"Could not obtain the IDeckLinkConfiguration interface: %08x\n",
|
||||
result);
|
||||
} else {
|
||||
if (bmdVideoConnection > 0) {
|
||||
result = deckLinkConfiguration->SetInt(
|
||||
bmdDeckLinkConfigVideoInputConnection, bmdVideoConnection);
|
||||
if (result != S_OK) {
|
||||
LOG(LOG_ERROR,
|
||||
"Couldn't set input video port to %d\n\n",
|
||||
bmdVideoConnection);
|
||||
}
|
||||
}
|
||||
|
||||
if (bmdAudioConnection > 0) {
|
||||
result = deckLinkConfiguration->SetInt(
|
||||
bmdDeckLinkConfigAudioInputConnection, bmdAudioConnection);
|
||||
if (result != S_OK) {
|
||||
LOG(LOG_ERROR,
|
||||
"Couldn't set input audio port to %d\n\n",
|
||||
bmdVideoConnection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
videoConnection = bmdVideoConnection;
|
||||
audioConnection = bmdAudioConnection;
|
||||
|
||||
BMDVideoInputFlags flags;
|
||||
|
||||
bool isauto = mode_->GetName() == "Auto";
|
||||
|
|
@ -218,7 +248,7 @@ bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_)
|
|||
flags = bmdVideoInputEnableFormatDetection;
|
||||
} else {
|
||||
displayMode = mode_->GetDisplayMode();
|
||||
pixelFormat = decklink->GetPixelFormat();
|
||||
pixelFormat = static_cast<DeckLinkInput*>(decklink)->GetPixelFormat();
|
||||
flags = bmdVideoInputFlagDefault;
|
||||
}
|
||||
|
||||
|
|
@ -231,11 +261,11 @@ bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_)
|
|||
|
||||
SetupVideoFormat(mode_);
|
||||
|
||||
channelFormat = decklink->GetChannelFormat();
|
||||
channelFormat = static_cast<DeckLinkInput*>(decklink)->GetChannelFormat();
|
||||
currentPacket.speakers = channelFormat;
|
||||
swap = static_cast<DeckLinkInput*>(decklink)->swap;
|
||||
|
||||
int maxdevicechannel = device->GetMaxChannel();
|
||||
bool isWin = IS_WIN;
|
||||
|
||||
if (channelFormat != SPEAKERS_UNKNOWN) {
|
||||
const int channel = ConvertChannelFormat(channelFormat);
|
||||
|
|
@ -248,11 +278,11 @@ bool DeckLinkDeviceInstance::StartCapture(DeckLinkDeviceMode *mode_)
|
|||
if (channelFormat != SPEAKERS_UNKNOWN &&
|
||||
channelFormat != SPEAKERS_MONO &&
|
||||
channelFormat != SPEAKERS_STEREO &&
|
||||
maxdevicechannel >= 8 &&
|
||||
isWin) {
|
||||
(channelFormat != SPEAKERS_7POINT1 || swap)
|
||||
&& maxdevicechannel >= 8) {
|
||||
|
||||
const audio_repack_mode_t repack_mode = ConvertRepackFormat
|
||||
(channelFormat);
|
||||
(channelFormat, swap);
|
||||
audioRepacker = new AudioRepacker(repack_mode);
|
||||
}
|
||||
}
|
||||
|
|
@ -288,6 +318,128 @@ bool DeckLinkDeviceInstance::StopCapture(void)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool DeckLinkDeviceInstance::StartOutput(DeckLinkDeviceMode *mode_)
|
||||
{
|
||||
if (mode != nullptr)
|
||||
return false;
|
||||
if (mode_ == nullptr)
|
||||
return false;
|
||||
|
||||
LOG(LOG_INFO, "Starting output...");
|
||||
|
||||
if (!device->GetOutput(&output))
|
||||
return false;
|
||||
|
||||
const HRESULT videoResult = output->EnableVideoOutput(
|
||||
mode_->GetDisplayMode(),
|
||||
bmdVideoOutputFlagDefault);
|
||||
if (videoResult != S_OK) {
|
||||
LOG(LOG_ERROR, "Failed to enable video output");
|
||||
return false;
|
||||
}
|
||||
|
||||
const HRESULT audioResult = output->EnableAudioOutput(
|
||||
bmdAudioSampleRate48kHz,
|
||||
bmdAudioSampleType16bitInteger,
|
||||
2,
|
||||
bmdAudioOutputStreamTimestamped);
|
||||
if (audioResult != S_OK) {
|
||||
LOG(LOG_ERROR, "Failed to enable audio output");
|
||||
return false;
|
||||
}
|
||||
|
||||
mode = mode_;
|
||||
|
||||
int keyerMode = device->GetKeyerMode();
|
||||
|
||||
IDeckLinkKeyer *deckLinkKeyer = nullptr;
|
||||
if (device->GetKeyer(&deckLinkKeyer)) {
|
||||
if (keyerMode) {
|
||||
deckLinkKeyer->Enable(keyerMode == 1);
|
||||
deckLinkKeyer->SetLevel(255);
|
||||
} else {
|
||||
deckLinkKeyer->Disable();
|
||||
}
|
||||
}
|
||||
|
||||
auto decklinkOutput = dynamic_cast<DeckLinkOutput*>(decklink);
|
||||
if (decklinkOutput == nullptr)
|
||||
return false;
|
||||
|
||||
int rowBytes = decklinkOutput->GetWidth() * 2;
|
||||
if (decklinkOutput->keyerMode != 0) {
|
||||
rowBytes = decklinkOutput->GetWidth() * 4;
|
||||
}
|
||||
|
||||
BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
|
||||
if (keyerMode != 0) {
|
||||
pixelFormat = bmdFormat8BitBGRA;
|
||||
}
|
||||
|
||||
HRESULT result;
|
||||
result = output->CreateVideoFrame(decklinkOutput->GetWidth(),
|
||||
decklinkOutput->GetHeight(),
|
||||
rowBytes,
|
||||
pixelFormat,
|
||||
bmdFrameFlagDefault,
|
||||
&decklinkOutputFrame);
|
||||
if (result != S_OK) {
|
||||
blog(LOG_ERROR ,"failed to make frame 0x%X", result);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DeckLinkDeviceInstance::StopOutput()
|
||||
{
|
||||
if (mode == nullptr || output == nullptr)
|
||||
return false;
|
||||
|
||||
LOG(LOG_INFO, "Stopping output of '%s'...",
|
||||
GetDevice()->GetDisplayName().c_str());
|
||||
|
||||
output->DisableVideoOutput();
|
||||
output->DisableAudioOutput();
|
||||
|
||||
if (decklinkOutputFrame != nullptr) {
|
||||
decklinkOutputFrame->Release();
|
||||
decklinkOutputFrame = nullptr;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeckLinkDeviceInstance::DisplayVideoFrame(video_data *frame)
|
||||
{
|
||||
auto decklinkOutput = dynamic_cast<DeckLinkOutput*>(decklink);
|
||||
if (decklinkOutput == nullptr)
|
||||
return;
|
||||
|
||||
uint8_t *destData;
|
||||
decklinkOutputFrame->GetBytes((void**)&destData);
|
||||
|
||||
uint8_t *outData = frame->data[0];
|
||||
|
||||
int rowBytes = decklinkOutput->GetWidth() * 2;
|
||||
if (device->GetKeyerMode()) {
|
||||
rowBytes = decklinkOutput->GetWidth() * 4;
|
||||
}
|
||||
|
||||
std::copy(outData, outData + (decklinkOutput->GetHeight() *
|
||||
rowBytes), destData);
|
||||
|
||||
output->DisplayVideoFrameSync(decklinkOutputFrame);
|
||||
}
|
||||
|
||||
void DeckLinkDeviceInstance::WriteAudio(audio_data *frames)
|
||||
{
|
||||
uint32_t sampleFramesWritten;
|
||||
output->WriteAudioSamplesSync(frames->data[0],
|
||||
frames->frames,
|
||||
&sampleFramesWritten);
|
||||
}
|
||||
|
||||
#define TIME_BASE 1000000000
|
||||
|
||||
HRESULT STDMETHODCALLTYPE DeckLinkDeviceInstance::VideoInputFrameArrived(
|
||||
|
|
|
|||
|
|
@ -1,28 +1,39 @@
|
|||
#pragma once
|
||||
|
||||
#define LOG(level, message, ...) blog(level, "%s: " message, "decklink", ##__VA_ARGS__)
|
||||
|
||||
#include <obs-module.h>
|
||||
#include "decklink-device.hpp"
|
||||
#include "../../libobs/media-io/video-scaler.h"
|
||||
|
||||
class AudioRepacker;
|
||||
class DecklinkBase;
|
||||
|
||||
class DeckLinkDeviceInstance : public IDeckLinkInputCallback {
|
||||
protected:
|
||||
struct obs_source_frame currentFrame;
|
||||
struct obs_source_frame2 currentFrame;
|
||||
struct obs_source_audio currentPacket;
|
||||
DeckLink *decklink = nullptr;
|
||||
DecklinkBase *decklink = nullptr;
|
||||
DeckLinkDevice *device = nullptr;
|
||||
DeckLinkDeviceMode *mode = nullptr;
|
||||
BMDVideoConnection videoConnection;
|
||||
BMDAudioConnection audioConnection;
|
||||
BMDDisplayMode displayMode = bmdModeNTSC;
|
||||
BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
|
||||
video_colorspace colorSpace = VIDEO_CS_DEFAULT;
|
||||
video_colorspace activeColorSpace = VIDEO_CS_DEFAULT;
|
||||
video_range_type colorRange = VIDEO_RANGE_DEFAULT;
|
||||
ComPtr<IDeckLinkInput> input;
|
||||
ComPtr<IDeckLinkOutput> output;
|
||||
volatile long refCount = 1;
|
||||
int64_t audioOffset = 0;
|
||||
uint64_t nextAudioTS = 0;
|
||||
uint64_t lastVideoTS = 0;
|
||||
AudioRepacker *audioRepacker = nullptr;
|
||||
speaker_layout channelFormat = SPEAKERS_STEREO;
|
||||
bool swap;
|
||||
|
||||
IDeckLinkMutableVideoFrame *decklinkOutputFrame = nullptr;
|
||||
|
||||
void FinalizeStream();
|
||||
void SetupVideoFormat(DeckLinkDeviceMode *mode_);
|
||||
|
|
@ -33,7 +44,7 @@ protected:
|
|||
const uint64_t timestamp);
|
||||
|
||||
public:
|
||||
DeckLinkDeviceInstance(DeckLink *decklink, DeckLinkDevice *device);
|
||||
DeckLinkDeviceInstance(DecklinkBase *decklink, DeckLinkDevice *device);
|
||||
virtual ~DeckLinkDeviceInstance();
|
||||
|
||||
inline DeckLinkDevice *GetDevice() const {return device;}
|
||||
|
|
@ -46,12 +57,20 @@ public:
|
|||
inline video_colorspace GetActiveColorSpace() const {return colorSpace;}
|
||||
inline video_range_type GetActiveColorRange() const {return colorRange;}
|
||||
inline speaker_layout GetActiveChannelFormat() const {return channelFormat;}
|
||||
inline bool GetActiveSwapState() const {return swap;}
|
||||
inline BMDVideoConnection GetVideoConnection() const {return videoConnection;}
|
||||
inline BMDAudioConnection GetAudioConnection() const {return audioConnection;}
|
||||
|
||||
inline DeckLinkDeviceMode *GetMode() const {return mode;}
|
||||
|
||||
bool StartCapture(DeckLinkDeviceMode *mode);
|
||||
bool StartCapture(DeckLinkDeviceMode *mode,
|
||||
BMDVideoConnection bmdVideoConnection,
|
||||
BMDAudioConnection bmdAudioConnection);
|
||||
bool StopCapture(void);
|
||||
|
||||
bool StartOutput(DeckLinkDeviceMode *mode_);
|
||||
bool StopOutput(void);
|
||||
|
||||
HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(
|
||||
IDeckLinkVideoInputFrame *videoFrame,
|
||||
IDeckLinkAudioInputPacket *audioPacket);
|
||||
|
|
@ -63,4 +82,7 @@ public:
|
|||
ULONG STDMETHODCALLTYPE AddRef(void);
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv);
|
||||
ULONG STDMETHODCALLTYPE Release(void);
|
||||
|
||||
void DisplayVideoFrame(video_data *frame);
|
||||
void WriteAudio(audio_data *frames);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -32,6 +32,22 @@ BMDDisplayMode DeckLinkDeviceMode::GetDisplayMode(void) const
|
|||
return bmdModeUnknown;
|
||||
}
|
||||
|
||||
int DeckLinkDeviceMode::GetWidth()
|
||||
{
|
||||
if (mode != nullptr)
|
||||
return mode->GetWidth();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DeckLinkDeviceMode::GetHeight()
|
||||
{
|
||||
if (mode != nullptr)
|
||||
return mode->GetHeight();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
BMDDisplayModeFlags DeckLinkDeviceMode::GetDisplayModeFlags(void) const
|
||||
{
|
||||
if (mode != nullptr)
|
||||
|
|
|
|||
|
|
@ -23,4 +23,7 @@ public:
|
|||
const std::string& GetName(void) const;
|
||||
|
||||
void SetMode(IDeckLinkDisplayMode *mode);
|
||||
|
||||
int GetWidth();
|
||||
int GetHeight();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#include <sstream>
|
||||
#include <sstream>
|
||||
|
||||
#include "decklink-device.hpp"
|
||||
|
||||
|
|
@ -10,7 +10,10 @@ DeckLinkDevice::DeckLinkDevice(IDeckLink *device_) : device(device_)
|
|||
|
||||
DeckLinkDevice::~DeckLinkDevice(void)
|
||||
{
|
||||
for (DeckLinkDeviceMode *mode : modes)
|
||||
for (DeckLinkDeviceMode *mode : inputModes)
|
||||
delete mode;
|
||||
|
||||
for (DeckLinkDeviceMode *mode : outputModes)
|
||||
delete mode;
|
||||
}
|
||||
|
||||
|
|
@ -37,37 +40,85 @@ bool DeckLinkDevice::Init()
|
|||
decklink_bool_t detectable = false;
|
||||
if (attributes->GetFlag(BMDDeckLinkSupportsInputFormatDetection,
|
||||
&detectable) == S_OK && !!detectable) {
|
||||
DeckLinkDeviceMode *mode =
|
||||
new DeckLinkDeviceMode("Auto", MODE_ID_AUTO);
|
||||
modes.push_back(mode);
|
||||
modeIdMap[MODE_ID_AUTO] = mode;
|
||||
DeckLinkDeviceMode *mode = new DeckLinkDeviceMode(
|
||||
"Auto",
|
||||
MODE_ID_AUTO);
|
||||
inputModes.push_back(mode);
|
||||
inputModeIdMap[MODE_ID_AUTO] = mode;
|
||||
}
|
||||
}
|
||||
|
||||
// Find input modes
|
||||
ComPtr<IDeckLinkInput> input;
|
||||
if (device->QueryInterface(IID_IDeckLinkInput, (void**)&input) != S_OK)
|
||||
return false;
|
||||
if (device->QueryInterface(IID_IDeckLinkInput, (void **) &input) == S_OK) {
|
||||
IDeckLinkDisplayModeIterator *modeIterator;
|
||||
if (input->GetDisplayModeIterator(&modeIterator) == S_OK) {
|
||||
IDeckLinkDisplayMode *displayMode;
|
||||
long long modeId = 1;
|
||||
|
||||
IDeckLinkDisplayModeIterator *modeIterator;
|
||||
if (input->GetDisplayModeIterator(&modeIterator) == S_OK) {
|
||||
IDeckLinkDisplayMode *displayMode;
|
||||
long long modeId = 1;
|
||||
while (modeIterator->Next(&displayMode) == S_OK) {
|
||||
if (displayMode == nullptr)
|
||||
continue;
|
||||
|
||||
while (modeIterator->Next(&displayMode) == S_OK) {
|
||||
if (displayMode == nullptr)
|
||||
continue;
|
||||
DeckLinkDeviceMode *mode =
|
||||
new DeckLinkDeviceMode(displayMode, modeId);
|
||||
inputModes.push_back(mode);
|
||||
inputModeIdMap[modeId] = mode;
|
||||
displayMode->Release();
|
||||
++modeId;
|
||||
}
|
||||
|
||||
DeckLinkDeviceMode *mode =
|
||||
new DeckLinkDeviceMode(displayMode, modeId);
|
||||
modes.push_back(mode);
|
||||
modeIdMap[modeId] = mode;
|
||||
displayMode->Release();
|
||||
++modeId;
|
||||
modeIterator->Release();
|
||||
}
|
||||
|
||||
modeIterator->Release();
|
||||
}
|
||||
|
||||
// Get supported video connections
|
||||
attributes->GetInt(BMDDeckLinkVideoInputConnections,
|
||||
&supportedVideoInputConnections);
|
||||
attributes->GetInt(BMDDeckLinkVideoOutputConnections,
|
||||
&supportedVideoOutputConnections);
|
||||
|
||||
// Get supported audio connections
|
||||
attributes->GetInt(BMDDeckLinkAudioInputConnections,
|
||||
&supportedAudioInputConnections);
|
||||
attributes->GetInt(BMDDeckLinkAudioOutputConnections,
|
||||
&supportedAudioOutputConnections);
|
||||
|
||||
// find output modes
|
||||
ComPtr<IDeckLinkOutput> output;
|
||||
if (device->QueryInterface(IID_IDeckLinkOutput, (void **) &output) == S_OK) {
|
||||
|
||||
IDeckLinkDisplayModeIterator *modeIterator;
|
||||
if (output->GetDisplayModeIterator(&modeIterator) == S_OK) {
|
||||
IDeckLinkDisplayMode *displayMode;
|
||||
long long modeId = 1;
|
||||
|
||||
while (modeIterator->Next(&displayMode) == S_OK) {
|
||||
if (displayMode == nullptr)
|
||||
continue;
|
||||
|
||||
DeckLinkDeviceMode *mode =
|
||||
new DeckLinkDeviceMode(displayMode, modeId);
|
||||
outputModes.push_back(mode);
|
||||
outputModeIdMap[modeId] = mode;
|
||||
displayMode->Release();
|
||||
++modeId;
|
||||
}
|
||||
|
||||
modeIterator->Release();
|
||||
}
|
||||
}
|
||||
|
||||
// get keyer support
|
||||
attributes->GetFlag(BMDDeckLinkSupportsExternalKeying,
|
||||
&supportsExternalKeyer);
|
||||
attributes->GetFlag(BMDDeckLinkSupportsInternalKeying,
|
||||
&supportsInternalKeyer);
|
||||
|
||||
// Sub Device Counts
|
||||
attributes->GetInt(BMDDeckLinkSubDeviceIndex, &subDeviceIndex);
|
||||
attributes->GetInt(BMDDeckLinkNumberOfSubDevices, &numSubDevices);
|
||||
|
||||
decklink_string_t decklinkModelName;
|
||||
decklink_string_t decklinkDisplayName;
|
||||
|
||||
|
|
@ -115,9 +166,43 @@ bool DeckLinkDevice::GetInput(IDeckLinkInput **input)
|
|||
return true;
|
||||
}
|
||||
|
||||
DeckLinkDeviceMode *DeckLinkDevice::FindMode(long long id)
|
||||
bool DeckLinkDevice::GetOutput(IDeckLinkOutput **output)
|
||||
{
|
||||
return modeIdMap[id];
|
||||
if (device->QueryInterface(IID_IDeckLinkOutput, (void**)output) != S_OK)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DeckLinkDevice::GetKeyer(IDeckLinkKeyer **deckLinkKeyer)
|
||||
{
|
||||
if (device->QueryInterface(IID_IDeckLinkKeyer, (void**)deckLinkKeyer) != S_OK)
|
||||
{
|
||||
fprintf(stderr, "Could not obtain the IDeckLinkKeyer interface\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DeckLinkDevice::SetKeyerMode(int newKeyerMode)
|
||||
{
|
||||
keyerMode = newKeyerMode;
|
||||
}
|
||||
|
||||
int DeckLinkDevice::GetKeyerMode(void)
|
||||
{
|
||||
return keyerMode;
|
||||
}
|
||||
|
||||
DeckLinkDeviceMode *DeckLinkDevice::FindInputMode(long long id)
|
||||
{
|
||||
return inputModeIdMap[id];
|
||||
}
|
||||
|
||||
DeckLinkDeviceMode *DeckLinkDevice::FindOutputMode(long long id)
|
||||
{
|
||||
return outputModeIdMap[id];
|
||||
}
|
||||
|
||||
const std::string& DeckLinkDevice::GetDisplayName(void)
|
||||
|
|
@ -130,9 +215,45 @@ const std::string& DeckLinkDevice::GetHash(void) const
|
|||
return hash;
|
||||
}
|
||||
|
||||
const std::vector<DeckLinkDeviceMode *>& DeckLinkDevice::GetModes(void) const
|
||||
const std::vector<DeckLinkDeviceMode *>& DeckLinkDevice::GetInputModes(void) const
|
||||
{
|
||||
return modes;
|
||||
return inputModes;
|
||||
}
|
||||
|
||||
const std::vector<DeckLinkDeviceMode *>& DeckLinkDevice::GetOutputModes(void) const
|
||||
{
|
||||
return outputModes;
|
||||
}
|
||||
|
||||
int64_t DeckLinkDevice::GetVideoInputConnections()
|
||||
{
|
||||
return supportedVideoInputConnections;
|
||||
}
|
||||
|
||||
int64_t DeckLinkDevice::GetAudioInputConnections()
|
||||
{
|
||||
return supportedAudioInputConnections;
|
||||
}
|
||||
|
||||
|
||||
bool DeckLinkDevice::GetSupportsExternalKeyer(void) const
|
||||
{
|
||||
return supportsExternalKeyer;
|
||||
}
|
||||
|
||||
bool DeckLinkDevice::GetSupportsInternalKeyer(void) const
|
||||
{
|
||||
return supportsInternalKeyer;
|
||||
}
|
||||
|
||||
int64_t DeckLinkDevice::GetSubDeviceCount()
|
||||
{
|
||||
return numSubDevices;
|
||||
}
|
||||
|
||||
int64_t DeckLinkDevice::GetSubDeviceIndex()
|
||||
{
|
||||
return subDeviceIndex;
|
||||
}
|
||||
|
||||
const std::string& DeckLinkDevice::GetName(void) const
|
||||
|
|
|
|||
|
|
@ -1,20 +1,33 @@
|
|||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include "decklink.hpp"
|
||||
#include "decklink-device-mode.hpp"
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
|
||||
class DeckLinkDevice {
|
||||
ComPtr<IDeckLink> device;
|
||||
std::map<long long, DeckLinkDeviceMode *> modeIdMap;
|
||||
std::vector<DeckLinkDeviceMode *> modes;
|
||||
std::map<long long, DeckLinkDeviceMode *> inputModeIdMap;
|
||||
std::vector<DeckLinkDeviceMode *> inputModes;
|
||||
std::map<long long, DeckLinkDeviceMode *> outputModeIdMap;
|
||||
std::vector<DeckLinkDeviceMode *> outputModes;
|
||||
std::string name;
|
||||
std::string displayName;
|
||||
std::string hash;
|
||||
int32_t maxChannel;
|
||||
int32_t maxChannel = 0;
|
||||
decklink_bool_t supportsExternalKeyer = false;
|
||||
decklink_bool_t supportsInternalKeyer = false;
|
||||
int64_t subDeviceIndex = 0;
|
||||
int64_t numSubDevices = 0;
|
||||
int64_t supportedVideoInputConnections = -1;
|
||||
int64_t supportedVideoOutputConnections = -1;
|
||||
int64_t supportedAudioInputConnections = -1;
|
||||
int64_t supportedAudioOutputConnections = -1;
|
||||
int keyerMode = 0;
|
||||
volatile long refCount = 1;
|
||||
|
||||
public:
|
||||
|
|
@ -26,14 +39,26 @@ public:
|
|||
|
||||
bool Init();
|
||||
|
||||
DeckLinkDeviceMode *FindMode(long long id);
|
||||
DeckLinkDeviceMode *FindInputMode(long long id);
|
||||
DeckLinkDeviceMode *FindOutputMode(long long id);
|
||||
const std::string& GetDisplayName(void);
|
||||
const std::string& GetHash(void) const;
|
||||
const std::vector<DeckLinkDeviceMode *>& GetModes(void) const;
|
||||
const std::vector<DeckLinkDeviceMode *>& GetInputModes(void) const;
|
||||
const std::vector<DeckLinkDeviceMode *>& GetOutputModes(void) const;
|
||||
int64_t GetVideoInputConnections();
|
||||
int64_t GetAudioInputConnections();
|
||||
bool GetSupportsExternalKeyer(void) const;
|
||||
bool GetSupportsInternalKeyer(void) const;
|
||||
int64_t GetSubDeviceCount();
|
||||
int64_t GetSubDeviceIndex();
|
||||
int GetKeyerMode(void);
|
||||
void SetKeyerMode(int newKeyerMode);
|
||||
const std::string& GetName(void) const;
|
||||
int32_t GetMaxChannel(void) const;
|
||||
|
||||
bool GetInput(IDeckLinkInput **input);
|
||||
bool GetOutput(IDeckLinkOutput **output);
|
||||
bool GetKeyer(IDeckLinkKeyer **keyer);
|
||||
|
||||
inline bool IsDevice(IDeckLink *device_)
|
||||
{
|
||||
|
|
|
|||
17
plugins/decklink/decklink-devices.cpp
Normal file
17
plugins/decklink/decklink-devices.cpp
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#include "decklink-devices.hpp"
|
||||
|
||||
DeckLinkDeviceDiscovery *deviceEnum = nullptr;
|
||||
|
||||
void fill_out_devices(obs_property_t *list)
|
||||
{
|
||||
deviceEnum->Lock();
|
||||
|
||||
const std::vector<DeckLinkDevice*> &devices = deviceEnum->GetDevices();
|
||||
for (DeckLinkDevice *device : devices) {
|
||||
obs_property_list_add_string(list,
|
||||
device->GetDisplayName().c_str(),
|
||||
device->GetHash().c_str());
|
||||
}
|
||||
|
||||
deviceEnum->Unlock();
|
||||
}
|
||||
8
plugins/decklink/decklink-devices.hpp
Normal file
8
plugins/decklink/decklink-devices.hpp
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
#include "decklink-device.hpp"
|
||||
#include "decklink-device-discovery.hpp"
|
||||
|
||||
extern DeckLinkDeviceDiscovery *deviceEnum;
|
||||
|
||||
void fill_out_devices(obs_property_t *list);
|
||||
262
plugins/decklink/decklink-output.cpp
Normal file
262
plugins/decklink/decklink-output.cpp
Normal file
|
|
@ -0,0 +1,262 @@
|
|||
#include <obs-module.h>
|
||||
#include <obs-avc.h>
|
||||
|
||||
#include "const.h"
|
||||
|
||||
#include "DecklinkOutput.hpp"
|
||||
#include "decklink-device.hpp"
|
||||
#include "decklink-device-discovery.hpp"
|
||||
#include "decklink-devices.hpp"
|
||||
|
||||
#include "../../libobs/media-io/video-scaler.h"
|
||||
|
||||
static void decklink_output_destroy(void *data)
|
||||
{
|
||||
auto *decklink = (DeckLinkOutput *)data;
|
||||
delete decklink;
|
||||
}
|
||||
|
||||
static void *decklink_output_create(obs_data_t *settings, obs_output_t *output)
|
||||
{
|
||||
auto *decklinkOutput = new DeckLinkOutput(output, deviceEnum);
|
||||
|
||||
decklinkOutput->deviceHash = obs_data_get_string(settings, DEVICE_HASH);
|
||||
decklinkOutput->modeID = obs_data_get_int(settings, MODE_ID);
|
||||
decklinkOutput->keyerMode = obs_data_get_int(settings, KEYER);
|
||||
|
||||
return decklinkOutput;
|
||||
}
|
||||
|
||||
static void decklink_output_update(void *data, obs_data_t *settings)
|
||||
{
|
||||
auto *decklink = (DeckLinkOutput *)data;
|
||||
|
||||
decklink->deviceHash = obs_data_get_string(settings, DEVICE_HASH);
|
||||
decklink->modeID = obs_data_get_int(settings, MODE_ID);
|
||||
decklink->keyerMode = obs_data_get_int(settings, KEYER);
|
||||
}
|
||||
|
||||
static bool decklink_output_start(void *data)
|
||||
{
|
||||
auto *decklink = (DeckLinkOutput *)data;
|
||||
struct obs_audio_info aoi;
|
||||
|
||||
if (!obs_get_audio_info(&aoi)) {
|
||||
blog(LOG_WARNING, "No active audio");
|
||||
return false;
|
||||
}
|
||||
|
||||
decklink->audio_samplerate = aoi.samples_per_sec;
|
||||
decklink->audio_planes = 2;
|
||||
decklink->audio_size = get_audio_size(AUDIO_FORMAT_16BIT, aoi.speakers, 1);
|
||||
|
||||
decklink->start_timestamp = 0;
|
||||
|
||||
ComPtr<DeckLinkDevice> device;
|
||||
|
||||
device.Set(deviceEnum->FindByHash(decklink->deviceHash));
|
||||
|
||||
DeckLinkDeviceMode *mode = device->FindOutputMode(decklink->modeID);
|
||||
|
||||
decklink->SetSize(mode->GetWidth(), mode->GetHeight());
|
||||
|
||||
struct video_scale_info to = {};
|
||||
|
||||
if (decklink->keyerMode != 0) {
|
||||
to.format = VIDEO_FORMAT_BGRA;
|
||||
} else {
|
||||
to.format = VIDEO_FORMAT_UYVY;
|
||||
}
|
||||
to.width = mode->GetWidth();
|
||||
to.height = mode->GetHeight();
|
||||
|
||||
obs_output_set_video_conversion(decklink->GetOutput(), &to);
|
||||
|
||||
device->SetKeyerMode(decklink->keyerMode);
|
||||
decklink->Activate(device, decklink->modeID);
|
||||
|
||||
struct audio_convert_info conversion = {};
|
||||
conversion.format = AUDIO_FORMAT_16BIT;
|
||||
conversion.speakers = SPEAKERS_STEREO;
|
||||
conversion.samples_per_sec = 48000; // Only format the decklink supports
|
||||
|
||||
obs_output_set_audio_conversion(decklink->GetOutput(), &conversion);
|
||||
|
||||
if (!obs_output_begin_data_capture(decklink->GetOutput(), 0))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void decklink_output_stop(void *data, uint64_t)
|
||||
{
|
||||
auto *decklink = (DeckLinkOutput *)data;
|
||||
|
||||
obs_output_end_data_capture(decklink->GetOutput());
|
||||
|
||||
ComPtr<DeckLinkDevice> device;
|
||||
|
||||
device.Set(deviceEnum->FindByHash(decklink->deviceHash));
|
||||
|
||||
decklink->Deactivate();
|
||||
}
|
||||
|
||||
static void decklink_output_raw_video(void *data, struct video_data *frame)
|
||||
{
|
||||
auto *decklink = (DeckLinkOutput *)data;
|
||||
|
||||
if (!decklink->start_timestamp)
|
||||
decklink->start_timestamp = frame->timestamp;
|
||||
|
||||
decklink->DisplayVideoFrame(frame);
|
||||
}
|
||||
|
||||
static bool prepare_audio(DeckLinkOutput *decklink,
|
||||
const struct audio_data *frame,
|
||||
struct audio_data *output)
|
||||
{
|
||||
*output = *frame;
|
||||
|
||||
if (frame->timestamp < decklink->start_timestamp) {
|
||||
uint64_t duration = (uint64_t)frame->frames * 1000000000 /
|
||||
(uint64_t)decklink->audio_samplerate;
|
||||
uint64_t end_ts = frame->timestamp + duration;
|
||||
uint64_t cutoff;
|
||||
|
||||
if (end_ts <= decklink->start_timestamp)
|
||||
return false;
|
||||
|
||||
cutoff = decklink->start_timestamp - frame->timestamp;
|
||||
output->timestamp += cutoff;
|
||||
|
||||
cutoff *= (uint64_t)decklink->audio_samplerate / 1000000000;
|
||||
|
||||
for (size_t i = 0; i < decklink->audio_planes; i++)
|
||||
output->data[i] += decklink->audio_size *
|
||||
(uint32_t)cutoff;
|
||||
|
||||
output->frames -= (uint32_t)cutoff;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void decklink_output_raw_audio(void *data, struct audio_data *frames)
|
||||
{
|
||||
auto *decklink = (DeckLinkOutput *)data;
|
||||
struct audio_data in;
|
||||
|
||||
if (!decklink->start_timestamp)
|
||||
return;
|
||||
|
||||
if (!prepare_audio(decklink, frames, &in))
|
||||
return;
|
||||
|
||||
decklink->WriteAudio(&in);
|
||||
}
|
||||
|
||||
static bool decklink_output_device_changed(obs_properties_t *props,
|
||||
obs_property_t *list, obs_data_t *settings)
|
||||
{
|
||||
const char *name = obs_data_get_string(settings, DEVICE_NAME);
|
||||
const char *hash = obs_data_get_string(settings, DEVICE_HASH);
|
||||
const char *mode = obs_data_get_string(settings, MODE_NAME);
|
||||
long long modeId = obs_data_get_int(settings, MODE_ID);
|
||||
|
||||
size_t itemCount = obs_property_list_item_count(list);
|
||||
bool itemFound = false;
|
||||
|
||||
for (size_t i = 0; i < itemCount; i++) {
|
||||
const char *curHash = obs_property_list_item_string(list, i);
|
||||
if (strcmp(hash, curHash) == 0) {
|
||||
itemFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!itemFound) {
|
||||
obs_property_list_insert_string(list, 0, name, hash);
|
||||
obs_property_list_item_disable(list, 0, true);
|
||||
}
|
||||
|
||||
obs_property_t *modeList = obs_properties_get(props, MODE_ID);
|
||||
obs_property_t *keyerList = obs_properties_get(props, KEYER);
|
||||
|
||||
obs_property_list_clear(modeList);
|
||||
obs_property_list_clear(keyerList);
|
||||
|
||||
ComPtr<DeckLinkDevice> device;
|
||||
device.Set(deviceEnum->FindByHash(hash));
|
||||
|
||||
if (!device) {
|
||||
obs_property_list_add_int(modeList, mode, modeId);
|
||||
obs_property_list_item_disable(modeList, 0, true);
|
||||
obs_property_list_item_disable(keyerList, 0, true);
|
||||
} else {
|
||||
const std::vector<DeckLinkDeviceMode*> &modes =
|
||||
device->GetOutputModes();
|
||||
|
||||
for (DeckLinkDeviceMode *mode : modes) {
|
||||
obs_property_list_add_int(modeList,
|
||||
mode->GetName().c_str(),
|
||||
mode->GetId());
|
||||
}
|
||||
|
||||
obs_property_list_add_int(keyerList, "Disabled", 0);
|
||||
|
||||
if (device->GetSupportsExternalKeyer()) {
|
||||
obs_property_list_add_int(keyerList, "External", 1);
|
||||
}
|
||||
|
||||
if (device->GetSupportsInternalKeyer()) {
|
||||
obs_property_list_add_int(keyerList, "Internal", 2);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static obs_properties_t *decklink_output_properties(void *unused)
|
||||
{
|
||||
UNUSED_PARAMETER(unused);
|
||||
obs_properties_t *props = obs_properties_create();
|
||||
|
||||
obs_property_t *list = obs_properties_add_list(props, DEVICE_HASH,
|
||||
TEXT_DEVICE, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
|
||||
obs_property_set_modified_callback(list, decklink_output_device_changed);
|
||||
|
||||
fill_out_devices(list);
|
||||
|
||||
obs_properties_add_list(props,
|
||||
MODE_ID, TEXT_MODE, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
|
||||
obs_properties_add_bool(props, AUTO_START, TEXT_AUTO_START);
|
||||
|
||||
obs_properties_add_list(props, KEYER, TEXT_ENABLE_KEYER, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
static const char *decklink_output_get_name(void*)
|
||||
{
|
||||
return obs_module_text("BlackmagicDevice");
|
||||
}
|
||||
|
||||
struct obs_output_info create_decklink_output_info()
|
||||
{
|
||||
struct obs_output_info decklink_output_info = {};
|
||||
|
||||
decklink_output_info.id = "decklink_output";
|
||||
decklink_output_info.flags = OBS_OUTPUT_AV;
|
||||
decklink_output_info.get_name = decklink_output_get_name;
|
||||
decklink_output_info.create = decklink_output_create;
|
||||
decklink_output_info.destroy = decklink_output_destroy;
|
||||
decklink_output_info.start = decklink_output_start;
|
||||
decklink_output_info.stop = decklink_output_stop;
|
||||
decklink_output_info.get_properties = decklink_output_properties;
|
||||
decklink_output_info.raw_video = decklink_output_raw_video;
|
||||
decklink_output_info.raw_audio = decklink_output_raw_audio;
|
||||
decklink_output_info.update = decklink_output_update;
|
||||
|
||||
return decklink_output_info;
|
||||
}
|
||||
318
plugins/decklink/decklink-source.cpp
Normal file
318
plugins/decklink/decklink-source.cpp
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
#include <obs-module.h>
|
||||
|
||||
#include "const.h"
|
||||
#include "util.hpp"
|
||||
|
||||
#include "DecklinkInput.hpp"
|
||||
#include "decklink-device.hpp"
|
||||
#include "decklink-device-discovery.hpp"
|
||||
#include "decklink-devices.hpp"
|
||||
|
||||
static void decklink_enable_buffering(DeckLinkInput *decklink, bool enabled)
|
||||
{
|
||||
obs_source_t *source = decklink->GetSource();
|
||||
obs_source_set_async_unbuffered(source, !enabled);
|
||||
decklink->buffering = enabled;
|
||||
}
|
||||
|
||||
static void decklink_deactivate_when_not_showing(DeckLinkInput *decklink, bool dwns)
|
||||
{
|
||||
decklink->dwns = dwns;
|
||||
}
|
||||
|
||||
static void *decklink_create(obs_data_t *settings, obs_source_t *source)
|
||||
{
|
||||
DeckLinkInput *decklink = new DeckLinkInput(source, deviceEnum);
|
||||
|
||||
obs_source_set_async_decoupled(source, true);
|
||||
decklink_enable_buffering(decklink,
|
||||
obs_data_get_bool(settings, BUFFERING));
|
||||
|
||||
obs_source_update(source, settings);
|
||||
return decklink;
|
||||
}
|
||||
|
||||
static void decklink_destroy(void *data)
|
||||
{
|
||||
DeckLinkInput *decklink = (DeckLinkInput *)data;
|
||||
delete decklink;
|
||||
}
|
||||
|
||||
static void decklink_update(void *data, obs_data_t *settings)
|
||||
{
|
||||
DeckLinkInput *decklink = (DeckLinkInput *)data;
|
||||
const char *hash = obs_data_get_string(settings, DEVICE_HASH);
|
||||
long long id = obs_data_get_int(settings, MODE_ID);
|
||||
BMDVideoConnection videoConnection = (BMDVideoConnection) obs_data_get_int(settings,
|
||||
VIDEO_CONNECTION);
|
||||
BMDAudioConnection audioConnection = (BMDAudioConnection) obs_data_get_int(settings,
|
||||
AUDIO_CONNECTION);
|
||||
BMDPixelFormat pixelFormat = (BMDPixelFormat)obs_data_get_int(settings,
|
||||
PIXEL_FORMAT);
|
||||
video_colorspace colorSpace = (video_colorspace)obs_data_get_int(settings,
|
||||
COLOR_SPACE);
|
||||
video_range_type colorRange = (video_range_type)obs_data_get_int(settings,
|
||||
COLOR_RANGE);
|
||||
int chFmtInt = (int)obs_data_get_int(settings, CHANNEL_FORMAT);
|
||||
|
||||
if (chFmtInt == 7)
|
||||
chFmtInt = SPEAKERS_5POINT1;
|
||||
else if (chFmtInt < SPEAKERS_UNKNOWN || chFmtInt > SPEAKERS_7POINT1)
|
||||
chFmtInt = 2;
|
||||
|
||||
speaker_layout channelFormat = (speaker_layout)chFmtInt;
|
||||
|
||||
decklink_enable_buffering(decklink,
|
||||
obs_data_get_bool(settings, BUFFERING));
|
||||
|
||||
decklink_deactivate_when_not_showing(decklink,
|
||||
obs_data_get_bool(settings, DEACTIVATE_WNS));
|
||||
|
||||
ComPtr<DeckLinkDevice> device;
|
||||
device.Set(deviceEnum->FindByHash(hash));
|
||||
|
||||
decklink->SetPixelFormat(pixelFormat);
|
||||
decklink->SetColorSpace(colorSpace);
|
||||
decklink->SetColorRange(colorRange);
|
||||
decklink->SetChannelFormat(channelFormat);
|
||||
decklink->hash = std::string(hash);
|
||||
decklink->swap = obs_data_get_bool(settings, SWAP);
|
||||
decklink->Activate(device, id, videoConnection, audioConnection);
|
||||
}
|
||||
|
||||
static void decklink_show(void *data)
|
||||
{
|
||||
DeckLinkInput *decklink = (DeckLinkInput *)data;
|
||||
obs_source_t *source = decklink->GetSource();
|
||||
bool showing = obs_source_showing(source);
|
||||
if (decklink->dwns && showing && !decklink->Capturing()) {
|
||||
ComPtr<DeckLinkDevice> device;
|
||||
device.Set(deviceEnum->FindByHash(decklink->hash.c_str()));
|
||||
decklink->Activate(device, decklink->id, decklink->videoConnection,
|
||||
decklink->audioConnection);
|
||||
}
|
||||
}
|
||||
static void decklink_hide(void *data)
|
||||
{
|
||||
DeckLinkInput *decklink = (DeckLinkInput *)data;
|
||||
obs_source_t *source = decklink->GetSource();
|
||||
bool showing = obs_source_showing(source);
|
||||
if (decklink->dwns && showing)
|
||||
decklink->Deactivate();
|
||||
}
|
||||
|
||||
static void decklink_get_defaults(obs_data_t *settings)
|
||||
{
|
||||
obs_data_set_default_bool(settings, BUFFERING, false);
|
||||
obs_data_set_default_int(settings, PIXEL_FORMAT, bmdFormat8BitYUV);
|
||||
obs_data_set_default_int(settings, COLOR_SPACE, VIDEO_CS_DEFAULT);
|
||||
obs_data_set_default_int(settings, COLOR_RANGE, VIDEO_RANGE_DEFAULT);
|
||||
obs_data_set_default_int(settings, CHANNEL_FORMAT, SPEAKERS_STEREO);
|
||||
obs_data_set_default_bool(settings, SWAP, false);
|
||||
}
|
||||
|
||||
static const char *decklink_get_name(void*)
|
||||
{
|
||||
return obs_module_text("BlackmagicDevice");
|
||||
}
|
||||
|
||||
static bool decklink_device_changed(obs_properties_t *props,
|
||||
obs_property_t *list, obs_data_t *settings)
|
||||
{
|
||||
const char *name = obs_data_get_string(settings, DEVICE_NAME);
|
||||
const char *hash = obs_data_get_string(settings, DEVICE_HASH);
|
||||
const char *mode = obs_data_get_string(settings, MODE_NAME);
|
||||
long long modeId = obs_data_get_int(settings, MODE_ID);
|
||||
|
||||
size_t itemCount = obs_property_list_item_count(list);
|
||||
bool itemFound = false;
|
||||
|
||||
for (size_t i = 0; i < itemCount; i++) {
|
||||
const char *curHash = obs_property_list_item_string(list, i);
|
||||
if (strcmp(hash, curHash) == 0) {
|
||||
itemFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!itemFound) {
|
||||
obs_property_list_insert_string(list, 0, name, hash);
|
||||
obs_property_list_item_disable(list, 0, true);
|
||||
}
|
||||
|
||||
obs_property_t *videoConnectionList = obs_properties_get(props,
|
||||
VIDEO_CONNECTION);
|
||||
obs_property_t *audioConnectionList = obs_properties_get(props,
|
||||
AUDIO_CONNECTION);
|
||||
obs_property_t *modeList = obs_properties_get(props, MODE_ID);
|
||||
obs_property_t *channelList = obs_properties_get(props, CHANNEL_FORMAT);
|
||||
|
||||
obs_property_list_clear(videoConnectionList);
|
||||
obs_property_list_clear(audioConnectionList);
|
||||
|
||||
obs_property_list_clear(modeList);
|
||||
|
||||
obs_property_list_clear(channelList);
|
||||
obs_property_list_add_int(channelList, TEXT_CHANNEL_FORMAT_NONE,
|
||||
SPEAKERS_UNKNOWN);
|
||||
obs_property_list_add_int(channelList, TEXT_CHANNEL_FORMAT_2_0CH,
|
||||
SPEAKERS_STEREO);
|
||||
|
||||
ComPtr<DeckLinkDevice> device;
|
||||
device.Set(deviceEnum->FindByHash(hash));
|
||||
|
||||
if (!device) {
|
||||
obs_property_list_item_disable(videoConnectionList, 0, true);
|
||||
obs_property_list_item_disable(audioConnectionList, 0, true);
|
||||
obs_property_list_add_int(modeList, mode, modeId);
|
||||
obs_property_list_item_disable(modeList, 0, true);
|
||||
} else {
|
||||
const BMDVideoConnection BMDVideoConnections[] = {
|
||||
bmdVideoConnectionSDI, bmdVideoConnectionHDMI,
|
||||
bmdVideoConnectionOpticalSDI, bmdVideoConnectionComponent,
|
||||
bmdVideoConnectionComposite, bmdVideoConnectionSVideo
|
||||
};
|
||||
|
||||
for (BMDVideoConnection conn : BMDVideoConnections) {
|
||||
if ((device->GetVideoInputConnections() & conn) == conn) {
|
||||
obs_property_list_add_int(videoConnectionList,
|
||||
bmd_video_connection_to_name(conn), conn);
|
||||
}
|
||||
}
|
||||
|
||||
const BMDAudioConnection BMDAudioConnections[] = {
|
||||
bmdAudioConnectionEmbedded, bmdAudioConnectionAESEBU,
|
||||
bmdAudioConnectionAnalog, bmdAudioConnectionAnalogXLR,
|
||||
bmdAudioConnectionAnalogRCA, bmdAudioConnectionMicrophone,
|
||||
bmdAudioConnectionHeadphones
|
||||
};
|
||||
|
||||
for (BMDAudioConnection conn : BMDAudioConnections) {
|
||||
if ((device->GetAudioInputConnections() & conn) == conn) {
|
||||
obs_property_list_add_int(audioConnectionList,
|
||||
bmd_audio_connection_to_name(conn), conn);
|
||||
}
|
||||
}
|
||||
|
||||
const std::vector<DeckLinkDeviceMode*> &modes =
|
||||
device->GetInputModes();
|
||||
|
||||
for (DeckLinkDeviceMode *mode : modes) {
|
||||
obs_property_list_add_int(modeList,
|
||||
mode->GetName().c_str(),
|
||||
mode->GetId());
|
||||
}
|
||||
|
||||
if (device->GetMaxChannel() >= 8) {
|
||||
obs_property_list_add_int(channelList,
|
||||
TEXT_CHANNEL_FORMAT_2_1CH, SPEAKERS_2POINT1);
|
||||
obs_property_list_add_int(channelList,
|
||||
TEXT_CHANNEL_FORMAT_4_0CH, SPEAKERS_4POINT0);
|
||||
obs_property_list_add_int(channelList,
|
||||
TEXT_CHANNEL_FORMAT_4_1CH, SPEAKERS_4POINT1);
|
||||
obs_property_list_add_int(channelList,
|
||||
TEXT_CHANNEL_FORMAT_5_1CH, SPEAKERS_5POINT1);
|
||||
obs_property_list_add_int(channelList,
|
||||
TEXT_CHANNEL_FORMAT_7_1CH, SPEAKERS_7POINT1);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool mode_id_changed(obs_properties_t *props,
|
||||
obs_property_t *list, obs_data_t *settings)
|
||||
{
|
||||
long long id = obs_data_get_int(settings, MODE_ID);
|
||||
|
||||
list = obs_properties_get(props, PIXEL_FORMAT);
|
||||
obs_property_set_visible(list, id != MODE_ID_AUTO);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static obs_properties_t *decklink_get_properties(void *data)
|
||||
{
|
||||
obs_properties_t *props = obs_properties_create();
|
||||
|
||||
obs_property_t *list = obs_properties_add_list(props, DEVICE_HASH,
|
||||
TEXT_DEVICE, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
|
||||
obs_property_set_modified_callback(list, decklink_device_changed);
|
||||
|
||||
fill_out_devices(list);
|
||||
|
||||
obs_properties_add_list(props, VIDEO_CONNECTION, TEXT_VIDEO_CONNECTION,
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
obs_properties_add_list(props, AUDIO_CONNECTION, TEXT_AUDIO_CONNECTION,
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
|
||||
list = obs_properties_add_list(props, MODE_ID, TEXT_MODE,
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
obs_property_set_modified_callback(list, mode_id_changed);
|
||||
|
||||
list = obs_properties_add_list(props, PIXEL_FORMAT,
|
||||
TEXT_PIXEL_FORMAT, OBS_COMBO_TYPE_LIST,
|
||||
OBS_COMBO_FORMAT_INT);
|
||||
|
||||
obs_property_list_add_int(list, "8-bit YUV", bmdFormat8BitYUV);
|
||||
obs_property_list_add_int(list, "8-bit BGRA", bmdFormat8BitBGRA);
|
||||
|
||||
list = obs_properties_add_list(props, COLOR_SPACE, TEXT_COLOR_SPACE,
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
obs_property_list_add_int(list, TEXT_COLOR_SPACE_DEFAULT, VIDEO_CS_DEFAULT);
|
||||
obs_property_list_add_int(list, "BT.601", VIDEO_CS_601);
|
||||
obs_property_list_add_int(list, "BT.709", VIDEO_CS_709);
|
||||
|
||||
list = obs_properties_add_list(props, COLOR_RANGE, TEXT_COLOR_RANGE,
|
||||
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
|
||||
obs_property_list_add_int(list, TEXT_COLOR_RANGE_DEFAULT, VIDEO_RANGE_DEFAULT);
|
||||
obs_property_list_add_int(list, TEXT_COLOR_RANGE_PARTIAL, VIDEO_RANGE_PARTIAL);
|
||||
obs_property_list_add_int(list, TEXT_COLOR_RANGE_FULL, VIDEO_RANGE_FULL);
|
||||
|
||||
list = obs_properties_add_list(props, CHANNEL_FORMAT,
|
||||
TEXT_CHANNEL_FORMAT, OBS_COMBO_TYPE_LIST,
|
||||
OBS_COMBO_FORMAT_INT);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_NONE,
|
||||
SPEAKERS_UNKNOWN);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_2_0CH,
|
||||
SPEAKERS_STEREO);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_2_1CH,
|
||||
SPEAKERS_2POINT1);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_4_0CH,
|
||||
SPEAKERS_4POINT0);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_4_1CH,
|
||||
SPEAKERS_4POINT1);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_5_1CH,
|
||||
SPEAKERS_5POINT1);
|
||||
obs_property_list_add_int(list, TEXT_CHANNEL_FORMAT_7_1CH,
|
||||
SPEAKERS_7POINT1);
|
||||
|
||||
obs_property_t *swap = obs_properties_add_bool(props, SWAP, TEXT_SWAP);
|
||||
obs_property_set_long_description(swap, TEXT_SWAP_TOOLTIP);
|
||||
|
||||
obs_properties_add_bool(props, BUFFERING, TEXT_BUFFERING);
|
||||
|
||||
obs_properties_add_bool(props, DEACTIVATE_WNS, TEXT_DWNS);
|
||||
|
||||
UNUSED_PARAMETER(data);
|
||||
return props;
|
||||
}
|
||||
|
||||
|
||||
struct obs_source_info create_decklink_source_info()
|
||||
{
|
||||
struct obs_source_info decklink_source_info = {};
|
||||
decklink_source_info.id = "decklink-input";
|
||||
decklink_source_info.type = OBS_SOURCE_TYPE_INPUT;
|
||||
decklink_source_info.output_flags = OBS_SOURCE_ASYNC_VIDEO | OBS_SOURCE_AUDIO | OBS_SOURCE_DO_NOT_DUPLICATE;
|
||||
decklink_source_info.create = decklink_create;
|
||||
decklink_source_info.destroy = decklink_destroy;
|
||||
decklink_source_info.get_defaults = decklink_get_defaults;
|
||||
decklink_source_info.get_name = decklink_get_name;
|
||||
decklink_source_info.get_properties = decklink_get_properties;
|
||||
decklink_source_info.update = decklink_update;
|
||||
decklink_source_info.show = decklink_show;
|
||||
decklink_source_info.hide = decklink_hide;
|
||||
|
||||
return decklink_source_info;
|
||||
}
|
||||
|
|
@ -21,33 +21,47 @@ set(linux-decklink-sdk_SOURCES
|
|||
)
|
||||
|
||||
set(linux-decklink_HEADERS
|
||||
../decklink-devices.hpp
|
||||
../const.h
|
||||
../DecklinkOutput.hpp
|
||||
../platform.hpp
|
||||
../decklink.hpp
|
||||
../DecklinkInput.hpp
|
||||
../DecklinkBase.h
|
||||
../decklink-device-instance.hpp
|
||||
../decklink-device-discovery.hpp
|
||||
../decklink-device.hpp
|
||||
../decklink-device-mode.hpp
|
||||
../audio-repack.h
|
||||
../audio-repack.hpp
|
||||
../util.hpp
|
||||
)
|
||||
|
||||
set(linux-decklink_SOURCES
|
||||
../plugin-main.cpp
|
||||
../decklink.cpp
|
||||
../decklink-devices.cpp
|
||||
../decklink-source.cpp
|
||||
../decklink-output.cpp
|
||||
../DecklinkOutput.cpp
|
||||
../DecklinkInput.cpp
|
||||
../DecklinkBase.cpp
|
||||
../decklink-device-instance.cpp
|
||||
../decklink-device-discovery.cpp
|
||||
../decklink-device.cpp
|
||||
../decklink-device-mode.cpp
|
||||
../audio-repack.c
|
||||
platform.cpp)
|
||||
platform.cpp
|
||||
../util.cpp
|
||||
)
|
||||
|
||||
add_library(linux-decklink MODULE
|
||||
${linux-decklink_SOURCES}
|
||||
${linux-decklink_HEADERS}
|
||||
${linux-decklink-sdk_HEADERS}
|
||||
${linux-decklink-sdk_SOURCES})
|
||||
${linux-decklink-sdk_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(linux-decklink
|
||||
libobs)
|
||||
libobs
|
||||
)
|
||||
|
||||
install_obs_plugin_with_data(linux-decklink ../data)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
/* DeckLink API */
|
||||
|
||||
#include <stdint.h>
|
||||
|
|
@ -64,12 +68,16 @@ BMD_CONST REFIID IID_IDeckLinkIterator = /* 50FB36CD-
|
|||
BMD_CONST REFIID IID_IDeckLinkAPIInformation = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
|
||||
BMD_CONST REFIID IID_IDeckLinkInput = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
|
||||
BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ {0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02};
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderInput = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrame = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
|
||||
BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoInputFrame = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
|
||||
BMD_CONST REFIID IID_IDeckLinkAncillaryPacket = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ {0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70};
|
||||
BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ {0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ {0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderPacket = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
|
||||
|
|
@ -113,9 +121,11 @@ enum _BMDFrameFlags {
|
|||
bmdFrameFlagDefault = 0,
|
||||
bmdFrameFlagFlipVertical = 1 << 0,
|
||||
bmdFrameContainsHDRMetadata = 1 << 1,
|
||||
bmdFrameContainsCintelMetadata = 1 << 2,
|
||||
|
||||
/* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
|
||||
|
||||
bmdFrameCapturedAsPsF = 1 << 30,
|
||||
bmdFrameHasNoInputSource = 1 << 31
|
||||
};
|
||||
|
||||
|
|
@ -159,10 +169,10 @@ enum _BMDDeckLinkCapturePassthroughMode {
|
|||
|
||||
typedef uint32_t BMDOutputFrameCompletionResult;
|
||||
enum _BMDOutputFrameCompletionResult {
|
||||
bmdOutputFrameCompleted,
|
||||
bmdOutputFrameDisplayedLate,
|
||||
bmdOutputFrameDropped,
|
||||
bmdOutputFrameFlushed
|
||||
bmdOutputFrameCompleted,
|
||||
bmdOutputFrameDisplayedLate,
|
||||
bmdOutputFrameDropped,
|
||||
bmdOutputFrameFlushed
|
||||
};
|
||||
|
||||
/* Enum BMDReferenceStatus - GenLock input status */
|
||||
|
|
@ -199,9 +209,9 @@ enum _BMDAudioSampleType {
|
|||
|
||||
typedef uint32_t BMDAudioOutputStreamType;
|
||||
enum _BMDAudioOutputStreamType {
|
||||
bmdAudioOutputStreamContinuous,
|
||||
bmdAudioOutputStreamContinuousDontResample,
|
||||
bmdAudioOutputStreamTimestamped
|
||||
bmdAudioOutputStreamContinuous,
|
||||
bmdAudioOutputStreamContinuousDontResample,
|
||||
bmdAudioOutputStreamTimestamped
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeSupport - Output mode supported flags */
|
||||
|
|
@ -209,8 +219,17 @@ enum _BMDAudioOutputStreamType {
|
|||
typedef uint32_t BMDDisplayModeSupport;
|
||||
enum _BMDDisplayModeSupport {
|
||||
bmdDisplayModeNotSupported = 0,
|
||||
bmdDisplayModeSupported,
|
||||
bmdDisplayModeSupportedWithConversion
|
||||
bmdDisplayModeSupported,
|
||||
bmdDisplayModeSupportedWithConversion
|
||||
};
|
||||
|
||||
/* Enum BMDAncillaryPacketFormat - Ancillary packet format */
|
||||
|
||||
typedef uint32_t BMDAncillaryPacketFormat;
|
||||
enum _BMDAncillaryPacketFormat {
|
||||
bmdAncillaryPacketFormatUInt8 = /* 'ui08' */ 0x75693038,
|
||||
bmdAncillaryPacketFormatUInt16 = /* 'ui16' */ 0x75693136,
|
||||
bmdAncillaryPacketFormatYCbCr10 = /* 'v210' */ 0x76323130
|
||||
};
|
||||
|
||||
/* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
|
||||
|
|
@ -332,11 +351,68 @@ enum _BMDDeviceInterface {
|
|||
bmdDeviceInterfaceThunderbolt = /* 'thun' */ 0x7468756E
|
||||
};
|
||||
|
||||
/* Enum BMDColorspace - Colorspace */
|
||||
|
||||
typedef uint32_t BMDColorspace;
|
||||
enum _BMDColorspace {
|
||||
bmdColorspaceRec601 = /* 'r601' */ 0x72363031,
|
||||
bmdColorspaceRec709 = /* 'r709' */ 0x72373039,
|
||||
bmdColorspaceRec2020 = /* '2020' */ 0x32303230
|
||||
};
|
||||
|
||||
/* Enum BMDDynamicRange - SDR or HDR */
|
||||
|
||||
typedef uint32_t BMDDynamicRange;
|
||||
enum _BMDDynamicRange {
|
||||
bmdDynamicRangeSDR = 0,
|
||||
bmdDynamicRangeHDRStaticPQ = 1 << 29, // SMPTE ST 2084
|
||||
bmdDynamicRangeHDRStaticHLG = 1 << 30 // ITU-R BT.2100-0
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkHDMIInputEDIDID;
|
||||
enum _BMDDeckLinkHDMIInputEDIDID {
|
||||
bmdDeckLinkHDMIInputEDIDDynamicRange = /* 'HIDy' */ 0x48494479 // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkFrameMetadataID;
|
||||
enum _BMDDeckLinkFrameMetadataID {
|
||||
bmdDeckLinkFrameMetadataColorspace = /* 'cspc' */ 0x63737063, // Colorspace of video frame (see BMDColorspace)
|
||||
bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = /* 'eotf' */ 0x656F7466, // EOTF in range 0-7 as per CEA 861.3
|
||||
bmdDeckLinkFrameMetadataCintelFilmType = /* 'cfty' */ 0x63667479, // Current film type
|
||||
bmdDeckLinkFrameMetadataCintelFilmGauge = /* 'cfga' */ 0x63666761, // Current film gauge
|
||||
bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal = /* 'odfh' */ 0x6F646668, // Horizontal offset (pixels) detected in image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical = /* 'odfv' */ 0x6F646676, // Vertical offset (pixels) detected in image
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeLow = /* 'ckkl' */ 0x636B6B6C, // Raw keykode value - low 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeHigh = /* 'ckkh' */ 0x636B6B68, // Raw keykode value - high 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelTile1Size = /* 'ct1s' */ 0x63743173, // Size in bytes of compressed raw tile 1
|
||||
bmdDeckLinkFrameMetadataCintelTile2Size = /* 'ct2s' */ 0x63743273, // Size in bytes of compressed raw tile 2
|
||||
bmdDeckLinkFrameMetadataCintelTile3Size = /* 'ct3s' */ 0x63743373, // Size in bytes of compressed raw tile 3
|
||||
bmdDeckLinkFrameMetadataCintelTile4Size = /* 'ct4s' */ 0x63743473, // Size in bytes of compressed raw tile 4
|
||||
bmdDeckLinkFrameMetadataCintelImageWidth = /* 'IWPx' */ 0x49575078, // Width in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelImageHeight = /* 'IHPx' */ 0x49485078, // Height in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed = /* 'mrir' */ 0x6D726972, // Red in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed = /* 'mgir' */ 0x6D676972, // Green in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed = /* 'mbir' */ 0x6D626972, // Blue in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen = /* 'mrig' */ 0x6D726967, // Red in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen = /* 'mgig' */ 0x6D676967, // Green in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen = /* 'mbig' */ 0x6D626967, // Blue in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue = /* 'mrib' */ 0x6D726962, // Red in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue = /* 'mgib' */ 0x6D676962, // Green in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue = /* 'mbib' */ 0x6D626962, // Blue in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed = /* 'mlrr' */ 0x6D6C7272, // Red in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed = /* 'mlgr' */ 0x6D6C6772, // Green in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed = /* 'mlbr' */ 0x6D6C6272, // Blue in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen = /* 'mlrg' */ 0x6D6C7267, // Red in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen = /* 'mlgg' */ 0x6D6C6767, // Green in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen = /* 'mlbg' */ 0x6D6C6267, // Blue in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue = /* 'mlrb' */ 0x6D6C7262, // Red in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue = /* 'mlgb' */ 0x6D6C6762, // Green in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue = /* 'mlbb' */ 0x6D6C6262, // Blue in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelFilmFrameRate = /* 'cffr' */ 0x63666672, // Film frame rate
|
||||
bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = /* 'hdrx' */ 0x68647278, // Red display primaries in range 0.0 - 1.0
|
||||
bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = /* 'hdry' */ 0x68647279, // Red display primaries in range 0.0 - 1.0
|
||||
bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = /* 'hdgx' */ 0x68646778, // Green display primaries in range 0.0 - 1.0
|
||||
|
|
@ -348,7 +424,15 @@ enum _BMDDeckLinkFrameMetadataID {
|
|||
bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = /* 'hdml' */ 0x68646D6C, // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = /* 'hmil' */ 0x686D696C, // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = /* 'mcll' */ 0x6D636C6C, // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = /* 'fall' */ 0x66616C6C // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = /* 'fall' */ 0x66616C6C, // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal = /* 'otah' */ 0x6F746168, // Horizontal offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical = /* 'otav' */ 0x6F746176, // Vertical offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelGainRed = /* 'LfRd' */ 0x4C665264, // Red gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainGreen = /* 'LfGr' */ 0x4C664772, // Green gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainBlue = /* 'LfBl' */ 0x4C66426C, // Blue gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelLiftRed = /* 'GnRd' */ 0x476E5264, // Red lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftGreen = /* 'GnGr' */ 0x476E4772, // Green lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftBlue = /* 'GnBl' */ 0x476E426C // Blue lift parameter to apply after log and gain
|
||||
};
|
||||
|
||||
/* Enum BMDDuplexMode - Duplex for configurable ports */
|
||||
|
|
@ -386,22 +470,24 @@ enum _BMDDeckLinkAttributeID {
|
|||
BMDDeckLinkHasLTCTimecodeInput = /* 'hltc' */ 0x686C7463,
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration = /* 'dupx' */ 0x64757078,
|
||||
BMDDeckLinkSupportsHDRMetadata = /* 'hdrm' */ 0x6864726D,
|
||||
BMDDeckLinkSupportsColorspaceMetadata = /* 'cmet' */ 0x636D6574,
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkMaximumAudioChannels = /* 'mach' */ 0x6D616368,
|
||||
BMDDeckLinkMaximumAnalogAudioChannels = /* 'aach' */ 0x61616368,
|
||||
BMDDeckLinkMaximumAnalogAudioInputChannels = /* 'iach' */ 0x69616368,
|
||||
BMDDeckLinkMaximumAnalogAudioOutputChannels = /* 'aach' */ 0x61616368,
|
||||
BMDDeckLinkNumberOfSubDevices = /* 'nsbd' */ 0x6E736264,
|
||||
BMDDeckLinkSubDeviceIndex = /* 'subi' */ 0x73756269,
|
||||
BMDDeckLinkPersistentID = /* 'peid' */ 0x70656964,
|
||||
BMDDeckLinkDeviceGroupID = /* 'dgid' */ 0x64676964,
|
||||
BMDDeckLinkTopologicalID = /* 'toid' */ 0x746F6964,
|
||||
BMDDeckLinkVideoOutputConnections = /* 'vocn' */ 0x766F636E,
|
||||
BMDDeckLinkVideoInputConnections = /* 'vicn' */ 0x7669636E,
|
||||
BMDDeckLinkAudioOutputConnections = /* 'aocn' */ 0x616F636E,
|
||||
BMDDeckLinkAudioInputConnections = /* 'aicn' */ 0x6169636E,
|
||||
BMDDeckLinkVideoOutputConnections = /* 'vocn' */ 0x766F636E, // Returns a BMDVideoConnection bit field
|
||||
BMDDeckLinkVideoInputConnections = /* 'vicn' */ 0x7669636E, // Returns a BMDVideoConnection bit field
|
||||
BMDDeckLinkAudioOutputConnections = /* 'aocn' */ 0x616F636E, // Returns a BMDAudioConnection bit field
|
||||
BMDDeckLinkAudioInputConnections = /* 'aicn' */ 0x6169636E, // Returns a BMDAudioConnection bit field
|
||||
BMDDeckLinkVideoIOSupport = /* 'vios' */ 0x76696F73, // Returns a BMDVideoIOSupport bit field
|
||||
BMDDeckLinkDeckControlConnections = /* 'dccn' */ 0x6463636E,
|
||||
BMDDeckLinkDeckControlConnections = /* 'dccn' */ 0x6463636E, // Returns a BMDDeckControlConnection bit field
|
||||
BMDDeckLinkDeviceInterface = /* 'dbus' */ 0x64627573, // Returns a BMDDeviceInterface
|
||||
BMDDeckLinkAudioInputRCAChannelCount = /* 'airc' */ 0x61697263,
|
||||
BMDDeckLinkAudioInputXLRChannelCount = /* 'aixc' */ 0x61697863,
|
||||
|
|
@ -455,11 +541,14 @@ enum _BMDDeckLinkStatusID {
|
|||
bmdDeckLinkStatusReferenceSignalFlags = /* 'reff' */ 0x72656666,
|
||||
bmdDeckLinkStatusDuplexMode = /* 'dupx' */ 0x64757078,
|
||||
bmdDeckLinkStatusBusy = /* 'busy' */ 0x62757379,
|
||||
bmdDeckLinkStatusInterchangeablePanelType = /* 'icpt' */ 0x69637074,
|
||||
bmdDeckLinkStatusDeviceTemperature = /* 'dtmp' */ 0x64746D70,
|
||||
|
||||
/* Flags */
|
||||
|
||||
bmdDeckLinkStatusVideoInputSignalLocked = /* 'visl' */ 0x7669736C,
|
||||
bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C
|
||||
bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C,
|
||||
bmdDeckLinkStatusReceivedEDID = /* 'edid' */ 0x65646964
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkVideoStatusFlags - */
|
||||
|
|
@ -480,6 +569,14 @@ enum _BMDDuplexStatus {
|
|||
bmdDuplexStatusInactive = /* 'inac' */ 0x696E6163
|
||||
};
|
||||
|
||||
/* Enum BMDPanelType - The type of interchangeable panel */
|
||||
|
||||
typedef uint32_t BMDPanelType;
|
||||
enum _BMDPanelType {
|
||||
bmdPanelNotDetected = /* 'npnl' */ 0x6E706E6C,
|
||||
bmdPanelTeranexMiniSmartPanel = /* 'tmsm' */ 0x746D736D
|
||||
};
|
||||
|
||||
/* Enum BMDDeviceBusyState - Current device busy state */
|
||||
|
||||
typedef uint32_t BMDDeviceBusyState;
|
||||
|
|
@ -529,12 +626,16 @@ class IDeckLinkIterator;
|
|||
class IDeckLinkAPIInformation;
|
||||
class IDeckLinkOutput;
|
||||
class IDeckLinkInput;
|
||||
class IDeckLinkHDMIInputEDID;
|
||||
class IDeckLinkEncoderInput;
|
||||
class IDeckLinkVideoFrame;
|
||||
class IDeckLinkMutableVideoFrame;
|
||||
class IDeckLinkVideoFrame3DExtensions;
|
||||
class IDeckLinkVideoFrameMetadataExtensions;
|
||||
class IDeckLinkVideoInputFrame;
|
||||
class IDeckLinkAncillaryPacket;
|
||||
class IDeckLinkAncillaryPacketIterator;
|
||||
class IDeckLinkVideoFrameAncillaryPackets;
|
||||
class IDeckLinkVideoFrameAncillary;
|
||||
class IDeckLinkEncoderPacket;
|
||||
class IDeckLinkEncoderVideoPacket;
|
||||
|
|
@ -554,7 +655,7 @@ class IDeckLinkDiscovery;
|
|||
|
||||
/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
|
||||
|
||||
class IDeckLinkVideoOutputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
|
||||
|
|
@ -566,7 +667,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkInputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
|
|
@ -578,7 +679,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkEncoderInputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderInputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
|
|
@ -591,7 +692,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
|
||||
|
||||
class IDeckLinkMemoryAllocator : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkMemoryAllocator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void **allocatedBuffer) = 0;
|
||||
|
|
@ -603,7 +704,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */
|
||||
|
||||
class IDeckLinkAudioOutputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAudioOutputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT RenderAudioSamples (/* in */ bool preroll) = 0;
|
||||
|
|
@ -611,7 +712,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
|
||||
|
||||
class IDeckLinkIterator : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLink **deckLinkInstance) = 0;
|
||||
|
|
@ -619,7 +720,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
|
||||
|
||||
class IDeckLinkAPIInformation : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAPIInformation : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool *value) = 0;
|
||||
|
|
@ -633,7 +734,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkOutput : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
@ -648,7 +749,7 @@ public:
|
|||
|
||||
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 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;
|
||||
|
|
@ -690,7 +791,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInput : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
@ -727,9 +828,22 @@ protected:
|
|||
virtual ~IDeckLinkInput () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkHDMIInputEDID - Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkHDMIInputEDID : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT WriteToEDID (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkHDMIInputEDID () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkEncoderInput : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderInput : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
@ -766,7 +880,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
|
||||
|
||||
class IDeckLinkVideoFrame : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetWidth (void) = 0;
|
||||
|
|
@ -777,7 +891,7 @@ public:
|
|||
virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
|
||||
|
||||
virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrame () {} // call Release method to drop reference count
|
||||
|
|
@ -785,7 +899,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
|
||||
|
||||
class IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
|
||||
class BMD_PUBLIC IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlags (/* in */ BMDFrameFlags newFlags) = 0;
|
||||
|
|
@ -801,7 +915,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */
|
||||
|
||||
class IDeckLinkVideoFrame3DExtensions : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame3DExtensions : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDVideo3DPackingFormat Get3DPackingFormat (void) = 0;
|
||||
|
|
@ -813,7 +927,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
|
||||
|
||||
class IDeckLinkVideoFrameMetadataExtensions : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
|
||||
|
|
@ -827,7 +941,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
|
|
@ -837,13 +951,56 @@ protected:
|
|||
virtual ~IDeckLinkVideoInputFrame () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillary - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
|
||||
/* Interface IDeckLinkAncillaryPacket - On output, user needs to implement this interface */
|
||||
|
||||
class IDeckLinkVideoFrameAncillary : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAncillaryPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0;
|
||||
virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void **data /* Optional */, /* out */ uint32_t *size /* Optional */) = 0;
|
||||
virtual uint8_t GetDID (void) = 0;
|
||||
virtual uint8_t GetSDID (void) = 0;
|
||||
virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
|
||||
virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAncillaryPacket () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkAncillaryPacketIterator - Enumerates ancillary packets */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAncillaryPacketIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket **packet) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAncillaryPacketIterator () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator **iterator) = 0;
|
||||
virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket **packet) = 0;
|
||||
virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0; // Implement IDeckLinkAncillaryPacket to output your own
|
||||
virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0;
|
||||
virtual HRESULT DetachAllPackets (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrameAncillaryPackets () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameAncillary : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0; // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
|
||||
|
|
@ -853,7 +1010,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
|
||||
|
||||
class IDeckLinkEncoderPacket : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
|
||||
|
|
@ -867,7 +1024,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
|
||||
|
||||
class IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
|
||||
class BMD_PUBLIC IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
|
||||
{
|
||||
public:
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
|
|
@ -881,7 +1038,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
|
||||
|
||||
class IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
|
||||
class BMD_PUBLIC IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
|
||||
{
|
||||
public:
|
||||
virtual BMDAudioFormat GetAudioFormat (void) = 0;
|
||||
|
|
@ -892,7 +1049,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
|
||||
|
||||
class IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
|
||||
class BMD_PUBLIC IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
|
||||
|
|
@ -905,7 +1062,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
|
||||
|
||||
class IDeckLinkAudioInputPacket : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAudioInputPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetSampleFrameCount (void) = 0;
|
||||
|
|
@ -918,7 +1075,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
|
||||
|
||||
class IDeckLinkScreenPreviewCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkScreenPreviewCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
|
||||
|
|
@ -929,7 +1086,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkGLScreenPreviewHelper : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -946,7 +1103,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkNotificationCallback - DeckLink Notification Callback Interface */
|
||||
|
||||
class IDeckLinkNotificationCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkNotificationCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Notify (/* in */ BMDNotifications topic, /* in */ uint64_t param1, /* in */ uint64_t param2) = 0;
|
||||
|
|
@ -954,7 +1111,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkNotification - DeckLink Notification interface */
|
||||
|
||||
class IDeckLinkNotification : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkNotification : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
|
|
@ -963,7 +1120,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
|
||||
|
||||
class IDeckLinkAttributes : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAttributes : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
|
||||
|
|
@ -977,7 +1134,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkStatus - DeckLink Status interface */
|
||||
|
||||
class IDeckLinkStatus : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkStatus : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
|
||||
|
|
@ -992,7 +1149,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
|
||||
|
||||
class IDeckLinkKeyer : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkKeyer : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Enable (/* in */ bool isExternal) = 0;
|
||||
|
|
@ -1007,7 +1164,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkVideoConversion : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoConversion : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame* srcFrame, /* in */ IDeckLinkVideoFrame* dstFrame) = 0;
|
||||
|
|
@ -1018,7 +1175,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDeviceNotificationCallback - DeckLink device arrival/removal notification callbacks */
|
||||
|
||||
class IDeckLinkDeviceNotificationCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDeviceNotificationCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DeckLinkDeviceArrived (/* in */ IDeckLink* deckLinkDevice) = 0;
|
||||
|
|
@ -1030,7 +1187,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDiscovery - DeckLink device discovery */
|
||||
|
||||
class IDeckLinkDiscovery : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDiscovery : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT InstallDeviceNotifications (/* in */ IDeckLinkDeviceNotificationCallback* deviceNotificationCallback) = 0;
|
||||
|
|
@ -1044,11 +1201,12 @@ protected:
|
|||
|
||||
extern "C" {
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void);
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void);
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void);
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void);
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void);
|
||||
IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance (void);
|
||||
IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance (void);
|
||||
IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance (void);
|
||||
IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper (void);
|
||||
IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance (void);
|
||||
IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,12 +37,16 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
|
||||
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 */
|
||||
|
|
@ -54,10 +58,6 @@ enum _BMDDeckLinkConfigurationID {
|
|||
|
||||
bmdDeckLinkConfigSwapSerialRxTx = /* 'ssrt' */ 0x73737274,
|
||||
|
||||
/* Video Input/Output Flags */
|
||||
|
||||
bmdDeckLinkConfigUse1080pNotPsF = /* 'fpro' */ 0x6670726F,
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066,
|
||||
|
|
@ -78,6 +78,12 @@ enum _BMDDeckLinkConfigurationID {
|
|||
bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F,
|
||||
bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F,
|
||||
bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461,
|
||||
bmdDeckLinkConfigRec2020Output = /* 'rec2' */ 0x72656332, // Ensure output is Rec.2020 colorspace
|
||||
bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = /* 'SDQS' */ 0x53445153,
|
||||
|
||||
/* Video Output Flags */
|
||||
|
||||
bmdDeckLinkConfigOutput1080pAsPsF = /* 'pfpr' */ 0x70667072,
|
||||
|
||||
/* Video Output Integers */
|
||||
|
||||
|
|
@ -106,6 +112,10 @@ enum _BMDDeckLinkConfigurationID {
|
|||
bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream
|
||||
bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473,
|
||||
|
||||
/* Video Input Flags */
|
||||
|
||||
bmdDeckLinkConfigCapture1080pAsPsF = /* 'cfpr' */ 0x63667072,
|
||||
|
||||
/* Video Input Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoInputConnection = /* 'vicn' */ 0x7669636E,
|
||||
|
|
@ -206,7 +216,7 @@ class IDeckLinkEncoderConfiguration;
|
|||
|
||||
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
@ -225,7 +235,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class IDeckLinkEncoderConfiguration : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -40,7 +40,7 @@ class IDeckLinkConfiguration_v10_2;
|
|||
|
||||
/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v10_2 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class IDeckLinkConfiguration_v10_4;
|
|||
|
||||
/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration_v10_4 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkConfiguration_v10_4 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -40,7 +40,7 @@ class IDeckLinkEncoderConfiguration_v10_5;
|
|||
|
||||
/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
/* -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 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_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) */
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -149,7 +153,7 @@ class IDeckLinkDeckControl;
|
|||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */
|
||||
|
||||
class IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
|
||||
|
|
@ -163,7 +167,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDeckControl - Deck Control main interface */
|
||||
|
||||
class IDeckLinkDeckControl : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -50,7 +54,7 @@ class IDeckLink;
|
|||
|
||||
/* Interface IDeckLink - represents a DeckLink device */
|
||||
|
||||
class IDeckLink : public IUnknown
|
||||
class BMD_PUBLIC IDeckLink : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ const char **modelName) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -39,6 +39,7 @@ 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;
|
||||
|
|
@ -50,21 +51,22 @@ static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
|||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc = NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
void InitDeckLinkAPI (void)
|
||||
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");
|
||||
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0003");
|
||||
if (!gCreateIteratorFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
|
||||
|
|
@ -73,15 +75,18 @@ void InitDeckLinkAPI (void)
|
|||
gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
|
||||
if (!gCreateVideoConversionFunc)
|
||||
fprintf(stderr, "%s\n", dlerror());
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)dlsym(libraryHandle, "CreateDeckLinkDiscoveryInstance_0001");
|
||||
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());
|
||||
}
|
||||
|
||||
void InitDeckLinkPreviewAPI (void)
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
|
|
@ -102,7 +107,7 @@ bool IsDeckLinkAPIPresent (void)
|
|||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
|
|
@ -111,7 +116,7 @@ IDeckLinkIterator* CreateDeckLinkIteratorInstance (void)
|
|||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
|
|
@ -121,7 +126,7 @@ IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
|||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
|
|
@ -130,7 +135,7 @@ IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
|||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
|
|
@ -139,8 +144,17 @@ IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
|||
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,146 @@
|
|||
/* -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 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-
|
||||
**/
|
||||
|
||||
#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;
|
||||
|
||||
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();
|
||||
}
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -45,17 +45,17 @@ static CreateIteratorFunc_v7_6 gCreateIteratorFunc = NULL;
|
|||
static CreateOpenGLScreenPreviewHelperFunc_v7_6 gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc_v7_6 gCreateVideoConversionFunc = NULL;
|
||||
|
||||
void InitDeckLinkAPI_v7_6 (void)
|
||||
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());
|
||||
|
|
@ -64,10 +64,10 @@ void InitDeckLinkAPI_v7_6 (void)
|
|||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
void InitDeckLinkPreviewAPI_v7_6 (void)
|
||||
static void InitDeckLinkPreviewAPI_v7_6 (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
|
|
@ -82,7 +82,7 @@ void InitDeckLinkPreviewAPI_v7_6 (void)
|
|||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
|
|
@ -92,7 +92,7 @@ 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();
|
||||
|
|
@ -101,7 +101,7 @@ IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void
|
|||
IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
|
||||
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -49,19 +49,19 @@ static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
|
|||
static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
|
||||
void InitDeckLinkAPI (void)
|
||||
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());
|
||||
|
|
@ -73,10 +73,10 @@ void InitDeckLinkAPI (void)
|
|||
fprintf(stderr, "%s\n", dlerror());
|
||||
}
|
||||
|
||||
void InitDeckLinkPreviewAPI (void)
|
||||
static void InitDeckLinkPreviewAPI (void)
|
||||
{
|
||||
void *libraryHandle;
|
||||
|
||||
|
||||
libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
|
||||
if (!libraryHandle)
|
||||
{
|
||||
|
|
@ -97,7 +97,7 @@ bool IsDeckLinkAPIPresent (void)
|
|||
IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
|
||||
if (gCreateIteratorFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateIteratorFunc();
|
||||
|
|
@ -106,7 +106,7 @@ IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance (void)
|
|||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
|
||||
if (gCreateAPIInformationFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateAPIInformationFunc();
|
||||
|
|
@ -116,7 +116,7 @@ IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
|||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
|
||||
|
||||
|
||||
if (gCreateOpenGLPreviewFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateOpenGLPreviewFunc();
|
||||
|
|
@ -125,7 +125,7 @@ IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
|
|||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
|
||||
{
|
||||
pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
|
||||
|
||||
|
||||
if (gCreateVideoConversionFunc == NULL)
|
||||
return NULL;
|
||||
return gCreateVideoConversionFunc();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -65,12 +69,12 @@ enum _BMDDisplayMode {
|
|||
bmdModeHD1080p25 = /* 'Hp25' */ 0x48703235,
|
||||
bmdModeHD1080p2997 = /* 'Hp29' */ 0x48703239,
|
||||
bmdModeHD1080p30 = /* 'Hp30' */ 0x48703330,
|
||||
bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530,
|
||||
bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539,
|
||||
bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080p50 = /* 'Hp50' */ 0x48703530,
|
||||
bmdModeHD1080p5994 = /* 'Hp59' */ 0x48703539,
|
||||
bmdModeHD1080p6000 = /* 'Hp60' */ 0x48703630, // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080i50 = /* 'Hi50' */ 0x48693530,
|
||||
bmdModeHD1080i5994 = /* 'Hi59' */ 0x48693539,
|
||||
bmdModeHD1080i6000 = /* 'Hi60' */ 0x48693630, // N.B. This _really_ is 60.00 Hz.
|
||||
|
||||
/* HD 720 Modes */
|
||||
|
||||
|
|
@ -78,19 +82,24 @@ enum _BMDDisplayMode {
|
|||
bmdModeHD720p5994 = /* 'hp59' */ 0x68703539,
|
||||
bmdModeHD720p60 = /* 'hp60' */ 0x68703630,
|
||||
|
||||
/* 2k Modes */
|
||||
/* 2K Modes */
|
||||
|
||||
bmdMode2k2398 = /* '2k23' */ 0x326B3233,
|
||||
bmdMode2k24 = /* '2k24' */ 0x326B3234,
|
||||
bmdMode2k25 = /* '2k25' */ 0x326B3235,
|
||||
|
||||
/* DCI Modes (output only) */
|
||||
/* 2K DCI Modes */
|
||||
|
||||
bmdMode2kDCI2398 = /* '2d23' */ 0x32643233,
|
||||
bmdMode2kDCI24 = /* '2d24' */ 0x32643234,
|
||||
bmdMode2kDCI25 = /* '2d25' */ 0x32643235,
|
||||
bmdMode2kDCI2997 = /* '2d29' */ 0x32643239,
|
||||
bmdMode2kDCI30 = /* '2d30' */ 0x32643330,
|
||||
bmdMode2kDCI50 = /* '2d50' */ 0x32643530,
|
||||
bmdMode2kDCI5994 = /* '2d59' */ 0x32643539,
|
||||
bmdMode2kDCI60 = /* '2d60' */ 0x32643630,
|
||||
|
||||
/* 4k Modes */
|
||||
/* 4K UHD Modes */
|
||||
|
||||
bmdMode4K2160p2398 = /* '4k23' */ 0x346B3233,
|
||||
bmdMode4K2160p24 = /* '4k24' */ 0x346B3234,
|
||||
|
|
@ -101,11 +110,43 @@ enum _BMDDisplayMode {
|
|||
bmdMode4K2160p5994 = /* '4k59' */ 0x346B3539,
|
||||
bmdMode4K2160p60 = /* '4k60' */ 0x346B3630,
|
||||
|
||||
/* DCI Modes (output only) */
|
||||
/* 4K DCI Modes */
|
||||
|
||||
bmdMode4kDCI2398 = /* '4d23' */ 0x34643233,
|
||||
bmdMode4kDCI24 = /* '4d24' */ 0x34643234,
|
||||
bmdMode4kDCI25 = /* '4d25' */ 0x34643235,
|
||||
bmdMode4kDCI2997 = /* '4d29' */ 0x34643239,
|
||||
bmdMode4kDCI30 = /* '4d30' */ 0x34643330,
|
||||
bmdMode4kDCI50 = /* '4d50' */ 0x34643530,
|
||||
bmdMode4kDCI5994 = /* '4d59' */ 0x34643539,
|
||||
bmdMode4kDCI60 = /* '4d60' */ 0x34643630,
|
||||
|
||||
/* 8K UHD Modes */
|
||||
|
||||
bmdMode8K4320p2398 = /* '8k23' */ 0x386B3233,
|
||||
bmdMode8K4320p24 = /* '8k24' */ 0x386B3234,
|
||||
bmdMode8K4320p25 = /* '8k25' */ 0x386B3235,
|
||||
bmdMode8K4320p2997 = /* '8k29' */ 0x386B3239,
|
||||
bmdMode8K4320p30 = /* '8k30' */ 0x386B3330,
|
||||
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,
|
||||
bmdMode8kDCI50 = /* '8d50' */ 0x38643530,
|
||||
bmdMode8kDCI5994 = /* '8d59' */ 0x38643539,
|
||||
bmdMode8kDCI60 = /* '8d60' */ 0x38643630,
|
||||
|
||||
/* RAW Modes for Cintel (input only) */
|
||||
|
||||
bmdModeCintelRAW = /* 'rwci' */ 0x72776369, // Frame size up to 4096x3072, variable frame rate
|
||||
bmdModeCintelCompressedRAW = /* 'rwcc' */ 0x72776363, // Frame size up to 4096x3072, variable frame rate
|
||||
|
||||
/* Special Modes */
|
||||
|
||||
|
|
@ -140,7 +181,12 @@ enum _BMDPixelFormat {
|
|||
|
||||
/* AVID DNxHR */
|
||||
|
||||
bmdFormatDNxHR = /* 'AVdh' */ 0x41566468
|
||||
bmdFormatDNxHR = /* 'AVdh' */ 0x41566468,
|
||||
|
||||
/* Cintel formats */
|
||||
|
||||
bmdFormat12BitRAWGRBG = /* 'r12p' */ 0x72313270, // 12-bit RAW data for bayer pattern GRBG
|
||||
bmdFormat12BitRAWJPEG = /* 'r16p' */ 0x72313670 // 12-bit RAW data arranged in tiles and JPEG compressed
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
|
||||
|
|
@ -149,7 +195,8 @@ typedef uint32_t BMDDisplayModeFlags;
|
|||
enum _BMDDisplayModeFlags {
|
||||
bmdDisplayModeSupports3D = 1 << 0,
|
||||
bmdDisplayModeColorspaceRec601 = 1 << 1,
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2,
|
||||
bmdDisplayModeColorspaceRec2020 = 1 << 3
|
||||
};
|
||||
|
||||
// Forward Declarations
|
||||
|
|
@ -159,7 +206,7 @@ class IDeckLinkDisplayMode;
|
|||
|
||||
/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
|
||||
|
||||
class IDeckLinkDisplayModeIterator : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0;
|
||||
|
|
@ -170,7 +217,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDisplayMode - represents a display mode */
|
||||
|
||||
class IDeckLinkDisplayMode : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ const char **name) = 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
typedef int64_t BMDTimeValue;
|
||||
|
|
@ -54,7 +58,8 @@ typedef uint32_t BMDTimecodeFlags;
|
|||
enum _BMDTimecodeFlags {
|
||||
bmdTimecodeFlagDefault = 0,
|
||||
bmdTimecodeIsDropFrame = 1 << 0,
|
||||
bmdTimecodeFieldMark = 1 << 1
|
||||
bmdTimecodeFieldMark = 1 << 1,
|
||||
bmdTimecodeColorFrame = 1 << 2
|
||||
};
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
|
@ -96,7 +101,7 @@ class IDeckLinkTimecode;
|
|||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class IDeckLinkTimecode : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkTimecode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
* ** 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
|
||||
|
|
@ -30,8 +30,8 @@
|
|||
#ifndef __DeckLink_API_Version_h__
|
||||
#define __DeckLink_API_Version_h__
|
||||
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8"
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a0b0400
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.11.4"
|
||||
|
||||
#endif // __DeckLink_API_Version_h__
|
||||
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
typedef uint32_t BMDDeckLinkConfigurationID_v10_2;
|
||||
enum _BMDDeckLinkConfigurationID_v10_2 {
|
||||
/* Video output flags */
|
||||
|
||||
|
||||
bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = '3gbs',
|
||||
};
|
||||
|
||||
|
|
|
|||
45
plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_9.h
Normal file
45
plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_9.h
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
/* -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 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_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) */
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -66,14 +66,14 @@ class IDeckLinkVideoFrame_v7_1;
|
|||
class IDeckLinkVideoInputFrame_v7_1;
|
||||
class IDeckLinkAudioInputPacket_v7_1;
|
||||
|
||||
class IDeckLinkDisplayModeIterator_v7_1 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE Next (IDeckLinkDisplayMode_v7_1* *deckLinkDisplayMode) = 0;
|
||||
};
|
||||
|
||||
|
||||
class IDeckLinkDisplayMode_v7_1 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE GetName (const char **name) = 0;
|
||||
|
|
@ -83,56 +83,56 @@ public:
|
|||
virtual HRESULT STDMETHODCALLTYPE GetFrameRate (BMDTimeValue *frameDuration, BMDTimeScale *timeScale) = 0;
|
||||
};
|
||||
|
||||
class IDeckLinkVideoOutputCallback_v7_1 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted (IDeckLinkVideoFrame_v7_1* completedFrame, BMDOutputFrameCompletionResult result) = 0;
|
||||
};
|
||||
|
||||
class IDeckLinkInputCallback_v7_1 : public IUnknown
|
||||
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 IDeckLinkOutput_v7_1 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkOutput_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
// Display mode predicates
|
||||
virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *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;
|
||||
|
|
@ -140,23 +140,23 @@ public:
|
|||
};
|
||||
|
||||
// IDeckLinkInput_v7_1. Created by QueryInterface from IDeckLink.
|
||||
class IDeckLinkInput_v7_1 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInput_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *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;
|
||||
|
|
@ -164,7 +164,7 @@ public:
|
|||
};
|
||||
|
||||
// IDeckLinkVideoFrame_v7_1. Created by IDeckLinkOutput::CreateVideoFrame.
|
||||
class IDeckLinkVideoFrame_v7_1 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame_v7_1 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long STDMETHODCALLTYPE GetWidth () = 0;
|
||||
|
|
@ -176,19 +176,19 @@ public:
|
|||
};
|
||||
|
||||
// IDeckLinkVideoInputFrame_v7_1. Provided by the IDeckLinkInput_v7_1 frame arrival callback.
|
||||
class IDeckLinkVideoInputFrame_v7_1 : public IDeckLinkVideoFrame_v7_1
|
||||
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 IDeckLinkAudioInputPacket_v7_1 : public IUnknown
|
||||
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;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -53,7 +53,7 @@ class IDeckLinkVideoInputFrame_v7_3;
|
|||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput_v7_3 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkOutput_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
|
||||
|
|
@ -107,7 +107,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkInputCallback_v7_3 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
|
|
@ -122,7 +122,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput_v7_3 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInput_v7_3 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
|
||||
|
|
@ -158,7 +158,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame_v7_6
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -83,7 +83,7 @@ class IDeckLinkVideoConversion_v7_6;
|
|||
|
||||
/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
|
||||
|
||||
class IDeckLinkVideoOutputCallback_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame_v7_6 *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
|
||||
|
|
@ -96,7 +96,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkInputCallback_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInputCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
|
|
@ -109,7 +109,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
|
||||
|
||||
class IDeckLinkDisplayModeIterator_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode_v7_6 **deckLinkDisplayMode) = 0;
|
||||
|
|
@ -121,7 +121,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDisplayMode - represents a display mode */
|
||||
|
||||
class IDeckLinkDisplayMode_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ const char **name) = 0;
|
||||
|
|
@ -138,7 +138,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkOutput_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
|
||||
|
|
@ -194,7 +194,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInput_v7_6 - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInput_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
|
||||
|
|
@ -233,7 +233,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class IDeckLinkTimecode_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkTimecode_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
|
|
@ -248,7 +248,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
|
||||
|
||||
class IDeckLinkVideoFrame_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetWidth (void) = 0;
|
||||
|
|
@ -268,7 +268,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
|
||||
|
||||
class IDeckLinkMutableVideoFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
class BMD_PUBLIC IDeckLinkMutableVideoFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlags (BMDFrameFlags newFlags) = 0;
|
||||
|
|
@ -284,7 +284,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class IDeckLinkVideoInputFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
|
||||
|
|
@ -297,7 +297,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
|
||||
|
||||
class IDeckLinkScreenPreviewCallback_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkScreenPreviewCallback_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
|
||||
|
|
@ -309,7 +309,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkGLScreenPreviewHelper_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -326,7 +326,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkVideoConversion_v7_6 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoConversion_v7_6 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame_v7_6* srcFrame, /* in */ IDeckLinkVideoFrame_v7_6* dstFrame) = 0;
|
||||
|
|
@ -337,54 +337,54 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkConfiguration_v7_6 : public IUnknown
|
||||
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;
|
||||
};
|
||||
|
|
@ -393,9 +393,9 @@ public:
|
|||
|
||||
extern "C" {
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void);
|
||||
IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void);
|
||||
IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void);
|
||||
IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance_v7_6 (void);
|
||||
IDeckLinkGLScreenPreviewHelper_v7_6* BMD_PUBLIC CreateOpenGLScreenPreviewHelper_v7_6 (void);
|
||||
IDeckLinkVideoConversion_v7_6* BMD_PUBLIC CreateVideoConversionInstance_v7_6 (void);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
class IDeckLinkDeckControl_v7_9;
|
||||
|
||||
/* Interface IDeckLinkDeckControl_v7_9 - Deck Control main interface */
|
||||
class IDeckLinkDeckControl_v7_9 : public IUnknown
|
||||
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;
|
||||
|
|
@ -77,7 +77,7 @@ public:
|
|||
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
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
/* Interface IDeckLink_v8_0 - represents a DeckLink device */
|
||||
|
||||
class IDeckLink_v8_0 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLink_v8_0 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ const char **modelName) = 0;
|
||||
|
|
@ -47,14 +47,14 @@ public:
|
|||
|
||||
/* Interface IDeckLinkIterator_v8_0 - enumerates installed DeckLink hardware */
|
||||
|
||||
class IDeckLinkIterator_v8_0 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkIterator_v8_0 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLink_v8_0 **deckLinkInstance) = 0;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance_v8_0 (void);
|
||||
IDeckLinkIterator_v8_0* BMD_PUBLIC CreateDeckLinkIteratorInstance_v8_0 (void);
|
||||
};
|
||||
|
||||
#endif // defined __cplusplus
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -52,21 +52,21 @@ enum _BMDDeckControlVTRControlState_v8_1 {
|
|||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback_v8_1 - Deck control state change callback. */
|
||||
|
||||
class IDeckLinkDeckControlStatusCallback_v8_1 : public IUnknown
|
||||
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 IDeckLinkDeckControl_v8_1 : public IUnknown
|
||||
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;
|
||||
|
|
@ -102,7 +102,7 @@ public:
|
|||
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
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput_v9_2 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInput_v9_2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput_v9_9 : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkOutput_v9_9 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -29,7 +29,7 @@
|
|||
#define __LINUX_COM_H_
|
||||
|
||||
struct REFIID
|
||||
{
|
||||
{
|
||||
unsigned char byte0;
|
||||
unsigned char byte1;
|
||||
unsigned char byte2;
|
||||
|
|
@ -85,14 +85,19 @@ typedef void *LPVOID;
|
|||
#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 IUnknown
|
||||
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;
|
||||
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
|
||||
virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ if(DISABLE_DECKLINK)
|
|||
return()
|
||||
endif()
|
||||
|
||||
find_library(COREFOUNDATION CoreFoundation)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
include_directories(${COREFOUNDATION})
|
||||
find_library(COREFOUNDATION CoreFoundation)
|
||||
|
||||
set(mac-decklink-sdk_HEADERS
|
||||
decklink-sdk/DeckLinkAPI.h
|
||||
|
|
@ -17,39 +17,59 @@ set(mac-decklink-sdk_HEADERS
|
|||
decklink-sdk/DeckLinkAPIModes.h
|
||||
decklink-sdk/DeckLinkAPIStreaming.h
|
||||
decklink-sdk/DeckLinkAPITypes.h
|
||||
decklink-sdk/DeckLinkAPIVersion.h
|
||||
)
|
||||
decklink-sdk/DeckLinkAPIVersion.h)
|
||||
|
||||
set(mac-decklink-sdk_SOURCES
|
||||
decklink-sdk/DeckLinkAPIDispatch.cpp
|
||||
)
|
||||
|
||||
set(mac-decklink_HEADERS
|
||||
../decklink-devices.hpp
|
||||
../const.h
|
||||
../DecklinkOutput.hpp
|
||||
../platform.hpp
|
||||
../decklink.hpp
|
||||
../DecklinkInput.hpp
|
||||
../DecklinkBase.h
|
||||
../decklink-device-instance.hpp
|
||||
../decklink-device-discovery.hpp
|
||||
../decklink-device.hpp
|
||||
../decklink-device-mode.hpp
|
||||
../audio-repack.h
|
||||
../audio-repack.hpp
|
||||
../util.hpp
|
||||
)
|
||||
|
||||
set(mac-decklink_SOURCES
|
||||
../plugin-main.cpp
|
||||
../decklink.cpp
|
||||
../decklink-devices.cpp
|
||||
../decklink-output.cpp
|
||||
../decklink-source.cpp
|
||||
../DecklinkOutput.cpp
|
||||
../DecklinkInput.cpp
|
||||
../DecklinkBase.cpp
|
||||
../decklink-device-instance.cpp
|
||||
../decklink-device-discovery.cpp
|
||||
../decklink-device.cpp
|
||||
../decklink-device-mode.cpp
|
||||
../audio-repack.c
|
||||
platform.cpp)
|
||||
platform.cpp
|
||||
../util.cpp
|
||||
)
|
||||
|
||||
list(APPEND decklink_HEADERS ${decklink_UI_HEADERS})
|
||||
|
||||
include_directories(
|
||||
${COREFOUNDATION}
|
||||
"${CMAKE_SOURCE_DIR}/UI/obs-frontend-api")
|
||||
|
||||
list(APPEND mac-decklink_HEADERS ${decklink_UI_HEADERS})
|
||||
|
||||
add_library(mac-decklink MODULE
|
||||
${mac-decklink_SOURCES}
|
||||
${mac-decklink_HEADERS}
|
||||
${mac-decklink-sdk_HEADERS}
|
||||
${mac-decklink-sdk_SOURCES})
|
||||
${mac-decklink-sdk_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(mac-decklink
|
||||
libobs
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
/* DeckLink API */
|
||||
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
|
|
@ -67,12 +71,16 @@ BMD_CONST REFIID IID_IDeckLinkIterator = /* 50FB36CD-
|
|||
BMD_CONST REFIID IID_IDeckLinkAPIInformation = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
|
||||
BMD_CONST REFIID IID_IDeckLinkOutput = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
|
||||
BMD_CONST REFIID IID_IDeckLinkInput = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
|
||||
BMD_CONST REFIID IID_IDeckLinkHDMIInputEDID = /* ABBBACBC-45BC-4665-9D92-ACE6E5A97902 */ {0xAB,0xBB,0xAC,0xBC,0x45,0xBC,0x46,0x65,0x9D,0x92,0xAC,0xE6,0xE5,0xA9,0x79,0x02};
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderInput = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrame = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
|
||||
BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoInputFrame = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
|
||||
BMD_CONST REFIID IID_IDeckLinkAncillaryPacket = /* CC5BBF7E-029C-4D3B-9158-6000EF5E3670 */ {0xCC,0x5B,0xBF,0x7E,0x02,0x9C,0x4D,0x3B,0x91,0x58,0x60,0x00,0xEF,0x5E,0x36,0x70};
|
||||
BMD_CONST REFIID IID_IDeckLinkAncillaryPacketIterator = /* 3FC8994B-88FB-4C17-968F-9AAB69D964A7 */ {0x3F,0xC8,0x99,0x4B,0x88,0xFB,0x4C,0x17,0x96,0x8F,0x9A,0xAB,0x69,0xD9,0x64,0xA7};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillaryPackets = /* 6C186C0F-459E-41D8-AEE2-4812D81AEE68 */ {0x6C,0x18,0x6C,0x0F,0x45,0x9E,0x41,0xD8,0xAE,0xE2,0x48,0x12,0xD8,0x1A,0xEE,0x68};
|
||||
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderPacket = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
|
||||
BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
|
||||
|
|
@ -117,9 +125,11 @@ enum _BMDFrameFlags {
|
|||
bmdFrameFlagDefault = 0,
|
||||
bmdFrameFlagFlipVertical = 1 << 0,
|
||||
bmdFrameContainsHDRMetadata = 1 << 1,
|
||||
bmdFrameContainsCintelMetadata = 1 << 2,
|
||||
|
||||
/* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
|
||||
|
||||
bmdFrameCapturedAsPsF = 1 << 30,
|
||||
bmdFrameHasNoInputSource = 1 << 31
|
||||
};
|
||||
|
||||
|
|
@ -163,10 +173,10 @@ enum _BMDDeckLinkCapturePassthroughMode {
|
|||
|
||||
typedef uint32_t BMDOutputFrameCompletionResult;
|
||||
enum _BMDOutputFrameCompletionResult {
|
||||
bmdOutputFrameCompleted,
|
||||
bmdOutputFrameDisplayedLate,
|
||||
bmdOutputFrameDropped,
|
||||
bmdOutputFrameFlushed
|
||||
bmdOutputFrameCompleted,
|
||||
bmdOutputFrameDisplayedLate,
|
||||
bmdOutputFrameDropped,
|
||||
bmdOutputFrameFlushed
|
||||
};
|
||||
|
||||
/* Enum BMDReferenceStatus - GenLock input status */
|
||||
|
|
@ -203,9 +213,9 @@ enum _BMDAudioSampleType {
|
|||
|
||||
typedef uint32_t BMDAudioOutputStreamType;
|
||||
enum _BMDAudioOutputStreamType {
|
||||
bmdAudioOutputStreamContinuous,
|
||||
bmdAudioOutputStreamContinuousDontResample,
|
||||
bmdAudioOutputStreamTimestamped
|
||||
bmdAudioOutputStreamContinuous,
|
||||
bmdAudioOutputStreamContinuousDontResample,
|
||||
bmdAudioOutputStreamTimestamped
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeSupport - Output mode supported flags */
|
||||
|
|
@ -213,8 +223,17 @@ enum _BMDAudioOutputStreamType {
|
|||
typedef uint32_t BMDDisplayModeSupport;
|
||||
enum _BMDDisplayModeSupport {
|
||||
bmdDisplayModeNotSupported = 0,
|
||||
bmdDisplayModeSupported,
|
||||
bmdDisplayModeSupportedWithConversion
|
||||
bmdDisplayModeSupported,
|
||||
bmdDisplayModeSupportedWithConversion
|
||||
};
|
||||
|
||||
/* Enum BMDAncillaryPacketFormat - Ancillary packet format */
|
||||
|
||||
typedef uint32_t BMDAncillaryPacketFormat;
|
||||
enum _BMDAncillaryPacketFormat {
|
||||
bmdAncillaryPacketFormatUInt8 = 'ui08',
|
||||
bmdAncillaryPacketFormatUInt16 = 'ui16',
|
||||
bmdAncillaryPacketFormatYCbCr10 = 'v210'
|
||||
};
|
||||
|
||||
/* Enum BMDTimecodeFormat - Timecode formats for frame metadata */
|
||||
|
|
@ -336,11 +355,68 @@ enum _BMDDeviceInterface {
|
|||
bmdDeviceInterfaceThunderbolt = 'thun'
|
||||
};
|
||||
|
||||
/* Enum BMDColorspace - Colorspace */
|
||||
|
||||
typedef uint32_t BMDColorspace;
|
||||
enum _BMDColorspace {
|
||||
bmdColorspaceRec601 = 'r601',
|
||||
bmdColorspaceRec709 = 'r709',
|
||||
bmdColorspaceRec2020 = '2020'
|
||||
};
|
||||
|
||||
/* Enum BMDDynamicRange - SDR or HDR */
|
||||
|
||||
typedef uint32_t BMDDynamicRange;
|
||||
enum _BMDDynamicRange {
|
||||
bmdDynamicRangeSDR = 0,
|
||||
bmdDynamicRangeHDRStaticPQ = 1 << 29, // SMPTE ST 2084
|
||||
bmdDynamicRangeHDRStaticHLG = 1 << 30 // ITU-R BT.2100-0
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkHDMIInputEDIDID - DeckLink HDMI Input EDID ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkHDMIInputEDIDID;
|
||||
enum _BMDDeckLinkHDMIInputEDIDID {
|
||||
bmdDeckLinkHDMIInputEDIDDynamicRange = 'HIDy' // Parameter is of type BMDDynamicRange. Default is (bmdDynamicRangeSDR|bmdDynamicRangeHDRStaticPQ)
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
|
||||
|
||||
typedef uint32_t BMDDeckLinkFrameMetadataID;
|
||||
enum _BMDDeckLinkFrameMetadataID {
|
||||
bmdDeckLinkFrameMetadataColorspace = 'cspc', // Colorspace of video frame (see BMDColorspace)
|
||||
bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = 'eotf', // EOTF in range 0-7 as per CEA 861.3
|
||||
bmdDeckLinkFrameMetadataCintelFilmType = 'cfty', // Current film type
|
||||
bmdDeckLinkFrameMetadataCintelFilmGauge = 'cfga', // Current film gauge
|
||||
bmdDeckLinkFrameMetadataCintelOffsetDetectedHorizontal = 'odfh', // Horizontal offset (pixels) detected in image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetDetectedVertical = 'odfv', // Vertical offset (pixels) detected in image
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeLow = 'ckkl', // Raw keykode value - low 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelKeykodeHigh = 'ckkh', // Raw keykode value - high 64 bits
|
||||
bmdDeckLinkFrameMetadataCintelTile1Size = 'ct1s', // Size in bytes of compressed raw tile 1
|
||||
bmdDeckLinkFrameMetadataCintelTile2Size = 'ct2s', // Size in bytes of compressed raw tile 2
|
||||
bmdDeckLinkFrameMetadataCintelTile3Size = 'ct3s', // Size in bytes of compressed raw tile 3
|
||||
bmdDeckLinkFrameMetadataCintelTile4Size = 'ct4s', // Size in bytes of compressed raw tile 4
|
||||
bmdDeckLinkFrameMetadataCintelImageWidth = 'IWPx', // Width in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelImageHeight = 'IHPx', // Height in pixels of image
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInRed = 'mrir', // Red in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInRed = 'mgir', // Green in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInRed = 'mbir', // Blue in red linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInGreen = 'mrig', // Red in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInGreen = 'mgig', // Green in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInGreen = 'mbig', // Blue in green linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingRedInBlue = 'mrib', // Red in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingGreenInBlue = 'mgib', // Green in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLinearMaskingBlueInBlue = 'mbib', // Blue in blue linear masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInRed = 'mlrr', // Red in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInRed = 'mlgr', // Green in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInRed = 'mlbr', // Blue in red log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInGreen = 'mlrg', // Red in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInGreen = 'mlgg', // Green in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInGreen = 'mlbg', // Blue in green log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingRedInBlue = 'mlrb', // Red in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingGreenInBlue = 'mlgb', // Green in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelLogMaskingBlueInBlue = 'mlbb', // Blue in blue log masking parameter
|
||||
bmdDeckLinkFrameMetadataCintelFilmFrameRate = 'cffr', // Film frame rate
|
||||
bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = 'hdrx', // Red display primaries in range 0.0 - 1.0
|
||||
bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = 'hdry', // Red display primaries in range 0.0 - 1.0
|
||||
bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = 'hdgx', // Green display primaries in range 0.0 - 1.0
|
||||
|
|
@ -352,7 +428,15 @@ enum _BMDDeckLinkFrameMetadataID {
|
|||
bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = 'hdml', // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = 'hmil', // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = 'mcll', // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 'fall' // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 'fall', // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyHorizontal = 'otah', // Horizontal offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelOffsetToApplyVertical = 'otav', // Vertical offset (pixels) to be applied to image
|
||||
bmdDeckLinkFrameMetadataCintelGainRed = 'LfRd', // Red gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainGreen = 'LfGr', // Green gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelGainBlue = 'LfBl', // Blue gain parameter to apply after log
|
||||
bmdDeckLinkFrameMetadataCintelLiftRed = 'GnRd', // Red lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftGreen = 'GnGr', // Green lift parameter to apply after log and gain
|
||||
bmdDeckLinkFrameMetadataCintelLiftBlue = 'GnBl' // Blue lift parameter to apply after log and gain
|
||||
};
|
||||
|
||||
/* Enum BMDDuplexMode - Duplex for configurable ports */
|
||||
|
|
@ -390,22 +474,24 @@ enum _BMDDeckLinkAttributeID {
|
|||
BMDDeckLinkHasLTCTimecodeInput = 'hltc',
|
||||
BMDDeckLinkSupportsDuplexModeConfiguration = 'dupx',
|
||||
BMDDeckLinkSupportsHDRMetadata = 'hdrm',
|
||||
BMDDeckLinkSupportsColorspaceMetadata = 'cmet',
|
||||
|
||||
/* Integers */
|
||||
|
||||
BMDDeckLinkMaximumAudioChannels = 'mach',
|
||||
BMDDeckLinkMaximumAnalogAudioChannels = 'aach',
|
||||
BMDDeckLinkMaximumAnalogAudioInputChannels = 'iach',
|
||||
BMDDeckLinkMaximumAnalogAudioOutputChannels = 'aach',
|
||||
BMDDeckLinkNumberOfSubDevices = 'nsbd',
|
||||
BMDDeckLinkSubDeviceIndex = 'subi',
|
||||
BMDDeckLinkPersistentID = 'peid',
|
||||
BMDDeckLinkDeviceGroupID = 'dgid',
|
||||
BMDDeckLinkTopologicalID = 'toid',
|
||||
BMDDeckLinkVideoOutputConnections = 'vocn',
|
||||
BMDDeckLinkVideoInputConnections = 'vicn',
|
||||
BMDDeckLinkAudioOutputConnections = 'aocn',
|
||||
BMDDeckLinkAudioInputConnections = 'aicn',
|
||||
BMDDeckLinkVideoOutputConnections = 'vocn', // Returns a BMDVideoConnection bit field
|
||||
BMDDeckLinkVideoInputConnections = 'vicn', // Returns a BMDVideoConnection bit field
|
||||
BMDDeckLinkAudioOutputConnections = 'aocn', // Returns a BMDAudioConnection bit field
|
||||
BMDDeckLinkAudioInputConnections = 'aicn', // Returns a BMDAudioConnection bit field
|
||||
BMDDeckLinkVideoIOSupport = 'vios', // Returns a BMDVideoIOSupport bit field
|
||||
BMDDeckLinkDeckControlConnections = 'dccn',
|
||||
BMDDeckLinkDeckControlConnections = 'dccn', // Returns a BMDDeckControlConnection bit field
|
||||
BMDDeckLinkDeviceInterface = 'dbus', // Returns a BMDDeviceInterface
|
||||
BMDDeckLinkAudioInputRCAChannelCount = 'airc',
|
||||
BMDDeckLinkAudioInputXLRChannelCount = 'aixc',
|
||||
|
|
@ -459,11 +545,14 @@ enum _BMDDeckLinkStatusID {
|
|||
bmdDeckLinkStatusReferenceSignalFlags = 'reff',
|
||||
bmdDeckLinkStatusDuplexMode = 'dupx',
|
||||
bmdDeckLinkStatusBusy = 'busy',
|
||||
bmdDeckLinkStatusInterchangeablePanelType = 'icpt',
|
||||
bmdDeckLinkStatusDeviceTemperature = 'dtmp',
|
||||
|
||||
/* Flags */
|
||||
|
||||
bmdDeckLinkStatusVideoInputSignalLocked = 'visl',
|
||||
bmdDeckLinkStatusReferenceSignalLocked = 'refl'
|
||||
bmdDeckLinkStatusReferenceSignalLocked = 'refl',
|
||||
bmdDeckLinkStatusReceivedEDID = 'edid'
|
||||
};
|
||||
|
||||
/* Enum BMDDeckLinkVideoStatusFlags - */
|
||||
|
|
@ -484,6 +573,14 @@ enum _BMDDuplexStatus {
|
|||
bmdDuplexStatusInactive = 'inac'
|
||||
};
|
||||
|
||||
/* Enum BMDPanelType - The type of interchangeable panel */
|
||||
|
||||
typedef uint32_t BMDPanelType;
|
||||
enum _BMDPanelType {
|
||||
bmdPanelNotDetected = 'npnl',
|
||||
bmdPanelTeranexMiniSmartPanel = 'tmsm'
|
||||
};
|
||||
|
||||
/* Enum BMDDeviceBusyState - Current device busy state */
|
||||
|
||||
typedef uint32_t BMDDeviceBusyState;
|
||||
|
|
@ -533,12 +630,16 @@ class IDeckLinkIterator;
|
|||
class IDeckLinkAPIInformation;
|
||||
class IDeckLinkOutput;
|
||||
class IDeckLinkInput;
|
||||
class IDeckLinkHDMIInputEDID;
|
||||
class IDeckLinkEncoderInput;
|
||||
class IDeckLinkVideoFrame;
|
||||
class IDeckLinkMutableVideoFrame;
|
||||
class IDeckLinkVideoFrame3DExtensions;
|
||||
class IDeckLinkVideoFrameMetadataExtensions;
|
||||
class IDeckLinkVideoInputFrame;
|
||||
class IDeckLinkAncillaryPacket;
|
||||
class IDeckLinkAncillaryPacketIterator;
|
||||
class IDeckLinkVideoFrameAncillaryPackets;
|
||||
class IDeckLinkVideoFrameAncillary;
|
||||
class IDeckLinkEncoderPacket;
|
||||
class IDeckLinkEncoderVideoPacket;
|
||||
|
|
@ -559,7 +660,7 @@ class IDeckLinkDiscovery;
|
|||
|
||||
/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
|
||||
|
||||
class IDeckLinkVideoOutputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoOutputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
|
||||
|
|
@ -571,7 +672,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkInputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
|
|
@ -583,7 +684,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
|
||||
|
||||
class IDeckLinkEncoderInputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderInputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
|
||||
|
|
@ -596,7 +697,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
|
||||
|
||||
class IDeckLinkMemoryAllocator : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkMemoryAllocator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT AllocateBuffer (/* in */ uint32_t bufferSize, /* out */ void **allocatedBuffer) = 0;
|
||||
|
|
@ -608,7 +709,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkAudioOutputCallback - Optional callback to allow audio samples to be pulled as required. */
|
||||
|
||||
class IDeckLinkAudioOutputCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAudioOutputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT RenderAudioSamples (/* in */ bool preroll) = 0;
|
||||
|
|
@ -616,7 +717,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkIterator - enumerates installed DeckLink hardware */
|
||||
|
||||
class IDeckLinkIterator : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLink **deckLinkInstance) = 0;
|
||||
|
|
@ -624,7 +725,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkAPIInformation - DeckLinkAPI attribute interface */
|
||||
|
||||
class IDeckLinkAPIInformation : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAPIInformation : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAPIInformationID cfgID, /* out */ bool *value) = 0;
|
||||
|
|
@ -638,7 +739,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkOutput : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkOutput : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
@ -653,7 +754,7 @@ public:
|
|||
|
||||
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 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;
|
||||
|
|
@ -695,7 +796,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkInput : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkInput : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
@ -732,9 +833,22 @@ protected:
|
|||
virtual ~IDeckLinkInput () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkHDMIInputEDID - Created by QueryInterface from IDeckLink. Releasing all references will restore EDID to default */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkHDMIInputEDID : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* in */ int64_t value) = 0;
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkHDMIInputEDIDID cfgID, /* out */ int64_t *value) = 0;
|
||||
virtual HRESULT WriteToEDID (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkHDMIInputEDID () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
|
||||
|
||||
class IDeckLinkEncoderInput : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderInput : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
|
||||
|
|
@ -771,7 +885,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
|
||||
|
||||
class IDeckLinkVideoFrame : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetWidth (void) = 0;
|
||||
|
|
@ -782,7 +896,7 @@ public:
|
|||
virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
|
||||
|
||||
virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
|
||||
virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0; // Use of IDeckLinkVideoFrameAncillaryPackets is preferred
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrame () {} // call Release method to drop reference count
|
||||
|
|
@ -790,7 +904,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
|
||||
|
||||
class IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
|
||||
class BMD_PUBLIC IDeckLinkMutableVideoFrame : public IDeckLinkVideoFrame
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlags (/* in */ BMDFrameFlags newFlags) = 0;
|
||||
|
|
@ -806,7 +920,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrame3DExtensions - Optional interface implemented on IDeckLinkVideoFrame to support 3D frames */
|
||||
|
||||
class IDeckLinkVideoFrame3DExtensions : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrame3DExtensions : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDVideo3DPackingFormat Get3DPackingFormat (void) = 0;
|
||||
|
|
@ -818,7 +932,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
|
||||
|
||||
class IDeckLinkVideoFrameMetadataExtensions : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameMetadataExtensions : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
|
||||
|
|
@ -832,7 +946,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
|
||||
|
||||
class IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
|
||||
class BMD_PUBLIC IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, /* in */ BMDTimeScale timeScale) = 0;
|
||||
|
|
@ -842,13 +956,56 @@ protected:
|
|||
virtual ~IDeckLinkVideoInputFrame () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillary - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
|
||||
/* Interface IDeckLinkAncillaryPacket - On output, user needs to implement this interface */
|
||||
|
||||
class IDeckLinkVideoFrameAncillary : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAncillaryPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0;
|
||||
virtual HRESULT GetBytes (/* in */ BMDAncillaryPacketFormat format /* For output, only one format need be offered */, /* out */ const void **data /* Optional */, /* out */ uint32_t *size /* Optional */) = 0;
|
||||
virtual uint8_t GetDID (void) = 0;
|
||||
virtual uint8_t GetSDID (void) = 0;
|
||||
virtual uint32_t GetLineNumber (void) = 0; // On output, zero is auto
|
||||
virtual uint8_t GetDataStreamIndex (void) = 0; // Usually zero. Can only be 1 if non-SD and the first data stream is completely full
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAncillaryPacket () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkAncillaryPacketIterator - Enumerates ancillary packets */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkAncillaryPacketIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkAncillaryPacket **packet) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkAncillaryPacketIterator () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillaryPackets - Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameAncillaryPackets : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
virtual HRESULT GetPacketIterator (/* out */ IDeckLinkAncillaryPacketIterator **iterator) = 0;
|
||||
virtual HRESULT GetFirstPacketByID (/* in */ uint8_t DID, /* in */ uint8_t SDID, /* out */ IDeckLinkAncillaryPacket **packet) = 0;
|
||||
virtual HRESULT AttachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0; // Implement IDeckLinkAncillaryPacket to output your own
|
||||
virtual HRESULT DetachPacket (/* in */ IDeckLinkAncillaryPacket *packet) = 0;
|
||||
virtual HRESULT DetachAllPackets (void) = 0;
|
||||
|
||||
protected:
|
||||
virtual ~IDeckLinkVideoFrameAncillaryPackets () {} // call Release method to drop reference count
|
||||
};
|
||||
|
||||
/* Interface IDeckLinkVideoFrameAncillary - Use of IDeckLinkVideoFrameAncillaryPackets is preferred. Obtained through QueryInterface() on an IDeckLinkVideoFrame object. */
|
||||
|
||||
class BMD_PUBLIC IDeckLinkVideoFrameAncillary : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
virtual HRESULT GetBufferForVerticalBlankingLine (/* in */ uint32_t lineNumber, /* out */ void **buffer) = 0; // Pixels/rowbytes is same as display mode, except for above HD where it's 1920 pixels for UHD modes and 2048 pixels for DCI modes
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
virtual BMDDisplayMode GetDisplayMode (void) = 0;
|
||||
|
||||
|
|
@ -858,7 +1015,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
|
||||
|
||||
class IDeckLinkEncoderPacket : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
|
||||
|
|
@ -872,7 +1029,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
|
||||
|
||||
class IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
|
||||
class BMD_PUBLIC IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
|
||||
{
|
||||
public:
|
||||
virtual BMDPixelFormat GetPixelFormat (void) = 0;
|
||||
|
|
@ -886,7 +1043,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
|
||||
|
||||
class IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
|
||||
class BMD_PUBLIC IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
|
||||
{
|
||||
public:
|
||||
virtual BMDAudioFormat GetAudioFormat (void) = 0;
|
||||
|
|
@ -897,7 +1054,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
|
||||
|
||||
class IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
|
||||
class BMD_PUBLIC IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
|
||||
|
|
@ -910,7 +1067,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
|
||||
|
||||
class IDeckLinkAudioInputPacket : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAudioInputPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetSampleFrameCount (void) = 0;
|
||||
|
|
@ -923,7 +1080,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
|
||||
|
||||
class IDeckLinkScreenPreviewCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkScreenPreviewCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
|
||||
|
|
@ -934,7 +1091,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkCocoaScreenPreviewCallback - Screen preview callback for Cocoa-based applications */
|
||||
|
||||
class IDeckLinkCocoaScreenPreviewCallback : public IDeckLinkScreenPreviewCallback
|
||||
class BMD_PUBLIC IDeckLinkCocoaScreenPreviewCallback : public IDeckLinkScreenPreviewCallback
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -944,7 +1101,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkGLScreenPreviewHelper : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkGLScreenPreviewHelper : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -961,7 +1118,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkNotificationCallback - DeckLink Notification Callback Interface */
|
||||
|
||||
class IDeckLinkNotificationCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkNotificationCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Notify (/* in */ BMDNotifications topic, /* in */ uint64_t param1, /* in */ uint64_t param2) = 0;
|
||||
|
|
@ -969,7 +1126,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkNotification - DeckLink Notification interface */
|
||||
|
||||
class IDeckLinkNotification : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkNotification : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Subscribe (/* in */ BMDNotifications topic, /* in */ IDeckLinkNotificationCallback *theCallback) = 0;
|
||||
|
|
@ -978,7 +1135,7 @@ public:
|
|||
|
||||
/* Interface IDeckLinkAttributes - DeckLink Attribute interface */
|
||||
|
||||
class IDeckLinkAttributes : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkAttributes : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkAttributeID cfgID, /* out */ bool *value) = 0;
|
||||
|
|
@ -992,7 +1149,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkStatus - DeckLink Status interface */
|
||||
|
||||
class IDeckLinkStatus : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkStatus : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
|
||||
|
|
@ -1007,7 +1164,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
|
||||
|
||||
class IDeckLinkKeyer : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkKeyer : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Enable (/* in */ bool isExternal) = 0;
|
||||
|
|
@ -1022,7 +1179,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
|
||||
|
||||
class IDeckLinkVideoConversion : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkVideoConversion : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame* srcFrame, /* in */ IDeckLinkVideoFrame* dstFrame) = 0;
|
||||
|
|
@ -1033,7 +1190,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDeviceNotificationCallback - DeckLink device arrival/removal notification callbacks */
|
||||
|
||||
class IDeckLinkDeviceNotificationCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDeviceNotificationCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT DeckLinkDeviceArrived (/* in */ IDeckLink* deckLinkDevice) = 0;
|
||||
|
|
@ -1045,7 +1202,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDiscovery - DeckLink device discovery */
|
||||
|
||||
class IDeckLinkDiscovery : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDiscovery : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT InstallDeviceNotifications (/* in */ IDeckLinkDeviceNotificationCallback* deviceNotificationCallback) = 0;
|
||||
|
|
@ -1059,12 +1216,13 @@ protected:
|
|||
|
||||
extern "C" {
|
||||
|
||||
IDeckLinkIterator* CreateDeckLinkIteratorInstance (void);
|
||||
IDeckLinkDiscovery* CreateDeckLinkDiscoveryInstance (void);
|
||||
IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void);
|
||||
IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void);
|
||||
IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview (void* /* (NSView*) */ parentView);
|
||||
IDeckLinkVideoConversion* CreateVideoConversionInstance (void);
|
||||
IDeckLinkIterator* BMD_PUBLIC CreateDeckLinkIteratorInstance (void);
|
||||
IDeckLinkDiscovery* BMD_PUBLIC CreateDeckLinkDiscoveryInstance (void);
|
||||
IDeckLinkAPIInformation* BMD_PUBLIC CreateDeckLinkAPIInformationInstance (void);
|
||||
IDeckLinkGLScreenPreviewHelper* BMD_PUBLIC CreateOpenGLScreenPreviewHelper (void);
|
||||
IDeckLinkCocoaScreenPreviewCallback* BMD_PUBLIC CreateCocoaScreenPreview (void* /* (NSView*) */ parentView);
|
||||
IDeckLinkVideoConversion* BMD_PUBLIC CreateVideoConversionInstance (void);
|
||||
IDeckLinkVideoFrameAncillaryPackets* BMD_PUBLIC CreateVideoFrameAncillaryPacketsInstance (void); // For use when creating a custom IDeckLinkVideoFrame without wrapping IDeckLinkOutput::CreateVideoFrame
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,12 +37,16 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
// Interface ID Declarations
|
||||
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
|
||||
BMD_CONST REFIID IID_IDeckLinkConfiguration = /* EF90380B-4AE5-4346-9077-E288E149F129 */ {0xEF,0x90,0x38,0x0B,0x4A,0xE5,0x43,0x46,0x90,0x77,0xE2,0x88,0xE1,0x49,0xF1,0x29};
|
||||
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 */
|
||||
|
|
@ -54,10 +58,6 @@ enum _BMDDeckLinkConfigurationID {
|
|||
|
||||
bmdDeckLinkConfigSwapSerialRxTx = 'ssrt',
|
||||
|
||||
/* Video Input/Output Flags */
|
||||
|
||||
bmdDeckLinkConfigUse1080pNotPsF = 'fpro',
|
||||
|
||||
/* Video Input/Output Integers */
|
||||
|
||||
bmdDeckLinkConfigHDMI3DPackingFormat = '3dpf',
|
||||
|
|
@ -78,6 +78,12 @@ enum _BMDDeckLinkConfigurationID {
|
|||
bmdDeckLinkConfigLowLatencyVideoOutput = 'llvo',
|
||||
bmdDeckLinkConfigDownConversionOnAllAnalogOutput = 'caao',
|
||||
bmdDeckLinkConfigSMPTELevelAOutput = 'smta',
|
||||
bmdDeckLinkConfigRec2020Output = 'rec2', // Ensure output is Rec.2020 colorspace
|
||||
bmdDeckLinkConfigQuadLinkSDIVideoOutputSquareDivisionSplit = 'SDQS',
|
||||
|
||||
/* Video Output Flags */
|
||||
|
||||
bmdDeckLinkConfigOutput1080pAsPsF = 'pfpr',
|
||||
|
||||
/* Video Output Integers */
|
||||
|
||||
|
|
@ -106,6 +112,10 @@ enum _BMDDeckLinkConfigurationID {
|
|||
bmdDeckLinkConfigUseDedicatedLTCInput = 'dltc', // Use timecode from LTC input instead of SDI stream
|
||||
bmdDeckLinkConfigSDIInput3DPayloadOverride = '3dds',
|
||||
|
||||
/* Video Input Flags */
|
||||
|
||||
bmdDeckLinkConfigCapture1080pAsPsF = 'cfpr',
|
||||
|
||||
/* Video Input Integers */
|
||||
|
||||
bmdDeckLinkConfigVideoInputConnection = 'vicn',
|
||||
|
|
@ -206,7 +216,7 @@ class IDeckLinkEncoderConfiguration;
|
|||
|
||||
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
|
||||
|
||||
class IDeckLinkConfiguration : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
@ -225,7 +235,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
|
||||
|
||||
class IDeckLinkEncoderConfiguration : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkEncoderConfiguration : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
/* -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 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_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) */
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -149,7 +153,7 @@ class IDeckLinkDeckControl;
|
|||
|
||||
/* Interface IDeckLinkDeckControlStatusCallback - Deck control state change callback. */
|
||||
|
||||
class IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDeckControlStatusCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
|
||||
|
|
@ -163,7 +167,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDeckControl - Deck Control main interface */
|
||||
|
||||
class IDeckLinkDeckControl : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDeckControl : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -50,7 +54,7 @@ class IDeckLink;
|
|||
|
||||
/* Interface IDeckLink - represents a DeckLink device */
|
||||
|
||||
class IDeckLink : public IUnknown
|
||||
class BMD_PUBLIC IDeckLink : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetModelName (/* out */ CFStringRef *modelName) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -42,6 +42,7 @@ typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(v
|
|||
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;
|
||||
|
|
@ -51,9 +52,10 @@ static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
|
|||
static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
|
||||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
static CreateDeckLinkDiscoveryInstanceFunc gCreateDeckLinkDiscoveryFunc= NULL;
|
||||
static CreateVideoFrameAncillaryPacketsInstanceFunc gCreateVideoFrameAncillaryPacketsFunc = NULL;
|
||||
|
||||
|
||||
void InitDeckLinkAPI (void)
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
|
|
@ -63,12 +65,13 @@ void InitDeckLinkAPI (void)
|
|||
gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gDeckLinkAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0002"));
|
||||
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_0001"));
|
||||
gCreateDeckLinkDiscoveryFunc = (CreateDeckLinkDiscoveryInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkDiscoveryInstance_0002"));
|
||||
gCreateVideoFrameAncillaryPacketsFunc = (CreateVideoFrameAncillaryPacketsInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoFrameAncillaryPacketsInstance_0001"));
|
||||
}
|
||||
CFRelease(bundleURL);
|
||||
}
|
||||
|
|
@ -79,70 +82,80 @@ 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();
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
|
|
@ -154,7 +167,7 @@ static CFBundleRef gBMDStreamingAPIBundleRef = NULL;
|
|||
static CreateDiscoveryFunc gCreateDiscoveryFunc = NULL;
|
||||
static CreateNALParserFunc gCreateNALParserFunc = NULL;
|
||||
|
||||
void InitBMDStreamingAPI(void)
|
||||
static void InitBMDStreamingAPI(void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
|
|
@ -164,7 +177,7 @@ void InitBMDStreamingAPI(void)
|
|||
gBMDStreamingAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
|
||||
if (gBMDStreamingAPIBundleRef != NULL)
|
||||
{
|
||||
gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0001"));
|
||||
gCreateDiscoveryFunc = (CreateDiscoveryFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingDiscoveryInstance_0002"));
|
||||
gCreateNALParserFunc = (CreateNALParserFunc)CFBundleGetFunctionPointerForName(gBMDStreamingAPIBundleRef, CFSTR("CreateBMDStreamingH264NALParser_0001"));
|
||||
}
|
||||
|
||||
|
|
|
|||
193
plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch_v10_8.cpp
Normal file
193
plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch_v10_8.cpp
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
/* -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 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-
|
||||
*/
|
||||
/* 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();
|
||||
}
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -44,7 +44,7 @@ static CreateCocoaScreenPreviewFunc_v7_6 gCreateCocoaPreviewFunc = NULL;
|
|||
static CreateVideoConversionInstanceFunc_v7_6 gCreateVideoConversionFunc = NULL;
|
||||
|
||||
|
||||
void InitDeckLinkAPI_v7_6 (void)
|
||||
static void InitDeckLinkAPI_v7_6 (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
|
|
@ -66,40 +66,40 @@ void InitDeckLinkAPI_v7_6 (void)
|
|||
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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -50,7 +50,7 @@ static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
|
|||
static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
|
||||
|
||||
|
||||
void InitDeckLinkAPI (void)
|
||||
static void InitDeckLinkAPI (void)
|
||||
{
|
||||
CFURLRef bundleURL;
|
||||
|
||||
|
|
@ -75,57 +75,57 @@ 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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -65,12 +69,12 @@ enum _BMDDisplayMode {
|
|||
bmdModeHD1080p25 = 'Hp25',
|
||||
bmdModeHD1080p2997 = 'Hp29',
|
||||
bmdModeHD1080p30 = 'Hp30',
|
||||
bmdModeHD1080i50 = 'Hi50',
|
||||
bmdModeHD1080i5994 = 'Hi59',
|
||||
bmdModeHD1080i6000 = 'Hi60', // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080p50 = 'Hp50',
|
||||
bmdModeHD1080p5994 = 'Hp59',
|
||||
bmdModeHD1080p6000 = 'Hp60', // N.B. This _really_ is 60.00 Hz.
|
||||
bmdModeHD1080i50 = 'Hi50',
|
||||
bmdModeHD1080i5994 = 'Hi59',
|
||||
bmdModeHD1080i6000 = 'Hi60', // N.B. This _really_ is 60.00 Hz.
|
||||
|
||||
/* HD 720 Modes */
|
||||
|
||||
|
|
@ -78,19 +82,24 @@ enum _BMDDisplayMode {
|
|||
bmdModeHD720p5994 = 'hp59',
|
||||
bmdModeHD720p60 = 'hp60',
|
||||
|
||||
/* 2k Modes */
|
||||
/* 2K Modes */
|
||||
|
||||
bmdMode2k2398 = '2k23',
|
||||
bmdMode2k24 = '2k24',
|
||||
bmdMode2k25 = '2k25',
|
||||
|
||||
/* DCI Modes (output only) */
|
||||
/* 2K DCI Modes */
|
||||
|
||||
bmdMode2kDCI2398 = '2d23',
|
||||
bmdMode2kDCI24 = '2d24',
|
||||
bmdMode2kDCI25 = '2d25',
|
||||
bmdMode2kDCI2997 = '2d29',
|
||||
bmdMode2kDCI30 = '2d30',
|
||||
bmdMode2kDCI50 = '2d50',
|
||||
bmdMode2kDCI5994 = '2d59',
|
||||
bmdMode2kDCI60 = '2d60',
|
||||
|
||||
/* 4k Modes */
|
||||
/* 4K UHD Modes */
|
||||
|
||||
bmdMode4K2160p2398 = '4k23',
|
||||
bmdMode4K2160p24 = '4k24',
|
||||
|
|
@ -101,11 +110,43 @@ enum _BMDDisplayMode {
|
|||
bmdMode4K2160p5994 = '4k59',
|
||||
bmdMode4K2160p60 = '4k60',
|
||||
|
||||
/* DCI Modes (output only) */
|
||||
/* 4K DCI Modes */
|
||||
|
||||
bmdMode4kDCI2398 = '4d23',
|
||||
bmdMode4kDCI24 = '4d24',
|
||||
bmdMode4kDCI25 = '4d25',
|
||||
bmdMode4kDCI2997 = '4d29',
|
||||
bmdMode4kDCI30 = '4d30',
|
||||
bmdMode4kDCI50 = '4d50',
|
||||
bmdMode4kDCI5994 = '4d59',
|
||||
bmdMode4kDCI60 = '4d60',
|
||||
|
||||
/* 8K UHD Modes */
|
||||
|
||||
bmdMode8K4320p2398 = '8k23',
|
||||
bmdMode8K4320p24 = '8k24',
|
||||
bmdMode8K4320p25 = '8k25',
|
||||
bmdMode8K4320p2997 = '8k29',
|
||||
bmdMode8K4320p30 = '8k30',
|
||||
bmdMode8K4320p50 = '8k50',
|
||||
bmdMode8K4320p5994 = '8k59',
|
||||
bmdMode8K4320p60 = '8k60',
|
||||
|
||||
/* 8K DCI Modes */
|
||||
|
||||
bmdMode8kDCI2398 = '8d23',
|
||||
bmdMode8kDCI24 = '8d24',
|
||||
bmdMode8kDCI25 = '8d25',
|
||||
bmdMode8kDCI2997 = '8d29',
|
||||
bmdMode8kDCI30 = '8d30',
|
||||
bmdMode8kDCI50 = '8d50',
|
||||
bmdMode8kDCI5994 = '8d59',
|
||||
bmdMode8kDCI60 = '8d60',
|
||||
|
||||
/* RAW Modes for Cintel (input only) */
|
||||
|
||||
bmdModeCintelRAW = 'rwci', // Frame size up to 4096x3072, variable frame rate
|
||||
bmdModeCintelCompressedRAW = 'rwcc', // Frame size up to 4096x3072, variable frame rate
|
||||
|
||||
/* Special Modes */
|
||||
|
||||
|
|
@ -140,7 +181,12 @@ enum _BMDPixelFormat {
|
|||
|
||||
/* AVID DNxHR */
|
||||
|
||||
bmdFormatDNxHR = 'AVdh'
|
||||
bmdFormatDNxHR = 'AVdh',
|
||||
|
||||
/* Cintel formats */
|
||||
|
||||
bmdFormat12BitRAWGRBG = 'r12p', // 12-bit RAW data for bayer pattern GRBG
|
||||
bmdFormat12BitRAWJPEG = 'r16p' // 12-bit RAW data arranged in tiles and JPEG compressed
|
||||
};
|
||||
|
||||
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
|
||||
|
|
@ -149,7 +195,8 @@ typedef uint32_t BMDDisplayModeFlags;
|
|||
enum _BMDDisplayModeFlags {
|
||||
bmdDisplayModeSupports3D = 1 << 0,
|
||||
bmdDisplayModeColorspaceRec601 = 1 << 1,
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2
|
||||
bmdDisplayModeColorspaceRec709 = 1 << 2,
|
||||
bmdDisplayModeColorspaceRec2020 = 1 << 3
|
||||
};
|
||||
|
||||
// Forward Declarations
|
||||
|
|
@ -159,7 +206,7 @@ class IDeckLinkDisplayMode;
|
|||
|
||||
/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
|
||||
|
||||
class IDeckLinkDisplayModeIterator : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayModeIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IDeckLinkDisplayMode **deckLinkDisplayMode) = 0;
|
||||
|
|
@ -170,7 +217,7 @@ protected:
|
|||
|
||||
/* Interface IDeckLinkDisplayMode - represents a display mode */
|
||||
|
||||
class IDeckLinkDisplayMode : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkDisplayMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ CFStringRef *name) = 0;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
|
||||
|
|
@ -92,8 +96,8 @@ enum _BMDStreamingEncodingFrameRate {
|
|||
typedef uint32_t BMDStreamingEncodingSupport;
|
||||
enum _BMDStreamingEncodingSupport {
|
||||
bmdStreamingEncodingModeNotSupported = 0,
|
||||
bmdStreamingEncodingModeSupported,
|
||||
bmdStreamingEncodingModeSupportedWithChanges
|
||||
bmdStreamingEncodingModeSupported,
|
||||
bmdStreamingEncodingModeSupportedWithChanges
|
||||
};
|
||||
|
||||
/* Enum BMDStreamingVideoCodec - Video codecs */
|
||||
|
|
@ -188,7 +192,7 @@ class IBMDStreamingH264NALParser;
|
|||
|
||||
/* Interface IBMDStreamingDeviceNotificationCallback - Device notification callbacks. */
|
||||
|
||||
class IBMDStreamingDeviceNotificationCallback : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingDeviceNotificationCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT StreamingDeviceArrived (/* in */ IDeckLink* device) = 0;
|
||||
|
|
@ -201,7 +205,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingH264InputCallback - H264 input callbacks. */
|
||||
|
||||
class IBMDStreamingH264InputCallback : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingH264InputCallback : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT H264NALPacketArrived (/* in */ IBMDStreamingH264NALPacket* nalPacket) = 0;
|
||||
|
|
@ -217,7 +221,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingDiscovery - Installs device notifications */
|
||||
|
||||
class IBMDStreamingDiscovery : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingDiscovery : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT InstallDeviceNotifications (/* in */ IBMDStreamingDeviceNotificationCallback* theCallback) = 0;
|
||||
|
|
@ -229,7 +233,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingVideoEncodingMode - Represents an encoded video mode. */
|
||||
|
||||
class IBMDStreamingVideoEncodingMode : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingVideoEncodingMode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT GetName (/* out */ CFStringRef *name) = 0;
|
||||
|
|
@ -252,7 +256,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingMutableVideoEncodingMode - Represents a mutable encoded video mode. */
|
||||
|
||||
class IBMDStreamingMutableVideoEncodingMode : public IBMDStreamingVideoEncodingMode
|
||||
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;
|
||||
|
|
@ -268,7 +272,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingVideoEncodingModePresetIterator - Enumerates encoding mode presets */
|
||||
|
||||
class IBMDStreamingVideoEncodingModePresetIterator : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingVideoEncodingModePresetIterator : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT Next (/* out */ IBMDStreamingVideoEncodingMode** videoEncodingMode) = 0;
|
||||
|
|
@ -279,7 +283,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingDeviceInput - Created by QueryInterface from IDeckLink */
|
||||
|
||||
class IBMDStreamingDeviceInput : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingDeviceInput : public IUnknown
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -309,7 +313,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingH264NALPacket - Represent an H.264 NAL packet */
|
||||
|
||||
class IBMDStreamingH264NALPacket : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingH264NALPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetPayloadSize (void) = 0;
|
||||
|
|
@ -324,7 +328,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
|
||||
|
||||
class IBMDStreamingAudioPacket : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingAudioPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDStreamingAudioCodec GetCodec (void) = 0;
|
||||
|
|
@ -339,7 +343,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
|
||||
|
||||
class IBMDStreamingMPEG2TSPacket : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingMPEG2TSPacket : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual long GetPayloadSize (void) = 0;
|
||||
|
|
@ -351,7 +355,7 @@ protected:
|
|||
|
||||
/* Interface IBMDStreamingH264NALParser - For basic NAL parsing */
|
||||
|
||||
class IBMDStreamingH264NALParser : public IUnknown
|
||||
class BMD_PUBLIC IBMDStreamingH264NALParser : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT IsNALSequenceParameterSet (/* in */ IBMDStreamingH264NALPacket* nal) = 0;
|
||||
|
|
@ -366,8 +370,8 @@ protected:
|
|||
|
||||
extern "C" {
|
||||
|
||||
IBMDStreamingDiscovery* CreateBMDStreamingDiscoveryInstance (void);
|
||||
IBMDStreamingH264NALParser* CreateBMDStreamingH264NALParser (void);
|
||||
IBMDStreamingDiscovery* BMD_PUBLIC CreateBMDStreamingDiscoveryInstance (void);
|
||||
IBMDStreamingH264NALParser* BMD_PUBLIC CreateBMDStreamingH264NALParser (void);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/* -LICENSE-START-
|
||||
** Copyright (c) 2016 Blackmagic Design
|
||||
** 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 covered by
|
||||
|
|
@ -7,14 +7,14 @@
|
|||
** 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
|
||||
|
|
@ -37,6 +37,10 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef BMD_PUBLIC
|
||||
#define BMD_PUBLIC
|
||||
#endif
|
||||
|
||||
// Type Declarations
|
||||
|
||||
typedef int64_t BMDTimeValue;
|
||||
|
|
@ -54,7 +58,8 @@ typedef uint32_t BMDTimecodeFlags;
|
|||
enum _BMDTimecodeFlags {
|
||||
bmdTimecodeFlagDefault = 0,
|
||||
bmdTimecodeIsDropFrame = 1 << 0,
|
||||
bmdTimecodeFieldMark = 1 << 1
|
||||
bmdTimecodeFieldMark = 1 << 1,
|
||||
bmdTimecodeColorFrame = 1 << 2
|
||||
};
|
||||
|
||||
/* Enum BMDVideoConnection - Video connection types */
|
||||
|
|
@ -96,7 +101,7 @@ class IDeckLinkTimecode;
|
|||
|
||||
/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
|
||||
|
||||
class IDeckLinkTimecode : public IUnknown
|
||||
class BMD_PUBLIC IDeckLinkTimecode : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual BMDTimecodeBCD GetBCD (void) = 0;
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
* ** 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
|
||||
|
|
@ -30,7 +30,8 @@
|
|||
#ifndef __DeckLink_API_Version_h__
|
||||
#define __DeckLink_API_Version_h__
|
||||
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8"
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a0b0400
|
||||
#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.11.4"
|
||||
|
||||
#endif // __DeckLink_API_Version_h__
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue