Skip to content
Snippets Groups Projects
decklink_dec.cpp 36 KiB
Newer Older
  • Learn to ignore specific revisions
  •     switch (ctx->bmd_field_dominance) {
        case bmdUpperFieldFirst:
            st->codecpar->field_order = AV_FIELD_TT;
            break;
        case bmdLowerFieldFirst:
            st->codecpar->field_order = AV_FIELD_BB;
            break;
        case bmdProgressiveFrame:
        case bmdProgressiveSegmentedFrame:
            st->codecpar->field_order = AV_FIELD_PROGRESSIVE;
            break;
        }
    
    
        avpriv_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
    
        ctx->video_st=st;
    
    
        if (ctx->teletext_lines) {
            st = avformat_new_stream(avctx, NULL);
            if (!st) {
                av_log(avctx, AV_LOG_ERROR, "Cannot add stream\n");
    
            st->codecpar->codec_type  = AVMEDIA_TYPE_SUBTITLE;
            st->time_base.den         = ctx->bmd_tb_den;
            st->time_base.num         = ctx->bmd_tb_num;
            st->codecpar->codec_id    = AV_CODEC_ID_DVB_TELETEXT;
    
            avpriv_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
            ctx->teletext_st = st;
        }
    
    
        av_log(avctx, AV_LOG_VERBOSE, "Using %d input audio channels\n", ctx->audio_st->codecpar->channels);
    
        result = ctx->dli->EnableAudioInput(bmdAudioSampleRate48kHz, cctx->audio_depth == 32 ? bmdAudioSampleType32bitInteger : bmdAudioSampleType16bitInteger, ctx->audio_st->codecpar->channels);
    
    
        if (result != S_OK) {
            av_log(avctx, AV_LOG_ERROR, "Cannot enable audio input\n");
    
        result = ctx->dli->EnableVideoInput(ctx->bmd_mode,
    
                                            (BMDPixelFormat) cctx->raw_format,
    
    
        if (result != S_OK) {
            av_log(avctx, AV_LOG_ERROR, "Cannot enable video input\n");
    
            goto error;
        }
    
        avpacket_queue_init (avctx, &ctx->queue);
    
        if (decklink_start_input (avctx) != S_OK) {
            av_log(avctx, AV_LOG_ERROR, "Cannot start input stream\n");
    
    }
    
    int ff_decklink_read_packet(AVFormatContext *avctx, AVPacket *pkt)
    {
    
        struct decklink_cctx *cctx = (struct decklink_cctx *)avctx->priv_data;
        struct decklink_ctx *ctx = (struct decklink_ctx *)cctx->ctx;
    
    
        avpacket_queue_get(&ctx->queue, pkt, 1);
    
        return 0;
    }
    
    
    int ff_decklink_list_input_devices(AVFormatContext *avctx, struct AVDeviceInfoList *device_list)
    {
        return ff_decklink_list_devices(avctx, device_list, 1, 0);
    }
    
    
    } /* extern "C" */