@ -283,36 +283,28 @@ struct FFAMediaCodec {
int has_get_i_o_buffer ;
int has_get_i_o_buffer ;
} ;
} ;
# define JNI_ATTACH_ENV_OR_RETURN(env, attached, log_ctx, ret) do { \
# define JNI_GET_ENV_OR_RETURN(env, log_ctx, ret) do { \
( env ) = ff_jni_attach _env ( attached , log_ctx ) ; \
( env ) = ff_jni_get _env ( log_ctx ) ; \
if ( ! ( env ) ) { \
if ( ! ( env ) ) { \
return ret ; \
return ret ; \
} \
} \
} while ( 0 )
} while ( 0 )
# define JNI_ATTACH_ENV_OR_RETURN_VOID(env, attached, log_ctx) do { \
# define JNI_GET_ENV_OR_RETURN_VOID(env, log_ctx) do { \
( env ) = ff_jni_attach _env ( attached , log_ctx ) ; \
( env ) = ff_jni_get _env ( log_ctx ) ; \
if ( ! ( env ) ) { \
if ( ! ( env ) ) { \
return ; \
return ; \
} \
} \
} while ( 0 )
} while ( 0 )
# define JNI_DETACH_ENV(attached, log_ctx) do { \
if ( attached ) \
ff_jni_detach_env ( log_ctx ) ; \
} while ( 0 )
int ff_AMediaCodecProfile_getProfileFromAVCodecContext ( AVCodecContext * avctx )
int ff_AMediaCodecProfile_getProfileFromAVCodecContext ( AVCodecContext * avctx )
{
{
int ret = - 1 ;
int ret = - 1 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
struct JNIAMediaCodecListFields jfields = { 0 } ;
struct JNIAMediaCodecListFields jfields = { 0 } ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , avctx , - 1 ) ;
JNI_GET _ENV_OR_RETURN ( env , avctx , - 1 ) ;
if ( ff_jni_init_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , avctx ) < 0 ) {
if ( ff_jni_init_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , avctx ) < 0 ) {
goto done ;
goto done ;
@ -362,8 +354,6 @@ int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx)
done :
done :
ff_jni_reset_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , avctx ) ;
ff_jni_reset_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , avctx ) ;
JNI_DETACH_ENV ( attached , avctx ) ;
return ret ;
return ret ;
}
}
@ -376,7 +366,6 @@ char *ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int e
char * name = NULL ;
char * name = NULL ;
char * supported_type = NULL ;
char * supported_type = NULL ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
struct JNIAMediaCodecListFields jfields = { 0 } ;
struct JNIAMediaCodecListFields jfields = { 0 } ;
struct JNIAMediaFormatFields mediaformat_jfields = { 0 } ;
struct JNIAMediaFormatFields mediaformat_jfields = { 0 } ;
@ -393,7 +382,7 @@ char *ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int e
jobject profile_level = NULL ;
jobject profile_level = NULL ;
jobjectArray profile_levels = NULL ;
jobjectArray profile_levels = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , log_ctx , NULL ) ;
JNI_GET _ENV_OR_RETURN ( env , log_ctx , NULL ) ;
if ( ( ret = ff_jni_init_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , log_ctx ) ) < 0 ) {
if ( ( ret = ff_jni_init_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , log_ctx ) ) < 0 ) {
goto done ;
goto done ;
@ -588,8 +577,6 @@ done:
ff_jni_reset_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , log_ctx ) ;
ff_jni_reset_jfields ( env , & jfields , jni_amediacodeclist_mapping , 0 , log_ctx ) ;
ff_jni_reset_jfields ( env , & mediaformat_jfields , jni_amediaformat_mapping , 0 , log_ctx ) ;
ff_jni_reset_jfields ( env , & mediaformat_jfields , jni_amediaformat_mapping , 0 , log_ctx ) ;
JNI_DETACH_ENV ( attached , log_ctx ) ;
if ( ! found_codec ) {
if ( ! found_codec ) {
av_freep ( & name ) ;
av_freep ( & name ) ;
}
}
@ -599,7 +586,6 @@ done:
FFAMediaFormat * ff_AMediaFormat_new ( void )
FFAMediaFormat * ff_AMediaFormat_new ( void )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
FFAMediaFormat * format = NULL ;
FFAMediaFormat * format = NULL ;
@ -609,7 +595,7 @@ FFAMediaFormat *ff_AMediaFormat_new(void)
}
}
format - > class = & amediaformat_class ;
format - > class = & amediaformat_class ;
env = ff_jni_attach_env ( & attached , format ) ;
env = ff_jni_get_env ( format ) ;
if ( ! env ) {
if ( ! env ) {
av_freep ( & format ) ;
av_freep ( & format ) ;
return NULL ;
return NULL ;
@ -629,14 +615,10 @@ FFAMediaFormat *ff_AMediaFormat_new(void)
goto fail ;
goto fail ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return format ;
return format ;
fail :
fail :
ff_jni_reset_jfields ( env , & format - > jfields , jni_amediaformat_mapping , 1 , format ) ;
ff_jni_reset_jfields ( env , & format - > jfields , jni_amediaformat_mapping , 1 , format ) ;
JNI_DETACH_ENV ( attached , format ) ;
av_freep ( & format ) ;
av_freep ( & format ) ;
return NULL ;
return NULL ;
@ -644,7 +626,6 @@ fail:
static FFAMediaFormat * ff_AMediaFormat_newFromObject ( void * object )
static FFAMediaFormat * ff_AMediaFormat_newFromObject ( void * object )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
FFAMediaFormat * format = NULL ;
FFAMediaFormat * format = NULL ;
@ -654,7 +635,7 @@ static FFAMediaFormat *ff_AMediaFormat_newFromObject(void *object)
}
}
format - > class = & amediaformat_class ;
format - > class = & amediaformat_class ;
env = ff_jni_attach_env ( & attached , format ) ;
env = ff_jni_get_env ( format ) ;
if ( ! env ) {
if ( ! env ) {
av_freep ( & format ) ;
av_freep ( & format ) ;
return NULL ;
return NULL ;
@ -669,14 +650,10 @@ static FFAMediaFormat *ff_AMediaFormat_newFromObject(void *object)
goto fail ;
goto fail ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return format ;
return format ;
fail :
fail :
ff_jni_reset_jfields ( env , & format - > jfields , jni_amediaformat_mapping , 1 , format ) ;
ff_jni_reset_jfields ( env , & format - > jfields , jni_amediaformat_mapping , 1 , format ) ;
JNI_DETACH_ENV ( attached , format ) ;
av_freep ( & format ) ;
av_freep ( & format ) ;
return NULL ;
return NULL ;
@ -686,22 +663,19 @@ int ff_AMediaFormat_delete(FFAMediaFormat* format)
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
if ( ! format ) {
if ( ! format ) {
return 0 ;
return 0 ;
}
}
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , format , AVERROR_EXTERNAL ) ;
( * env ) - > DeleteGlobalRef ( env , format - > object ) ;
( * env ) - > DeleteGlobalRef ( env , format - > object ) ;
format - > object = NULL ;
format - > object = NULL ;
ff_jni_reset_jfields ( env , & format - > jfields , jni_amediaformat_mapping , 1 , format ) ;
ff_jni_reset_jfields ( env , & format - > jfields , jni_amediaformat_mapping , 1 , format ) ;
JNI_DETACH_ENV ( attached , format ) ;
av_freep ( & format ) ;
av_freep ( & format ) ;
return ret ;
return ret ;
@ -711,13 +685,12 @@ char* ff_AMediaFormat_toString(FFAMediaFormat* format)
{
{
char * ret = NULL ;
char * ret = NULL ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring description = NULL ;
jstring description = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , NULL ) ;
JNI_GET _ENV_OR_RETURN ( env , format , NULL ) ;
description = ( * env ) - > CallObjectMethod ( env , format - > object , format - > jfields . to_string_id ) ;
description = ( * env ) - > CallObjectMethod ( env , format - > object , format - > jfields . to_string_id ) ;
if ( ff_jni_exception_check ( env , 1 , NULL ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , NULL ) < 0 ) {
@ -726,13 +699,10 @@ char* ff_AMediaFormat_toString(FFAMediaFormat* format)
ret = ff_jni_jstring_to_utf_chars ( env , description , format ) ;
ret = ff_jni_jstring_to_utf_chars ( env , description , format ) ;
fail :
fail :
if ( description ) {
if ( description ) {
( * env ) - > DeleteLocalRef ( env , description ) ;
( * env ) - > DeleteLocalRef ( env , description ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return ret ;
return ret ;
}
}
@ -740,13 +710,12 @@ int ff_AMediaFormat_getInt32(FFAMediaFormat* format, const char *name, int32_t *
{
{
int ret = 1 ;
int ret = 1 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , 0 ) ;
JNI_GET _ENV_OR_RETURN ( env , format , 0 ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -766,8 +735,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , key ) ;
( * env ) - > DeleteLocalRef ( env , key ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return ret ;
return ret ;
}
}
@ -775,13 +742,12 @@ int ff_AMediaFormat_getInt64(FFAMediaFormat* format, const char *name, int64_t *
{
{
int ret = 1 ;
int ret = 1 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , 0 ) ;
JNI_GET _ENV_OR_RETURN ( env , format , 0 ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -801,8 +767,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , key ) ;
( * env ) - > DeleteLocalRef ( env , key ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return ret ;
return ret ;
}
}
@ -810,13 +774,12 @@ int ff_AMediaFormat_getFloat(FFAMediaFormat* format, const char *name, float *ou
{
{
int ret = 1 ;
int ret = 1 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , 0 ) ;
JNI_GET _ENV_OR_RETURN ( env , format , 0 ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -836,8 +799,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , key ) ;
( * env ) - > DeleteLocalRef ( env , key ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return ret ;
return ret ;
}
}
@ -845,14 +806,13 @@ int ff_AMediaFormat_getBuffer(FFAMediaFormat* format, const char *name, void** d
{
{
int ret = 1 ;
int ret = 1 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
jobject result = NULL ;
jobject result = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , 0 ) ;
JNI_GET _ENV_OR_RETURN ( env , format , 0 ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -890,8 +850,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , result ) ;
( * env ) - > DeleteLocalRef ( env , result ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return ret ;
return ret ;
}
}
@ -899,14 +857,13 @@ int ff_AMediaFormat_getString(FFAMediaFormat* format, const char *name, const ch
{
{
int ret = 1 ;
int ret = 1 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
jstring result = NULL ;
jstring result = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , format , 0 ) ;
JNI_GET _ENV_OR_RETURN ( env , format , 0 ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -936,20 +893,17 @@ fail:
( * env ) - > DeleteLocalRef ( env , result ) ;
( * env ) - > DeleteLocalRef ( env , result ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
return ret ;
return ret ;
}
}
void ff_AMediaFormat_setInt32 ( FFAMediaFormat * format , const char * name , int32_t value )
void ff_AMediaFormat_setInt32 ( FFAMediaFormat * format , const char * name , int32_t value )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN_VOID ( env , & attached , format ) ;
JNI_GET _ENV_OR_RETURN_VOID ( env , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -965,19 +919,16 @@ fail:
if ( key ) {
if ( key ) {
( * env ) - > DeleteLocalRef ( env , key ) ;
( * env ) - > DeleteLocalRef ( env , key ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
}
}
void ff_AMediaFormat_setInt64 ( FFAMediaFormat * format , const char * name , int64_t value )
void ff_AMediaFormat_setInt64 ( FFAMediaFormat * format , const char * name , int64_t value )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN_VOID ( env , & attached , format ) ;
JNI_GET _ENV_OR_RETURN_VOID ( env , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -993,19 +944,16 @@ fail:
if ( key ) {
if ( key ) {
( * env ) - > DeleteLocalRef ( env , key ) ;
( * env ) - > DeleteLocalRef ( env , key ) ;
}
}
JNI_DETACH_ENV ( attached , NULL ) ;
}
}
void ff_AMediaFormat_setFloat ( FFAMediaFormat * format , const char * name , float value )
void ff_AMediaFormat_setFloat ( FFAMediaFormat * format , const char * name , float value )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN_VOID ( env , & attached , format ) ;
JNI_GET _ENV_OR_RETURN_VOID ( env , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -1021,20 +969,17 @@ fail:
if ( key ) {
if ( key ) {
( * env ) - > DeleteLocalRef ( env , key ) ;
( * env ) - > DeleteLocalRef ( env , key ) ;
}
}
JNI_DETACH_ENV ( attached , NULL ) ;
}
}
void ff_AMediaFormat_setString ( FFAMediaFormat * format , const char * name , const char * value )
void ff_AMediaFormat_setString ( FFAMediaFormat * format , const char * name , const char * value )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
jstring string = NULL ;
jstring string = NULL ;
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN_VOID ( env , & attached , format ) ;
JNI_GET _ENV_OR_RETURN_VOID ( env , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -1059,13 +1004,10 @@ fail:
if ( string ) {
if ( string ) {
( * env ) - > DeleteLocalRef ( env , string ) ;
( * env ) - > DeleteLocalRef ( env , string ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
}
}
void ff_AMediaFormat_setBuffer ( FFAMediaFormat * format , const char * name , void * data , size_t size )
void ff_AMediaFormat_setBuffer ( FFAMediaFormat * format , const char * name , void * data , size_t size )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jstring key = NULL ;
jstring key = NULL ;
jobject buffer = NULL ;
jobject buffer = NULL ;
@ -1073,7 +1015,7 @@ void ff_AMediaFormat_setBuffer(FFAMediaFormat* format, const char* name, void* d
av_assert0 ( format ! = NULL ) ;
av_assert0 ( format ! = NULL ) ;
JNI_ATTACH _ENV_OR_RETURN_VOID ( env , & attached , format ) ;
JNI_GET _ENV_OR_RETURN_VOID ( env , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
key = ff_jni_utf_chars_to_jstring ( env , name , format ) ;
if ( ! key ) {
if ( ! key ) {
@ -1109,17 +1051,14 @@ fail:
if ( buffer ) {
if ( buffer ) {
( * env ) - > DeleteLocalRef ( env , buffer ) ;
( * env ) - > DeleteLocalRef ( env , buffer ) ;
}
}
JNI_DETACH_ENV ( attached , format ) ;
}
}
static int codec_init_static_fields ( FFAMediaCodec * codec )
static int codec_init_static_fields ( FFAMediaCodec * codec )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
codec - > INFO_TRY_AGAIN_LATER = ( * env ) - > GetStaticIntField ( env , codec - > jfields . mediacodec_class , codec - > jfields . info_try_again_later_id ) ;
codec - > INFO_TRY_AGAIN_LATER = ( * env ) - > GetStaticIntField ( env , codec - > jfields . mediacodec_class , codec - > jfields . info_try_again_later_id ) ;
if ( ( ret = ff_jni_exception_check ( env , 1 , codec ) ) < 0 ) {
if ( ( ret = ff_jni_exception_check ( env , 1 , codec ) ) < 0 ) {
@ -1164,14 +1103,12 @@ static int codec_init_static_fields(FFAMediaCodec *codec)
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , NULL ) ;
return ret ;
return ret ;
}
}
FFAMediaCodec * ff_AMediaCodec_createCodecByName ( const char * name )
FFAMediaCodec * ff_AMediaCodec_createCodecByName ( const char * name )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
FFAMediaCodec * codec = NULL ;
FFAMediaCodec * codec = NULL ;
jstring codec_name = NULL ;
jstring codec_name = NULL ;
@ -1182,7 +1119,7 @@ FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name)
}
}
codec - > class = & amediacodec_class ;
codec - > class = & amediacodec_class ;
env = ff_jni_attach_env ( & attached , codec ) ;
env = ff_jni_get_env ( codec ) ;
if ( ! env ) {
if ( ! env ) {
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return NULL ;
return NULL ;
@ -1215,8 +1152,6 @@ FFAMediaCodec* ff_AMediaCodec_createCodecByName(const char *name)
codec - > has_get_i_o_buffer = 1 ;
codec - > has_get_i_o_buffer = 1 ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
return codec ;
return codec ;
fail :
fail :
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
@ -1225,8 +1160,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , codec_name ) ;
( * env ) - > DeleteLocalRef ( env , codec_name ) ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return NULL ;
return NULL ;
@ -1234,7 +1167,6 @@ fail:
FFAMediaCodec * ff_AMediaCodec_createDecoderByType ( const char * mime )
FFAMediaCodec * ff_AMediaCodec_createDecoderByType ( const char * mime )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
FFAMediaCodec * codec = NULL ;
FFAMediaCodec * codec = NULL ;
jstring mime_type = NULL ;
jstring mime_type = NULL ;
@ -1245,7 +1177,7 @@ FFAMediaCodec* ff_AMediaCodec_createDecoderByType(const char *mime)
}
}
codec - > class = & amediacodec_class ;
codec - > class = & amediacodec_class ;
env = ff_jni_attach_env ( & attached , codec ) ;
env = ff_jni_get_env ( codec ) ;
if ( ! env ) {
if ( ! env ) {
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return NULL ;
return NULL ;
@ -1278,8 +1210,6 @@ FFAMediaCodec* ff_AMediaCodec_createDecoderByType(const char *mime)
codec - > has_get_i_o_buffer = 1 ;
codec - > has_get_i_o_buffer = 1 ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
return codec ;
return codec ;
fail :
fail :
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
@ -1288,8 +1218,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , mime_type ) ;
( * env ) - > DeleteLocalRef ( env , mime_type ) ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return NULL ;
return NULL ;
@ -1297,7 +1225,6 @@ fail:
FFAMediaCodec * ff_AMediaCodec_createEncoderByType ( const char * mime )
FFAMediaCodec * ff_AMediaCodec_createEncoderByType ( const char * mime )
{
{
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
FFAMediaCodec * codec = NULL ;
FFAMediaCodec * codec = NULL ;
jstring mime_type = NULL ;
jstring mime_type = NULL ;
@ -1308,7 +1235,7 @@ FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime)
}
}
codec - > class = & amediacodec_class ;
codec - > class = & amediacodec_class ;
env = ff_jni_attach_env ( & attached , codec ) ;
env = ff_jni_get_env ( codec ) ;
if ( ! env ) {
if ( ! env ) {
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return NULL ;
return NULL ;
@ -1341,8 +1268,6 @@ FFAMediaCodec* ff_AMediaCodec_createEncoderByType(const char *mime)
codec - > has_get_i_o_buffer = 1 ;
codec - > has_get_i_o_buffer = 1 ;
}
}
JNI_DETACH_ENV ( attached , NULL ) ;
return codec ;
return codec ;
fail :
fail :
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
@ -1351,8 +1276,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , mime_type ) ;
( * env ) - > DeleteLocalRef ( env , mime_type ) ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return NULL ;
return NULL ;
@ -1362,14 +1285,13 @@ int ff_AMediaCodec_delete(FFAMediaCodec* codec)
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
if ( ! codec ) {
if ( ! codec ) {
return 0 ;
return 0 ;
}
}
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . release_id ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . release_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1381,8 +1303,6 @@ int ff_AMediaCodec_delete(FFAMediaCodec* codec)
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
ff_jni_reset_jfields ( env , & codec - > jfields , jni_amediacodec_mapping , 1 , codec ) ;
JNI_DETACH_ENV ( attached , codec ) ;
av_freep ( & codec ) ;
av_freep ( & codec ) ;
return ret ;
return ret ;
@ -1391,11 +1311,10 @@ int ff_AMediaCodec_delete(FFAMediaCodec* codec)
char * ff_AMediaCodec_getName ( FFAMediaCodec * codec )
char * ff_AMediaCodec_getName ( FFAMediaCodec * codec )
{
{
char * ret = NULL ;
char * ret = NULL ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jobject * name = NULL ;
jobject * name = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , NULL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , NULL ) ;
name = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_name_id ) ;
name = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_name_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1405,18 +1324,15 @@ char *ff_AMediaCodec_getName(FFAMediaCodec *codec)
ret = ff_jni_jstring_to_utf_chars ( env , name , codec ) ;
ret = ff_jni_jstring_to_utf_chars ( env , name , codec ) ;
fail :
fail :
JNI_DETACH_ENV ( attached , NULL ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_configure ( FFAMediaCodec * codec , const FFAMediaFormat * format , void * surface , void * crypto , uint32_t flags )
int ff_AMediaCodec_configure ( FFAMediaCodec * codec , const FFAMediaFormat * format , void * surface , void * crypto , uint32_t flags )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . configure_id , format - > object , surface , NULL , flags ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . configure_id , format - > object , surface , NULL , flags ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1425,18 +1341,15 @@ int ff_AMediaCodec_configure(FFAMediaCodec* codec, const FFAMediaFormat* format,
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , NULL ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_start ( FFAMediaCodec * codec )
int ff_AMediaCodec_start ( FFAMediaCodec * codec )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . start_id ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . start_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1445,18 +1358,15 @@ int ff_AMediaCodec_start(FFAMediaCodec* codec)
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_stop ( FFAMediaCodec * codec )
int ff_AMediaCodec_stop ( FFAMediaCodec * codec )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . stop_id ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . stop_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1465,18 +1375,15 @@ int ff_AMediaCodec_stop(FFAMediaCodec* codec)
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_flush ( FFAMediaCodec * codec )
int ff_AMediaCodec_flush ( FFAMediaCodec * codec )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . flush_id ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . flush_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1485,18 +1392,15 @@ int ff_AMediaCodec_flush(FFAMediaCodec* codec)
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_releaseOutputBuffer ( FFAMediaCodec * codec , size_t idx , int render )
int ff_AMediaCodec_releaseOutputBuffer ( FFAMediaCodec * codec , size_t idx , int render )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . release_output_buffer_id , idx , render ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . release_output_buffer_id , idx , render ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1505,18 +1409,15 @@ int ff_AMediaCodec_releaseOutputBuffer(FFAMediaCodec* codec, size_t idx, int ren
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_releaseOutputBufferAtTime ( FFAMediaCodec * codec , size_t idx , int64_t timestampNs )
int ff_AMediaCodec_releaseOutputBufferAtTime ( FFAMediaCodec * codec , size_t idx , int64_t timestampNs )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . release_output_buffer_at_time_id , idx , timestampNs ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . release_output_buffer_at_time_id , idx , timestampNs ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1525,18 +1426,15 @@ int ff_AMediaCodec_releaseOutputBufferAtTime(FFAMediaCodec *codec, size_t idx, i
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
ssize_t ff_AMediaCodec_dequeueInputBuffer ( FFAMediaCodec * codec , int64_t timeoutUs )
ssize_t ff_AMediaCodec_dequeueInputBuffer ( FFAMediaCodec * codec , int64_t timeoutUs )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
ret = ( * env ) - > CallIntMethod ( env , codec - > object , codec - > jfields . dequeue_input_buffer_id , timeoutUs ) ;
ret = ( * env ) - > CallIntMethod ( env , codec - > object , codec - > jfields . dequeue_input_buffer_id , timeoutUs ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1545,18 +1443,15 @@ ssize_t ff_AMediaCodec_dequeueInputBuffer(FFAMediaCodec* codec, int64_t timeoutU
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
int ff_AMediaCodec_queueInputBuffer ( FFAMediaCodec * codec , size_t idx , off_t offset , size_t size , uint64_t time , uint32_t flags )
int ff_AMediaCodec_queueInputBuffer ( FFAMediaCodec * codec , size_t idx , off_t offset , size_t size , uint64_t time , uint32_t flags )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . queue_input_buffer_id , idx , offset , size , time , flags ) ;
( * env ) - > CallVoidMethod ( env , codec - > object , codec - > jfields . queue_input_buffer_id , idx , offset , size , time , flags ) ;
if ( ( ret = ff_jni_exception_check ( env , 1 , codec ) ) < 0 ) {
if ( ( ret = ff_jni_exception_check ( env , 1 , codec ) ) < 0 ) {
@ -1565,20 +1460,17 @@ int ff_AMediaCodec_queueInputBuffer(FFAMediaCodec* codec, size_t idx, off_t offs
}
}
fail :
fail :
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
ssize_t ff_AMediaCodec_dequeueOutputBuffer ( FFAMediaCodec * codec , FFAMediaCodecBufferInfo * info , int64_t timeoutUs )
ssize_t ff_AMediaCodec_dequeueOutputBuffer ( FFAMediaCodec * codec , FFAMediaCodecBufferInfo * info , int64_t timeoutUs )
{
{
int ret = 0 ;
int ret = 0 ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jobject mediainfo = NULL ;
jobject mediainfo = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , AVERROR_EXTERNAL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , AVERROR_EXTERNAL ) ;
mediainfo = ( * env ) - > NewObject ( env , codec - > jfields . mediainfo_class , codec - > jfields . init_id ) ;
mediainfo = ( * env ) - > NewObject ( env , codec - > jfields . mediainfo_class , codec - > jfields . init_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1620,20 +1512,17 @@ fail:
( * env ) - > DeleteLocalRef ( env , mediainfo ) ;
( * env ) - > DeleteLocalRef ( env , mediainfo ) ;
}
}
JNI_DETACH_ENV ( attached , NULL ) ;
return ret ;
return ret ;
}
}
uint8_t * ff_AMediaCodec_getInputBuffer ( FFAMediaCodec * codec , size_t idx , size_t * out_size )
uint8_t * ff_AMediaCodec_getInputBuffer ( FFAMediaCodec * codec , size_t idx , size_t * out_size )
{
{
uint8_t * ret = NULL ;
uint8_t * ret = NULL ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jobject buffer = NULL ;
jobject buffer = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , NULL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , NULL ) ;
if ( codec - > has_get_i_o_buffer ) {
if ( codec - > has_get_i_o_buffer ) {
buffer = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_input_buffer_id , idx ) ;
buffer = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_input_buffer_id , idx ) ;
@ -1666,20 +1555,17 @@ fail:
( * env ) - > DeleteLocalRef ( env , buffer ) ;
( * env ) - > DeleteLocalRef ( env , buffer ) ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
uint8_t * ff_AMediaCodec_getOutputBuffer ( FFAMediaCodec * codec , size_t idx , size_t * out_size )
uint8_t * ff_AMediaCodec_getOutputBuffer ( FFAMediaCodec * codec , size_t idx , size_t * out_size )
{
{
uint8_t * ret = NULL ;
uint8_t * ret = NULL ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jobject buffer = NULL ;
jobject buffer = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , NULL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , NULL ) ;
if ( codec - > has_get_i_o_buffer ) {
if ( codec - > has_get_i_o_buffer ) {
buffer = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_output_buffer_id , idx ) ;
buffer = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_output_buffer_id , idx ) ;
@ -1712,20 +1598,17 @@ fail:
( * env ) - > DeleteLocalRef ( env , buffer ) ;
( * env ) - > DeleteLocalRef ( env , buffer ) ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
FFAMediaFormat * ff_AMediaCodec_getOutputFormat ( FFAMediaCodec * codec )
FFAMediaFormat * ff_AMediaCodec_getOutputFormat ( FFAMediaCodec * codec )
{
{
FFAMediaFormat * ret = NULL ;
FFAMediaFormat * ret = NULL ;
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
jobject mediaformat = NULL ;
jobject mediaformat = NULL ;
JNI_ATTACH _ENV_OR_RETURN ( env , & attached , codec , NULL ) ;
JNI_GET _ENV_OR_RETURN ( env , codec , NULL ) ;
mediaformat = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_output_format_id ) ;
mediaformat = ( * env ) - > CallObjectMethod ( env , codec - > object , codec - > jfields . get_output_format_id ) ;
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
if ( ff_jni_exception_check ( env , 1 , codec ) < 0 ) {
@ -1738,8 +1621,6 @@ fail:
( * env ) - > DeleteLocalRef ( env , mediaformat ) ;
( * env ) - > DeleteLocalRef ( env , mediaformat ) ;
}
}
JNI_DETACH_ENV ( attached , codec ) ;
return ret ;
return ret ;
}
}
@ -1784,10 +1665,9 @@ int ff_AMediaCodec_cleanOutputBuffers(FFAMediaCodec *codec)
if ( ! codec - > has_get_i_o_buffer ) {
if ( ! codec - > has_get_i_o_buffer ) {
if ( codec - > output_buffers ) {
if ( codec - > output_buffers ) {
int attached = 0 ;
JNIEnv * env = NULL ;
JNIEnv * env = NULL ;
env = ff_jni_attach_env ( & attached , codec ) ;
env = ff_jni_get_env ( codec ) ;
if ( ! env ) {
if ( ! env ) {
ret = AVERROR_EXTERNAL ;
ret = AVERROR_EXTERNAL ;
goto fail ;
goto fail ;
@ -1795,8 +1675,6 @@ int ff_AMediaCodec_cleanOutputBuffers(FFAMediaCodec *codec)
( * env ) - > DeleteGlobalRef ( env , codec - > output_buffers ) ;
( * env ) - > DeleteGlobalRef ( env , codec - > output_buffers ) ;
codec - > output_buffers = NULL ;
codec - > output_buffers = NULL ;
JNI_DETACH_ENV ( attached , codec ) ;
}
}
}
}