FFmpeg
Data Structures | Macros | Functions | Variables
decklink_dec.cpp File Reference
#include <atomic>
#include <vector>
#include "libavformat/internal.h"
#include <DeckLinkAPI.h>
#include "config.h"
#include "libavcodec/packet_internal.h"
#include "libavformat/avformat.h"
#include "libavutil/avassert.h"
#include "libavutil/avutil.h"
#include "libavutil/common.h"
#include "libavutil/internal.h"
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/time.h"
#include "libavutil/timecode.h"
#include "libavutil/mathematics.h"
#include "libavutil/reverse.h"
#include "avdevice.h"
#include "decklink_common.h"
#include "decklink_dec.h"

Go to the source code of this file.

Data Structures

struct  VANCLineNumber
 
class  decklink_allocator
 
class  decklink_input_callback
 

Macros

#define MAX_WIDTH_VANC   1920
 

Functions

static void decklink_object_free (void *opaque, uint8_t *data)
 
static int get_vanc_line_idx (BMDDisplayMode mode)
 
static void clear_parity_bits (uint16_t *buf, int len)
 
static int check_vanc_parity_checksum (uint16_t *buf, int len, uint16_t checksum)
 
static void extract_luma_from_v210 (uint16_t *dst, const uint8_t *src, int width)
 
static void unpack_v210 (uint16_t *dst, const uint8_t *src, int width)
 
static uint8_t calc_parity_and_line_offset (int line)
 
static void fill_data_unit_head (int line, uint8_t *tgt)
 
static uint8_t * teletext_data_unit_from_op47_vbi_packet (int line, uint16_t *py, uint8_t *tgt)
 
static int linemask_matches (int line, int64_t mask)
 
static uint8_t * teletext_data_unit_from_op47_data (uint16_t *py, uint16_t *pend, uint8_t *tgt, int64_t wanted_lines)
 
static uint8_t * teletext_data_unit_from_ancillary_packet (uint16_t *py, uint16_t *pend, uint8_t *tgt, int64_t wanted_lines, int allow_multipacket)
 
static uint8_t * vanc_to_cc (AVFormatContext *avctx, uint16_t *buf, size_t words, unsigned &cc_count)
 
static uint8_t * get_metadata (AVFormatContext *avctx, uint16_t *buf, size_t width, uint8_t *tgt, size_t tgt_size, AVPacket *pkt)
 
static void avpacket_queue_init (AVFormatContext *avctx, AVPacketQueue *q)
 
static void avpacket_queue_flush (AVPacketQueue *q)
 
static void avpacket_queue_end (AVPacketQueue *q)
 
static unsigned long long avpacket_queue_size (AVPacketQueue *q)
 
static int avpacket_queue_put (AVPacketQueue *q, AVPacket *pkt)
 
static int avpacket_queue_get (AVPacketQueue *q, AVPacket *pkt, int block)
 
static void handle_klv (AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideoInputFrame *videoFrame, int64_t pts)
 
static int64_t get_pkt_pts (IDeckLinkVideoInputFrame *videoFrame, IDeckLinkAudioInputPacket *audioFrame, int64_t wallclock, int64_t abs_wallclock, DecklinkPtsSource pts_src, AVRational time_base, int64_t *initial_pts, int copyts)
 
static int get_bmd_timecode (AVFormatContext *avctx, AVTimecode *tc, AVRational frame_rate, BMDTimecodeFormat tc_format, IDeckLinkVideoInputFrame *videoFrame)
 
static int get_frame_timecode (AVFormatContext *avctx, decklink_ctx *ctx, AVTimecode *tc, IDeckLinkVideoInputFrame *videoFrame)
 
static int decklink_autodetect (struct decklink_cctx *cctx)
 
av_cold int ff_decklink_read_close (AVFormatContext *avctx)
 
av_cold int ff_decklink_read_header (AVFormatContext *avctx)
 
int ff_decklink_read_packet (AVFormatContext *avctx, AVPacket *pkt)
 
int ff_decklink_list_input_devices (AVFormatContext *avctx, struct AVDeviceInfoList *device_list)
 

Variables

const BMDDisplayMode AUTODETECT_DEFAULT_MODE = bmdModeNTSC
 
static VANCLineNumber vanc_line_numbers []
 

Macro Definition Documentation

◆ MAX_WIDTH_VANC

#define MAX_WIDTH_VANC   1920

Definition at line 59 of file decklink_dec.cpp.

Function Documentation

◆ decklink_object_free()

static void decklink_object_free ( void *  opaque,
uint8_t *  data 
)
static

Definition at line 147 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ get_vanc_line_idx()

static int get_vanc_line_idx ( BMDDisplayMode  mode)
static

Definition at line 154 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ clear_parity_bits()

static void clear_parity_bits ( uint16_t *  buf,
int  len 
)
inlinestatic

Definition at line 165 of file decklink_dec.cpp.

Referenced by get_metadata().

◆ check_vanc_parity_checksum()

static int check_vanc_parity_checksum ( uint16_t *  buf,
int  len,
uint16_t  checksum 
)
static

Definition at line 171 of file decklink_dec.cpp.

Referenced by get_metadata().

◆ extract_luma_from_v210()

static void extract_luma_from_v210 ( uint16_t *  dst,
const uint8_t *  src,
int  width 
)
static

Definition at line 194 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ unpack_v210()

static void unpack_v210 ( uint16_t *  dst,
const uint8_t *  src,
int  width 
)
static

Definition at line 205 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ calc_parity_and_line_offset()

static uint8_t calc_parity_and_line_offset ( int  line)
static

Definition at line 216 of file decklink_dec.cpp.

Referenced by fill_data_unit_head().

◆ fill_data_unit_head()

static void fill_data_unit_head ( int  line,
uint8_t *  tgt 
)
static

Definition at line 226 of file decklink_dec.cpp.

Referenced by teletext_data_unit_from_op47_vbi_packet().

◆ teletext_data_unit_from_op47_vbi_packet()

static uint8_t* teletext_data_unit_from_op47_vbi_packet ( int  line,
uint16_t *  py,
uint8_t *  tgt 
)
static

Definition at line 267 of file decklink_dec.cpp.

Referenced by teletext_data_unit_from_op47_data().

◆ linemask_matches()

static int linemask_matches ( int  line,
int64_t  mask 
)
static

Definition at line 285 of file decklink_dec.cpp.

Referenced by teletext_data_unit_from_op47_data().

◆ teletext_data_unit_from_op47_data()

static uint8_t* teletext_data_unit_from_op47_data ( uint16_t *  py,
uint16_t *  pend,
uint8_t *  tgt,
int64_t  wanted_lines 
)
static

Definition at line 295 of file decklink_dec.cpp.

Referenced by teletext_data_unit_from_ancillary_packet().

◆ teletext_data_unit_from_ancillary_packet()

static uint8_t* teletext_data_unit_from_ancillary_packet ( uint16_t *  py,
uint16_t *  pend,
uint8_t *  tgt,
int64_t  wanted_lines,
int  allow_multipacket 
)
static

Definition at line 312 of file decklink_dec.cpp.

Referenced by get_metadata().

◆ vanc_to_cc()

static uint8_t* vanc_to_cc ( AVFormatContext avctx,
uint16_t *  buf,
size_t  words,
unsigned &  cc_count 
)
static

Definition at line 331 of file decklink_dec.cpp.

Referenced by get_metadata().

◆ get_metadata()

static uint8_t* get_metadata ( AVFormatContext avctx,
uint16_t *  buf,
size_t  width,
uint8_t *  tgt,
size_t  tgt_size,
AVPacket pkt 
)
static

Definition at line 421 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ avpacket_queue_init()

static void avpacket_queue_init ( AVFormatContext avctx,
AVPacketQueue q 
)
static

Definition at line 474 of file decklink_dec.cpp.

Referenced by ff_decklink_read_header().

◆ avpacket_queue_flush()

static void avpacket_queue_flush ( AVPacketQueue q)
static

Definition at line 484 of file decklink_dec.cpp.

Referenced by avpacket_queue_end().

◆ avpacket_queue_end()

static void avpacket_queue_end ( AVPacketQueue q)
static

Definition at line 501 of file decklink_dec.cpp.

Referenced by ff_decklink_read_close().

◆ avpacket_queue_size()

static unsigned long long avpacket_queue_size ( AVPacketQueue q)
static

◆ avpacket_queue_put()

static int avpacket_queue_put ( AVPacketQueue q,
AVPacket pkt 
)
static

◆ avpacket_queue_get()

static int avpacket_queue_get ( AVPacketQueue q,
AVPacket pkt,
int  block 
)
static

Definition at line 559 of file decklink_dec.cpp.

Referenced by ff_decklink_read_packet().

◆ handle_klv()

static void handle_klv ( AVFormatContext avctx,
decklink_ctx ctx,
IDeckLinkVideoInputFrame *  videoFrame,
int64_t  pts 
)
static

Definition at line 589 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ get_pkt_pts()

static int64_t get_pkt_pts ( IDeckLinkVideoInputFrame *  videoFrame,
IDeckLinkAudioInputPacket *  audioFrame,
int64_t  wallclock,
int64_t  abs_wallclock,
DecklinkPtsSource  pts_src,
AVRational  time_base,
int64_t *  initial_pts,
int  copyts 
)
static

Definition at line 738 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ get_bmd_timecode()

static int get_bmd_timecode ( AVFormatContext avctx,
AVTimecode tc,
AVRational  frame_rate,
BMDTimecodeFormat  tc_format,
IDeckLinkVideoInputFrame *  videoFrame 
)
static

Definition at line 792 of file decklink_dec.cpp.

Referenced by get_frame_timecode().

◆ get_frame_timecode()

static int get_frame_timecode ( AVFormatContext avctx,
decklink_ctx ctx,
AVTimecode tc,
IDeckLinkVideoInputFrame *  videoFrame 
)
static

Definition at line 814 of file decklink_dec.cpp.

Referenced by decklink_input_callback::VideoInputFrameArrived().

◆ decklink_autodetect()

static int decklink_autodetect ( struct decklink_cctx cctx)
static

Definition at line 1094 of file decklink_dec.cpp.

Referenced by ff_decklink_read_header().

◆ ff_decklink_read_close()

av_cold int ff_decklink_read_close ( AVFormatContext avctx)

Definition at line 1144 of file decklink_dec.cpp.

◆ ff_decklink_read_header()

av_cold int ff_decklink_read_header ( AVFormatContext avctx)

Definition at line 1163 of file decklink_dec.cpp.

◆ ff_decklink_read_packet()

int ff_decklink_read_packet ( AVFormatContext avctx,
AVPacket pkt 
)

Definition at line 1429 of file decklink_dec.cpp.

◆ ff_decklink_list_input_devices()

int ff_decklink_list_input_devices ( AVFormatContext avctx,
struct AVDeviceInfoList device_list 
)

Definition at line 1448 of file decklink_dec.cpp.

Variable Documentation

◆ AUTODETECT_DEFAULT_MODE

const BMDDisplayMode AUTODETECT_DEFAULT_MODE = bmdModeNTSC

◆ vanc_line_numbers

VANCLineNumber vanc_line_numbers[]
static