static void close_card( decklink_opts_t *decklink_opts ) { decklink_ctx_t *decklink_ctx = &decklink_opts->decklink_ctx; if( decklink_ctx->p_config ) decklink_ctx->p_config->Release(); if( decklink_ctx->p_input ) { decklink_ctx->p_input->StopStreams(); decklink_ctx->p_input->Release(); } if( decklink_ctx->p_card ) decklink_ctx->p_card->Release(); if( decklink_ctx->p_delegate ) decklink_ctx->p_delegate->Release(); if( decklink_ctx->codec ) { avcodec_close( decklink_ctx->codec ); av_free( decklink_ctx->codec ); } if( IS_SD( decklink_opts->video_format ) ) vbi_raw_decoder_destroy( &decklink_ctx->non_display_parser.vbi_decoder ); if( decklink_ctx->avr ) avresample_free( &decklink_ctx->avr ); }
static void bktr_delete(vbi_capture *vc) { vbi_capture_bktr *v = PARENT(vc, vbi_capture_bktr, capture); if (v->sliced_buffer.data) free(v->sliced_buffer.data); for (; v->num_raw_buffers > 0; v->num_raw_buffers--) free(v->raw_buffer[v->num_raw_buffers - 1].data); vbi_raw_decoder_destroy (&v->dec); if (-1 != v->fd) device_close (v->capture.sys_log_fp, v->fd); free(v); }