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



