[Ffmpeg-devel] [PATCH] Add Dirac support to ffmpeg]

Andrew Kennedy andrew.kennedy
Tue Sep 27 17:22:13 CEST 2005


Hi

At 21:00 20/09/2005, you wrote:
>Hi
>
>On Tue, Sep 20, 2005 at 04:55:24PM +0100, Andrew Kennedy wrote:
> > Hi
> >
> > At 22:19 16/09/2005, you wrote:
> > >Hi
> > >
> > >On Fri, Sep 16, 2005 at 04:50:12PM +0100, Andrew Kennedy wrote:
> > >>
> > >> Hi
> > >>
> > >> At 11:37 02/09/2005, you wrote:
> > >> >Hi
> > >> >
> > >> >On Tue, Aug 30, 2005 at 04:25:54PM +0100, Andrew Kennedy wrote:
> > >> >> Hi,
> > >> >>
> > >> >> I've amended the patch in line with your recommendations. As part of
> > >the
> > >> >> changes, encoding should now only work with the -2 strict option.
> > >> >
> > >> >thanks, but it seems i keep finding issues every time i want to 
> apply it
> > >> >so i have to annoy you again with a list of recommandet changes
> > >> >
> > >> >[...]
> > >> >> +static int dirac_encode_frame(AVCodecContext *avccontext,
> > >> >> +                              unsigned char *frame,
> > >> >> +                              int buf_size, void *data)
> > >> >[...]
> > >> >> +    avccontext->coded_frame->pts= 0;
> > >> >
> > >> >this obviously is wrong, 2 frames cant have the same pts, why do you
> > >> >set it at all?
> > >> >
> > >>
> > >> This seems to have been set to avoid problems when encoding to container
> > >> formats such as avi. When removed, non-monotone errors are thrown up
> > >before
> > >> writing the frame. So this line of code is really more of a short-term
> > >fix.
> > >> As to a cleaner implementation, I'm not sure which approach to take. Any
> > >> suggestions?
> > >
> > >please elaborate on what you did to get non-monotone errors?
> > >(with latest cvs of course)
> >
> > For example, removing:
> > avccontext->coded_frame->pts= 0
> > ...and encoding using:
> >
> > ffmpeg_g -s 720x576 -i snowboard.yuv [14 frames] -vcodec dirac -f avi -r
> > 25/1 -strict -2  output.avi
> >
> > ....produces (from utils.c)
> > error, non monotone timestamps 12 >= 120.5 bitrate=2430.9kbits/s
> > error, non monotone timestamps 12 >= 12
> > error, non monotone timestamps 12 >= 12
>
>are you using latest ffmpeg cvs?
>

Yes, this is the output from the latest CVS.


> >
> > ..code snippet:
> > if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= 
> pkt->dts){
> >    av_log(NULL, AV_LOG_ERROR, "error, non monotone timestamps %Ld >=
> > %Ld\n", st->cur_dts, pkt->dts);
> >    return -1;
> >
> > However, adding in:
> > avccontext->coded_frame->pts=AV_NOPTS_VALUE;
> > ..to dirac_encode_frame() does not produce an error. Is this valid?
>
>no, but better then setting it to 0
>
>btw, i would help debug this but trying to compile ffmpeg+dirac here leads to

Thanks. Some help on this issue would be appreciated.


>/home/michael/bin/colorgcc -O3 -g -Wall -Wno-switch  -DHAVE_AV_CONFIG_H 
>-I.. -I'/home/michael/ffmpeg-write2/ffmpeg'/libavutil 
>-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE 
>-D_GNU_SOURCE  -I/usr/local/include/dirac    -c -o dirac.o dirac.c
>In file included from dirac.c:31:
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:167: error: 
>syntax error before 'bool'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:167: warning: no 
>semicolon at end of struct or union
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:186: error: 
>syntax error before '}' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:186: warning: 
>type defaults to 'int' in declaration of 'dirac_encparams_t'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:186: warning: 
>data definition has no type or storage class
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:194: error: 
>syntax error before 'dirac_encparams_t'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:194: warning: no 
>semicolon at end of struct or union
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:200: error: 
>syntax error before '}' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:200: warning: 
>type defaults to 'int' in declaration of 'dirac_encoder_context_t'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:200: warning: 
>data definition has no type or storage class
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:288: error: 
>syntax error before '*' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:413: error: 
>syntax error before 'dirac_encoder_context_t'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:413: warning: no 
>semicolon at end of struct or union
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:464: error: 
>syntax error before '}' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:464: warning: 
>type defaults to 'int' in declaration of 'dirac_encoder_t'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:464: warning: 
>data definition has no type or storage class
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:472: error: 
>syntax error before '*' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:472: warning: 
>type defaults to 'int' in declaration of 'dirac_encoder_context_t'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:472: error: 
>syntax error before '*' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:472: warning: 
>type defaults to 'int' in declaration of 'dirac_encoder_init'
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:472: warning: 
>data definition has no type or storage class
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:483: error: 
>syntax error before '*' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:494: error: 
>syntax error before '*' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:503: error: 
>syntax error before '*' token
>/usr/local/include/dirac/libdirac_encoder/dirac_encoder.h:509: error: 
>syntax error before '*' token
>
>colorgcc --version
>gcc (GCC) 4.0.1 (Debian 4.0.1-1)

It appears that a boolean type had creeped into the lastest Dirac CVS by 
accident.  Hence the reason that the ffmpeg compiler was complaining. This 
has now been corrected. A fresh check-out should fix the problem.

Regards
Andrew





More information about the ffmpeg-devel mailing list