0

関数がmp4形式で遅く動作することを検出しavcodec_decode_audio3ました。ここでは、オーディオをデコードするためのコードサイクルです。

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);

    }

しかし、flacやmp3のような他のフォーマットでは、問題なく動作します。avcodec_decode_audio3= 4608でmp3フレームをデコードするには約1〜2ミリ秒かかりますout_sizeが、mp4デコードで同じフレームサイズの場合は約6〜7ミリ秒かかります。ここからビルドスクリプトを取得しました。

それは正常な動作ですか?mp4のデコードのパフォーマンスを向上させる方法はありますか?

4

1 に答える 1

1

ハードウェアアクセラレーションを検索できます...

「AndroidでのH/WアクセラレーションH.264デコード」

例えば:

Androidでハードウェアアクセラレーションによるビデオデコードを使用するにはどうすればよいですか?

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

IMO-ffmpegはまだほとんどソフトウェアに含まれていますが、新しいバージョンのandroidでは、フレームバッファーにアクセスするためのGPU高速化された方法を提供するstagefrightAPIを見つけることができるかもしれません。

于 2013-01-04T03:55:38.313 に答える