[Libav-user] regarding libavcodec method - av_parser_parse2 usage

Shiju Sasi sasishiju at gmail.com
Tue Mar 6 05:20:51 CET 2012


Thank you Alex and libav-user group. It is fixed.

Regards,
Shiju
On Mon, Mar 5, 2012 at 7:10 PM, Alex Cohn <alexcohn at netvision.net.il> wrote:

> On Fri, Mar 2, 2012 at 13:32, Shiju Sasi <sasishiju at gmail.com> wrote:
> > Hi,
> >
> > I have a multi threaded video application using x264 and ffmpeg. In the
> > decoding flow, I have a question on av_parser_parse2.
> >
> > I use it as below.
> >
> > int len = 0;
> >
> > len =
> >
> av_parser_parse2(m_pDecoderParserContext,m_pCodecCtx,&avpkt.data,&avpkt.size,in_buf,
> > in_buf_size,0,0,0);
> >
> >
> >
> > Here I get the return value len = in_buf_size. But the avpkt.data is not
> > getting filled in. It gets zero, so is the avpkt.size
> >
> > To check if the error is due to the usage of AVPacket, I changed it to
> >
> >
> >
> > uint8_t* pOutBuf = new uint8_t[50000];
> >
> > memset(pOutBuf,5,50000);
> >
> > int iOutSize = 100;
> >
> > len =
> >
> av_parser_parse2(m_pDecoderParserContext,m_pCodecCtx,&pOutBuf,&iOutSize_buf,
> > in_buf_size,0,0,0);
> >
> >
> >
> > Here, av_parser_parse2 changed the '5' returned to all the pOutBuf
> locations
> > to zero and the output size varable also got set as 0.  I tried a uint8_t
> > pointer without any memory allocated as well.
> >
> > Nothing gives me  a valid output pointer, but in all cases, the parsing
> > happens for the entire input variable ( as indicated by the return value
> of
> > the function).
> >
> > Could any of you please give me more information on this?
> >
> > Thanks in advance,
> > Shiju
>
> The function returns the the number of bytes of the input bitstream
> used. It's fine that for some while you will not receive valid packets
> out of it. I don't know what kind of input stream you are using, but
> it could contain quite a lot of header bytes that are necessary for
> the codec context to be able to process the stream. In avcodec.h file
> itself you can see an example of usage, which involves a loop:
>
>   while(in_len){
>       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
>                                        in_data, in_len,
>                                        pts, dts, pos);
>       in_data += len;
>       in_len  -= len;
>
>       if(size)
>          decode_frame(data, size);
>   }
>
> It is normal to skip decode_frame() sometimes, when size is 0.
>
> BR,
> Alex
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20120306/ffcc85ed/attachment.html>


More information about the Libav-user mailing list