summaryrefslogtreecommitdiff
path: root/src/codec/ffmpeg/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/codec/ffmpeg/common.c')
-rw-r--r--src/codec/ffmpeg/common.c28
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;
+}