<div><br>Thank you Alex and libav-user group. It is fixed.</div><div> </div><div>Regards,</div><div>Shiju<br></div><div class="gmail_quote">On Mon, Mar 5, 2012 at 7:10 PM, Alex Cohn <span dir="ltr"><<a href="mailto:alexcohn@netvision.net.il">alexcohn@netvision.net.il</a>></span> wrote:<br>
<blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote"><div class="HOEnZb"><div class="h5">On Fri, Mar 2, 2012 at 13:32, Shiju Sasi <<a href="mailto:sasishiju@gmail.com">sasishiju@gmail.com</a>> wrote:<br>

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