ffmpeg을 이용해서 작업중인데요. 현재 자바단에서 넘어온 버퍼를 비티맵으로 변환시켜 동영상을 보여주고 있는데요

nativePixels = ff.getNextDecodedFrame();

        if(nativePixels != null) {

        buffer = ByteBuffer.wrap(nativePixels);

            bitmap.copyPixelsFromBuffer(buffer);

        }

이게 생각보다 속도가 너무 느리더라구요;; 그래서 이걸 ndk단에서 copypixels이 되게 해주려고 하는데 어떤식으로 수정해야


될지 감이 안옵니다;;


현재 소스는 이렇게 되어있습니다.


int decodeFrame()

{

int frameFinished = 0;

av_free_packet(&packet);

while (av_read_frame(pFormatCtx, &packet) >= 0) {

if (packet.stream_index == videoStream) {

avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

if (frameFinished) {

img_convert_ctx = sws_getCachedContext(img_convert_ctx,

pCodecCtx->width, pCodecCtx->height, gVideoCodecCtx->pix_fmt,

pCodecCtx->width, pCodecCtx->height, PIX_FMT_RGB565LE, SWS_BICUBIC, NULL, NULL, NULL);


sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, gFrameRGB->data, gFrameRGB->linesize);

av_free_packet(&packet);

return 0;

}

}

av_free_packet(&packet);

}


return -1;

}


//copyPixels ndk에서 처리해주기

void copyPixels(uint8_t *pixels)

{

memcpy(pixels, pFrame->data[0], gPictureSize);

}

//렌더용 새로만들기

jint Java_test_renderFrame( JNIEnv* env, jobject thiz, jobject bitmap )

{

void *pixels;

int result;


if ((result = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0)

return result;


decoderFrame();

copyPixels((uint8_t*)pixels);

INFO("call copypixels");

AndroidBitmap_unlockPixels(env, bitmap);


}