日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CELT编码解码

發(fā)布時(shí)間:2025/7/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CELT编码解码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
解碼:

?
#include?<stdio.h>
#include?<stdlib.h>
#include?<stdint.h>
#include?<string.h>
#include?<unistd.h>
#include?<errno.h>
?
#include?"celt.h"
?
int
main(int?argc,?char?**argv)?{
????char?data[2048]?=?{?};
????short?pcm[2048]?=?{?};
????int?rate????????=?48000;
????int?framesize???=?960;
????int?channels????=?1;
????int?tmp;
????int?rem;
????void?*mode;
????void?*state;
????uint16_t?len;
?
????while?((tmp?=?getopt(argc,?argv,?"r:f:c:"))?!=?-1)?{
????????switch?(tmp)?{
??????????case?'r':
????????????rate?=?atoi(optarg);
????????????break;
??????????case?'f':
????????????framesize?=?atoi(optarg);
????????????break;
??????????case?'c':
????????????channels?=?atoi(optarg);
????????????break;
????????}
????}
????if?(!(mode?=?celt_mode_create(rate,?framesize,?&tmp)))?{
????????fprintf(stderr,?"error:?celt_mode_create:?%s\n",?celt_strerror(tmp));
????????return?1;
????}
????if?(!(state?=?celt_decoder_create_custom(mode,?channels,?&tmp)))?{
????????fprintf(stderr,?"error:?celt_decoder_create_custom:?%s\n",?celt_strerror(tmp));
????????celt_mode_destroy(mode);
????????return?1;
????}
?
????for?(len?=?0;;)?{
????????if?(!len)?{
????????????if?(read(STDIN_FILENO,?&len,?sizeof(len))?!=?sizeof(len))?{
????????????????break;
????????????}
????????????if?(len?>?sizeof(data))?{
????????????????fprintf(stderr,?"error:?celt?packet?larger?than?buffer\n");
????????????????celt_decoder_destroy(state);
????????????????celt_mode_destroy(mode);
????????????????return?1;
????????????}
????????????rem?=?len;
????????}
????????if?((tmp?=?read(STDIN_FILENO,?data?+?(len?-?rem),?rem))?<?0)?{
????????????fprintf(stderr,?"error:?read:?%s\n",?strerror(errno));
????????????celt_decoder_destroy(state);
????????????celt_mode_destroy(mode);
????????????return?1;
????????}
????????if?(!tmp)?{
????????????break;
????????}
????????if?(tmp?!=?rem)?{
????????????rem?-=?tmp;
????????????continue;
????????}
????????if?((tmp?=?celt_decode(state,?(void?*)data,?len,?pcm,?framesize))?<?0)?{
????????????fprintf(stderr,?"error:?celt_decode:?%s\n",?celt_strerror(tmp));
????????????celt_decoder_destroy(state);
????????????celt_mode_destroy(mode);
????????????return?1;
????????}
????????len?=?0;
????????if?(write(STDOUT_FILENO,?pcm,?sizeof(*pcm)?*?framesize?*?channels)?<?0)?{
????????????fprintf(stderr,?"error:?write:?%s\n",?strerror(errno));
????????????celt_decoder_destroy(state);
????????????celt_mode_destroy(mode);
????????????return?1;
????????}
????}
?
????celt_decoder_destroy(state);
????celt_mode_destroy(mode);
?
????return?0;
}



編碼: #include?<stdio.h>
#include?<stdlib.h>
#include?<stdint.h>
#include?<string.h>
#include?<unistd.h>
#include?<errno.h>
?
#include?"celt.h"
?
int
main(int?argc,?char?**argv)?{
????short?pcm[2048]?=?{?};
????char?data[2048]?=?{?};
????int?rate????????=?48000;
????int?framesize???=?960;
????int?channels????=?1;
????int?bitrate?????=?0;
????int?variable????=?0;
????int?prediction??=?2;
????int?complexity??=?10;
????int?tmp;
????int?rem;
????void?*mode;
????void?*state;
????uint16_t?len;
?
????while?((tmp?=?getopt(argc,?argv,?"r:f:c:b:vp:x:"))?!=?-1)?{
????????switch?(tmp)?{
??????????case?'r':
????????????rate?=?atoi(optarg);
????????????break;
??????????case?'f':
????????????framesize?=?atoi(optarg);
????????????break;
??????????case?'c':
????????????channels?=?atoi(optarg);
????????????break;
??????????case?'b':
????????????bitrate?=?atoi(optarg);
????????????break;
??????????case?'v':
????????????variable?=?1;
????????????break;
??????????case?'p':
????????????prediction?=?atoi(optarg);
????????????break;
??????????case?'x':
????????????complexity?=?atoi(optarg);
????????????break;
????????}
????}
????if?(!(mode?=?celt_mode_create(rate,?framesize,?&tmp)))?{
????????fprintf(stderr,?"error:?celt_mode_create:?%s\n",?celt_strerror(tmp));
????????return?1;
????}
????if?(!(state?=?celt_encoder_create_custom(mode,?channels,?&tmp)))?{
????????fprintf(stderr,?"error:?celt_encoder_create_custom:?%s\n",?celt_strerror(tmp));
????????celt_mode_destroy(mode);
????????return?1;
????}
????if?(bitrate?&&?celt_encoder_ctl(state,?CELT_SET_BITRATE(bitrate))?!=?CELT_OK)?{
????????fprintf(stderr,?"error:?celt_encoder_ctl:?CELT_SET_BITRATE:?bitrate?request?failed\n");
????????celt_encoder_destroy(state);
????????celt_mode_destroy(mode);
????????return?1;
????}
????if?(variable?&&?celt_encoder_ctl(state,?CELT_SET_VBR(variable))?!=?CELT_OK)?{
????????fprintf(stderr,?"error:?celt_encoder_ctl:?CELT_SET_VBR:?vbr?request?failed\n");
????????celt_encoder_destroy(state);
????????celt_mode_destroy(mode);
????????return?1;
????}
????if?(celt_encoder_ctl(state,?CELT_SET_PREDICTION(prediction))?!=?CELT_OK)?{
????????fprintf(stderr,?"error:?celt_encoder_ctl:?CELT_SET_PREDICTION:?prediction?request?failed\n");
????????celt_encoder_destroy(state);
????????celt_mode_destroy(mode);
????????return?1;
????}
????if?(celt_encoder_ctl(state,?CELT_SET_COMPLEXITY(complexity))?!=?CELT_OK)?{
????????fprintf(stderr,?"error:?celt_encoder_ctl:?CELT_SET_COMPLEXITY:?complexity?0?through?10?is?only?supported\n");
????????celt_encoder_destroy(state);
????????celt_mode_destroy(mode);
????????return?1;
????}
?
????for?(len?=?0;;)?{
????????if?(!len)?{
????????????len?=?sizeof(*pcm)?*?framesize?*?channels;
????????????if?(len?>?sizeof(pcm))?{
????????????????fprintf(stderr,?"error:?pcm?frame?larger?than?buffer\n");
????????????????celt_encoder_destroy(state);
????????????????celt_mode_destroy(mode);
????????????????return?1;
????????????}
????????????rem?=?len;
????????}
????????if?((tmp?=?read(STDIN_FILENO,?(void?*)pcm?+?(len?-?rem),?rem))?<?0)?{
????????????fprintf(stderr,?"error:?read:?%s\n",?strerror(errno));
????????????celt_encoder_destroy(state);
????????????celt_mode_destroy(mode);
????????????return?1;
????????}
????????if?(!tmp)?{
????????????break;
????????}
????????if?(tmp?!=?rem)?{
????????????rem?-=?tmp;
????????????continue;
????????}
????????if?((tmp?=?celt_encode(state,?pcm,?framesize,?(void?*)data,?sizeof(data)))?<?0)?{
????????????fprintf(stderr,?"error:?celt_encode:?%s\n",?celt_strerror(tmp));
????????????celt_encoder_destroy(state);
????????????celt_mode_destroy(mode);
????????????return?1;
????????}
????????len?=?tmp;
????????if?(write(STDOUT_FILENO,?&len,?sizeof(len))?<?0?||?write(STDOUT_FILENO,?data,?len)?<?0)?{
????????????fprintf(stderr,?"error:?write:?%s\n",?strerror(errno));
????????????celt_encoder_destroy(state);
????????????celt_mode_destroy(mode);
????????????return?1;
????????}
????????len?=?0;
????}
?
????celt_encoder_destroy(state);
????celt_mode_destroy(mode);
?
????return?0;
}

總結(jié)

以上是生活随笔為你收集整理的CELT编码解码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。