avdevice/decklink: factorize device finder function
Reviewed-by: Deti Fliegl <deti@fliegl.de> Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
@ -312,9 +312,8 @@ av_cold int ff_decklink_write_header(AVFormatContext *avctx)
|
||||
{
|
||||
struct decklink_cctx *cctx = (struct decklink_cctx *) avctx->priv_data;
|
||||
struct decklink_ctx *ctx;
|
||||
IDeckLinkIterator *iter;
|
||||
IDeckLink *dl = NULL;
|
||||
unsigned int n;
|
||||
int ret;
|
||||
|
||||
ctx = (struct decklink_ctx *) av_mallocz(sizeof(struct decklink_ctx));
|
||||
if (!ctx)
|
||||
@ -324,35 +323,15 @@ av_cold int ff_decklink_write_header(AVFormatContext *avctx)
|
||||
ctx->preroll = cctx->preroll;
|
||||
cctx->ctx = ctx;
|
||||
|
||||
iter = CreateDeckLinkIteratorInstance();
|
||||
if (!iter) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Could not create DeckLink iterator\n");
|
||||
return AVERROR(EIO);
|
||||
}
|
||||
|
||||
/* List available devices. */
|
||||
if (ctx->list_devices) {
|
||||
ff_decklink_list_devices(avctx);
|
||||
return AVERROR_EXIT;
|
||||
}
|
||||
|
||||
/* Open device. */
|
||||
while (iter->Next(&dl) == S_OK) {
|
||||
const char *displayName;
|
||||
ff_decklink_get_display_name(dl, &displayName);
|
||||
if (!strcmp(avctx->filename, displayName)) {
|
||||
av_free((void *) displayName);
|
||||
ctx->dl = dl;
|
||||
break;
|
||||
}
|
||||
av_free((void *) displayName);
|
||||
dl->Release();
|
||||
}
|
||||
iter->Release();
|
||||
if (!ctx->dl) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Could not open '%s'\n", avctx->filename);
|
||||
return AVERROR(EIO);
|
||||
}
|
||||
ret = ff_decklink_init_device(avctx, avctx->filename);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Get output device. */
|
||||
if (ctx->dl->QueryInterface(IID_IDeckLinkOutput, (void **) &ctx->dlo) != S_OK) {
|
||||
|
Reference in New Issue
Block a user