过去两周我一直在试验 FFMpeg,但遇到了一些麻烦……首先我一直在使用 Galaxy S3,它工作得非常好,给了我有史以来最好的照片,但我最近切换到一个 Galaxy NEXUS 给我带来了一堆问题......
我在做什么:我只是从视频中提取帧
我在做什么:
while(av_read_frame(gFormatCtx, &packet)>=0)
{
// Is this a packet from the video stream?
if(packet.stream_index==videoStream)
{
// Decode video frame
avcodec_decode_video2(gVideoCodecCtx, pFrame, &frameFinished, &packet);
// Did we get a video frame?
if(frameFinished)
{//and so on... But our problem is already here...
好的,现在pFrame
持有我的框架的 YUV 表示......所以,为了检查我从avcodec_decode_video2(...)
函数中得到的内容,我只是写入pFrame
一个文件,这样我就可以使用网络上的任何 YUV 阅读器查看它。
char yuvFileName[100];
sprintf(yuvFileName,"/storage/sdcard0/yuv%d.yuv",index);
FILE* fp = fopen(yuvFileName, "wb");
int y;
// Write pixel data
for(y=0; y<gVideoCodecCtx->height; y++)
{
fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, gVideoCodecCtx->width, fp);
}
for(y=0; y<gVideoCodecCtx->height/2; y++)
{
fwrite(pFrame->data[1]+y*pFrame->linesize[1], 1, gVideoCodecCtx->width/2, fp);
}
for(y=0; y<gVideoCodecCtx->height/2; y++)
{
fwrite(pFrame->data[2]+y*pFrame->linesize[2], 1, gVideoCodecCtx->width/2, fp);
}
fclose(fp);
好的,现在我的结果在/storage/sdcard0/blabla.YUV
我的 Galaxy Nexus 根内存上的文件存储 @ 上。
但是如果我用(例如 XnView,它旨在正确显示 YUV 类型)打开文件,我只会在图片上看到深绿色。
令我困扰的是,Galaxy S3 上一切正常,但 GNexus 上出现故障......
所以这是我的问题:为什么它在 Galaxy Nexus 上不起作用?
Gnexus 和 armeabiv7 之间的兼容性问题?
我不知道 !
问候, 切姆