大家好!我有一个非常棘手的问题已经困扰了我很长一阵子!
前些日子我做了一个自定义Filter,可以播放网络上接收到的QCIF分辨率的图像(IYUV格式),本来程序工作已经很正常了,可后来重做了系统,再调试这个程序时,输出的视频就是花屏的,我试着只推送单一色彩的图片(即将视频缓冲区中的一帧全部填为128),发现输出的图像只有上半部分正常,下半部分全是绿色的。在检查了DxSDK版本,并全部重新编译后,问题依然存在。
后来仔细调试的过程中,我发现在FillBuffer函数中,得到的IMediaSample对象GetSize返回值比QCIF要大!正常来说,QCIF是176*144的分辨率,按照IYUV的存储格式应该占用176*144/2*3=38106大小的空间,而我的程序调试时,返回的IMediaSample对象缓冲区每次都是41472,而且无论我在DecideBufferSize函数中将缓冲区设置为多大,此时都会返回41472。后来我将分辨率设置为320*240,再运行程序,看到的结果就是正常的一张图片了。后来我算了一下41472这个数字,原来是 192*144/2*3=41472,为什么会这样呢?为什么176*144的分辨率不被支持呢?而且重装系统之前这个程序是好用的呀?
前些日子我做了一个自定义Filter,可以播放网络上接收到的QCIF分辨率的图像(IYUV格式),本来程序工作已经很正常了,可后来重做了系统,再调试这个程序时,输出的视频就是花屏的,我试着只推送单一色彩的图片(即将视频缓冲区中的一帧全部填为128),发现输出的图像只有上半部分正常,下半部分全是绿色的。在检查了DxSDK版本,并全部重新编译后,问题依然存在。
后来仔细调试的过程中,我发现在FillBuffer函数中,得到的IMediaSample对象GetSize返回值比QCIF要大!正常来说,QCIF是176*144的分辨率,按照IYUV的存储格式应该占用176*144/2*3=38106大小的空间,而我的程序调试时,返回的IMediaSample对象缓冲区每次都是41472,而且无论我在DecideBufferSize函数中将缓冲区设置为多大,此时都会返回41472。后来我将分辨率设置为320*240,再运行程序,看到的结果就是正常的一张图片了。后来我算了一下41472这个数字,原来是 192*144/2*3=41472,为什么会这样呢?为什么176*144的分辨率不被支持呢?而且重装系统之前这个程序是好用的呀?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货