<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=ks_c_5601-1987"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:±¼¸²;
panose-1:2 11 6 0 0 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:"¸¼Àº °íµñ";
panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
{font-family:"\@¸¼Àº °íµñ";
panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
{font-family:"\@±¼¸²";
panose-1:2 11 6 0 0 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-autospace:none;
word-break:break-hangul;
font-size:10.0pt;
font-family:"¸¼Àº °íµñ";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"±ÛÀÚ¸¸ Char";
margin:0cm;
margin-bottom:.0001pt;
text-autospace:none;
word-break:break-hangul;
font-size:10.0pt;
font-family:"Courier New";}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"dz¼± µµ¿ò¸» ÅØ½ºÆ® Char";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
text-autospace:none;
word-break:break-hangul;
font-size:9.0pt;
font-family:"¸¼Àº °íµñ";}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"¸¼Àº °íµñ";
color:windowtext;}
span.Char
{mso-style-name:"dz¼± µµ¿ò¸» ÅØ½ºÆ® Char";
mso-style-priority:99;
mso-style-link:"dz¼± µµ¿ò¸» ÅØ½ºÆ®";
font-family:"¸¼Àº °íµñ";}
span.Char0
{mso-style-name:"±ÛÀÚ¸¸ Char";
mso-style-priority:99;
mso-style-link:±ÛÀÚ¸¸;
font-family:"Courier New";}
.MsoChpDefault
{mso-style-type:export-only;}
/* Page Definitions */
@page WordSection1
{size:612.0pt 792.0pt;
margin:3.0cm 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=KO link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>hear is transcoder class src. use it as a instance and memory leak after delete instance.<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>every resource release and close. what's problem? <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>main transact func is "tcode(opus pkt in, aac pkt out)"<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> ///DECLARE <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVCodecContext *oc;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>AVCodecContext *opus_context;<o:p></o:p></span></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> AVCodecContext *aac_context;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVCodecContext *aac_context2;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVCodecContext *input_codec_context;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVFormatContext *output_format_context;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>const AVCodec *opus_codec;<o:p></o:p></span></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> const AVCodec *aac_codec;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> const AVCodec *aac_codec2;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> const AVCodec *h264_codec;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> float AAC_ENCTIME;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int AAC_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int OPUS_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int OPUSsize;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int OPUScnt ;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int AACsize ;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int AACcnt ;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVFrame *decoded_frame;///opus decode by ffmpeg<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVFrame *decoded_frame2;///opus decode by ffmpeg<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVFrame *framebuf;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>AVPacket *pkt1;<o:p></o:p></span></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> AVPacket *pkt2;</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>AVAudioFifo *fifo;</span><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AVAudioFifo *fifo2;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> SwrContext *resample_context;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> RTPPaserUtilityLibrary::ConvertStreamAVGranules* _instance;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> int len;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> string outfile;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int pcmsize;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> uint8_t inbuf[AUDIO_INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> char out_buf [2000]; //from file<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int out_size;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> uint8_t *data;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> size_t data_size;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int ix1;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int channel;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int ret;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int cnt[100];<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int init(int a, int b, int c);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> trans();<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ~trans();<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> int push_q(AVAudioFifo *fifo,<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> uint8_t **converted_input_samples,<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> const int frame_size);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> int pop_q(AVAudioFifo *_queue, AVFrame* mframe);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> int tcode(string *src, string* dst);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int tcode(AVPacket* src, AVPacket* dst);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>};<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>int RTP_REASSEMBLE::trans::init(int a, int b, int c)<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> opus_context->channels = 1;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> opus_context->channel_layout = AV_CH_LAYOUT_MONO;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> opus_context->sample_rate = OPUS_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> opus_context->sample_fmt = AV_SAMPLE_FMT_FLTP;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> opus_context->bit_rate = OPUS_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context->channels = 1;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context->channel_layout = AV_CH_LAYOUT_MONO;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context->sample_rate = AAC_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context->sample_fmt = AV_SAMPLE_FMT_FLTP;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context->bit_rate = AAC_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> fifo = av_audio_fifo_alloc(aac_context->sample_fmt, aac_context->channels, 2048);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context2->channels = 1;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context2->channel_layout = AV_CH_LAYOUT_MONO;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context2->sample_rate = AAC_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context2->sample_fmt = AV_SAMPLE_FMT_FLTP;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context2->bit_rate = AAC_SAMPRATE;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> return 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>};<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>RTP_REASSEMBLE::trans::<span style='background:yellow;mso-highlight:yellow'>trans(){</span><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> oc = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> opus_context = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> input_codec_context = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> output_format_context = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> OPUSsize = 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> OPUScnt = 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AACsize = 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> h264_codec = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AACcnt = 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> decoded_frame = NULL;///opus decode by ffmpeg<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> decoded_frame2 = NULL;///opus decode by ffmpeg<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> fifo = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //fifo2 = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> resample_context = NULL;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AAC_SAMPRATE=48000;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> OPUS_SAMPRATE=48000;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ix1=0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ret = AVERROR_EXIT;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>avcodec_register_all();<o:p></o:p></span></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> h264_codec = avcodec_find_decoder( AV_CODEC_ID_H264 ); <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> opus_codec = avcodec_find_decoder( AV_CODEC_ID_OPUS ); <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> aac_codec = avcodec_find_encoder( AV_CODEC_ID_AAC ); <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> aac_codec2 = avcodec_find_decoder( AV_CODEC_ID_AAC );// ENCODER <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> //aac_codec = avcodec_find_encoder( V_CODEC_ID_AAC_LATM );</span><span lang=EN-US> <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> framebuf = av_frame_alloc();<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if(framebuf==NULL) cout << "frame alloc fail."<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> _instance = new RTPPaserUtilityLibrary::ConvertStreamAVGranules();<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>pkt1 = av_packet_alloc();<o:p></o:p></span></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> pkt2 = av_packet_alloc();</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!h264_codec) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "H264 Codec not found"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> else cout << "H264 codec found."<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if(framebuf==NULL) cout << "frame alloc fail."<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>if (!opus_codec) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "opus Codec not found"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> else cout << "OPUS codec found."<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>opus_context = avcodec_alloc_context3( opus_codec );</span><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //_instance->init_fifo(&fifo, opus_context);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!opus_context) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not allocate audio opus_codec context OPUS"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> outfile = "raw.mp4";<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!aac_codec) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "AAC Codec not found"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> else cout << "AAC codec found."<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>aac_context = avcodec_alloc_context3(aac_codec);</span><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //_instance->init_fifo(&fifo2, aac_context);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!aac_context) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not allocate audio codec context AAC"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> <span style='background:yellow;mso-highlight:yellow'>aac_context2 = avcodec_alloc_context3(aac_codec2);</span><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> init(1,2,3);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (avcodec_open2(opus_context, opus_codec, NULL) < 0) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not open codec opus"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (<span style='background:yellow;mso-highlight:yellow'>avcodec_open2(aac_context, aac_codec, NULL</span>) < 0) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not open codec aac"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (avcodec<span style='background:yellow;mso-highlight:yellow'>_open2(aac_context2, aac_codec2, NULL)</span> < 0) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not open codec aac2"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!decoded_frame) <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Got a decoded_frame"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!(<span style='background:yellow;mso-highlight:yellow'>decoded_frame = av_frame_alloc()))</span> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not allocate audio frame"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }else{<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "nodata decoded_frame"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!decoded_frame2) <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Got a decoded_frame2"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (!(<span style='background:yellow;mso-highlight:yellow'>decoded_frame2 = av_frame_alloc()))</span> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "Could not allocate audio frame"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }else{<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> cout << "nodata decoded_frame2"<<endl;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>RTP_REASSEMBLE::trans::~trans(){<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>OsSysLog::add(FAC_PROCESS, PRI_INFO, "%s:%d:FREE FIFO************************* ",__FILE__,__LINE__); <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'>av_free_packet(pkt1);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> av_free_packet(pkt2);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> av_frame_free(&decoded_frame);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> av_frame_free(&decoded_frame2);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US style='background:yellow;mso-highlight:yellow'> av_audio_fifo_free(fifo);</span><span lang=EN-US><o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>/** Add converted input audio samples to the FIFO buffer for later processing. */<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>int RTP_REASSEMBLE::trans::push_q(AVAudioFifo *fifo,<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> uint8_t **converted_input_samples,<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> const int frame_size)<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int error;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> /**<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> * Make the FIFO as large as it needs to be to hold both,<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> * the old and the new samples.<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> */<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //OsSysLog::add(FAC_PROCESS, PRI_INFO, "%s:%d:*************************PUSH called fifo:0x%x, data:0x%x, frame_size:%d",__FILE__,__LINE__,(int64_t)fifo, (void*)**converted_input_samples, frame_size); <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if ((error = <span style='background:yellow;mso-highlight:yellow'>av_audio_fifo_realloc</span>(fifo, av_audio_fifo_size(fifo) + frame_size)) < 0) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return error;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> /** Store the new samples in the FIFO buffer. */<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (av_audio_fifo_write(fifo, (void **)converted_input_samples, frame_size) < frame_size) {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return AVERROR_EXIT;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //OsSysLog::add(FAC_PROCESS, PRI_INFO, "%s:%d:*************************OK PUSH:%d tot:%d", __FILE__, __LINE__, frame_size, av_audio_fifo_size(fifo));<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return 1;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>int RTP_REASSEMBLE::trans::pop_q(AVAudioFifo *_fifo, AVFrame* mframe)<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int ret;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if( av_audio_fifo_size (_fifo) >= 1024)<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> void* ptr;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ptr = * mframe->data;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ret = av_audio_fifo_read(_fifo, (void**)mframe->data, 1024);//@#@#<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> mframe->nb_samples = ret;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return ret;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> else <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //OsSysLog::add(FAC_PROCESS, PRI_INFO, "%s:%d:*Not enough data popup ret:%d tot:%d",__FILE__,__LINE__, ret, av_audio_fifo_size(_fifo));<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>int RTP_REASSEMBLE::trans::<b><span style='background:yellow;mso-highlight:yellow'>tcode</span></b>(AVPacket* src, AVPacket* dst){<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>//return -1;//KKC 8888<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> AACContext *ac = (AACContext*)aac_context->priv_data;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> MPEG4AudioConfig *m4ac = &(ac->oc[0].m4ac);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> m4ac->frame_length_short = 1;//1:960, 0:1024<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int ret;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> FILE *f, *outfile;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> int data_size;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> data_size = av_get_bytes_per_sample(opus_context->sample_fmt);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if (src->size){<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> data_present = 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if(decoded_frame2->data[0]!=NULL)<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> av_free(decoded_frame2->data[0]);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> decoded_frame2->data[0] = (uint8_t*)av_malloc(4*1024);//@#@#<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ret = <span style='background:yellow;mso-highlight:yellow'>avcodec_decode_audio4</span>(opus_context, decoded_frame, &data_present, src);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> if(ret<0) <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //OsSysLog::add(FAC_PROCESS,PRI_INFO,"%s:%d DECODE Error ======%d", __FILE__, __LINE__,ret);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> return ret;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> av_init_packet(dst);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> dst->data = NULL;//IMPORTANT for dynamic reallocate surface<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> dst->size = 0;ret = -1;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> /////////////////////////////////////////////////////////////////////////////// <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //int push_q(AVAudioFifo *fifo, uint8_t **converted_input_samples, const int frame_size);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //int pop_q(AVAudioFifo *fifo, AVFrame* mframe);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> /////////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> uint8_t* ptr;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //ptr = <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> push_q(fifo, decoded_frame->data, decoded_frame->nb_samples);//PUSH <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> decoded_frame2->nb_samples = 1024;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ret = pop_q (fifo, decoded_frame2); //POP<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> <o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //decoded_frame->nb_samples = 1024;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> //aac_context->frame_size = 960;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> aac_context->frame_size = 1024;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> //OsSysLog::add(FAC_PROCESS,PRI_INFO,"%s:%d AAC ENCODE try decodedframeSize:%d aacctxFramesieze:%d======frameLnShort:%d privdataSIZE:0x%x", __FILE__, __LINE__, decoded_frame2->nb_samples, aac_context->frame_size, m4ac->frame_length_short,aac_context->priv_data);<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> if(ret>0){// pop ok (que hav sample over 1024)<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US> ret = avcodec_encode_audio2(aac_context, dst, decoded_frame2, &data_present);//@#@#AAC ENCODING<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoPlainText><span lang=EN-US>return 0;<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><img width=390 height=140 id="±×¸²_x0020_1" src="cid:image001.gif@01D48344.D4C82BD0" alt=KangKooChul><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></body></html>