[Ffmpeg-devel] Help understanding AVParser

Cool_Zer0 c00jz3r0
Tue Dec 19 10:59:00 CET 2006


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?

(The frames are to be shown to the user one by one and not in a movie type)


Thanks


> [...]
>   





More information about the ffmpeg-devel mailing list