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

PCM转PCMA(pcm_alaw,G711.A率)转换表 PCM转PCMU(pcm_ulaw,G711.U率)转换表

PCM转PCMA(pcm_alaw,G711.A率)转换表 && PCM转PCMU(pcm_ulaw,G711.U率)转换表

文章目录

  • PCM转PCMA(pcm_alaw,G711.A率)转换表 && PCM转PCMU(pcm_ulaw,G711.U率)转换表
    • ffmpeg源码生成转码表
      • 使用方式
      • 生成源码

ffmpeg源码生成转码表

最近要做一个功能,int16_t的PCM数据转为uint8的PCMA数据,
网上的不太可信,找ffmpeg库,发现ffmpeg库使用的是查表发实现的,
而且还有现成的生成表数据的源代码,可信度非常高

/** Generate a header file for hardcoded PCM tables** Copyright (c) 2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de>** This file is part of FFmpeg.** FFmpeg is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** FFmpeg is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU* Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with FFmpeg; if not, write to the Free Software* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA*/#include <stdlib.h>
#define CONFIG_HARDCODED_TABLES 0
#include "pcm_tablegen.h"
#include "tableprint.h"int main(void)
{pcm_alaw_tableinit();pcm_ulaw_tableinit();pcm_vidc_tableinit();write_fileheader();WRITE_ARRAY("static const", uint8_t, linear_to_alaw);WRITE_ARRAY("static const", uint8_t, linear_to_ulaw);WRITE_ARRAY("static const", uint8_t, linear_to_vidc);return 0;
}

编译上有些小问题,没太关注,直接使用了注释大法,
没有用的统统干掉,编译通过,执行生成转换映射表。
不用再去研究转换公式,直接对照着表查询结果即可。
拿走不谢

使用方式

可参照ffmpeg源代码pcm.c使用

    case AV_CODEC_ID_PCM_ALAW:for (; n > 0; n--) {v      = *samples++;*dst++ = linear_to_alaw[(v + 32768) >> 2];}break;case AV_CODEC_ID_PCM_MULAW:for (; n > 0; n--) {v      = *samples++;*dst++ = linear_to_ulaw[(v + 32768) >> 2];}break;

PCM有符号,加上32768变成正数除以4查表即可。

生成源码

表数据太大,CSDN不让保存,放到我个人服务器上了(大神手下留情不要攻击)。
http://118.126.97.61:8084/src_libs/ffmpeg_pcm_table/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • day-49 让所有学生保持开心的分组方法数
  • gitee 简单使用
  • 【护网相关知识】
  • org.apache.commons.lang.math.NumberUtils#isNumber 解释
  • Python实践:多种方式实现数字前补零
  • uniapp壁纸项目笔记
  • 前端原生Js批量修改页面元素属性的2个方法
  • SprinBoot+Vue在线商城微信小程序的设计与实现
  • 数据库系统 第36节 数据库镜像
  • 【网络安全】XSS(新)+Amazon账户劫持复现
  • 【软件设计】常用设计模式--概述
  • 无人机+应用综合实训室解决方案
  • Linux教程8:文本编辑命令vi
  • 哪款宠物空气净化器能更好的清理浮毛?希喂、352、IAM测评分享
  • 「Python程序设计」循环控制:for和while循环语句
  • [译]CSS 居中(Center)方法大合集
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Angular 响应式表单之下拉框
  • CentOS7简单部署NFS
  • C语言笔记(第一章:C语言编程)
  • Docker下部署自己的LNMP工作环境
  • Hibernate最全面试题
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JAVA并发编程--1.基础概念
  • JAVA多线程机制解析-volatilesynchronized
  • Java教程_软件开发基础
  • Laravel Mix运行时关于es2015报错解决方案
  • spring boot 整合mybatis 无法输出sql的问题
  • Zsh 开发指南(第十四篇 文件读写)
  • 前端技术周刊 2019-02-11 Serverless
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 网页视频流m3u8/ts视频下载
  • 我是如何设计 Upload 上传组件的
  • 用jQuery怎么做到前后端分离
  • 正则与JS中的正则
  • 自定义函数
  • 大数据全解:定义、价值及挑战
  • ​如何使用QGIS制作三维建筑
  • ## 1.3.Git命令
  • #LLM入门|Prompt#3.3_存储_Memory
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #QT 笔记一
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (SERIES12)DM性能优化
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (南京观海微电子)——COF介绍
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core 依赖注入的基本用发
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net6 webapi log4net完整配置使用流程
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试