Bonjour à tous,
j'ai actuellement un code jni (decoder h264 via ffmpeg) qui fonctionne quand il est utilisé par un thread.
Cependant mon application peut utiliser plusieurs instance de ce thread (jusqu'à 12) et donc devrait normalement avoir plusieurs décodeur.
Quand j'utilise plusieurs thread j'ai l'impression que le code JNI utilisé est le même et du coup ça me pose problème car l'intiialisation de mon code JNI n'est pas identique selon les threads et certaines variables globale au script jni sont partagées entre les thread ce qui ne devrait pas arrivé.
Exemple de mon code JNI
Dans mon thread je déclare
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 AVCodec *codec; AVCodecContext *codecCtx; AVFrame *frameSrc; AVFrame *frameRGBA; jboolean Java_pry_dpcom_net_ThreadVideo_init(JNIEnv* env,jobject obj, jint width, jint height) { frameRGBA = NULL; frameSrc = NULL; convertCtx = NULL; codecCtx = NULL; av_register_all(); codecCtx = avcodec_alloc_context3(NULL); codecCtx->width = width; codecCtx->height = height; codecCtx->pix_fmt = PIX_FMT_YUV420P; frameSrc = av_frame_alloc(); frameRGBA = av_frame_alloc(); int res = avcodec_open2(codecCtx, codec, NULL); if(res != 0) return JNI_FALSE; return JNI_TRUE; }
Et donc chaque thread lancé va faire un appel du type init(640,480);
Code : Sélectionner tout - Visualiser dans une fenêtre à part private native boolean init(int w,int h);
1- Est-il exacte qu'un même code JNI est commun à tout les thread l'utilisant ?
2- Si oui y'a t'il des solutions pour avoir une "instance" de code JNI par thread ?
Merci
Partager