[Ffmpeg-devel] Help understanding AVParser

Michael Niedermayer michaelni
Tue Dec 19 17:11:35 CET 2006


Hi

On Tue, Dec 19, 2006 at 09:59:00AM +0000, Cool_Zer0 wrote:
> Michael Niedermayer wrote:
> >Hi
> >
> >On Mon, Dec 18, 2006 at 06:37:22PM +0000, Cool_Zer0 wrote:
> >  
> >>On 12/18/06, Michael Niedermayer <michaelni at gmx.at> wrote:
> >>    
> >>>Hi
> >>>
> >>>On Mon, Dec 18, 2006 at 11:04:47AM +0000, Cool_Zer0 wrote:
> >>>      
> >>>>Hi there.
> >>>>
> >>>>I'm trying to use AVParser but I'm a bit lost and I can't find any
> >>>>documentation.
> >>>>
> >>>>So... Here's what I'm doing...
> >>>>
> >>>>
> >>>>I'm calling *av_parser_init(CODEC_ID_H263)* and then I think that I have
> >>>>        
> >>>to
> >>>      
> >>>>call *av_parser_parse()* for each H.263 packet that I receive.
> >>>>My main problem is understanding the parameters of the last function:
> >>>>
> >>>>AVCodecParserContext
> >>>>AVCodecContext
> >>>>poutbuf
> >>>>poutbuf_size
> >>>>buf
> >>>>buf_size
> >>>>pts
> >>>>dts
> >>>>
> >>>>The first ones I understand but the last 6 I can't understand what they
> >>>>are...
> >>>>Other question...  If buf_size takes the value 0 it means that I have a
> >>>>complete frame, right? So... Where is that frame and how can I put on a
> >>>>AVFrame/AVPicture in order to convert it to BGR24?
> >>>>
> >>>>If you don't want to answer my question at least give me some link to
> >>>>        
> >>>any
> >>>      
> >>>>documentation about AVParser.
> >>>>        
> >>>see av_read_frame_internal() in utils.c and the doxygen comment above
> >>>av_parser_parse in parser.c
> >>>      
> >>
> >>Hi.
> >>When I update my code the comment appear :)
> >>But I'm having the same problems that I had without the AVParser :(
> >>
> >>
> >>AVCodecParserContext *parser_context;
> >>uint8_t *poutbuf = new uint8_t[6000];
> >>int poutsize=0;
> >>
> >>{
> >>...
> >>parser_context = av_parser_init(CODEC_ID_H263);
> >>...
> >>}
> >>
> >>void video_decode(unsigned char* payload, int payloadsize)
> >>{
> >>   static int frame_numero = 0;
> >>
> >>   int len = 0;
> >>   while (payloadsize) {
> >>       len = av_parser_parse(parser_context, c, &poutbuf, &poutsize,
> >>payload, payloadsize, frame_numero, frame_numero);
> >>
> >>       payload += len;
> >>       payloadsize -= len;
> >>
> >>       if (len < 0)
> >>           return;
> >>    
> >
> >  
> Hi.
> 
> >if(!poutsize)
> >    continue;
> >  
> 
> Less frames are saved but still presents the same problems :(
> 
> >and if this doesnt help then does it work if you dump the stuff to a file 
> >and
> >try to play that with ffmpeg or ffplay?
> >  
> 
> That's a good sugestion!!! If ffmpeg could play and decompress the movie 
> correctly should mean that the problem is in my code. There is only one 
> problem...
> I'm receiving packets through RTP (not using RTSP)... I have saved about 
> 160 h.263 packets... In order to pass that packets to ffmpeg what I have 
> to do? Merge all the packets into a single file? It will work? The file 
> doesn't need to have a special format?

yes ff* should be able to play h.263 if the frames are just concatenated

and you can generate a valid h.263 file for comparission with
ffmpeg -i any.avi -s 352x288 test.h263

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Freedom in capitalist society always remains about the same as it was in
ancient Greek republics: Freedom for slave owners. -- Vladimir Lenin




More information about the ffmpeg-devel mailing list