Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-03-28 01:08:53 +0400
committerMichael Niedermayer <michaelni@gmx.at>2013-03-29 20:40:28 +0400
commitef7b6b489ab38a8f0abe6b8f55c0e130cbd125c9 (patch)
treeb3a0892c9a4d1bf7406a22379144861b8fc5d34e
parentc81d2fa96ddc9f6dab38d61a8803caca7e63bea0 (diff)
ffmpeg/avformat: factor av_guess_frame_rate() out
This will be used in ffplay Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--doc/APIchanges3
-rw-r--r--ffmpeg_filter.c13
-rw-r--r--libavformat/avformat.h10
-rw-r--r--libavformat/utils.c16
-rw-r--r--libavformat/version.h2
5 files changed, 33 insertions, 11 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index 255f9147ff..bc4d4febca 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil: 2012-10-22
API changes, most recent first:
+2013-03-29 - xxxxxxx - lavf 55.1.100 - avformat.h
+ Add av_guess_frame_rate()
+
2013-03-20 - xxxxxxx - lavu 52.22.100 - opt.h
Add AV_OPT_TYPE_DURATION value to AVOptionType enum.
diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c
index 654c19d4c3..6824af6dee 100644
--- a/ffmpeg_filter.c
+++ b/ffmpeg_filter.c
@@ -542,22 +542,15 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
InputStream *ist = ifilter->ist;
AVRational tb = ist->framerate.num ? av_inv_q(ist->framerate) :
ist->st->time_base;
- AVRational fr = ist->framerate.num ? ist->framerate :
- ist->st->r_frame_rate;
+ AVRational fr = ist->framerate;
AVRational sar;
AVBPrint args;
char name[255];
int pad_idx = in->pad_idx;
int ret;
- if (!ist->framerate.num && ist->st->codec->ticks_per_frame>1) {
- AVRational codec_fr = av_inv_q(ist->st->codec->time_base);
- AVRational avg_fr = ist->st->avg_frame_rate;
- codec_fr.den *= ist->st->codec->ticks_per_frame;
- if ( codec_fr.num>0 && codec_fr.den>0 && av_q2d(codec_fr) < av_q2d(fr)*0.7
- && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr)))>0.1)
- fr = codec_fr;
- }
+ if (!fr.num)
+ fr = av_guess_frame_rate(input_files[ist->file_index]->ctx, ist->st, NULL);
if (ist->st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
ret = sub2video_prepare(ist);
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 549a0fa45f..57603031a4 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -2108,6 +2108,16 @@ const struct AVCodecTag *avformat_get_riff_audio_tags(void);
AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame);
/**
+ * Guess the frame rate, based on both the container and codec information.
+ *
+ * @param ctx the format context which the stream is part of
+ * @param stream the stream which the frame is part of
+ * @param frame the frame for which the frame rate should be determined, may be NULL
+ * @return the guessed (valid) frame rate, 0/1 if no idea
+ */
+AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame);
+
+/**
* Check if the stream st contained in s is matched by the stream specifier
* spec.
*
diff --git a/libavformat/utils.c b/libavformat/utils.c
index df688f1817..d0393f9db2 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -4278,6 +4278,22 @@ AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *strea
return frame_sample_aspect_ratio;
}
+AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
+{
+ AVRational fr = st->r_frame_rate;
+
+ if (st->codec->ticks_per_frame > 1) {
+ AVRational codec_fr = av_inv_q(st->codec->time_base);
+ AVRational avg_fr = st->avg_frame_rate;
+ codec_fr.den *= st->codec->ticks_per_frame;
+ if ( codec_fr.num > 0 && codec_fr.den > 0 && av_q2d(codec_fr) < av_q2d(fr)*0.7
+ && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1)
+ fr = codec_fr;
+ }
+
+ return fr;
+}
+
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st,
const char *spec)
{
diff --git a/libavformat/version.h b/libavformat/version.h
index 6332878c9f..17447c0e08 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -30,7 +30,7 @@
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 55
-#define LIBAVFORMAT_VERSION_MINOR 0
+#define LIBAVFORMAT_VERSION_MINOR 1
#define LIBAVFORMAT_VERSION_MICRO 100
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \