![]() |
UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
|
#include <algorithm>#include <cassert>#include <cctype>#include <chrono>#include <climits>#include <condition_variable>#include <cstdint>#include <cstdio>#include <cstdlib>#include <cstring>#include <exception>#include <iomanip>#include <iostream>#include <list>#include <map>#include <memory>#include <mutex>#include <queue>#include <string>#include <tuple>#include <unordered_map>#include <utility>#include <vector>#include "blackmagic_common.hpp"#include "audio/types.h"#include "audio/utils.h"#include "compat/htonl.h"#include "compat/strings.h"#include "debug.h"#include "host.h"#include "lib_common.h"#include "types.h"#include "utils/color_out.h"#include "utils/macros.h"#include "utils/math.h"#include "utils/windows.h"#include "video.h"#include "video_capture.h"
Go to the source code of this file.
Classes | |
| struct | device_state |
| struct | vidcap_decklink_state |
| struct | vidcap_decklink_state::audio |
| class | VideoDelegate |
Macros | |
| #define | CALL_AND_CHECK(cmd, ...) |
| #define | CALL_AND_CHECK_2(cmd, name) |
| #define | CALL_AND_CHECK_3(cmd, name, msg) |
| #define | CALL_AND_CHECK_CHOOSER(...) |
| #define | EXIT_IF_FAILED(cmd, name) |
| #define | GET_3TH_ARG(arg1, arg2, arg3, ...) |
| #define | INIT_ERR() |
| #define | MOD_NAME "[DeckLink capture] " |
| #define | RELEASE_IF_NOT_NULL(x) |
| #define | STDMETHODCALLTYPE |
Functions | |
| static void | cleanup_common (struct vidcap_decklink_state *s) |
| static bool | decklink_cap_configure_audio (struct vidcap_decklink_state *s, unsigned int audio_src_flag, BMDAudioConnection *audioConnection) |
| static int | decklink_help (bool full, const char *query_prop_fcc=nullptr) |
| static bool | detect_format (struct vidcap_decklink_state *s, BMDDisplayMode *outDisplayMode, struct device_state *device) |
| static list< tuple< int, string, string, string > > | get_input_modes (IDeckLink *deckLink) |
| static int | nr_frames (struct vidcap_decklink_state *s) |
| static void | parse_devices (struct vidcap_decklink_state *s, const char *devs) |
| static bool | parse_option (struct vidcap_decklink_state *s, const char *opt) |
| static void | postprocess_frame (struct vidcap_decklink_state *s) |
| static void | print_input_modes (IDeckLink *deckLink) |
| static audio_frame * | process_new_audio_packets (struct vidcap_decklink_state *s) |
| REGISTER_MODULE (decklink, &vidcap_decklink_info, LIBRARY_CLASS_VIDEO_CAPTURE, VIDEO_CAPTURE_ABI_VERSION) | |
| static HRESULT | set_display_mode_properties (struct vidcap_decklink_state *s, struct tile *tile, IDeckLinkDisplayMode *displayMode, BMDPixelFormat *pf) |
| static bool | settings_init (struct vidcap_decklink_state *s, char *fmt) |
| static bool | settings_init_key_val (struct vidcap_decklink_state *s, char **save_ptr) |
| static void | vidcap_decklink_done (void *state) |
| static struct video_frame * | vidcap_decklink_grab (void *state, struct audio_frame **audio) |
| static int | vidcap_decklink_init (struct vidcap_params *params, void **state) |
| static void | vidcap_decklink_print_card_info (IDeckLink *deckLink, const char *query_prop_fcc) |
| static void | vidcap_decklink_probe (device_info **available_cards, int *card_count, void(**deleter)(void *)) |
Variables | |
| constexpr const int | DEFAULT_AUDIO_BPS = 4 |
| constexpr const size_t | MAX_AUDIO_PACKETS = 10 |
| static const struct video_capture_info | vidcap_decklink_info |
| #define CALL_AND_CHECK | ( | cmd, | |
| ... ) |
Definition at line 165 of file decklink.cpp.
Referenced by display_decklink_done(), device_state::init(), and VideoDelegate::VideoInputFormatChanged().
| #define CALL_AND_CHECK_2 | ( | cmd, | |
| name ) |
Definition at line 143 of file decklink.cpp.
Definition at line 151 of file decklink.cpp.
| #define CALL_AND_CHECK_CHOOSER | ( | ... | ) |
Definition at line 162 of file decklink.cpp.
| #define EXIT_IF_FAILED | ( | cmd, | |
| name ) |
Definition at line 133 of file decklink.cpp.
| #define GET_3TH_ARG | ( | arg1, | |
| arg2, | |||
| arg3, | |||
| ... ) |
Definition at line 161 of file decklink.cpp.
| #define INIT_ERR | ( | ) |
Definition at line 1134 of file decklink.cpp.
Referenced by device_state::init().
| #define MOD_NAME "[DeckLink capture] " |
Definition at line 91 of file decklink.cpp.
Referenced by vidcap_decklink_state::vidcap_decklink_state(), decklink_cap_configure_audio(), get_input_modes(), device_state::init(), parse_option(), vidcap_decklink_state::set_codec(), set_display_mode_properties(), settings_init(), vidcap_decklink_done(), vidcap_decklink_init(), vidcap_decklink_print_card_info(), vidcap_decklink_probe(), VideoDelegate::VideoInputFormatChanged(), and VideoDelegate::VideoInputFrameArrived().
| #define RELEASE_IF_NOT_NULL | ( | x | ) |
Definition at line 97 of file decklink.cpp.
Referenced by VideoDelegate::~VideoDelegate(), cleanup_common(), get_input_modes(), vidcap_decklink_print_card_info(), vidcap_decklink_probe(), and VideoDelegate::VideoInputFrameArrived().
| #define STDMETHODCALLTYPE |
Definition at line 94 of file decklink.cpp.
|
static |
Definition at line 1498 of file decklink.cpp.
References vidcap_decklink_state::audioPackets, vidcap_decklink_state::devices_cnt, vidcap_decklink_state::frame, RELEASE_IF_NOT_NULL, vidcap_decklink_state::state, and vf_free().
Referenced by vidcap_decklink_done(), and vidcap_decklink_init().

|
static |
Definition at line 1086 of file decklink.cpp.
References audio_capture_bps, audio_capture_channels, audio_capture_sample_rate, DEFAULT_AUDIO_BPS, DEFAULT_AUDIO_CAPTURE_CHANNELS, LOG, LOG_LEVEL_ERROR, LOG_LEVEL_FATAL, MOD_NAME, vidcap_decklink_state::state, TIMESTAMP_VALID, VIDCAP_FLAG_AUDIO_AESEBU, VIDCAP_FLAG_AUDIO_ANALOG, and VIDCAP_FLAG_AUDIO_EMBEDDED.
Referenced by vidcap_decklink_init().
|
static |
Definition at line 523 of file decklink.cpp.
References bmd_get_device_name(), bmd_get_sorted_devices(), BMD_NAT_SORT, color_printf(), device_state::deckLink, decklink_uninitialize(), get_codec_name(), get_commandline_param(), LOG_LEVEL_ERROR, log_msg(), print_bmd_device_profiles(), print_decklink_version(), SBOLD, SRED, STR_LEN, TBOLD, TGREEN, uv_argv, uv_to_bmd_codec_map, and vidcap_decklink_print_card_info().
Referenced by vidcap_decklink_init().

|
static |
This function is used when device does not support autodetection and user request explicitly to detect the format (:detect-format)
Definition at line 1039 of file decklink.cpp.
References vidcap_decklink_state::boss_cv, device_state::deckLinkInput, device_state::delegate, vidcap_decklink_state::lock, LOG_LEVEL_NOTICE, log_msg(), mode, RGBA, vidcap_decklink_state::set_codec(), and UYVY.
Referenced by device_state::init().

|
static |
Definition at line 1771 of file decklink.cpp.
References bmd_get_flags_str(), bmd_hresult_to_string(), BMD_STR, vidcap_decklink_state::frameRateScale, get_str_from_bmd_api_str(), LOG, LOG_LEVEL_ERROR, log_msg(), MOD_NAME, mode, name, release_bmd_api_str(), and RELEASE_IF_NOT_NULL.
Referenced by print_input_modes(), and vidcap_decklink_probe().

|
static |
This function basically counts frames from all devices, optionally with respect to timecode (if synchronized).
Lock needs to be hold during the whole function call.
| s | Blackmagic state |
Definition at line 1566 of file decklink.cpp.
References vidcap_decklink_state::devices_cnt, vidcap_decklink_state::state, and vidcap_decklink_state::sync_timecode.
Referenced by vidcap_decklink_grab().
|
static |
Definition at line 706 of file decklink.cpp.
References vidcap_decklink_state::devices_cnt, and vidcap_decklink_state::state.
Referenced by parse_option(), and settings_init().
|
static |
Definition at line 725 of file decklink.cpp.
References bmd_parse_audio_levels(), bmd_read_fourcc(), vidcap_decklink_state::codec, vidcap_decklink_state::detect_format, vidcap_decklink_state::device_options, get_codec_from_name(), get_connection_string_map(), IS_KEY_PREFIX, vidcap_decklink_state::keep_device_defaults, LOG_LEVEL_ERROR, log_msg(), MOD_NAME, vidcap_decklink_state::mode, vidcap_decklink_state::nosig_send, vidcap_decklink_state::p_not_i, bmd_option::parse(), parse_devices(), vidcap_decklink_state::profile, vidcap_decklink_state::set_codec(), bmd_option::set_int(), vidcap_decklink_state::stereo, vidcap_decklink_state::sync_timecode, val, and VIDEO_CODEC_NONE.
Referenced by settings_init(), and settings_init_key_val().

|
static |
Definition at line 1644 of file decklink.cpp.
References vidcap_decklink_state::codec, tile::data, tile::data_len, vidcap_decklink_state::frame, get_commandline_param(), R10k, R10K_FULL_OPT, r10k_limited_to_full(), RGBA, video_frame::tile_count, video_frame::tiles, and vc_copylineToRGBA_inplace.
Referenced by vidcap_decklink_grab().

|
static |
Definition at line 1840 of file decklink.cpp.
References get_input_modes().
Referenced by vidcap_decklink_print_card_info().

|
static |
Definition at line 1606 of file decklink.cpp.
References vidcap_decklink_state::audioPackets, demux_channel(), min, and MSG.
Referenced by vidcap_decklink_grab().

| REGISTER_MODULE | ( | decklink | , |
| & | vidcap_decklink_info, | ||
| LIBRARY_CLASS_VIDEO_CAPTURE | , | ||
| VIDEO_CAPTURE_ABI_VERSION | ) |
|
static |
Definition at line 964 of file decklink.cpp.
References bmd_hresult_to_string(), BMD_STR, bug_msg(), vidcap_decklink_state::codec, video_frame::color_spec, tile::data_len, vidcap_decklink_state::devices_cnt, vidcap_decklink_state::enable_flags, FAILED, video_frame::fps, vidcap_decklink_state::frame, vidcap_decklink_state::frameRateScale, get_codec_name(), get_str_from_bmd_api_str(), tile::height, INTERLACED_MERGED, video_frame::interlacing, LOG, LOG_LEVEL_DEBUG, LOG_LEVEL_ERROR, LOG_LEVEL_NOTICE, LOG_LEVEL_WARNING, MOD_NAME, vidcap_decklink_state::next_frame_time, vidcap_decklink_state::p_not_i, PROGRESSIVE, release_bmd_api_str(), vidcap_decklink_state::stereo, video_frame::tile_count, video_frame::tiles, uv_to_bmd_codec_map, vc_get_linesize(), and tile::width.
Referenced by device_state::init(), and VideoDelegate::VideoInputFormatChanged().

|
static |
Definition at line 810 of file decklink.cpp.
References vidcap_decklink_state::codec, fmt, get_codec_from_name(), LOG, LOG_LEVEL_ERROR, LOG_LEVEL_WARNING, log_msg(), MOD_NAME, vidcap_decklink_state::mode, MSG, parse_devices(), parse_option(), vidcap_decklink_state::set_codec(), settings_init_key_val(), and VIDEO_CODEC_NONE.
Referenced by vidcap_decklink_init().

|
static |
Definition at line 796 of file decklink.cpp.
References parse_option().
Referenced by settings_init().

|
static |
Definition at line 1519 of file decklink.cpp.
References bmd_hresult_to_string(), cleanup_common(), debug_msg, vidcap_decklink_state::devices_cnt, LOG, LOG_LEVEL_ERROR, MOD_NAME, state, and vidcap_decklink_state::state.

|
static |
Definition at line 1661 of file decklink.cpp.
References audio, vidcap_decklink_state::boss_cv, count, tile::data, vidcap_decklink_state::devices_cnt, vidcap_decklink_state::frame, vidcap_decklink_state::frameRateScale, vidcap_decklink_state::frames, vidcap_decklink_state::lock, LOG_LEVEL_VERBOSE, log_msg(), vidcap_decklink_state::next_frame_time, nr_frames(), postprocess_frame(), process_new_audio_packets(), state, vidcap_decklink_state::state, vidcap_decklink_state::stereo, video_frame::tiles, video_frame::timecode, and video_frame::timestamp.

|
static |
Definition at line 1414 of file decklink.cpp.
References vidcap_decklink_state::vidcap_decklink_state(), blackmagic_api_version_check(), cleanup_common(), vidcap_decklink_state::codec, decklink_cap_configure_audio(), decklink_help(), vidcap_decklink_state::devices_cnt, vidcap_decklink_state::enable_flags, video_frame::flags, fmt, vidcap_decklink_state::frame, get_bits_per_component(), IS_KEY_PREFIX, LOG, LOG_LEVEL_ERROR, log_msg(), MAX, MOD_NAME, MSG, vidcap_decklink_state::requested_bit_depth, vidcap_decklink_state::set_codec(), settings_init(), state, vidcap_decklink_state::state, vidcap_decklink_state::stereo, vidcap_decklink_state::supported_flags, video_frame::tile_count, TIMESTAMP_VALID, UYVY, vf_alloc(), vf_get_tile(), VIDCAP_FLAG_AUDIO_ANY, VIDCAP_INIT_FAIL, VIDCAP_INIT_NOERR, VIDCAP_INIT_OK, vidcap_params_get_flags(), vidcap_params_get_fmt(), and VIDEO_CODEC_NONE.

|
static |
| query_prop_fcc | if not NULL, print corresponding BMDDeckLinkAttribute |
Definition at line 470 of file decklink.cpp.
References color_printf(), device_state::deckLink, decklink_supports_codec(), device_state::deckLinkAttributes, device_state::deckLinkInput, get_codec_name(), get_connection_string_map(), LOG, LOG_LEVEL_ERROR, MOD_NAME, print_bmd_attribute(), print_input_modes(), RELEASE_IF_NOT_NULL, SBOLD, TERM_BOLD, TERM_RESET, TRED, and uv_to_bmd_codec_map.
Referenced by decklink_help().

|
static |
Definition at line 859 of file decklink.cpp.
References bmd_get_device_name(), bmd_get_sorted_devices(), device_state::deckLink, decklink_uninitialize(), device_state::deckLinkAttributes, deleter, device_info::dev, dev_add_option(), device_info::extra, get_connection_string_map(), get_input_modes(), LOG_LEVEL_WARNING, log_msg(), MOD_NAME, device_info::modes, name, and RELEASE_IF_NOT_NULL.

|
constexpr |
Definition at line 89 of file decklink.cpp.
Referenced by decklink_cap_configure_audio().
|
constexpr |
Definition at line 90 of file decklink.cpp.
Referenced by VideoDelegate::VideoInputFrameArrived().
|
static |
Definition at line 1861 of file decklink.cpp.