diff options
Diffstat (limited to 'src/codec/ffmpeg/common.c')
| -rw-r--r-- | src/codec/ffmpeg/common.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/codec/ffmpeg/common.c b/src/codec/ffmpeg/common.c index e697a00..59f59b7 100644 --- a/src/codec/ffmpeg/common.c +++ b/src/codec/ffmpeg/common.c @@ -65,3 +65,31 @@ void camu_ff_common_init(void) #endif camu_ff_set_log_callback(av_log_callback); } + +AVCodecContext *camu_ff_alloc_codec_context(const AVCodec *codec, AVCodecParameters *codecpar) +{ + AVCodecContext *codec_context = avcodec_alloc_context3(codec); + if (!codec_context) { + log_error("Failed to alloc codec context."); + return NULL; + } + + s32 ret = avcodec_parameters_to_context(codec_context, codecpar); + if (ret < 0) { + log_error("Failed to copy codec parameters (%s).", av_err2str(ret)); + return NULL; + } + + return codec_context; +} + +bool camu_ff_open_avcodec(AVCodecContext *codec_context, const AVCodec *codec, AVDictionary *opts) +{ + s32 ret = avcodec_open2(codec_context, codec, &opts); + if (ret < 0) { + log_error("Failed to open codec %s (%s).", codec->name, av_err2str(ret)); + return false; + } + av_dict_free(&opts); + return true; +} |