<p dir="ltr">Marcelo, have you initialized the ffmpeg using av_register_all()? </p>
<p dir="ltr">Also, when building the ffmpeg, have you included encoding/decoding/ parsing support for aac? </p>
<p dir="ltr">Sylvio<br>
</p>
<div class="gmail_quote">Em 12/01/2014 16:18, "Marcelo Paes Rech" <<a href="mailto:marcelopaesrech@gmail.com">marcelopaesrech@gmail.com</a>> escreveu:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Hi guys,<div><br></div><div>I am trying to do a stream player in android but I need to read a array of bytes and then decode every packet of array of bytes. In the end started to make my AAC decoder work with the ffmpeg example of decoder. But I ran into the same problem of this guy:</div>

<div><br></div><div><a href="http://stackoverflow.com/questions/13499480/decode-aac-to-pcm-with-ffmpeg-on-android" target="_blank">http://stackoverflow.com/questions/13499480/decode-aac-to-pcm-with-ffmpeg-on-android</a></div>
<div><br></div>
<div>But the decoder does not work. I am receiving a error as follows:</div><div><br></div><div><div>TNS filter order %d is greater than maximum %d.</div><div>Error while decoding: -1</div></div><div><br></div><div>If I use the ffmpeg to decode it works fine.</div>

<div><br></div><div>ffmpeg -i audio.mp4 audio.wav</div><div><br></div><div>Environment:</div><div>ffmpeg 1.2</div><div>Android ndkr9b</div><div><div><br></div><div>Follows my source code:</div><div>







<p>    AVCodec *codec;</p>
<p>    AVCodecContext *c= NULL;</p>
<p>    <span>int</span> len;</p>
<p>    FILE *f, *outfile;</p>
<p>    uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];</p>
<p>    AVPacket avpkt;</p>
<p>    AVFrame *decoded_frame = NULL;</p>
<p>    av_log_set_callback(&my_ffmpeg_log);</p>
<p>    av_init_packet(&avpkt);</p>
<p><br></p>
<p>    printf(<span>"Decode audio file %s to %s\n"</span>, filename, outfilename);</p>
<p><br></p>
<p><span>    </span>/* find the <span>mpeg</span> audio decoder */</p>
<p>    codec = avcodec_find_decoder(AV_CODEC_ID_AAC);</p>
<p>    <span>if</span> (!codec) {</p>
<p><span>        LOGV(</span>"<span>Codec</span> not found\n"<span>);</span></p>
<p>        <span>return</span>;</p>
<p>    }</p>
<p><br></p>
<p>    c = avcodec_alloc_context3(codec);</p>
<p>    c->channels = 2;</p>
<p>    c->sample_rate = 48000;</p>
<p><br></p>
<p>    <span>if</span> (!c) {</p>
<p><span>        LOGV(</span>"Could not  allocate audio <span>codec</span> context\n"<span>);</span></p>
<p>        <span>return</span>;</p>
<p>    }</p>
<p><br></p>
<p><span>    </span>/* open it */</p>
<p>    <span>if</span> (avcodec_open2(c, codec, NULL) < 0) {</p>
<p><span>        LOGV(</span>"Could not open <span>codec</span>\n"<span>);</span></p>
<p>        <span>return</span>;</p>
<p>    }</p>
<p><br></p>
<p>    f = fopen(filename, <span>"</span><span>rb</span><span>"</span>);</p>
<p>    <span>if</span> (!f) {</p>
<p>        LOGV(<span>"Could not open %s\n"</span>, filename);</p>
<p>        <span>return</span>;</p>
<p>    }</p>
<p>    outfile = fopen(outfilename, <span>"</span><span>wb</span><span>"</span>);</p>
<p>    <span>if</span> (!outfile) {</p>
<p>        av_free(c);</p>
<p>        <span>return</span>;</p>
<p>    }</p>
<p><br></p>
<p><span>    </span>/* decode until <span>eof</span> */</p>
<p>    avpkt.data = inbuf;</p>
<p>    avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, f);</p>
<p><br></p>
<p>    <span>while</span> (avpkt.size > 0) {</p>
<p>        <span>int</span> got_frame = 0;</p>
<p><br></p>
<p>        <span>if</span> (!decoded_frame) {</p>
<p>            <span>if</span> (!(decoded_frame = avcodec_alloc_frame())) {</p>
<p><span>                LOGV(</span>"Could not allocate audio frame\n"<span>);</span></p>
<p>                <span>return</span>;</p>
<p>            }</p>
<p>        } <span>else</span></p>
<p>            avcodec_get_frame_defaults(decoded_frame);</p>
<p><br></p>
<p>        len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);</p>
<p>        <span>if</span> (len < 0) {</p>
<p><span>            LOGV(</span>"Error while decoding: %d\n"<span>, len);</span></p>
<p>            <span>return</span>;</p>
<p>        }</p>
<p>        <span>if</span> (got_frame) {</p>
<p><span>            </span>/* if a frame has been decoded, output it */</p>
<p>            <span>int</span> data_size = av_samples_get_buffer_size(NULL, c->channels,</p>
<p>                                                       decoded_frame->nb_samples,</p>
<p>                                                       c->sample_fmt, 1);</p>
<p>            fwrite(decoded_frame->data[0], 1, data_size, outfile);</p>
<p>        }</p>
<p>        avpkt.size -= len;</p>
<p>        avpkt.data += len;</p>
<p>        avpkt.dts =</p>
<p>        avpkt.pts = AV_NOPTS_VALUE;</p>
<p>        <span>if</span> (avpkt.size < AUDIO_REFILL_THRESH) {</p>
<p><span>            </span>/* Refill the input buffer, to avoid trying to decode</p>
<p>             * incomplete frames. Instead of this, one could also use</p>
<p>             * a parser, or use a proper container format through</p>
<p>             * <span>libavformat</span>. */</p>
<p>            memmove(inbuf, avpkt.data, avpkt.size);</p>
<p>            avpkt.data = inbuf;</p>
<p>            len = fread(avpkt.data + avpkt.size, 1,</p>
<p>                        AUDIO_INBUF_SIZE - avpkt.size, f);</p>
<p>            <span>if</span> (len > 0)</p>
<p>                avpkt.size += len;</p>
<p>        }</p>
<p>    }</p>
<p><br></p>
<p>    fclose(outfile);</p>
<p>    fclose(f);</p>
<p><br></p>
<p>    avcodec_close(c);</p>
<p>    av_free(c);</p>
<p>    avcodec_free_frame(&decoded_frame);</p></div><div><br></div>-- <br><b>Atenciosamente, Marcelo Paes Rech.</b><br>E-mail: <a href="mailto:marcelopaesrech@gmail.com" target="_blank">marcelopaesrech@gmail.com</a><br>

Blog: <a href="http://marcelopaesrech.blogspot.com" target="_blank">http://marcelopaesrech.blogspot.com</a><br><img src="http://marcelorech.files.wordpress.com/2010/10/images.jpg"><br>
</div></div>
<br>_______________________________________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a><br>
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" target="_blank">http://ffmpeg.org/mailman/listinfo/libav-user</a><br>
<br></blockquote></div>