ffmpeg 对图像数据格式以及图片缩放
来源:互联网 发布:手机淘宝在哪里开直播 编辑:程序博客网 时间:2024/06/07 02:46
利用ffmpeg进行图像数据格式的转换以及图片的缩放应用中,主要用到了swscale.h文件中的三个函数,分别是:
struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param);
int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]);
void sws_freeContext(struct SwsContext *swsContext);
sws_getContext函数可以看做是初始化函数,它的参数定义分别为:
int srcW,int srcH 为原始图像数据的高和宽; int dstW,int dstH 为输出图像数据的高和宽; enum AVPixelFormat srcFormat 为输入和输出图片数据的类型;eg:AV_PIX_FMT_YUV420、PAV_PIX_FMT_RGB24; int flags 为scale算法种类;eg:SWS_FAST_BILINEAR,SWS_BICUBIC、SWS_BICUBLIN、SWS_POINT、SWS_SINC; SwsFilter *srcFilter ,SwsFilter *dstFilter,const double *param 可以不用管,全为NULL即可;
sws_scale函数则为执行函数,它的参数定义分别为:
struct SwsContext *c 为sws_getContext函数返回的值; const uint8_t *const srcSlice[],uint8_t *const dst[] 为输入输出图像数据各颜色通道的buffer指针数组; const int srcStride[],const int dstStride[] 为输入输出图像数据各颜色通道每行存储的字节数数组; int srcSliceY 为从输入图像数据的第多少列开始逐行扫描,通常设为0; int srcSliceH 为需要扫描多少行,通常为输入图像数据的高度;
sws_freeContext函数为结束函数,它的参数即为sws_getContext函数返回的值;
示例代码:rgb24_2_rgb24/1600*1200—352*288
//.h
[cpp] view plain copy #ifndef INT64_C #define INT64_C #define UINT64_C #endif extern "C" { #include "libswscale/swscale.h" } struct ImgInfo { unsigned int height; unsigned int width; unsigned long bufferSize; unsigned char *bufferPtr; }rawDate;
//.cpp
[cpp] view plain copy int nSrcH = rawData.height; //1200 int nSrcW = rawData.width; //1600 int nDstH = RESIZED_HIGHT; //258 int nDstW = RESIZED_WIDTH; //352 uint8_t *pSrcBuff[3] = {rawData.bufferPtr, rawData.bufferPtr + nSrcW * nSrcH, rawData.bufferPtr + nSrcW * nSrcH * 2}; uint8_t *pDstBuff[3] = {pResizedData->bufferPtr, pResizedData->bufferPtr + nDstW * nDstH, pResizedData->bufferPtr + nDstW * nDstH * 2}; int nSrcStride[3]; int nDstStride[3]; for (int i=0; i<3; i++) { nSrcStride[i] = nSrcW * 3; nDstStride[i] = nDstW * 3; } SwsContext* m_pSwsContext; m_pSwsContext = sws_getContext(nSrcW, nSrcH, AV_PIX_FMT_RGB24, nDstW, nDstH, AV_PIX_FMT_RGB24, SWS_SINC, NULL, NULL, NULL); if (NULL == m_pSwsContext) { printf("ffmpeg get context error!\n"); return false; } sws_scale(m_pSwsContext, pSrcBuff, nSrcStride, 0, nSrcH, pDstBuff, nDstStride); sws_freeContext(m_pSwsContext);
示例代码:rgb24_2_yuv420/1600*1200—352*288
//.cpp[cpp] view plain copy int nSrcH = rawData->height; //1200 int nSrcW = rawData->width; //1600 int nDstH = RESIZED_HIGHT; //288 int nDstW = RESIZED_WIDTH; //352 uint8_t *pSrcBuff[3] = {rawData->bufferPtr, rawData->bufferPtr + nSrcW * nSrcH, rawData->bufferPtr + nSrcW * nSrcH * 2}; uint8_t *pDstBuff[3] = {resizedYuvData->bufferPtr, resizedYuvData->bufferPtr + nDstW * nDstH, resizedYuvData->bufferPtr + nDstW * nDstH * 5 / 4}; int nSrcStride[3]; int nDstStride[3]; for (int i=0; i<3; i++) { nSrcStride[i] = nSrcW * 3; } nDstStride[0] = nDstW; nDstStride[1] = nDstW / 2; nDstStride[2] = nDstW / 2; SwsContext* m_pSwsContext; m_pSwsContext = sws_getContext(nSrcW, nSrcH, AV_PIX_FMT_RGB24, nDstW, nDstH, AV_PIX_FMT_YUV420P, SWS_SINC, NULL, NULL, NULL); if (NULL == m_pSwsContext) { printf("ffmpeg get context error!\n"); return false; } sws_scale(m_pSwsContext, pSrcBuff, nSrcStride, 0, nSrcH, pDstBuff, nDstStride); sws_freeContext(m_pSwsContext);
阅读全文
0 0
- ffmpeg 对图像数据格式以及图片缩放
- FFMPEG 图像拉伸缩放及数据格式转换
- FFMPEG 图像拉伸缩放及数据格式转换
- ffmpeg学习十三:图像数据格式的转换与图像的缩放
- Java对图片的处理---缩放图像、图像切割、图像类型转换、彩色转为黑白
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- gtk+ 下绘图及图片显示相结合并对图像进行缩放
- C# 对图片进行缩放
- android对图片进行缩放
- java代码对图片缩放
- PHP----图像处理类,可以完成对各种类型的图像进行缩放、加图片水印和剪裁的操作
- ios UIWebView截获html并修改便签内容以及用js对图片进行缩放
- ios UIWebView截获html并修改便签内容以及用js对图片进行缩放
- Go语言中对图像进行缩放
- OpenCV对图像进行缩放显示
- 如何自定义flask的响应类(customizing-the-flask-response-class)
- Js兼容性问题
- 笔记 jquery判断一个元素下面是否有内容
- C#面向对象
- nginx 跨域设置
- ffmpeg 对图像数据格式以及图片缩放
- java解析XML文件(DOM方式)
- css选择器
- Nginx静态资源POST请求返回405 Not Allowed的解决办法
- [JavaScript]ECMA-262-3 深入解析.第四章.函数
- php基本语法之一
- spring 中事务的隔离性。
- 用JAVA通过LDAP修改AD用户密码注意事项
- 回首Java——ArrayList vs. LinkedList vs. Vector