Audacity 3.2.0
FFmpegAPIResolver.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 FFmpegAPIResolver.h
6
7 Dmitry Vedenko
8
9**********************************************************************/
10#pragma once
11
12#include <memory>
13#include <vector>
14#include <map>
15
16#include "FFmpegTypes.h"
17#include "AVCodecID.h"
18
19struct FFmpegFunctions;
20class FFmpegLog;
21
23class AVCodecWrapper;
24class AVPacketWrapper;
25
27{
30};
31
32struct AVCodecFactories final
33{
34 std::unique_ptr<AVCodecContextWrapper> (*CreateAVCodecContextWrapper)(const FFmpegFunctions&, AVCodecContext*) = nullptr;
35 std::unique_ptr<AVCodecContextWrapper> (*CreateAVCodecContextWrapperFromCodec)(const FFmpegFunctions&, std::unique_ptr<AVCodecWrapper>) = nullptr;
36 std::unique_ptr<AVCodecWrapper> (*CreateAVCodecWrapper) (const AVCodec*) = nullptr;
37
39 std::unique_ptr<AVPacketWrapper> (*CreateAVPacketWrapper) (const FFmpegFunctions&) = nullptr;
40};
41
46class AVStreamWrapper;
47
49{
50 std::unique_ptr<AVFormatContextWrapper> (*CreateAVFormatContextWrapper) (const FFmpegFunctions&) = nullptr;
51 std::unique_ptr<AVInputFormatWrapper> (*CreateAVInputFormatWrapper) (AVInputFormat*) = nullptr;
52 std::unique_ptr<AVIOContextWrapper> (*CreateAVIOContextWrapper) (const FFmpegFunctions&) = nullptr;
53 std::unique_ptr<AVOutputFormatWrapper> (*CreateAVOutputFormatWrapper) (const AVOutputFormat*) = nullptr;
54 std::unique_ptr<AVStreamWrapper> (*CreateAVStreamWrapper) (const FFmpegFunctions&, AVStream*, bool) = nullptr;
55};
56
57class AVFrameWrapper;
58
59struct AVUtilFactories final
60{
62 std::unique_ptr<AVFrameWrapper> (*CreateAVFrameWrapper)(const FFmpegFunctions&) = nullptr;
63 std::unique_ptr<FFmpegLog> (*CreateLogCallbackSetter)(const FFmpegFunctions&) = nullptr;
64};
65
67{
68 FFmpegAPIResolver() = default;
69
70public:
71 static FFmpegAPIResolver& Get();
72
73 bool GetAVCodecIDResolver(int avCodecVersion, AVCodecIDResolver& resolver) const;
74 bool GetAVCodecFactories(int avCodecVersion, AVCodecFactories& factories) const;
75 bool GetAVFormatFactories(int avFormatVersion, AVFormatFactories& factories) const;
76 bool GetAVUtilFactories(int avUtilVersion, AVUtilFactories& factories) const;
77
78 void AddAVCodecIDResolver(int avCodecVersion, const AVCodecIDResolver& resolver);
79 void AddAVCodecFactories(int avCodecVersion, const AVCodecFactories& factories);
80 void AddAVFormatFactories(int avFormatVersion, const AVFormatFactories& factories);
81 void AddAVUtilFactories(int avUtilVersion, const AVUtilFactories& factories);
82
85 std::vector<int> GetSuportedAVFormatVersions() const;
86
87private:
88 std::map<int, AVCodecIDResolver> mAVCodecIDResolvers;
89 std::map<int, AVCodecFactories> mAVCodecFactories;
90 std::map<int, AVFormatFactories> mAVFormatFactories;
91 std::map<int, AVUtilFactories> mAVUtilFactories;
92};
int AVCodecIDFwd
Definition: AVCodecID.h:407
void AddAVCodecIDResolver(int avCodecVersion, const AVCodecIDResolver &resolver)
void AddAVFormatFactories(int avFormatVersion, const AVFormatFactories &factories)
bool GetAVCodecFactories(int avCodecVersion, AVCodecFactories &factories) const
bool GetAVFormatFactories(int avFormatVersion, AVFormatFactories &factories) const
bool GetAVUtilFactories(int avUtilVersion, AVUtilFactories &factories) const
std::vector< int > GetSuportedAVFormatVersions() const
std::map< int, AVUtilFactories > mAVUtilFactories
std::map< int, AVCodecFactories > mAVCodecFactories
FFmpegAPIResolver()=default
void AddAVCodecFactories(int avCodecVersion, const AVCodecFactories &factories)
bool GetAVCodecIDResolver(int avCodecVersion, AVCodecIDResolver &resolver) const
void AddAVUtilFactories(int avUtilVersion, const AVUtilFactories &factories)
static FFmpegAPIResolver & Get()
std::map< int, AVFormatFactories > mAVFormatFactories
std::map< int, AVCodecIDResolver > mAVCodecIDResolvers
std::unique_ptr< AVCodecWrapper >(* CreateAVCodecWrapper)(const AVCodec *)
std::unique_ptr< AVPacketWrapper >(* CreateAVPacketWrapper)(const FFmpegFunctions &)
std::unique_ptr< AVCodecContextWrapper >(* CreateAVCodecContextWrapper)(const FFmpegFunctions &, AVCodecContext *)
std::unique_ptr< AVCodecContextWrapper >(* CreateAVCodecContextWrapperFromCodec)(const FFmpegFunctions &, std::unique_ptr< AVCodecWrapper >)
AudacityAVCodecID(* GetAudacityCodecID)(AVCodecIDFwd)
AVCodecIDFwd(* GetAVCodecID)(AudacityAVCodecID)
std::unique_ptr< AVFormatContextWrapper >(* CreateAVFormatContextWrapper)(const FFmpegFunctions &)
std::unique_ptr< AVIOContextWrapper >(* CreateAVIOContextWrapper)(const FFmpegFunctions &)
std::unique_ptr< AVInputFormatWrapper >(* CreateAVInputFormatWrapper)(AVInputFormat *)
std::unique_ptr< AVStreamWrapper >(* CreateAVStreamWrapper)(const FFmpegFunctions &, AVStream *, bool)
std::unique_ptr< AVOutputFormatWrapper >(* CreateAVOutputFormatWrapper)(const AVOutputFormat *)
std::unique_ptr< AVFrameWrapper >(* CreateAVFrameWrapper)(const FFmpegFunctions &)
std::unique_ptr< FFmpegLog >(* CreateLogCallbackSetter)(const FFmpegFunctions &)