Я разработал простое приложение для живых обоев. В этом я использовал две встроенные функции с именем captureWallpaper и DrawWallpaper. В этой функции обои Capture, как показано ниже
void Java_com_sample_NativeCalls_ captureWallpaper(JNIEnv * env, jobject this){
struct SwsContext *img_convert_ctx;
while(av_read_frame(pFormatCtx, &packet)>=0) {
if(packet.stream_index==videoStream) { avcodec_decode_video(pCodecCtx,
pFrame,
&frameFinished,
packet.data,
packet.size);
if(frameFinished) {
if(img_convert_ctx == NULL) {
w = pCodecCtx->width;
h = pCodecCtx->height;
__android_log_print(ANDROID_LOG_DEBUG,
"video.c",
"NDK: Cannot initialize the conversion context!"
);
img_convert_ctx =
sws_getContext(
w, h,
pCodecCtx->pix_fmt,
textureWidth,textureHeight,textureFormat,
SWS_FAST_BILINEAR,
NULL, NULL, NULL
);
if(img_convert_ctx == NULL) {
return;
}
}
sws_scale(img_convert_ctx,
pFrame->data,
pFrame->linesize,
0, pCodecCtx->height,
pFrameConverted->data,
pFrameConverted->linesize);
av_free_packet(&packet);
return;
}
}
av_free_packet(&packet);
}
av_seek_frame(pFormatCtx,videoStream,0,AVSEEK_FLAG_ANY);
}
После этого я использую эти функции в своем Java-коде в функции onDraw. Когда я снова и снова вызываю этот метод, моя оперативная память продолжает увеличиваться. Я думаю, что ссылка какого-либо одного объекта была создана, а не уничтожена. Любой, кто знает об этом, пожалуйста, помогите мне выйти из этого.