Android how to increase ffmpeg mp4 perfromance?

I found that the avcodec_decode_audio3 function works slowly with the mp4 format, here is my code loop for decoding audio:

 while (av_read_frame(av_format_context, &packet) >= 0 && is_play == 1) { if (av_codec_context->codec_type == AVMEDIA_TYPE_AUDIO && is_play == 1) { int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; int size = packet.size; int n; int dataLength = size; int decoded = 0; while (size > 0) { //start measure time gettimeofday(&tvBegin, NULL); int len = avcodec_decode_audio3(av_codec_context, (int16_t *) pAudioBuffer, &out_size, &packet); //stop measure time gettimeofday(&tvEnd, NULL); timeval_subtract(&tvDiff, &tvEnd, &tvBegin); LOGI("%d", tvDiff.tv_usec / 1000); LOGI("len='%d'", len); LOGI("out_size='%d'", out_size); if (len < 0) { break; return 1; } if (out_size > 0) { jbyte *bytes = (*env)->GetByteArrayElements(env, array, NULL); memcpy(bytes, (int16_t *) pAudioBuffer, out_size); (*env)->ReleaseByteArrayElements(env, array, bytes, 0); (*env)->CallVoidMethod(env, obj, play, array, out_size, is_play); } size -= len; } } if (packet.data) av_free_packet(&packet); } 

But with other formats like flac and mp3, it works great. avcodec_decode_audio3 takes about 1-2 milliseconds to decode an mp3 frame with out_size = 4608, but with the same frame size in mp4 decoding, it takes about 6-7 milliseconds. I got my build script from here .

Is this normal behavior? Is there a way to increase mp4 decoding performance?

0
source share
1 answer

u can search for hardware acceleration ...

"H / W accelerated decoding of H.264 on Android"

eg:

How to use hardware accelerated video decoding on Android?

http://readlist.com/lists/mplayerhq.hu/mplayer-users/5/26751.html

IMO - ffmpeg is still mostly used in software, but in newer versions of Android you can find some kind of stagefright API that provides an accelerated GPU way to access the framebuffer

+1
source

Source: https://habr.com/ru/post/1486316/


All Articles