我正在使用MediaCodec来解码视频,并使用sws_scale(来自ffmpeg)重新调整它。我可以处理一种特殊的颜色格式,例如。 YUV420P,并将其重新缩放至目标尺寸。但是我必须做一些准备工作,比如将lineize和memcpy的输出缓冲区设置为三个普通切片(data [0],data [1],data [2]),并且解码器输出的颜色格式在不同的设备上有所不同。如果我得到colorformat,ffmpeg中是否有方法自动重新调整它的大小而不进行特殊处理(当然,颜色格式应该由ffmpeg支持)?如何从任何颜色格式的MediaCodec输出中缩放YUV图像?
回答
swscale/libavutil没有直接采用OMX(MediaCodec)颜色格式的功能,您需要手动映射格式。但是,您不需要将输出缓冲区memcpy分成三个单独的缓冲区,只需将三个数据指针data [0],data [1]和data [2]设置为从MediaCodec指向输出缓冲区(同一点在缓冲区中,否则您将会使用memcpied)。
正常的颜色格式(如YUV420P和NV12)应该可以正常工作,您只需要设置格式常量之间的映射。但是一些MediaCodec解码器(特别是Qualcomm解码器)通常使用专有的平铺格式,这需要更多的努力来解读,而swscale不直接支持该解码器,您需要自己解读。
这只是一个基于我在Raspberry Pi上的OMX经验的直观建议,但是,您可以检查Stagefright库是否提供任何类似于NDK的C/C++接口的OMX--在这种情况下,如果没有只有一个解码器组件和一个调整大小组件(例如Raspberry Pi有component),那么你可以制作一个OMX管道,然后组件可以自动协商这些格式,但这只是一个假设,我从来没有深入研究过Stagefright自己,我知道它的意图是从Java级别通过MediaCodec和其他类,但仍然可以看看。如果Stagefright具有这样的API,我可以提供一些OMX包装代码,以简化我为Raspberry Pi制作的组件的使用,因为从头开始构建OMX代码是相当多的工作。
编辑
我没多一些谷歌搜索这个,因为它似乎interresting,发现了一个NDK媒体sample - 以及它似乎是Broadcom公司执行OMX的不同之处很多,所以还是大多数的东西会被需要从scracth构建。你能解释一下为什么你需要这样做吗?如果目标只是显示解码流,则可以在Java级别设置预览表面,所以我认为解码的内容是其他的。
感谢Rudolfs.I在考虑使用Stagefright之前,但我只是不知道如何开始我的工作。首先它需要在android平台下构建Stagefright代码。其次,它需要研究API。并且我们想要做什么是Android开发团队的工作。你同意吗?所以我放弃了这个想法。 – 2014-10-17 07:49:26
你能解释一下为什么你需要重新缩放?你打算如何处理解码的视频? – 2014-10-17 07:52:41
因为我想将较小的比特率和大小的视频文件转码为上传。所以我使用MediaCodec,但它不能直接更改大小。 – 2014-10-17 11:15:30
- 1. android-MediaCodec解码器1080p输出yuv格式
- 2. 当我需要使用MediaCodec输出视频时,如何知道android设备上相机的YUV色彩格式?
- 3. Android的YUV图像格式
- 4. 如何获取像素缩放位图上的颜色值?
- 5. Java中图像的组合重新缩放和颜色缩减?
- 6. Android MediaCodec输出格式:GLES外部纹理(YUV/NV12)到GLES纹理(RGB)
- 7. Android中的YUV帧缩放
- 8. Java中的颜色缩放
- 9. 如何缩放边缘颜色igraph?
- 10. 缩放位图输出扭曲图像
- 11. 如何用输出颜色输出()
- 12. 如何找出图像中的“特定像素的颜色”?
- 13. 如何知道从缩放图像
- 14. 从RGB到YUV的颜色转换(YCoCg)
- 15. 如何将jdeveloper序列图导出为任何图像格式?
- 16. 总是会缩放的背景图像,以至于不会出现任何正常的背景颜色
- 17. JSP如何缩放图像?
- 18. 如何替换图像中的颜色?
- 19. 如何填充颜色完全像这个图像的颜色?
- 20. 滑出图像的颜色
- 21. 如何获取ColdFusion来缩放任何类型的图像?
- 22. 如何在ASP.Net中将图像从任何格式转换为JPG格式?
- 23. iphone:如何从图像中移除红色? (RGB颜色)
- 24. 我如何在汇编程序中放置位图或任何图像格式
- 25. 如何在xcode中缩放缩放的图像
- 26. 如何使背景图像从灰度淡入淡出颜色?
- 27. 如何以十六进制颜色(6位数)输出图像的每个像素的所有颜色
- 28. 带有颜色渐变的图像的最佳图像格式?
- 29. 如何在YUV格式的V位
- 30. 如何获取图像中像素的颜色(加载灰色)?
谢谢,mstorsjo.Yes,我知道我需要在ffmpeg中用pix_fmt映射MediaCodec颜色格式。除此之外,我必须设置数据指针并处理dest数据指针。如果这可以通过传递pix_fmt,这将非常美妙。因为有太多的格式需要处理。我发现av_image_alloc传回的行可能有一些帮助,但其他版本的大小(与hight的关系)也来自不同的pix_fmt。你有什么建议吗? – 2014-10-17 07:32:14