<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>