gpt4 book ai didi

android - ffmpeg解码后的帧存储在哪里?

转载 作者:行者123 更新时间:2023-11-30 17:48:42 29 4
gpt4 key购买 nike

我尝试解码视频并将帧转换为 rgb32 或 gb565le 格式。

然后通过 JNI 将这个帧从 C 传递到 Android 缓冲区。

到目前为止,我知道如何将缓冲区从 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);
}

最佳答案

解码后的帧进入pict。 (pFrame 是原始帧。)

100x100 可能不好,您必须根据 pFrame 大小计算 pict 大小。我想它应该是 pFrame->width*pFrame->height*32;

您必须自己分配pict

请参阅本教程 http://dranger.com/ffmpeg/

关于android - ffmpeg解码后的帧存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18437486/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com