diff --git a/src/Lib/AbstractMediaContext.hh b/src/Lib/AbstractMediaContext.hh index 35ada2ed4bf2193d0083d4ffe166f4f4b76ee720..1e113c455eae064d9c2304f01e03341800a04563 100644 --- a/src/Lib/AbstractMediaContext.hh +++ b/src/Lib/AbstractMediaContext.hh @@ -17,20 +17,28 @@ extern "C" { namespace Vivy { -static inline Utils::DeleterFunctionType<double> dataDeleter = - std::bind_front(Utils::freePtrIfNotNull<double>, av_free); - -static inline Utils::DeleterFunctionType<AVCodecContext> codecContexteleter = - std::bind_front(Utils::freePPtrIfNotNull<AVCodecContext>, avcodec_free_context); - -static inline Utils::DeleterFunctionType<AVFrame> avFrameDeleter = - std::bind_front(Utils::freePPtrIfNotNull<AVFrame>, av_frame_free); +static inline constexpr auto codecContexteleter = [](AVCodecContext *ptr) noexcept -> void { + if (ptr) + avcodec_free_context(&ptr); +}; +static constexpr inline auto dataDeleter = [](double *ptr) noexcept -> void { + if (ptr) + av_free(ptr); +}; +static constexpr inline auto avFrameDeleter = [](AVFrame *ptr) noexcept -> void { + if (ptr) + av_frame_free(&ptr); +}; -static inline Utils::DeleterFunctionType<SwrContext> swrContenxtDeleter = - std::bind_front(Utils::freePPtrIfNotNull<SwrContext>, swr_free); +static constexpr inline auto swrContenxtDeleter = [](SwrContext *swr) noexcept -> void { + if (swr) + swr_free(&swr); +}; -static inline Utils::DeleterFunctionType<AVFormatContext> avFormatContextDeleter = - std::bind_front(Utils::freePtrIfNotNull<AVFormatContext>, avformat_free_context); +static inline constexpr auto avFormatContextDeleter = [](AVFormatContext *ptr) noexcept -> void { + if (ptr) + avformat_free_context(ptr); +}; using AVFormatContextPtr = std::unique_ptr<AVFormatContext, decltype(avFormatContextDeleter)>; using AVCodecContextPtr = std::unique_ptr<AVCodecContext, decltype(codecContexteleter)>; diff --git a/src/Lib/Audio.hh b/src/Lib/Audio.hh index a87e3dc2547e0bb3d38e0650ee09a7ac4f7e3e0e..36cc5519ea42b5b3c73c3f655e2ed082bed4d7da 100644 --- a/src/Lib/Audio.hh +++ b/src/Lib/Audio.hh @@ -68,9 +68,6 @@ public: private: // Regarding the format - static inline Utils::DeleterFunctionType<AVFormatContext> avFormatContextDeleter = - std::bind_front(Utils::freePtrIfNotNull<AVFormatContext>, avformat_free_context); - using AVFormatContextPtr = std::unique_ptr<AVFormatContext, decltype(avFormatContextDeleter)>; AVFormatContextPtr format{ avformat_alloc_context(), avFormatContextDeleter }; }; diff --git a/src/Lib/Utils.hh b/src/Lib/Utils.hh index 97b0771f890f53a0a1489b0e3df6466436a78817..f121cdc40ae3b7bbd48cc7ec58e90e095558e43c 100644 --- a/src/Lib/Utils.hh +++ b/src/Lib/Utils.hh @@ -162,22 +162,6 @@ QString getBaseName(const QString &) noexcept; void writeAssertLocation(const char *msg); -template <typename T> using DeleterFunctionType = const std::function<void(T *)>; - -template <typename Type> static inline void -freePtrIfNotNull(DeleterFunctionType<Type> callback, Type *ptr) noexcept -{ - if (ptr != nullptr) - callback(ptr); -} - -template <typename Type> static inline void -freePPtrIfNotNull(DeleterFunctionType<Type *> callback, Type *ptr) noexcept -{ - if (ptr != nullptr) - callback(&ptr); -} - struct OsSpecificAspects final { private: OsSpecificAspects() {} diff --git a/src/Lib/Video.hh b/src/Lib/Video.hh index 2d3c60549582f4db661fc8b54f0545288961ef87..400feb30480d89cae9741a98c5cd9b2d7edabe2d 100644 --- a/src/Lib/Video.hh +++ b/src/Lib/Video.hh @@ -23,11 +23,6 @@ public: double getFramesPerSecond() const noexcept; QJsonObject getProperties() const noexcept override; - - static inline Utils::DeleterFunctionType<AVCodecContext> codecContexteleter = - std::bind_front(Utils::freePPtrIfNotNull<AVCodecContext>, avcodec_free_context); - -private: }; // Like an audio context, but for videos.