summaryrefslogtreecommitdiff
path: root/libavcodec/mediacodec_wrapper.c
diff options
context:
space:
mode:
authorZhao Zhili <zhilizhao@tencent.com>2022-10-14 01:43:14 +0800
committerZhao Zhili <zhilizhao@tencent.com>2022-11-21 23:52:25 +0800
commit4f2ea862b3de1647de0d9e00702801671764a762 (patch)
tree1734f48404481a25ae8eef79598b80859e07462d /libavcodec/mediacodec_wrapper.c
parentd4b06c99abf3e147f7b1ce7160d31d2dcc525eda (diff)
downloadffmpeg-4f2ea862b3de1647de0d9e00702801671764a762.tar.gz
avcodec/mediacodec_wrapper: separate implementation from interface
This is in preparation for NDK media codec wrapper. Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
Diffstat (limited to 'libavcodec/mediacodec_wrapper.c')
-rw-r--r--libavcodec/mediacodec_wrapper.c244
1 files changed, 176 insertions, 68 deletions
diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c
index 8ffc58e1d8..e0c614680e 100644
--- a/libavcodec/mediacodec_wrapper.c
+++ b/libavcodec/mediacodec_wrapper.c
@@ -160,12 +160,14 @@ static const AVClass amediaformat_class = {
.version = LIBAVUTIL_VERSION_INT,
};
-struct FFAMediaFormat {
+typedef struct FFAMediaFormatJni {
+ FFAMediaFormat api;
- const AVClass *class;
struct JNIAMediaFormatFields jfields;
jobject object;
-};
+} FFAMediaFormatJni;
+
+static const FFAMediaFormat media_format_jni;
struct JNIAMediaCodecFields {
@@ -272,9 +274,8 @@ static const AVClass amediacodec_class = {
.version = LIBAVUTIL_VERSION_INT,
};
-struct FFAMediaCodec {
-
- const AVClass *class;
+typedef struct FFAMediaCodecJni {
+ FFAMediaCodec api;
struct JNIAMediaCodecFields jfields;
@@ -295,7 +296,9 @@ struct FFAMediaCodec {
int CONFIGURE_FLAG_ENCODE;
int has_get_i_o_buffer;
-};
+} FFAMediaCodecJni;
+
+static const FFAMediaCodec media_codec_jni;
#define JNI_GET_ENV_OR_RETURN(env, log_ctx, ret) do { \
(env) = ff_jni_get_env(log_ctx); \
@@ -622,17 +625,17 @@ done:
return name;
}
-FFAMediaFormat *ff_AMediaFormat_new(void)
+static FFAMediaFormat *mediaformat_jni_new(void)
{
JNIEnv *env = NULL;
- FFAMediaFormat *format = NULL;
+ FFAMediaFormatJni *format = NULL;
jobject object = NULL;
- format = av_mallocz(sizeof(FFAMediaFormat));
+ format = av_mallocz(sizeof(*format));
if (!format) {
return NULL;
}
- format->class = &amediaformat_class;
+ format->api = media_format_jni;
env = ff_jni_get_env(format);
if (!env) {
@@ -664,19 +667,19 @@ fail:
av_freep(&format);
}
- return format;
+ return (FFAMediaFormat *)format;
}
-static FFAMediaFormat *ff_AMediaFormat_newFromObject(void *object)
+static FFAMediaFormat *mediaformat_jni_newFromObject(void *object)
{
JNIEnv *env = NULL;
- FFAMediaFormat *format = NULL;
+ FFAMediaFormatJni *format = NULL;
- format = av_mallocz(sizeof(FFAMediaFormat));
+ format = av_mallocz(sizeof(*format));
if (!format) {
return NULL;
}
- format->class = &amediaformat_class;
+ format->api = media_format_jni;
env = ff_jni_get_env(format);
if (!env) {
@@ -693,7 +696,7 @@ static FFAMediaFormat *ff_AMediaFormat_newFromObject(void *object)
goto fail;
}
- return format;
+ return (FFAMediaFormat *)format;
fail:
ff_jni_reset_jfields(env, &format->jfields, jni_amediaformat_mapping, 1, format);
@@ -702,10 +705,10 @@ fail:
return NULL;
}
-int ff_AMediaFormat_delete(FFAMediaFormat* format)
+static int mediaformat_jni_delete(FFAMediaFormat* ctx)
{
int ret = 0;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
if (!format) {
@@ -724,10 +727,10 @@ int ff_AMediaFormat_delete(FFAMediaFormat* format)
return ret;
}
-char* ff_AMediaFormat_toString(FFAMediaFormat* format)
+static char* mediaformat_jni_toString(FFAMediaFormat* ctx)
{
char *ret = NULL;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
jstring description = NULL;
@@ -749,10 +752,10 @@ fail:
return ret;
}
-int ff_AMediaFormat_getInt32(FFAMediaFormat* format, const char *name, int32_t *out)
+static int mediaformat_jni_getInt32(FFAMediaFormat* ctx, const char *name, int32_t *out)
{
int ret = 1;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
jstring key = NULL;
jboolean contains_key;
@@ -788,10 +791,10 @@ fail:
return ret;
}
-int ff_AMediaFormat_getInt64(FFAMediaFormat* format, const char *name, int64_t *out)
+static int mediaformat_jni_getInt64(FFAMediaFormat* ctx, const char *name, int64_t *out)
{
int ret = 1;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
jstring key = NULL;
jboolean contains_key;
@@ -827,10 +830,10 @@ fail:
return ret;
}
-int ff_AMediaFormat_getFloat(FFAMediaFormat* format, const char *name, float *out)
+static int mediaformat_jni_getFloat(FFAMediaFormat* ctx, const char *name, float *out)
{
int ret = 1;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
jstring key = NULL;
jboolean contains_key;
@@ -866,10 +869,10 @@ fail:
return ret;
}
-int ff_AMediaFormat_getBuffer(FFAMediaFormat* format, const char *name, void** data, size_t *size)
+static int mediaformat_jni_getBuffer(FFAMediaFormat* ctx, const char *name, void** data, size_t *size)
{
int ret = 1;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
jstring key = NULL;
jboolean contains_key;
@@ -924,10 +927,10 @@ fail:
return ret;
}
-int ff_AMediaFormat_getString(FFAMediaFormat* format, const char *name, const char **out)
+static int mediaformat_jni_getString(FFAMediaFormat* ctx, const char *name, const char **out)
{
int ret = 1;
-
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
JNIEnv *env = NULL;
jstring key = NULL;
jboolean contains_key;
@@ -974,10 +977,11 @@ fail:
return ret;
}
-void ff_AMediaFormat_setInt32(FFAMediaFormat* format, const char* name, int32_t value)
+static void mediaformat_jni_setInt32(FFAMediaFormat* ctx, const char* name, int32_t value)
{
JNIEnv *env = NULL;
jstring key = NULL;
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
av_assert0(format != NULL);
@@ -999,10 +1003,11 @@ fail:
}
}
-void ff_AMediaFormat_setInt64(FFAMediaFormat* format, const char* name, int64_t value)
+static void mediaformat_jni_setInt64(FFAMediaFormat* ctx, const char* name, int64_t value)
{
JNIEnv *env = NULL;
jstring key = NULL;
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
av_assert0(format != NULL);
@@ -1024,10 +1029,11 @@ fail:
}
}
-void ff_AMediaFormat_setFloat(FFAMediaFormat* format, const char* name, float value)
+static void mediaformat_jni_setFloat(FFAMediaFormat* ctx, const char* name, float value)
{
JNIEnv *env = NULL;
jstring key = NULL;
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
av_assert0(format != NULL);
@@ -1049,11 +1055,12 @@ fail:
}
}
-void ff_AMediaFormat_setString(FFAMediaFormat* format, const char* name, const char* value)
+static void mediaformat_jni_setString(FFAMediaFormat* ctx, const char* name, const char* value)
{
JNIEnv *env = NULL;
jstring key = NULL;
jstring string = NULL;
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
av_assert0(format != NULL);
@@ -1084,12 +1091,13 @@ fail:
}
}
-void ff_AMediaFormat_setBuffer(FFAMediaFormat* format, const char* name, void* data, size_t size)
+static void mediaformat_jni_setBuffer(FFAMediaFormat* ctx, const char* name, void* data, size_t size)
{
JNIEnv *env = NULL;
jstring key = NULL;
jobject buffer = NULL;
void *buffer_data = NULL;
+ FFAMediaFormatJni *format = (FFAMediaFormatJni *)ctx;
av_assert0(format != NULL);
@@ -1131,7 +1139,7 @@ fail:
}
}
-static int codec_init_static_fields(FFAMediaCodec *codec)
+static int codec_init_static_fields(FFAMediaCodecJni *codec)
{
int ret = 0;
JNIEnv *env = NULL;
@@ -1193,17 +1201,17 @@ static inline FFAMediaCodec *codec_create(int method, const char *arg)
{
int ret = -1;
JNIEnv *env = NULL;
- FFAMediaCodec *codec = NULL;
+ FFAMediaCodecJni *codec = NULL;
jstring jarg = NULL;
jobject object = NULL;
jobject buffer_info = NULL;
jmethodID create_id = NULL;
- codec = av_mallocz(sizeof(FFAMediaCodec));
+ codec = av_mallocz(sizeof(*codec));
if (!codec) {
return NULL;
}
- codec->class = &amediacodec_class;
+ codec->api = media_codec_jni;
env = ff_jni_get_env(codec);
if (!env) {
@@ -1286,11 +1294,11 @@ fail:
av_freep(&codec);
}
- return codec;
+ return (FFAMediaCodec *)codec;
}
#define DECLARE_FF_AMEDIACODEC_CREATE_FUNC(name, method) \
-FFAMediaCodec *ff_AMediaCodec_##name(const char *arg) \
+static FFAMediaCodec *mediacodec_jni_##name(const char *arg) \
{ \
return codec_create(method, arg); \
} \
@@ -1299,10 +1307,10 @@ DECLARE_FF_AMEDIACODEC_CREATE_FUNC(createCodecByName, CREATE_CODEC_BY_NAME)
DECLARE_FF_AMEDIACODEC_CREATE_FUNC(createDecoderByType, CREATE_DECODER_BY_TYPE)
DECLARE_FF_AMEDIACODEC_CREATE_FUNC(createEncoderByType, CREATE_ENCODER_BY_TYPE)
-int ff_AMediaCodec_delete(FFAMediaCodec* codec)
+static int mediacodec_jni_delete(FFAMediaCodec* ctx)
{
int ret = 0;
-
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNIEnv *env = NULL;
if (!codec) {
@@ -1335,11 +1343,12 @@ int ff_AMediaCodec_delete(FFAMediaCodec* codec)
return ret;
}
-char *ff_AMediaCodec_getName(FFAMediaCodec *codec)
+static char *mediacodec_jni_getName(FFAMediaCodec *ctx)
{
char *ret = NULL;
JNIEnv *env = NULL;
jobject *name = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, NULL);
@@ -1358,10 +1367,12 @@ fail:
return ret;
}
-int ff_AMediaCodec_configure(FFAMediaCodec* codec, const FFAMediaFormat* format, void* surface, void *crypto, uint32_t flags)
+static int mediacodec_jni_configure(FFAMediaCodec* ctx, const FFAMediaFormat* format_ctx, void* surface, void *crypto, uint32_t flags)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
+ const FFAMediaFormatJni *format = (FFAMediaFormatJni *)format_ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1375,10 +1386,11 @@ fail:
return ret;
}
-int ff_AMediaCodec_start(FFAMediaCodec* codec)
+static int mediacodec_jni_start(FFAMediaCodec* ctx)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1392,10 +1404,11 @@ fail:
return ret;
}
-int ff_AMediaCodec_stop(FFAMediaCodec* codec)
+static int mediacodec_jni_stop(FFAMediaCodec* ctx)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1409,10 +1422,11 @@ fail:
return ret;
}
-int ff_AMediaCodec_flush(FFAMediaCodec* codec)
+static int mediacodec_jni_flush(FFAMediaCodec* ctx)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1426,10 +1440,11 @@ fail:
return ret;
}
-int ff_AMediaCodec_releaseOutputBuffer(FFAMediaCodec* codec, size_t idx, int render)
+static int mediacodec_jni_releaseOutputBuffer(FFAMediaCodec* ctx, size_t idx, int render)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1443,10 +1458,11 @@ fail:
return ret;
}
-int ff_AMediaCodec_releaseOutputBufferAtTime(FFAMediaCodec *codec, size_t idx, int64_t timestampNs)
+static int mediacodec_jni_releaseOutputBufferAtTime(FFAMediaCodec *ctx, size_t idx, int64_t timestampNs)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1460,10 +1476,11 @@ fail:
return ret;
}
-ssize_t ff_AMediaCodec_dequeueInputBuffer(FFAMediaCodec* codec, int64_t timeoutUs)
+static ssize_t mediacodec_jni_dequeueInputBuffer(FFAMediaCodec* ctx, int64_t timeoutUs)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1477,10 +1494,11 @@ fail:
return ret;
}
-int ff_AMediaCodec_queueInputBuffer(FFAMediaCodec* codec, size_t idx, off_t offset, size_t size, uint64_t time, uint32_t flags)
+static int mediacodec_jni_queueInputBuffer(FFAMediaCodec* ctx, size_t idx, off_t offset, size_t size, uint64_t time, uint32_t flags)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1494,10 +1512,11 @@ fail:
return ret;
}
-ssize_t ff_AMediaCodec_dequeueOutputBuffer(FFAMediaCodec* codec, FFAMediaCodecBufferInfo *info, int64_t timeoutUs)
+static ssize_t mediacodec_jni_dequeueOutputBuffer(FFAMediaCodec* ctx, FFAMediaCodecBufferInfo *info, int64_t timeoutUs)
{
int ret = 0;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
JNI_GET_ENV_OR_RETURN(env, codec, AVERROR_EXTERNAL);
@@ -1529,11 +1548,11 @@ ssize_t ff_AMediaCodec_dequeueOutputBuffer(FFAMediaCodec* codec, FFAMediaCodecBu
return ret;
}
-uint8_t* ff_AMediaCodec_getInputBuffer(FFAMediaCodec* codec, size_t idx, size_t *out_size)
+static uint8_t* mediacodec_jni_getInputBuffer(FFAMediaCodec* ctx, size_t idx, size_t *out_size)
{
uint8_t *ret = NULL;
JNIEnv *env = NULL;
-
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
jobject buffer = NULL;
jobject input_buffers = NULL;
@@ -1577,11 +1596,11 @@ fail:
return ret;
}
-uint8_t* ff_AMediaCodec_getOutputBuffer(FFAMediaCodec* codec, size_t idx, size_t *out_size)
+static uint8_t* mediacodec_jni_getOutputBuffer(FFAMediaCodec* ctx, size_t idx, size_t *out_size)
{
uint8_t *ret = NULL;
JNIEnv *env = NULL;
-
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
jobject buffer = NULL;
jobject output_buffers = NULL;
@@ -1625,10 +1644,11 @@ fail:
return ret;
}
-FFAMediaFormat* ff_AMediaCodec_getOutputFormat(FFAMediaCodec* codec)
+static FFAMediaFormat* mediacodec_jni_getOutputFormat(FFAMediaCodec* ctx)
{
FFAMediaFormat *ret = NULL;
JNIEnv *env = NULL;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
jobject mediaformat = NULL;
@@ -1639,7 +1659,7 @@ FFAMediaFormat* ff_AMediaCodec_getOutputFormat(FFAMediaCodec* codec)
goto fail;
}
- ret = ff_AMediaFormat_newFromObject(mediaformat);
+ ret = mediaformat_jni_newFromObject(mediaformat);
fail:
if (mediaformat) {
(*env)->DeleteLocalRef(env, mediaformat);
@@ -1648,44 +1668,52 @@ fail:
return ret;
}
-int ff_AMediaCodec_infoTryAgainLater(FFAMediaCodec *codec, ssize_t idx)
+static int mediacodec_jni_infoTryAgainLater(FFAMediaCodec *ctx, ssize_t idx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return idx == codec->INFO_TRY_AGAIN_LATER;
}
-int ff_AMediaCodec_infoOutputBuffersChanged(FFAMediaCodec *codec, ssize_t idx)
+static int mediacodec_jni_infoOutputBuffersChanged(FFAMediaCodec *ctx, ssize_t idx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return idx == codec->INFO_OUTPUT_BUFFERS_CHANGED;
}
-int ff_AMediaCodec_infoOutputFormatChanged(FFAMediaCodec *codec, ssize_t idx)
+static int mediacodec_jni_infoOutputFormatChanged(FFAMediaCodec *ctx, ssize_t idx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return idx == codec->INFO_OUTPUT_FORMAT_CHANGED;
}
-int ff_AMediaCodec_getBufferFlagCodecConfig(FFAMediaCodec *codec)
+static int mediacodec_jni_getBufferFlagCodecConfig(FFAMediaCodec *ctx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return codec->BUFFER_FLAG_CODEC_CONFIG;
}
-int ff_AMediaCodec_getBufferFlagEndOfStream(FFAMediaCodec *codec)
+static int mediacodec_jni_getBufferFlagEndOfStream(FFAMediaCodec *ctx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return codec->BUFFER_FLAG_END_OF_STREAM;
}
-int ff_AMediaCodec_getBufferFlagKeyFrame(FFAMediaCodec *codec)
+static int mediacodec_jni_getBufferFlagKeyFrame(FFAMediaCodec *ctx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return codec->BUFFER_FLAG_KEY_FRAME;
}
-int ff_AMediaCodec_getConfigureFlagEncode(FFAMediaCodec *codec)
+static int mediacodec_jni_getConfigureFlagEncode(FFAMediaCodec *ctx)
{
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
return codec->CONFIGURE_FLAG_ENCODE;
}
-int ff_AMediaCodec_cleanOutputBuffers(FFAMediaCodec *codec)
+static int mediacodec_jni_cleanOutputBuffers(FFAMediaCodec *ctx)
{
int ret = 0;
+ FFAMediaCodecJni *codec = (FFAMediaCodecJni *)ctx;
if (!codec->has_get_i_o_buffer) {
if (codec->output_buffers) {
@@ -1706,6 +1734,86 @@ fail:
return ret;
}
+static const FFAMediaFormat media_format_jni = {
+ .class = &amediaformat_class,
+
+ .create = mediaformat_jni_new,
+ .delete = mediaformat_jni_delete,
+
+ .toString = mediaformat_jni_toString,
+
+ .getInt32 = mediaformat_jni_getInt32,
+ .getInt64 = mediaformat_jni_getInt64,
+ .getFloat = mediaformat_jni_getFloat,
+ .getBuffer = mediaformat_jni_getBuffer,
+ .getString = mediaformat_jni_getString,
+
+ .setInt32 = mediaformat_jni_setInt32,
+ .setInt64 = mediaformat_jni_setInt64,
+ .setFloat = mediaformat_jni_setFloat,
+ .setString = mediaformat_jni_setString,
+ .setBuffer = mediaformat_jni_setBuffer,
+};
+
+static const FFAMediaCodec media_codec_jni = {
+ .class = &amediacodec_class,
+
+ .getName = mediacodec_jni_getName,
+
+ .createCodecByName = mediacodec_jni_createCodecByName,
+ .createDecoderByType = mediacodec_jni_createDecoderByType,
+ .createEncoderByType = mediacodec_jni_createEncoderByType,
+ .delete = mediacodec_jni_delete,
+
+ .configure = mediacodec_jni_configure,
+ .start = mediacodec_jni_start,
+ .stop = mediacodec_jni_stop,
+ .flush = mediacodec_jni_flush,
+
+ .getInputBuffer = mediacodec_jni_getInputBuffer,
+ .getOutputBuffer = mediacodec_jni_getOutputBuffer,
+
+ .dequeueInputBuffer = mediacodec_jni_dequeueInputBuffer,
+ .queueInputBuffer = mediacodec_jni_queueInputBuffer,
+
+ .dequeueOutputBuffer = mediacodec_jni_dequeueOutputBuffer,
+ .getOutputFormat = mediacodec_jni_getOutputFormat,
+
+ .releaseOutputBuffer = mediacodec_jni_releaseOutputBuffer,
+ .releaseOutputBufferAtTime = mediacodec_jni_releaseOutputBufferAtTime,
+
+ .infoTryAgainLater = mediacodec_jni_infoTryAgainLater,
+ .infoOutputBuffersChanged = mediacodec_jni_infoOutputBuffersChanged,
+ .infoOutputFormatChanged = mediacodec_jni_infoOutputFormatChanged,
+
+ .getBufferFlagCodecConfig = mediacodec_jni_getBufferFlagCodecConfig,
+ .getBufferFlagEndOfStream = mediacodec_jni_getBufferFlagEndOfStream,
+ .getBufferFlagKeyFrame = mediacodec_jni_getBufferFlagKeyFrame,
+
+ .getConfigureFlagEncode = mediacodec_jni_getConfigureFlagEncode,
+ .cleanOutputBuffers = mediacodec_jni_cleanOutputBuffers,
+};
+
+FFAMediaFormat *ff_AMediaFormat_new(void)
+{
+ return media_format_jni.create();
+}
+
+FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name)
+{
+ return media_codec_jni.createCodecByName(name);
+}
+
+FFAMediaCodec* ff_AMediaCodec_createDecoderByType(const char *mime_type)
+{
+ return media_codec_jni.createDecoderByType(mime_type);
+}
+
+FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime_type)
+{
+ return media_codec_jni.createEncoderByType(mime_type);
+}
+
int ff_Build_SDK_INT(AVCodecContext *avctx)
{
int ret = -1;