UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
aja.cpp File Reference
#include "config_msvc.h"
#include "debug.h"
#include <ntv2devicescanner.h>
#include <ajantv2/includes/ntv2utils.h>
#include <ajabase/system/debug.h>
#include <ajatypes.h>
#include <ntv2debug.h>
#include <algorithm>
#include <cassert>
#include <chrono>
#include <cmath>
#include <condition_variable>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <memory>
#include <mutex>
#include <queue>
#include <sstream>
#include <stdexcept>
#include <string>
#include <thread>
#include <unordered_map>
#include <utility>
#include <vector>
#include "audio/types.h"
#include "host.h"
#include "lib_common.h"
#include "utils/color_out.h"
#include "video_display.h"
#include "video.h"
#include "aja_common.hpp"
Include dependency graph for aja.cpp:

Go to the source code of this file.

Classes

struct  ultragrid::aja::display
 
struct  ultragrid::aja::display::configuration
 
struct  ultragrid::aja::display::desc
 

Namespaces

namespace  ultragrid
 
namespace  ultragrid::aja
 

Macros

#define BPS   4
 
#define CHECK(cmd)
 
#define CHECK_EX(cmd, msg, action_failed)
 
#define DEFAULT_MAX_FRAME_QUEUE_LEN   1
 
#define LINK_SPEC   static
 
#define MOD_NAME   "[AJA display] "
 
#define NOOP   ((void)0)
 
#define SAMPLE_RATE   48000
 

Functions

LINK_SPEC void display_aja_done (void *state)
 
static NTV2VideoFormat display_aja_get_first_matching_video_format (const NTV2FrameRate inFrameRate, const UWord inHeightLines, const UWord inWidthPixels, const bool inIsInterlaced, const bool inIsLevelB, bool skipQuadFormats)
 
LINK_SPEC bool display_aja_get_property (void *state, int property, void *val, size_t *len)
 
LINK_SPEC struct video_frame * display_aja_getf (void *state)
 
LINK_SPEC void * display_aja_init (struct module *, const char *fmt, unsigned int flags)
 
static bool display_aja_is_quad_format (NTV2VideoFormat fmt)
 
LINK_SPEC void display_aja_probe (struct device_info **available_cards, int *count, void(**deleter)(void *))
 
LINK_SPEC void display_aja_put_audio_frame (void *state, const struct audio_frame *frame)
 
LINK_SPEC bool display_aja_putf (void *state, struct video_frame *frame, long long nonblock)
 
LINK_SPEC bool display_aja_reconfigure (void *state, struct video_desc desc)
 
LINK_SPEC bool display_aja_reconfigure_audio (void *state, int quant_samples, int channels, int sample_rate)
 
 REGISTER_MODULE (aja, &display_aja_info, LIBRARY_CLASS_VIDEO_DISPLAY, VIDEO_DISPLAY_ABI_VERSION)
 

Variables

const unordered_map< NTV2Channel, NTV2OutputCrosspointID, hash< int > > ultragrid::aja::chanToLutSrc
 
static const struct video_display_info display_aja_info
 

Detailed Description

Author
Martin Pulec pulec.nosp@m.@ces.nosp@m.net.c.nosp@m.z

Definition in file aja.cpp.

Macro Definition Documentation

◆ BPS

#define BPS   4

The maximum number of bytes of 48KHz audio that can be transferred for two frames. Worst case, assuming 16 channels of audio (max), 4 bytes per sample, and 67 msec per frame (assuming the lowest possible frame rate of 14.98 fps)... 48,000 samples per second requires 6,408 samples x 4 bytes/sample x 16 = 410,112 bytes 402K will suffice, with 1536 bytes to spare

Definition at line 102 of file aja.cpp.

Referenced by display_aja_get_property(), and display_aja_reconfigure_audio().

◆ CHECK

#define CHECK ( cmd)
Value:
CHECK_EX(cmd, #cmd " failed", NOOP)
#define NOOP
Definition aja.cpp:136
#define CHECK_EX(cmd, msg, action_failed)
Definition aja.cpp:131

Definition at line 137 of file aja.cpp.

◆ CHECK_EX

#define CHECK_EX ( cmd,
msg,
action_failed )
Value:
do { bool ret = cmd; if (!ret) {\
LOG(LOG_LEVEL_WARNING) << MOD_NAME << (msg) << "\n";\
action_failed;\
}\
} while(0)
#define LOG_LEVEL_WARNING
less severe errors
Definition debug.h:60
struct msghdr msg
#define MOD_NAME
Definition aja.cpp:94

Definition at line 131 of file aja.cpp.

131#define CHECK_EX(cmd, msg, action_failed) do { bool ret = cmd; if (!ret) {\
132 LOG(LOG_LEVEL_WARNING) << MOD_NAME << (msg) << "\n";\
133 action_failed;\
134}\
135} while(0)

Referenced by ultragrid::aja::display::~display(), ultragrid::aja::display::RouteOutputSignal(), ultragrid::aja::display::SetUpAudio(), and ultragrid::aja::display::SetUpVideo().

◆ DEFAULT_MAX_FRAME_QUEUE_LEN

#define DEFAULT_MAX_FRAME_QUEUE_LEN   1

Definition at line 93 of file aja.cpp.

Referenced by ultragrid::aja::display::show_help().

◆ LINK_SPEC

#define LINK_SPEC   static

Definition at line 108 of file aja.cpp.

◆ MOD_NAME

#define MOD_NAME   "[AJA display] "

Definition at line 94 of file aja.cpp.

Referenced by display_aja_init(), display_aja_put_audio_frame(), and display_aja_reconfigure().

◆ NOOP

#define NOOP   ((void)0)

Definition at line 136 of file aja.cpp.

◆ SAMPLE_RATE

#define SAMPLE_RATE   48000

Definition at line 103 of file aja.cpp.

Referenced by display_aja_get_property(), and display_aja_reconfigure_audio().

Function Documentation

◆ display_aja_done()

LINK_SPEC void display_aja_done ( void * state)

Definition at line 1008 of file aja.cpp.

1009{
1010 auto *s = static_cast<struct ugaja::display *>(state);
1011
1012 if (s->desc.color_spec != VIDEO_CODEC_NONE) {
1013 s->join();
1014 s->desc = {};
1015 }
1016
1017 delete s;
1018}
void ** state
@ VIDEO_CODEC_NONE
dummy color spec
Definition types.h:66

References state, and VIDEO_CODEC_NONE.

◆ display_aja_get_first_matching_video_format()

static NTV2VideoFormat display_aja_get_first_matching_video_format ( const NTV2FrameRate inFrameRate,
const UWord inHeightLines,
const UWord inWidthPixels,
const bool inIsInterlaced,
const bool inIsLevelB,
bool skipQuadFormats )
static

Definition at line 868 of file aja.cpp.

869{
870 for (NTV2VideoFormat fmt(NTV2_FORMAT_FIRST_HIGH_DEF_FORMAT); fmt < NTV2_MAX_NUM_VIDEO_FORMATS; fmt = NTV2VideoFormat(fmt + 1)) {
871 if (display_aja_is_quad_format(fmt) && skipQuadFormats) {
872 continue; // skip NTV2_FORMAT_4x formats
873 }
874 if (inFrameRate == ::GetNTV2FrameRateFromVideoFormat(fmt))
875 if (inHeightLines == ::GetDisplayHeight(fmt))
876 if (inWidthPixels == ::GetDisplayWidth(fmt))
877 if (inIsInterlaced == !::IsProgressiveTransport(fmt) && !IsPSF(fmt))
878 if (NTV2_VIDEO_FORMAT_IS_B(fmt) == inIsLevelB)
879 return fmt;
880 }
881 return NTV2_FORMAT_UNKNOWN;
882}
const char * fmt
static bool display_aja_is_quad_format(NTV2VideoFormat fmt)
Definition aja.cpp:855

References display_aja_is_quad_format(), and fmt.

Referenced by display_aja_reconfigure().

Here is the call graph for this function:

◆ display_aja_get_property()

LINK_SPEC bool display_aja_get_property ( void * state,
int property,
void * val,
size_t * len )

Definition at line 1041 of file aja.cpp.

1042{
1043 auto *s = static_cast<struct ugaja::display *>(state);
1044
1045 vector<codec_t> codecs(ugaja::codec_map.size());
1046 int count = 0;
1047
1048 for (auto & c : ugaja::codec_map) {
1049 if (::NTV2DeviceCanDoFrameBufferFormat(s->mDeviceID, c.first)) {
1050 codecs[count++] = c.second;
1051 }
1052 }
1053
1054 switch (property) {
1056 if (count * sizeof(codec_t) <= *len) {
1057 *len = count * sizeof(codec_t);
1058 memcpy(val, codecs.data(), *len);
1059 } else {
1060 return false;
1061 }
1062 break;
1064 {
1065 assert(*len >= sizeof(struct audio_desc));
1066 auto desc = static_cast<struct audio_desc *>(val);
1067 desc->sample_rate = SAMPLE_RATE;
1068 desc->ch_count = ::NTV2DeviceGetMaxAudioChannels (s->mDeviceID);
1069 desc->codec = AC_PCM;
1070 desc->bps = BPS;
1071 *len = sizeof *desc;
1072 }
1073 break;
1075 if (*len >= sizeof(int)) {
1077 *len = sizeof(int);
1078 } else {
1079 return false;
1080 }
1081 break;
1082 default:
1083 return false;
1084 }
1085 return true;
1086}
int void * val
struct video_desc desc
int void size_t * len
int property
@ AC_PCM
Definition types.h:53
@ DISPLAY_PROPERTY_VIDEO_MODE
requested video mode - int (one of display_prop_vid_mode)
@ DISPLAY_PROPERTY_CODECS
list of natively supported codecs - codec_t[]
@ DISPLAY_PROPERTY_AUDIO_FORMAT
@ DISPLAY_PROPERTY_VIDEO_SEPARATE_TILES
framebuffer consists of separate tiles
int count
Definition hd-rum.c:44
static const std::map< NTV2FrameBufferFormat, codec_t > codec_map
codec_t
Definition types.h:65
static struct @76 codecs[]
#define SAMPLE_RATE
Definition aja.cpp:103
#define BPS
Definition aja.cpp:102

References AC_PCM, BPS, ultragrid::aja::codec_map, codecs, count, desc, DISPLAY_PROPERTY_AUDIO_FORMAT, DISPLAY_PROPERTY_CODECS, DISPLAY_PROPERTY_VIDEO_MODE, DISPLAY_PROPERTY_VIDEO_SEPARATE_TILES, len, property, SAMPLE_RATE, state, and val.

◆ display_aja_getf()

LINK_SPEC struct video_frame * display_aja_getf ( void * state)

Definition at line 1020 of file aja.cpp.

1021{
1022 auto *s = static_cast<struct ugaja::display *>(state);
1023
1024 return vf_alloc_desc_data(s->desc);
1025}
struct video_frame * vf_alloc_desc_data(struct video_desc desc)

References state, and vf_alloc_desc_data().

Here is the call graph for this function:

◆ display_aja_init()

LINK_SPEC void * display_aja_init ( struct module * ,
const char * fmt,
unsigned int flags )

Definition at line 938 of file aja.cpp.

939{
940 struct ugaja::display::configuration conf;
941 auto tmp = static_cast<char *>(alloca(strlen(fmt) + 1));
942 strcpy(tmp, fmt);
943
944 char *item;
945 while ((item = strtok(tmp, ":")) != nullptr) {
946 if (strcmp("help", item) == 0) {
947 ugaja::display::show_help();
948 return INIT_NOERR;
949 } else if (strstr(item, "buffers=") == item) {
950 conf.bufLen = atoi(item + strlen("buffers="));
951 if (conf.bufLen <= 0) {
952 LOG(LOG_LEVEL_ERROR) << MOD_NAME "Buffers must be positive!\n";
953 return nullptr;
954 }
955 } else if (strcmp("clear-routing", item) == 0) {
956 conf.clearRouting = true;
957 } else if (strstr(item, "connection=") != nullptr) {
958 string connection = item + strlen("connection=");
959 NTV2OutputDestination dest = NTV2OutputDestination();
960 while (dest != NTV2_OUTPUTDESTINATION_INVALID) {
961 if (NTV2OutputDestinationToString(dest, true) == connection) {
962 conf.outputDestination = dest;
963 break;
964 }
965 // should be this, but GetNTV2InputSourceForIndex knows only SDIs
966 //source = ::GetNTV2InputSourceForIndex(::GetIndexForNTV2InputSource(source) + 1);
967 dest = (NTV2OutputDestination) ((int) dest + 1);
968 }
969 if (dest == NTV2_OUTPUTDESTINATION_INVALID) {
970 LOG(LOG_LEVEL_ERROR) << MOD_NAME "Unknown destination: " << connection << "!\n";
971 return nullptr;
972 }
973 } else if (strstr(item, "channel=") != nullptr) {
974 conf.outputChannel = (NTV2Channel) (atoi(item + strlen("channel=")) - 1);
975 } else if (strstr(item, "device=") != nullptr) {
976 conf.deviceId = item + strlen("device=");
977 } else if (strstr(item, "multi-channel") != nullptr) {
978 conf.doMultiChannel = strstr(item, "no-") == nullptr;
979 } else if (strstr(item, "no-setup") == item) {
980 conf.setupRoute = false;
981 if (strcmp(item, "no-setup") == 0) {
982 conf.setupAll = false;
983 }
984 } else if (strstr(item, "novsync") == item) {
985 conf.novsync = true;
986 } else if (strcasecmp(item, "RGB") == 0 || strcasecmp(item, "YUV") == 0) {
987 conf.forceOutputColorSpace = strcasecmp(item, "RGB") == 0 ? RGB : UYVY;
988 } else if (strcasecmp(item, "smpte-range") == 0 || strcasecmp(item, "full-range") == 0) {
989 conf.smpteRange = strcasecmp(item, "smpte-range") == 0;
990 } else {
991 LOG(LOG_LEVEL_ERROR) << MOD_NAME "Unknown option: " << item << "\n";
992 return nullptr;
993 }
994 tmp = nullptr;
995 }
996
997 try {
998 conf.withAudio = (flags & DISPLAY_FLAG_AUDIO_ANY) != 0u;
999 auto *s = new ugaja::display(conf);
1000 return s;
1001 } catch (runtime_error &e) {
1002 LOG(LOG_LEVEL_ERROR) << MOD_NAME << e.what() << "\n";
1003 }
1004
1005 return nullptr;
1006}
const char unsigned int flags
#define LOG_LEVEL_ERROR
general errors
Definition debug.h:59
#define LOG(level)
Definition debug.h:313
#define DISPLAY_FLAG_AUDIO_ANY
#define INIT_NOERR
Definition host.h:73
Definition hd-rum.c:27
@ RGB
RGB 8-bit (packed into 24-bit word)
Definition types.h:80
@ UYVY
YCbCr 422 8-bit - Cb Y0 Cr Y1.
Definition types.h:71

References DISPLAY_FLAG_AUDIO_ANY, flags, fmt, INIT_NOERR, LOG, LOG_LEVEL_ERROR, MOD_NAME, RGB, and UYVY.

◆ display_aja_is_quad_format()

static bool display_aja_is_quad_format ( NTV2VideoFormat fmt)
static

format is a quad-link format

Definition at line 855 of file aja.cpp.

855 {
856 if ((fmt >= NTV2_FORMAT_FIRST_4K_DEF_FORMAT && fmt < NTV2_FORMAT_END_4K_DEF_FORMATS)
857 || (fmt >= NTV2_FORMAT_FIRST_4K_DEF_FORMAT2 && fmt < NTV2_FORMAT_END_4K_DEF_FORMATS2)
858 || (fmt >= NTV2_FORMAT_FIRST_UHD2_DEF_FORMAT && fmt < NTV2_FORMAT_END_UHD2_DEF_FORMATS)
859 || (fmt >= NTV2_FORMAT_FIRST_UHD2_FULL_DEF_FORMAT && fmt < NTV2_FORMAT_END_UHD2_FULL_DEF_FORMATS)) {
860 return true;
861 }
862 return false;
863}

References fmt.

Referenced by display_aja_get_first_matching_video_format().

◆ display_aja_probe()

LINK_SPEC void display_aja_probe ( struct device_info ** available_cards,
int * count,
void(** deleter )(void *) )

Definition at line 831 of file aja.cpp.

832{
833 *deleter = free;
834 CNTV2DeviceScanner deviceScanner;
835 *count = deviceScanner.GetNumDevices();
836 *available_cards = static_cast<struct device_info *>(calloc(deviceScanner.GetNumDevices(), sizeof(struct device_info)));
837 for (unsigned int i = 0; i < deviceScanner.GetNumDevices (); i++) {
838 snprintf((*available_cards)[i].dev, sizeof (*available_cards)[i].dev, ":device=%d", i);
839 snprintf((*available_cards)[i].extra, sizeof (*available_cards)[i].extra, "\"embeddedAudioAvailable\":\"t\"");
840 CNTV2Card device;
841 if (!CNTV2DeviceScanner::GetDeviceAtIndex(i, device)) {
842 MSG(WARNING, "Cannot get device at index #%u!\n", i);
843 continue;
844 }
845 strncpy((*available_cards)[i].name,
846 device.GetDisplayName().c_str(),
847 sizeof(*available_cards)[0].name - 1);
848 (*available_cards)[i].repeatable = false;
849 }
850}
int void(** deleter)(void *))
#define MSG(l, fmt,...)
Definition debug.h:96
const char * name
Definition settings.cpp:193

References count, deleter, MSG, and name.

◆ display_aja_put_audio_frame()

LINK_SPEC void display_aja_put_audio_frame ( void * state,
const struct audio_frame * frame )

Definition at line 1088 of file aja.cpp.

1089{
1090 auto *s = static_cast<struct ugaja::display *>(state);
1091
1092 lock_guard<mutex> lk(s->mAudioLock);
1093 int len = NTV2_AUDIOSIZE_MAX - s->mAudioLen;
1094 if (frame->data_len > len) {
1095 LOG(LOG_LEVEL_WARNING) << MOD_NAME << "Audio buffer overrun!\n";
1096 } else {
1097 len = frame->data_len;
1098 }
1099 memcpy(s->mAudioBuffer.get() + s->mAudioLen, frame->data, len);
1100 s->mAudioLen += len;
1101}
#define NTV2_AUDIOSIZE_MAX
struct video_frame * frame

References frame, len, LOG, LOG_LEVEL_WARNING, MOD_NAME, NTV2_AUDIOSIZE_MAX, and state.

◆ display_aja_putf()

LINK_SPEC bool display_aja_putf ( void * state,
struct video_frame * frame,
long long nonblock )

Definition at line 1027 of file aja.cpp.

1028{
1029 auto *s = static_cast<struct ugaja::display *>(state);
1030
1031 if (frame && frame->color_spec == R12L) {
1032 char *tmp = (char *) malloc(frame->tiles[0].data_len);
1033 vc_copylineR12LtoR12A((unsigned char *) tmp, (unsigned char *) frame->tiles[0].data, frame->tiles[0].data_len, 0, 0, 0);
1034 free(frame->tiles[0].data);
1035 frame->tiles[0].data = tmp;
1036 }
1037
1038 return s->Putf(frame, nonblock);
1039}
void vc_copylineR12LtoR12A(unsigned char *__restrict dst, const unsigned char *__restrict src, int dstlen, int rshift, int gshift, int bshift)
struct video_frame long long nonblock
char * data
Raw tile data. Pointer must be at least 4B aligned.
Definition types.h:287
unsigned int data_len
length of the data
Definition types.h:288
bool Putf(struct video_frame *frame, long long flags)
Definition aja.cpp:692
struct tile tiles[FLEXIBLE_ARRAY_MEMBER]
Definition types.h:345
codec_t color_spec
Definition types.h:306
@ R12L
RGB 12-bit packed, little-endian.
Definition types.h:74

References video_frame::color_spec, tile::data, tile::data_len, frame, nonblock, ultragrid::aja::display::Putf(), R12L, state, video_frame::tiles, and vc_copylineR12LtoR12A().

Here is the call graph for this function:

◆ display_aja_reconfigure()

LINK_SPEC bool display_aja_reconfigure ( void * state,
struct video_desc desc )

Definition at line 885 of file aja.cpp.

886{
887 auto *s = static_cast<struct ugaja::display *>(state);
888 if (s->desc.color_spec != VIDEO_CODEC_NONE) {
889 s->join();
890 s->desc = {};
891 }
892
893 if (desc.tile_count != 1 && desc.tile_count != 4) {
894 LOG(LOG_LEVEL_ERROR) << MOD_NAME "Unsupported tile count: " << desc.tile_count << "\n";
895 return false;
896 }
897
898 bool interlaced = desc.interlacing == INTERLACED_MERGED;
899 // first try to skip quad split formats (aka quad link)
900 s->mVideoFormat = display_aja_get_first_matching_video_format(ugaja::display::getFrameRate(desc.fps),
901 desc.height, desc.width, interlaced, false, false);
902 // if not found or supported, include quad formats
903 if (s->mVideoFormat == NTV2_FORMAT_UNKNOWN || !::NTV2DeviceCanDoVideoFormat (s->mDeviceID, s->mVideoFormat)) {
904 s->mVideoFormat = display_aja_get_first_matching_video_format(ugaja::display::getFrameRate(desc.fps),
905 desc.height, desc.width, interlaced, false, true);
906 }
907 if (s->mVideoFormat == NTV2_FORMAT_UNKNOWN) {
908 LOG(LOG_LEVEL_ERROR) << MOD_NAME "Unsupported resolution"
909#ifndef _MSC_VER
910 ": " << desc
911#endif
912 << "\n";
913 return false;
914 }
915 s->mPixelFormat = NTV2_FBF_INVALID;
916 for (auto & c : ugaja::codec_map) {
917 if (c.second == desc.color_spec) {
918 s->mPixelFormat = c.first;
919 }
920 }
921 assert(s->mPixelFormat != NTV2_FBF_INVALID);
922
923 // deinit?
924 s->desc = desc;
925 try {
926 s->Init();
927 } catch (runtime_error &e) {
928 LOG(LOG_LEVEL_ERROR) << MOD_NAME "Reconfiguration failed: " << e.what() << "\n";
929 s->desc = {};
930 return false;
931 }
932
933 s->worker = thread(&ugaja::display::process_frames, s);
934
935 return true;
936}
unsigned int tile_count
Definition types.h:185
codec_t color_spec
Definition types.h:182
enum interlacing_t interlacing
Definition types.h:184
double fps
Definition types.h:183
unsigned int width
width of every tile (!)
Definition types.h:179
unsigned int height
height of every tile (!)
Definition types.h:180
@ INTERLACED_MERGED
Columngs of both fields are interlaced together.
Definition types.h:167
static NTV2VideoFormat display_aja_get_first_matching_video_format(const NTV2FrameRate inFrameRate, const UWord inHeightLines, const UWord inWidthPixels, const bool inIsInterlaced, const bool inIsLevelB, bool skipQuadFormats)
Definition aja.cpp:868

References ultragrid::aja::codec_map, video_desc::color_spec, desc, display_aja_get_first_matching_video_format(), video_desc::fps, video_desc::height, INTERLACED_MERGED, video_desc::interlacing, LOG, LOG_LEVEL_ERROR, MOD_NAME, state, video_desc::tile_count, VIDEO_CODEC_NONE, and video_desc::width.

Here is the call graph for this function:

◆ display_aja_reconfigure_audio()

LINK_SPEC bool display_aja_reconfigure_audio ( void * state,
int quant_samples,
int channels,
int sample_rate )

Definition at line 1103 of file aja.cpp.

1105{
1106 auto *s = static_cast<struct ugaja::display *>(state);
1107 assert(quant_samples == BPS * 8 && sample_rate == SAMPLE_RATE && ::NTV2DeviceGetMaxAudioChannels (s->mDeviceID) == channels);
1108
1109 AJAStatus status = s->SetUpAudio();
1110 if (AJA_FAILURE(status)) {
1111 ostringstream oss;
1112 oss << "Unable to initialize audio: " << AJAStatusToString(status);
1113 return false;
1114 }
1115
1116 return true;
1117}
int int int sample_rate
int int channels
int quant_samples

References BPS, channels, quant_samples, SAMPLE_RATE, sample_rate, and state.

◆ REGISTER_MODULE()

REGISTER_MODULE ( aja ,
& display_aja_info,
LIBRARY_CLASS_VIDEO_DISPLAY ,
VIDEO_DISPLAY_ABI_VERSION  )

Variable Documentation

◆ display_aja_info

const struct video_display_info display_aja_info
static
Initial value:
= {
NULL,
}
#define DISPLAY_NO_GENERIC_FPS_INDICATOR
LINK_SPEC bool display_aja_reconfigure(void *state, struct video_desc desc)
Definition aja.cpp:885
LINK_SPEC bool display_aja_putf(void *state, struct video_frame *frame, long long nonblock)
Definition aja.cpp:1027
LINK_SPEC void display_aja_done(void *state)
Definition aja.cpp:1008
LINK_SPEC bool display_aja_reconfigure_audio(void *state, int quant_samples, int channels, int sample_rate)
Definition aja.cpp:1103
LINK_SPEC void display_aja_put_audio_frame(void *state, const struct audio_frame *frame)
Definition aja.cpp:1088
LINK_SPEC void * display_aja_init(struct module *, const char *fmt, unsigned int flags)
Definition aja.cpp:938
LINK_SPEC struct video_frame * display_aja_getf(void *state)
Definition aja.cpp:1020
LINK_SPEC bool display_aja_get_property(void *state, int property, void *val, size_t *len)
Definition aja.cpp:1041
LINK_SPEC void display_aja_probe(struct device_info **available_cards, int *count, void(**deleter)(void *))
Definition aja.cpp:831

Definition at line 1120 of file aja.cpp.