[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