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

公司官方网站建设需要多少钱小红书怎么推广

公司官方网站建设需要多少钱,小红书怎么推广,免费搭建企业网站,wordpress增加文章页面本文主要梳理 ffmpeg 中的音频格式转换。由于采集的音频数据和编码器支持的音频格式可能不一样,所以经常需要进行格式转换。 API 调用 常用 API struct SwrContext *swr_alloc(void); int swr_init(struct SwrContext *s); struct SwrContext *swr_alloc_set_opt…

本文主要梳理 ffmpeg 中的音频格式转换。由于采集的音频数据和编码器支持的音频格式可能不一样,所以经常需要进行格式转换。

API 调用

常用 API

struct SwrContext *swr_alloc(void);
int swr_init(struct SwrContext *s);
struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,int log_offset, void *log_ctx);
void swr_free(struct SwrContext **s);
int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,const uint8_t **in , int in_count);
int swr_convert_frame(SwrContext *swr,AVFrame *output, const AVFrame *input);

初始化和销毁相关

swr_alloc 创建 context 上下文结构体
swr_init 初始化 context 结构体
swr_free 销毁结构体


SwsContext class 定义 libswresample\options.c

static const AVClass av_class = {.class_name                = "SWResampler",.item_name                 = context_to_name,.option                    = options,.version                   = LIBAVUTIL_VERSION_INT,.log_level_offset_offset   = OFFSET(log_level_offset),.parent_log_context_offset = OFFSET(log_ctx),.category                  = AV_CLASS_CATEGORY_SWRESAMPLER,
};

swr_init 之前需要配置 context 一些参数,才能正确初始化。

if (av_opt_set_int(s, "ocl", out_ch_layout,   0) < 0)goto fail;if (av_opt_set_int(s, "osf", out_sample_fmt,  0) < 0)goto fail;if (av_opt_set_int(s, "osr", out_sample_rate, 0) < 0)goto fail;if (av_opt_set_int(s, "icl", in_ch_layout,    0) < 0)goto fail;if (av_opt_set_int(s, "isf", in_sample_fmt,   0) < 0)goto fail;if (av_opt_set_int(s, "isr", in_sample_rate,  0) < 0)goto fail;if (av_opt_set_int(s, "ich", av_get_channel_layout_nb_channels(s-> user_in_ch_layout), 0) < 0)goto fail;if (av_opt_set_int(s, "och", av_get_channel_layout_nb_channels(s->user_out_ch_layout), 0) < 0)goto fail;

为了简化调用所以有了 swr_alloc_set_opts接口,其主要就是做了 1. swr_alloc调用;2.参数设置。
由于其不像视频转换的 sws_getContext 接口,内部不会调用 swr_init,所以还需要调用一下初始化接口。

类型转换

swr_convert
swr_convert_frame

输出结果是直接写在输入的内存上的,所以 data 需要提前分配好内存

demo 调用

m_asc = swr_alloc_set_opts(m_asc,m_ac->channel_layout, m_ac->sample_fmt, m_ac->sample_rate,av_get_default_channel_layout(m_inChannels), (AVSampleFormat)m_inSampleFmt, m_inSampleRate,0, 0);
ret = swr_init(m_asc);
const uint8_t* data[1];
data[0] = (uint8_t*)pcm;
int len = swr_convert(m_asc, m_pcm->data, m_pcm->nb_samples,data, m_pcm->nb_samples);
if (m_asc)
{swr_free(&m_asc);
}

其他

所有接口

const AVClass *swr_get_class(void);
struct SwrContext *swr_alloc(void);
int swr_init(struct SwrContext *s);
int swr_is_initialized(struct SwrContext *s);
struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,int log_offset, void *log_ctx);
void swr_free(struct SwrContext **s);
void swr_close(struct SwrContext *s);
int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,const uint8_t **in , int in_count);
int64_t swr_next_pts(struct SwrContext *s, int64_t pts);
int swr_set_compensation(struct SwrContext *s, int sample_delta, int compensation_distance);
int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map);
int swr_build_matrix(uint64_t in_layout, uint64_t out_layout,double center_mix_level, double surround_mix_level,double lfe_mix_level, double rematrix_maxval,double rematrix_volume, double *matrix,int stride, enum AVMatrixEncoding matrix_encoding,void *log_ctx);
int swr_set_matrix(struct SwrContext *s, const double *matrix, int stride);
int swr_drop_output(struct SwrContext *s, int count);
int swr_inject_silence(struct SwrContext *s, int count);
int64_t swr_get_delay(struct SwrContext *s, int64_t base);
int swr_get_out_samples(struct SwrContext *s, int in_samples);
unsigned swresample_version(void);
const char *swresample_configuration(void);
const char *swresample_license(void);
int swr_convert_frame(SwrContext *swr,AVFrame *output, const AVFrame *input);
int swr_config_frame(SwrContext *swr, const AVFrame *out, const AVFrame *in);
http://www.yayakq.cn/news/584366/

相关文章:

  • 深圳商业网站建设去哪家做网站一般用什么服务器
  • 教学单位 网站建设推广网站建设语句
  • 与网站签约天津seo诊断
  • 这样自己做网站北京品牌网站建设公司排名
  • 做淘宝是不是要两根网站浙江网站建设平台
  • 青岛网站排名多少钱网页制作教学设计
  • 新手怎么做seoseo怎么做?
  • 交流建设网站用ps怎样做网站文字logo
  • 网站彩票代理怎么做百度竞价入门教程
  • 涿州做网站的asp网站打开很慢的原因
  • 免费做店招的网站沙井网站建设公司
  • 兼职做网站这样的网站网站建设中的网页布局主要内容
  • 制作一个网站怎么做wordpress首页html在哪里修改
  • 无锡做网站的建设产品网站课程设计
  • 自己的网站怎么做优化免费咨询贷款
  • 新会区住房和城乡建设局网站专业做学校网站的公司
  • 网站建设的职称怎么电话销售网站建设
  • 泰州网站开发公司wordpress 虚拟数据库
  • 许昌市住房城乡建设局网站分析企业网站建设流程
  • 用dw做的网站怎么放到网上wordpress+缩略图+api
  • 哪个公司做视频网站亚洲建行网站打不开
  • 推荐一个免费网站网站搭建入门
  • 网站开发模块查相似谷德室内设计网
  • 商标设计网站主要提供哪些服务seo网站优化专员
  • 个人网站建设哪家好中文网站设计
  • 网站导航是怎么做的湖南长沙旅游十大必去景区
  • 犀牛云做网站推广怎么样h5制作平台是什么意思
  • 中国最大网站建设商南京app研发公司
  • 网站建设有关书籍做网站推广合同
  • 响应式网站开发原则国内做外贸的平台有哪些