Newer
Older
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");
ret = AVERROR(ENOMEM);
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");
ret = AVERROR(EIO);
result = ctx->dli->EnableVideoInput(ctx->bmd_mode,
(BMDPixelFormat) cctx->raw_format,
bmdVideoInputFlagDefault);
if (result != S_OK) {
av_log(avctx, AV_LOG_ERROR, "Cannot enable video input\n");
ret = AVERROR(EIO);
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");
ret = AVERROR(EIO);
goto error;
}
return 0;
error:
ff_decklink_cleanup(avctx);
}
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);
}