summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2009-02-26 23:47:32 +0000
committerMichael Niedermayer <michaelni@gmx.at>2009-02-26 23:47:32 +0000
commit3797c74ba5350692122a81db62a7bf2ce152f7fc (patch)
tree937ea6305b90b405b4760bcabf0d23de1379a869 /libavcodec
parent83569729d461d4a9465ad90d6a6e36eb2c358cb5 (diff)
Add ticks_per_frame, this should hopefully fix the regressions caused
by the time_base change. Originally committed as revision 17630 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/avcodec.h11
-rw-r--r--libavcodec/h264.c1
-rw-r--r--libavcodec/mpeg12.c3
-rw-r--r--libavcodec/options.c1
4 files changed, 14 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index a3bfcbc431..b078bc98c2 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -30,7 +30,7 @@
#include "libavutil/avutil.h"
#define LIBAVCODEC_VERSION_MAJOR 52
-#define LIBAVCODEC_VERSION_MINOR 19
+#define LIBAVCODEC_VERSION_MINOR 20
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
@@ -2323,6 +2323,15 @@ typedef struct AVCodecContext {
* - decoding: Set by libavcodec
*/
struct AVHWAccel *hwaccel;
+
+ /**
+ * For some codecs, the time base is closer to the field rate than the frame rate.
+ * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
+ * if no telecine is used ...
+ *
+ * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
+ */
+ int ticks_per_frame;
} AVCodecContext;
/**
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 64ca5b7e66..24dc201e9f 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -2201,6 +2201,7 @@ static av_cold int decode_init(AVCodecContext *avctx){
h->sei_dpb_output_delay = 0;
h->sei_cpb_removal_delay = -1;
h->sei_buffering_period_present = 0;
+ avctx->ticks_per_frame = 2;
return 0;
}
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 46d7946aaa..6988da22f6 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -1269,7 +1269,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
//MPEG-1 aspect
avctx->sample_aspect_ratio= av_d2q(
1.0/ff_mpeg1_aspect[s->aspect_ratio_info], 255);
-
+ avctx->ticks_per_frame=1;
}else{//MPEG-2
//MPEG-2 fps
av_reduce(
@@ -1278,6 +1278,7 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
ff_frame_rate_tab[s->frame_rate_index].num * s1->frame_rate_ext.num*2,
ff_frame_rate_tab[s->frame_rate_index].den * s1->frame_rate_ext.den,
1<<30);
+ avctx->ticks_per_frame=2;
//MPEG-2 aspect
if(s->aspect_ratio_info > 1){
//we ignore the spec here as reality does not match the spec, see for example
diff --git a/libavcodec/options.c b/libavcodec/options.c
index 1a3c1efd5d..e5a67a4893 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -393,6 +393,7 @@ static const AVOption options[]={
{"request_channel_layout", NULL, OFFSET(request_channel_layout), FF_OPT_TYPE_INT64, DEFAULT, 0, INT64_MAX, A|D, "request_channel_layout"},
{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), FF_OPT_TYPE_FLOAT, 1.0/3, 0.0, FLT_MAX, V|E},
{"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), FF_OPT_TYPE_FLOAT, 3, 0.0, FLT_MAX, V|E},
+{"ticks_per_frame", NULL, OFFSET(ticks_per_frame), FF_OPT_TYPE_INT, 1, 1, INT_MAX, A|V|E|D},
{NULL},
};