我有一段非常简短的C++代码,试图打开一个经过ogg/opus编码的文件,并使用opus API 来解码它,使用函数opus_decode()。问题是,几乎一半的opus_decode()调用返回负(错误)代码 -4和-2(无效包和缓冲区太短)我无法解决。输出如下:
N 解码: 960 N 解码: -4 N 解码: -4 N 解码: 960 N 解码: -4 N 解码: 1920 N 解码: 960 N 解码: -4 N 解码: -4
依此类推。
N 解码: 960 N 解码: -4 N 解码: -4 N 解码: 960 N 解码: -4 N 解码: 1920 N 解码: 960 N 解码: -4 N 解码: -4
依此类推。
#include <string.h>
#include <opus/opus.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <iostream>
#include <fstream>
#define LEN 1024
#define FREQ 48000
#define CHANNELS 1
#define FRAMESIZE 1920
int main(int argc, char *argv[]) {
int size = opus_decoder_get_size(CHANNELS);
OpusDecoder *decoders = (OpusDecoder*)malloc(size);
int error = opus_decoder_init(decoders, FREQ, CHANNELS);
std::ifstream inputfile;
inputfile.open("/home/vir/Descargas/detodos.opus"); //48000Hz, Mono
char input[LEN];
opus_int16 *data = (opus_int16*)calloc(CHANNELS*FRAMESIZE,sizeof(opus_int16));
if(inputfile.is_open())
while (!inputfile.eof()) {
inputfile >> input;
std::cerr << "N decoded: " << opus_decode(decoders, (const unsigned char*)&input[0], LEN, data, FRAMESIZE, 0) << "\n";
}
return error;
}