123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*
- * Blackmagic DeckLink common code
- * Copyright (c) 2013-2014 Ramiro Polla, Luca Barbato, Deti Fliegl
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #ifndef AVDEVICE_DECKLINK_COMMON_H
- #define AVDEVICE_DECKLINK_COMMON_H
- #include <DeckLinkAPIVersion.h>
- #include "decklink_common_c.h"
- class decklink_output_callback;
- class decklink_input_callback;
- typedef struct AVPacketQueue {
- AVPacketList *first_pkt, *last_pkt;
- int nb_packets;
- unsigned long long size;
- int abort_request;
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- AVFormatContext *avctx;
- } AVPacketQueue;
- struct decklink_ctx {
- /* DeckLink SDK interfaces */
- IDeckLink *dl;
- IDeckLinkOutput *dlo;
- IDeckLinkInput *dli;
- IDeckLinkConfiguration *cfg;
- IDeckLinkAttributes *attr;
- decklink_output_callback *output_callback;
- decklink_input_callback *input_callback;
- /* DeckLink mode information */
- BMDTimeValue bmd_tb_den;
- BMDTimeValue bmd_tb_num;
- BMDDisplayMode bmd_mode;
- BMDVideoConnection video_input;
- BMDAudioConnection audio_input;
- int bmd_width;
- int bmd_height;
- int bmd_field_dominance;
- /* Capture buffer queue */
- AVPacketQueue queue;
- /* Streams present */
- int audio;
- int video;
- /* Status */
- int playback_started;
- int capture_started;
- int64_t last_pts;
- unsigned long frameCount;
- unsigned int dropped;
- AVStream *audio_st;
- AVStream *video_st;
- AVStream *teletext_st;
- /* Options */
- int list_devices;
- int list_formats;
- int64_t teletext_lines;
- double preroll;
- int duplex_mode;
- DecklinkPtsSource audio_pts_source;
- DecklinkPtsSource video_pts_source;
- int draw_bars;
- int frames_preroll;
- int frames_buffer;
- sem_t semaphore;
- int channels;
- };
- typedef enum { DIRECTION_IN, DIRECTION_OUT} decklink_direction_t;
- #ifdef _WIN32
- #if BLACKMAGIC_DECKLINK_API_VERSION < 0x0a040000
- typedef unsigned long buffercount_type;
- #else
- typedef unsigned int buffercount_type;
- #endif
- IDeckLinkIterator *CreateDeckLinkIteratorInstance(void);
- #else
- typedef uint32_t buffercount_type;
- #endif
- static const BMDAudioConnection decklink_audio_connection_map[] = {
- (BMDAudioConnection)0,
- bmdAudioConnectionEmbedded,
- bmdAudioConnectionAESEBU,
- bmdAudioConnectionAnalog,
- bmdAudioConnectionAnalogXLR,
- bmdAudioConnectionAnalogRCA,
- bmdAudioConnectionMicrophone,
- };
- static const BMDVideoConnection decklink_video_connection_map[] = {
- (BMDVideoConnection)0,
- bmdVideoConnectionSDI,
- bmdVideoConnectionHDMI,
- bmdVideoConnectionOpticalSDI,
- bmdVideoConnectionComponent,
- bmdVideoConnectionComposite,
- bmdVideoConnectionSVideo,
- };
- HRESULT ff_decklink_get_display_name(IDeckLink *This, const char **displayName);
- int ff_decklink_set_format(AVFormatContext *avctx, int width, int height, int tb_num, int tb_den, decklink_direction_t direction = DIRECTION_OUT, int num = 0);
- int ff_decklink_set_format(AVFormatContext *avctx, decklink_direction_t direction, int num);
- int ff_decklink_list_devices(AVFormatContext *avctx);
- int ff_decklink_list_formats(AVFormatContext *avctx, decklink_direction_t direction = DIRECTION_OUT);
- void ff_decklink_cleanup(AVFormatContext *avctx);
- int ff_decklink_init_device(AVFormatContext *avctx, const char* name);
- #endif /* AVDEVICE_DECKLINK_COMMON_H */
|