[FFmpeg-devel] [RFC] lavu PTS printing utils

Reimar Döffinger Reimar.Doeffinger at gmx.de
Tue Jan 17 22:56:35 CET 2012


On Tue, Jan 17, 2012 at 10:44:21PM +0100, Alexander Strasser wrote:
> [...]
> > +
> > +static inline char *av_get_ts_string(char *buf, size_t buf_size, int64_t ts)
> > +{
> > +    if (ts == AV_NOPTS_VALUE) snprintf(buf, buf_size, "NOPTS");
> > +    else                      snprintf(buf, buf_size, "%"PRId64"", ts);
> > +    return buf;
> > +}
> > +
> > +#define av_ts2str(ts) av_get_ts_string((char[42]){ 0 }, 42, ts)
> > +
> > +static inline char* av_get_time_string(char *buf, size_t buf_size, int64_t ts, AVRational *tb)
> > +{
> > +    if (ts == AV_NOPTS_VALUE) snprintf(buf, buf_size, "NOPTS");
> > +    else                      snprintf(buf, buf_size, "%f", av_q2d(*tb) * ts);
> > +    return buf;
> > +}
> > +
> > +#define av_time2str(ts, tb) av_get_time_string((char[42]){ 0 }, 42, ts, tb)
> 
>   The naming of the macros is a bit risky. Especially considering how often we
> append numbers to names to introduce a successor. av_time2str2 would be rather
> confusing.

Also while I don't care too much about C++, the (char[42]){ 0 } syntax
has not made it into even the latest C++ version, so I'd strongly
suggest to think at least thrice before adding such a thing to the
public API (even though a macro means it won't cause compile errors
unless used - but if we want to take advantage of that it should
probably be documented).
Actually, I think it might be a right-out bad idea to use this
at all in public API, because I don't think anyone would accept
that

char *a;
a = av_time2str(b, c);
printf(a);

would suddenly become invalid code when changed to

char *a;
{
a = av_time2str(b, c);
}
printf(a);


More information about the ffmpeg-devel mailing list