Lines Matching refs:ctx
476 struct decklink_cctx *ctx = (struct decklink_cctx *)avctx->priv_data;
481 q->max_q_size = ctx->queue_size;
589 static void handle_klv(AVFormatContext *avctx, decklink_ctx *ctx, IDeckLinkVideoInputFrame *videoFrame, int64_t pts)
681 klv_packet.stream_index = ctx->klv_st->index;
685 if (avpacket_queue_put(&ctx->queue, &klv_packet) < 0) {
686 ++ctx->dropped;
706 decklink_ctx *ctx;
716 ctx = (struct decklink_ctx *)cctx->ctx;
814 static int get_frame_timecode(AVFormatContext *avctx, decklink_ctx *ctx, AVTimecode *tc, IDeckLinkVideoInputFrame *videoFrame)
816 AVRational frame_rate = ctx->video_st->r_frame_rate;
822 if (ctx->tc_format == bmdTimecodeRP188Any && av_cmp_q(frame_rate, av_make_q(30, 1)) == 1) {
833 ret = get_bmd_timecode(avctx, tc, frame_rate, ctx->tc_format, videoFrame);
848 if (ctx->autodetect) {
850 ctx->bmd_mode == bmdModeUnknown)
852 ctx->bmd_mode = AUTODETECT_DEFAULT_MODE;
858 if (0 == ctx->frameCount && cctx->timestamp_align) {
860 AVRational frame_duration = av_inv_q(ctx->video_st->r_frame_rate);
862 ++ctx->dropped;
867 ctx->frameCount++;
868 if (ctx->audio_pts_source == PTS_SRC_WALLCLOCK || ctx->video_pts_source == PTS_SRC_WALLCLOCK)
870 if (ctx->audio_pts_source == PTS_SRC_ABS_WALLCLOCK || ctx->video_pts_source == PTS_SRC_ABS_WALLCLOCK)
876 if (ctx->frameCount % 25 == 0) {
877 unsigned long long qsize = avpacket_queue_size(&ctx->queue);
880 ctx->frameCount,
887 ctx->video_st->time_base.den);
890 if (ctx->draw_bars && videoFrame->GetPixelFormat() == bmdFormat8BitYUV) {
906 "- Frames dropped %u\n", ctx->frameCount, ++ctx->dropped);
912 "- Frames dropped %u\n", ctx->frameCount, ++ctx->dropped);
917 if (ctx->tc_format) {
919 if (get_frame_timecode(avctx, ctx, &tcr, videoFrame) >= 0) {
926 if (av_cmp_q(ctx->video_st->r_frame_rate, av_make_q(60, 1)) < 1) {
944 else if (!ctx->tc_seen)
945 ctx->tc_seen = ctx->frameCount;
955 if (ctx->tc_format && cctx->wait_for_tc && !ctx->tc_seen) {
959 "- Frames dropped %u\n", ctx->frameCount, ++ctx->dropped);
963 pkt.pts = get_pkt_pts(videoFrame, audioFrame, wallclock, abs_wallclock, ctx->video_pts_source, ctx->video_st->time_base, &initial_video_pts, cctx->copyts);
969 pkt.stream_index = ctx->video_st->index;
981 if (ctx->enable_klv) {
982 handle_klv(avctx, ctx, videoFrame, pkt.pts);
991 if (ctx->bmd_mode == bmdModePAL && ctx->teletext_lines &&
997 if ((ctx->teletext_lines & line_mask) && vanc->GetBufferForVerticalBlankingLine(i, (void**)&buf) == S_OK) {
1009 int idx = get_vanc_line_idx(ctx->bmd_mode);
1015 if (ctx->bmd_mode == bmdModeNTSC && videoFrame->GetWidth() * 2 <= MAX_WIDTH_VANC) {
1038 txt_pkt.stream_index = ctx->teletext_st->index;
1041 if (avpacket_queue_put(&ctx->queue, &txt_pkt) < 0) {
1042 ++ctx->dropped;
1052 if (avpacket_queue_put(&ctx->queue, &pkt) < 0) {
1053 ++ctx->dropped;
1063 pkt.size = audioFrame->GetSampleFrameCount() * ctx->audio_st->codecpar->ch_layout.nb_channels * (ctx->audio_depth / 8);
1065 audioFrame->GetPacketTime(&audio_pts, ctx->audio_st->time_base.den);
1066 pkt.pts = get_pkt_pts(videoFrame, audioFrame, wallclock, abs_wallclock, ctx->audio_pts_source, ctx->audio_st->time_base, &initial_audio_pts, cctx->copyts);
1071 pkt.stream_index = ctx->audio_st->index;
1074 if (avpacket_queue_put(&ctx->queue, &pkt) < 0) {
1075 ++ctx->dropped;
1087 ctx->bmd_mode = mode->GetDisplayMode();
1090 ctx->raw_format = (formatFlags & bmdDetectedVideoInputRGB444) ? bmdFormat8BitARGB : bmdFormat8BitYUV;
1095 struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
1099 if (ctx->attr->GetFlag(BMDDeckLinkSupportsInputFormatDetection, &autodetect_supported) != S_OK)
1104 ctx->autodetect = 1;
1105 ctx->bmd_mode = bmdModeUnknown;
1106 if (ctx->dli->EnableVideoInput(AUTODETECT_DEFAULT_MODE,
1112 if (ctx->dli->StartStreams() != S_OK) {
1122 if (ctx->bmd_mode != bmdModeUnknown &&
1123 ctx->bmd_mode != AUTODETECT_DEFAULT_MODE)
1127 ctx->dli->PauseStreams();
1128 ctx->dli->FlushStreams();
1129 ctx->autodetect = 0;
1130 if (ctx->bmd_mode != bmdModeUnknown) {
1134 AV_WB32(cctx->format_code, ctx->bmd_mode);
1147 struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
1149 if (ctx->dli) {
1150 ctx->dli->StopStreams();
1151 ctx->dli->DisableVideoInput();
1152 ctx->dli->DisableAudioInput();
1156 avpacket_queue_end(&ctx->queue);
1158 av_freep(&cctx->ctx);
1166 struct decklink_ctx *ctx;
1173 ctx = (struct decklink_ctx *) av_mallocz(sizeof(struct decklink_ctx));
1174 if (!ctx)
1176 ctx->list_devices = cctx->list_devices;
1177 ctx->list_formats = cctx->list_formats;
1178 ctx->enable_klv = cctx->enable_klv;
1179 ctx->teletext_lines = cctx->teletext_lines;
1180 ctx->preroll = cctx->preroll;
1181 ctx->duplex_mode = cctx->duplex_mode;
1183 ctx->tc_format = decklink_timecode_format_map[cctx->tc_format];
1185 ctx->video_input = decklink_video_connection_map[cctx->video_input];
1187 ctx->audio_input = decklink_audio_connection_map[cctx->audio_input];
1188 ctx->audio_pts_source = cctx->audio_pts_source;
1189 ctx->video_pts_source = cctx->video_pts_source;
1190 ctx->draw_bars = cctx->draw_bars;
1191 ctx->audio_depth = cctx->audio_depth;
1193 ctx->raw_format = decklink_raw_format_map[cctx->raw_format];
1194 cctx->ctx = ctx;
1218 if (ctx->list_devices) {
1228 if (ctx->dl->QueryInterface(IID_IDeckLinkInput, (void **) &ctx->dli) != S_OK) {
1242 if (ctx->list_formats) {
1249 ret = (ctx->dli->SetCallback(input_callback) == S_OK ? 0 : AVERROR_EXTERNAL);
1257 ret = (ctx->dli->SetVideoInputFrameMemoryAllocator(allocator) == S_OK ? 0 : AVERROR_EXTERNAL);
1272 if (ctx->raw_format == (BMDPixelFormat)0)
1273 ctx->raw_format = bmdFormat8BitYUV;
1282 if (ctx->teletext_lines && ctx->bmd_mode == bmdModePAL) {
1301 ctx->audio_st=st;
1310 st->codecpar->width = ctx->bmd_width;
1311 st->codecpar->height = ctx->bmd_height;
1313 st->time_base.den = ctx->bmd_tb_den;
1314 st->time_base.num = ctx->bmd_tb_num;
1317 switch(ctx->raw_format) {
1321 st->codecpar->bit_rate = av_rescale(ctx->bmd_width * ctx->bmd_height * 16, st->time_base.den, st->time_base.num);
1325 st->codecpar->bit_rate = av_rescale(ctx->bmd_width * ctx->bmd_height * 64, st->time_base.den, st->time_base.num * 3);
1330 st->codecpar->bit_rate = av_rescale(ctx->bmd_width * ctx->bmd_height * 32, st->time_base.den, st->time_base.num);
1335 st->codecpar->bit_rate = av_rescale(ctx->bmd_width * ctx->bmd_height * 32, st->time_base.den, st->time_base.num);
1339 st->codecpar->bit_rate = av_rescale(ctx->bmd_width * ctx->bmd_height * 30, st->time_base.den, st->time_base.num);
1343 av_fourcc_make_string(fourcc_str, ctx->raw_format);
1349 switch (ctx->bmd_field_dominance) {
1364 ctx->video_st=st;
1366 if (ctx->enable_klv) {
1373 st->time_base.den = ctx->bmd_tb_den;
1374 st->time_base.num = ctx->bmd_tb_num;
1377 ctx->klv_st = st;
1380 if (ctx->teletext_lines) {
1388 st->time_base.den = ctx->bmd_tb_den;
1389 st->time_base.num = ctx->bmd_tb_num;
1392 ctx->teletext_st = st;
1395 av_log(avctx, AV_LOG_VERBOSE, "Using %d input audio channels\n", ctx->audio_st->codecpar->ch_layout.nb_channels);
1396 result = ctx->dli->EnableAudioInput(bmdAudioSampleRate48kHz, cctx->audio_depth == 32 ? bmdAudioSampleType32bitInteger : bmdAudioSampleType16bitInteger, ctx->audio_st->codecpar->ch_layout.nb_channels);
1404 result = ctx->dli->EnableVideoInput(ctx->bmd_mode,
1405 ctx->raw_format,
1414 avpacket_queue_init (avctx, &ctx->queue);
1416 if (ctx->dli->StartStreams() != S_OK) {
1432 struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
1434 avpacket_queue_get(&ctx->queue, pkt, 1);
1436 if (ctx->tc_format && !(av_dict_get(ctx->video_st->metadata, "timecode", NULL, 0))) {
1440 if (av_packet_unpack_dictionary(side_metadata, size, &ctx->video_st->metadata) < 0)