胡斌

adjust the timecode when transcode speex to aac

@@ -1737,12 +1737,13 @@ int SrsSource::on_audio(SrsCommonMessage* shared_audio) @@ -1737,12 +1737,13 @@ int SrsSource::on_audio(SrsCommonMessage* shared_audio)
1737 1737
1738 shared_audio->payload = new char[1024]; 1738 shared_audio->payload = new char[1024];
1739 out_size = 1022; 1739 out_size = 1022;
1740 - int ret_aac = aec_aac.encode_frame((tc_audio_opt *)_aac_opt, out_data, (uint8_t *)shared_audio->payload + 2 , &out_size); 1740 + 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));
1741 if (ret_aac >= 0){ 1741 if (ret_aac >= 0){
1742 if (out_size){ 1742 if (out_size){
1743 shared_audio->payload[0] = 0xAF; 1743 shared_audio->payload[0] = 0xAF;
1744 shared_audio->payload[1] = 0x01; 1744 shared_audio->payload[1] = 0x01;
1745 shared_audio->size = out_size +2; 1745 shared_audio->size = out_size +2;
  1746 +
1746 ret = _on_audio(shared_audio); 1747 ret = _on_audio(shared_audio);
1747 #if 0 1748 #if 0
1748 static int max_out_size = 0; 1749 static int max_out_size = 0;
@@ -130,7 +130,7 @@ static int open_codec_aac(tc_audio_opt* opt) { @@ -130,7 +130,7 @@ static int open_codec_aac(tc_audio_opt* opt) {
130 } 130 }
131 131
132 132
133 -static int encode_frame_aac(tc_audio_opt* opt, uint8_t* inData, uint8_t* inOutData, uint32_t* inOutDataSize) { 133 +static int encode_frame_aac(tc_audio_opt* opt, uint8_t* inData, uint8_t* inOutData, uint32_t* inOutDataSize, int64_t * inoutTimeStamp) {
134 handle_aec_aac_t* s = (handle_aec_aac_t*)opt->handle; 134 handle_aec_aac_t* s = (handle_aec_aac_t*)opt->handle;
135 135
136 AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 }; 136 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 @@ -179,6 +179,11 @@ static int encode_frame_aac(tc_audio_opt* opt, uint8_t* inData, uint8_t* inOutDa
179 179
180 *inOutDataSize = out_args.numOutBytes; 180 *inOutDataSize = out_args.numOutBytes;
181 memcpy(s->buf, inData + 2048 - s->data_len, opt->buffer_size -( 2048 - s->data_len)); 181 memcpy(s->buf, inData + 2048 - s->data_len, opt->buffer_size -( 2048 - s->data_len));
  182 +
  183 + //shfit time stamp to the length of s->data_len
  184 + //1000ms / 16000 = 0.0625
  185 + *inoutTimeStamp = *inoutTimeStamp - (s->data_len * 0.0625 / 2);
  186 +
182 s->data_len = opt->buffer_size - (2048 - s->data_len); 187 s->data_len = opt->buffer_size - (2048 - s->data_len);
183 } 188 }
184 189
@@ -33,8 +33,8 @@ typedef struct { @@ -33,8 +33,8 @@ typedef struct {
33 int (*open_codec)(tc_audio_opt* opt); 33 int (*open_codec)(tc_audio_opt* opt);
34 34
35 int (*decode_frame)(tc_audio_opt* opt, uint8_t* inData, uint32_t inDataSize, uint8_t* outData); 35 int (*decode_frame)(tc_audio_opt* opt, uint8_t* inData, uint32_t inDataSize, uint8_t* outData);
36 -  
37 - int (*encode_frame)(tc_audio_opt* opt, uint8_t* inData, uint8_t* inoutData, uint32_t* inoutDataSize); 36 + //inoutTimeStamp is in ms
  37 + int (*encode_frame)(tc_audio_opt* opt, uint8_t* inData, uint8_t* inoutData, uint32_t* inoutDataSize, int64_t * inoutTimeStamp);
38 38
39 int (*close_codec)(tc_audio_opt* opt); 39 int (*close_codec)(tc_audio_opt* opt);
40 40