summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2012-07-29 14:58:53 +0100
committerMans Rullgard <mans@mansr.com>2012-08-05 17:46:41 +0100
commit82494835c4ee2adf5afc51bfd19964b82eb80da9 (patch)
treecfeb1111d14bb5f6d1d40e605eaa356c4f76be72
parent965efc1673074ac1e6c28177a4718ed84f89ac83 (diff)
rational: add av_inv_q() returning the inverse of an AVRational
This allows simplifying a few expressions. Signed-off-by: Mans Rullgard <mans@mansr.com>
-rw-r--r--avconv.c6
-rw-r--r--libavutil/rational.h11
2 files changed, 13 insertions, 4 deletions
diff --git a/avconv.c b/avconv.c
index 07de66e7fc..b20dbeca62 100644
--- a/avconv.c
+++ b/avconv.c
@@ -797,8 +797,7 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
AVFilterContext *first_filter = in->filter_ctx;
AVFilter *filter = avfilter_get_by_name("buffer");
InputStream *ist = ifilter->ist;
- AVRational tb = ist->framerate.num ? (AVRational){ist->framerate.den,
- ist->framerate.num} :
+ AVRational tb = ist->framerate.num ? av_inv_q(ist->framerate) :
ist->st->time_base;
AVRational sar;
char args[255], name[255];
@@ -2197,8 +2196,7 @@ static int output_packet(InputStream *ist, const AVPacket *pkt)
if (avpkt.duration)
ist->next_dts += av_rescale_q(avpkt.duration, ist->st->time_base, AV_TIME_BASE_Q);
else if (ist->st->avg_frame_rate.num)
- ist->next_dts += av_rescale_q(1, (AVRational){ist->st->avg_frame_rate.den,
- ist->st->avg_frame_rate.num},
+ ist->next_dts += av_rescale_q(1, av_inv_q(ist->st->avg_frame_rate),
AV_TIME_BASE_Q);
else if (ist->st->codec->time_base.num != 0) {
int ticks = ist->st->parser ? ist->st->parser->repeat_pict + 1 :
diff --git a/libavutil/rational.h b/libavutil/rational.h
index 0ec18ec969..5d7dab7fd0 100644
--- a/libavutil/rational.h
+++ b/libavutil/rational.h
@@ -115,6 +115,17 @@ AVRational av_add_q(AVRational b, AVRational c) av_const;
AVRational av_sub_q(AVRational b, AVRational c) av_const;
/**
+ * Invert a rational.
+ * @param q value
+ * @return 1 / q
+ */
+static av_always_inline AVRational av_inv_q(AVRational q)
+{
+ AVRational r = { q.den, q.num };
+ return r;
+}
+
+/**
* Convert a double precision floating point number to a rational.
* inf is expressed as {1,0} or {-1,0} depending on the sign.
*