胡斌

adjust the timecode when transcode speex to aac

... ... @@ -1737,12 +1737,13 @@ int SrsSource::on_audio(SrsCommonMessage* shared_audio)
shared_audio->payload = new char[1024];
out_size = 1022;
int ret_aac = aec_aac.encode_frame((tc_audio_opt *)_aac_opt, out_data, (uint8_t *)shared_audio->payload + 2 , &out_size);
int ret_aac = aec_aac.encode_frame((tc_audio_opt *)_aac_opt, out_data, (uint8_t *)shared_audio->payload + 2 , &out_size, &(shared_audio->header.timestamp));
if (ret_aac >= 0){
if (out_size){
shared_audio->payload[0] = 0xAF;
shared_audio->payload[1] = 0x01;
shared_audio->size = out_size +2;
ret = _on_audio(shared_audio);
#if 0
static int max_out_size = 0;
... ...
... ... @@ -130,7 +130,7 @@ static int open_codec_aac(tc_audio_opt* opt) {
}
static int encode_frame_aac(tc_audio_opt* opt, uint8_t* inData, uint8_t* inOutData, uint32_t* inOutDataSize) {
static int encode_frame_aac(tc_audio_opt* opt, uint8_t* inData, uint8_t* inOutData, uint32_t* inOutDataSize, int64_t * inoutTimeStamp) {
handle_aec_aac_t* s = (handle_aec_aac_t*)opt->handle;
AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 };
... ... @@ -179,6 +179,11 @@ static int encode_frame_aac(tc_audio_opt* opt, uint8_t* inData, uint8_t* inOutDa
*inOutDataSize = out_args.numOutBytes;
memcpy(s->buf, inData + 2048 - s->data_len, opt->buffer_size -( 2048 - s->data_len));
//shfit time stamp to the length of s->data_len
//1000ms / 16000 = 0.0625
*inoutTimeStamp = *inoutTimeStamp - (s->data_len * 0.0625 / 2);
s->data_len = opt->buffer_size - (2048 - s->data_len);
}
... ...
... ... @@ -33,8 +33,8 @@ typedef struct {
int (*open_codec)(tc_audio_opt* opt);
int (*decode_frame)(tc_audio_opt* opt, uint8_t* inData, uint32_t inDataSize, uint8_t* outData);
int (*encode_frame)(tc_audio_opt* opt, uint8_t* inData, uint8_t* inoutData, uint32_t* inoutDataSize);
//inoutTimeStamp is in ms
int (*encode_frame)(tc_audio_opt* opt, uint8_t* inData, uint8_t* inoutData, uint32_t* inoutDataSize, int64_t * inoutTimeStamp);
int (*close_codec)(tc_audio_opt* opt);
... ...