X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=ffmpeg_raii.cpp;h=746e03d19122da0cd11ad70735670b9b9d318af5;hb=4a0187ffb4075b4d217b8d9e9c96cac548b199d8;hp=b57de95124b18d2951263e489703592c2f0ae62a;hpb=778a9bccf11b06d077eea4b32ccc0baf1e8cf01b;p=nageru diff --git a/ffmpeg_raii.cpp b/ffmpeg_raii.cpp index b57de95..746e03d 100644 --- a/ffmpeg_raii.cpp +++ b/ffmpeg_raii.cpp @@ -5,6 +5,7 @@ extern "C" { #include #include #include +#include } using namespace std; @@ -17,16 +18,25 @@ void avformat_close_input_unique::operator() (AVFormatContext *format_ctx) const } AVFormatContextWithCloser avformat_open_input_unique( - const char *pathname, AVInputFormat *fmt, AVDictionary **options) + const char *pathname, AVInputFormat *fmt, + AVDictionary **options) { - AVFormatContext *format_ctx = nullptr; + return avformat_open_input_unique(pathname, fmt, options, AVIOInterruptCB{ nullptr, nullptr }); +} + +AVFormatContextWithCloser avformat_open_input_unique( + const char *pathname, AVInputFormat *fmt, + AVDictionary **options, + const AVIOInterruptCB &interrupt_cb) +{ + AVFormatContext *format_ctx = avformat_alloc_context(); + format_ctx->interrupt_callback = interrupt_cb; if (avformat_open_input(&format_ctx, pathname, fmt, options) != 0) { format_ctx = nullptr; } return AVFormatContextWithCloser(format_ctx); } - // AVCodecContext void avcodec_free_context_unique::operator() (AVCodecContext *codec_ctx) const @@ -59,3 +69,9 @@ AVFrameWithDeleter av_frame_alloc_unique() return AVFrameWithDeleter(av_frame_alloc()); } +// SwsContext + +void sws_free_context_unique::operator() (SwsContext *context) const +{ + sws_freeContext(context); +}