0

ビデオをデコードし、フレームを rgb32 または gb565le 形式に変換しようとしています。

次に、このフレームを C から Android バッファに JNI で渡します。

これまでのところ、C から Android にバッファを渡す方法と、ビデオをデコードしてデコードされたフレームを取得する方法を知っています。

私の質問は、デコードされたフレームを rgb32 (または rgb565le) に変換する方法と、それがどこに保存されるかです。

以下は私のコードです。正しいかどうかはわかりません。

-ジャーゴ


img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, 100, 100, PIX_FMT_RGB32, SWS_BICUBIC, NULL, NULL, NULL);
if(!img_convert_ctx) return -6;

while(av_read_frame(pFormatCtx, &packet) >= 0) {
   // Is this a packet from the video stream?
   if(packet.stream_index == videoStream) {
       avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

       // Did we get a video frame?
       if(frameFinished) {
            AVPicture pict;

            if(avpicture_alloc(&pict, PIX_FMT_RGB32, 100, 100) >= 0) {
                sws_scale(img_convert_ctx, (const uint8_t * const *)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pict.data, pict.linesize);
            }
       } // End of if( frameFinished )
   } // End of if( packet.stream_index == videoStream )

   // Free the packet that was allocated by av_read_frame
   av_free_packet(&packet);
}
4

1 に答える 1