[Libav-user] Decoding opus

Aboobeker Sidhik Koyamparambil mammu aboosidhik at gmail.com
Wed Jan 11 16:27:55 EET 2017


No. I get the same data that I send to decoder. Not the uncompressed data
(pcm) as output. In my case single frame in a single AV packet size. This I
checked using a while loop that compares the packet size.

 Regards
Aboo

On 11 January 2017 at 14:23, He Lei <helei0908 at hotmail.com> wrote:

> do you say ,you write same packet to decoder, and get frame more then in
> packet?
> look at anntation as avcodec_decode_audio4();
> that is:
>
> 4643  * Some decoders may support multiple frames in a single AVPacket.
> Such
>
> 4644  * decoders would then just decode the first frame and the return
> value would be
>
> 4645  * less than the packet size. In this case, avcodec_decode_audio4 has
> to be
>
> 4646  * called again with an AVPacket containing the remaining data in
> order to
>
> 4647  * decode the second frame, etc...  Even if no frames are returned,
> the packet
>
> 4648  * needs to be fed to the decoder with remaining data until it is
> completely
>
> 4649  * consumed or an error occurs.
>
> 4650  *
>
> good luck
> 发自我的 iPhone
>
> 在 2017年1月11日,20:08,Aboobeker Sidhik Koyamparambil mammu <
> aboosidhik at gmail.com> 写道:
>
> Dear All,
>
> I am trying to decode opus. When I use both methods
> avcodec_decode_audio4 and (avcodec_send_packet /avcodec_receive_frame) . I
> am receiving the same opus packet that I send for decoding. I got this by
> using the packet size of the decoded frame. Packet size is same as the
> input opus packet size.
>
> I followed the decoding example given in github of ffmpeg. Please help me.
> Why I am receiving same packet as input?
>
>
> av_register_all();
> avcodec_register_all();
> AVCodec *codec;
> AVCodecContext *c = NULL;
> AVPacket avpkt;
> AVFrame *decoded_frame = NULL;
> av_init_packet(&avpkt);
> codec = avcodec_find_decoder(AV_CODEC_ID_OPUS);
> if (!codec) {
>      printf("Codec not found\n");
>      exit(1);
> }
> c = avcodec_alloc_context3(codec);
> if (!c) {
>    printf("Could not allocate audio codec context\n");
>    exit(1);
> }
> /* put sample parameters */
> c->sample_rate = 48000;
> c->request_sample_fmt = AV_SAMPLE_FMT_FLT;
> c->channels = 2;
> /* open it */
> if (avcodec_open2(c, codec, NULL) < 0) {
>     printf("Could not open codec\n");
>     exit(1);
> }
>
> AVPacket avpkt;
> AVFrame *decoded_frame = NULL;
> av_init_packet(&avpkt);
> avpkt.data = Buffer;  // Buffer is packet data here
> avpkt.size = len;    // length of the packet
> int i, ch;
>
> if (!decoded_frame) {
>     if (!(decoded_frame = av_frame_alloc())) {
>         RELAY_SERVER_PRINT("Could not allocate audio frame\n");
>         exit(1);
>     }
> }
> int ret;
> int got_frame = 0;
> ret = avcodec_decode_audio4(client_sockt_num_1->c, decoded_frame, &got_frame, &avpkt);
> if (ret < 0) {
>         fprintf(stderr, "Error decoding audio frame (%s)\n", av_err2str(ret));
>         return ret;
>     }
> printf("length %i\n", decoded_frame->pkt_size);
>
>
> --
> Kind Regards
>
> Aboobeker Sidhik
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
>


-- 
Kind Regards

Aboobeker Sidhik
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20170111/987bd35c/attachment.html>


More information about the Libav-user mailing list