当前位置: 首页 > news >正文

催收网站开发抚州市做棋牌网站

催收网站开发,抚州市做棋牌网站,南京网站制作招聘,扬州网站商城建设价格表本文主要梳理 ffmpeg 中的视频格式转换。由于上屏的数据是 rgba#xff0c;编码使用的是 yuv数据#xff0c;所以经常会使用到视频格式的转换。 除了使用 ffmpeg进行转换#xff0c;还可以通过 libyuv 和 directX 写 shader 进行转换。 之前看到文章说 libyuv 之前是 ffmpeg…本文主要梳理 ffmpeg 中的视频格式转换。由于上屏的数据是 rgba编码使用的是 yuv数据所以经常会使用到视频格式的转换。 除了使用 ffmpeg进行转换还可以通过 libyuv 和 directX 写 shader 进行转换。 之前看到文章说 libyuv 之前是 ffmpeg 的一部分后面独立出去了好像 libyuv 的效率会高一点没有实测过后面可以对比一下。 API 调用 常用 API struct SwsContext *sws_alloc_context(void); int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); void sws_freeContext(struct SwsContext *swsContext);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); struct SwsContext *sws_getCachedContext(struct SwsContext *context, 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[]); int sws_scale_frame(struct SwsContext *c, AVFrame *dst, const AVFrame *src);初始化和销毁相关 sws_alloc_context 创建 context 上下文结构体 sws_init_context 初始化 context 结构体不推荐使用 sws_freeContext 销毁结构体 SwsContext class 定义 libswscale\options.c const AVClass ff_sws_context_class {.class_name SWScaler,.item_name sws_context_to_name,.option swscale_options,.parent_log_context_offset OFFSET(parent),.category AV_CLASS_CATEGORY_SWSCALER,.version LIBAVUTIL_VERSION_INT, };sws_init_context 之前需要配置 context 一些参数才能正确初始化。 context sws_alloc_context()context-srcW srcW;context-srcH srcH;context-srcFormat srcFormat;context-dstW dstW;context-dstH dstH;context-dstFormat dstFormat;context-flags flags;context-param[0] param[0];context-param[1] param[1];sws_init_context(context, srcFilter, dstFilter)为了简化调用所以有了 sws_getContext 接口其主要就是做了 1. sws_alloc_context 调用2.参数设置3.sws_init_context 调用。 sws_getCachedContext 在sws_getContext 基础上加了 context 的判断如果之前使用的 context 和本次的参数都一样则复用之前的 context否则销毁重新创建。 if (context (context-srcW ! srcW || context-srcH ! srcH || context-srcFormat ! srcFormat || context-dstW ! dstW || context-dstH ! dstH || context-dstFormat ! dstFormat || context-flags ! flags || context-param[0] ! param[0] || context-param[1] ! param[1])) 类型转换 sws_scale sws_scale_frame 输出结果是直接写在输入的内存上的索引 data 需要提前分配好内存 demo 调用 m_vsc sws_getCachedContext(m_vsc,m_inWidth, m_inHeight, (AVPixelFormat)m_inPixFormat,m_outWidth, m_outHeight, AV_PIX_FMT_YUV420P,SWS_BICUBIC,NULL, NULL, NULL); m_yuv av_frame_alloc();m_yuv-format AV_PIX_FMT_YUV420P;m_yuv-width m_outWidth;m_yuv-height m_outHeight;m_yuv-pts 0; int ret av_frame_get_buffer(m_yuv, 32);uint8_t* indata[AV_NUM_DATA_POINTERS] { 0 }; indata[0] (uint8_t*)rgb; int insize[AV_NUM_DATA_POINTERS] { 0 }; insize[0] m_inWidth * 4;int h sws_scale(m_vsc, indata, insize, 0, m_inHeight, m_yuv-data, m_yuv-linesize);if (m_vsc) {sws_freeContext(m_vsc);m_vsc NULL; }其他 所有接口 unsigned swscale_version(void); const char *swscale_configuration(void); const char *swscale_license(void); const int *sws_getCoefficients(int colorspace); int sws_isSupportedInput(enum AVPixelFormat pix_fmt); int sws_isSupportedOutput(enum AVPixelFormat pix_fmt); int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt); struct SwsContext *sws_alloc_context(void); int sws_init_context(struct SwsContext *sws_context, SwsFilter *srcFilter, SwsFilter *dstFilter); void sws_freeContext(struct SwsContext *swsContext); 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[]); int sws_scale_frame(struct SwsContext *c, AVFrame *dst, const AVFrame *src); int sws_frame_start(struct SwsContext *c, AVFrame *dst, const AVFrame *src); void sws_frame_end(struct SwsContext *c); int sws_send_slice(struct SwsContext *c, unsigned int slice_start,unsigned int slice_height); int sws_receive_slice(struct SwsContext *c, unsigned int slice_start,unsigned int slice_height); unsigned int sws_receive_slice_alignment(const struct SwsContext *c); int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4],int srcRange, const int table[4], int dstRange,int brightness, int contrast, int saturation); int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table,int *srcRange, int **table, int *dstRange,int *brightness, int *contrast, int *saturation); SwsVector *sws_allocVec(int length); SwsVector *sws_getGaussianVec(double variance, double quality); void sws_scaleVec(SwsVector *a, double scalar); void sws_normalizeVec(SwsVector *a, double height);void sws_freeVec(SwsVector *a);SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,float lumaSharpen, float chromaSharpen,float chromaHShift, float chromaVShift,int verbose); void sws_freeFilter(SwsFilter *filter); struct SwsContext *sws_getCachedContext(struct SwsContext *context,int srcW, int srcH, enum AVPixelFormat srcFormat,int dstW, int dstH, enum AVPixelFormat dstFormat,int flags, SwsFilter *srcFilter,SwsFilter *dstFilter, const double *param); void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, int num_pixels, const uint8_t *palette); const AVClass *sws_get_class(void);class 类型 typedef enum {AV_CLASS_CATEGORY_NA 0,AV_CLASS_CATEGORY_INPUT,AV_CLASS_CATEGORY_OUTPUT,AV_CLASS_CATEGORY_MUXER,AV_CLASS_CATEGORY_DEMUXER,AV_CLASS_CATEGORY_ENCODER,AV_CLASS_CATEGORY_DECODER,AV_CLASS_CATEGORY_FILTER,AV_CLASS_CATEGORY_BITSTREAM_FILTER,AV_CLASS_CATEGORY_SWSCALER,AV_CLASS_CATEGORY_SWRESAMPLER,AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT 40,AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,AV_CLASS_CATEGORY_DEVICE_OUTPUT,AV_CLASS_CATEGORY_DEVICE_INPUT,AV_CLASS_CATEGORY_NB /// not part of ABI/API }AVClassCategory;
http://www.w-s-a.com/news/267546/

相关文章:

  • 个人网站的基本风格是wordpress 模板选择
  • 南昌专业做网站公司有哪些广州市住房城乡建设部门户网站
  • 福州网站建设团队淘宝联盟网站怎么建设
  • 福州企业网站建站模板国内黑色风格的网站
  • 好看的网站首页设计android移动开发
  • 域名注册完成后如何做网站域名 删除 wordpress
  • wordpress xml导入大小东莞seo优化方案
  • 网站建设效益网站销售怎么做的
  • 利用网站空间做代理设计方案的格式范文
  • 无锡建设工程质量监督网站遵义做手机网站建设
  • 衡阳商城网站制作ps做网站首页规范尺寸
  • 微信网站应用开发营销推广的方案
  • 广州做网站商城的公司制作一个app的完整流程
  • 湖南城乡建设厅网站163注册企业邮箱
  • 做网站怎么调整图片间距织梦做的网站如何去掉index
  • 凡科网免费建站步骤及视频网页设计基础教程第二版课后答案
  • 建设一个旅游网站毕业设计企业网站要更新文章吗
  • 做网站需要简介中山网站设计公司
  • 网站怎么做导航栏微信公众号官网登录
  • 1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.电子商城网站开发
  • 百度网站怎么建设河北省工程造价信息网官网
  • 阿里云网站模板网页设计的合适尺寸是多少
  • 做小程序和做网站哪个好让别人做网站推广需要多少钱
  • 做外贸的几个网站查询网域名解析
  • 酒泉如何做百度的网站seo研究中心好客站
  • 网站设计建设平台户县做网站
  • 一元云购网站开发wordpress博客空间
  • 深圳高端网站建设公司排名如何搭建局域网服务器
  • 照片管理网站模板高端网站开发哪家好
  • 黄冈网站制作wordpress为什么不能显示域名