Thank you Alex and libav-user group. It is fixed. Regards, Shiju On Mon, Mar 5, 2012 at 7:10 PM, Alex Cohn <[email protected]> wrote:
> On Fri, Mar 2, 2012 at 13:32, Shiju Sasi <[email protected]> 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 > [email protected] > http://ffmpeg.org/mailman/listinfo/libav-user >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
