[SCM] libav/experimental: picture heap corruption fix
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Jun 30 15:42:38 UTC 2013
The following commit has been merged in the experimental branch:
commit eaba7c7fd621a5433a650ddfc2103ebb01fc9aa8
Author: Michael Niedermayer <michaelni at gmx.at>
Date: Mon Jan 10 23:41:25 2005 +0000
picture heap corruption fix
Originally committed as revision 3819 to svn://svn.ffmpeg.org/ffmpeg/trunk
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 60867f0..55c8601 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -1959,6 +1959,29 @@ static int load_input_picture(MpegEncContext *s, AVFrame *pic_arg){
const int encoding_delay= s->max_b_frames;
int direct=1;
+ if(pic_arg){
+ if(pic_arg->pts != AV_NOPTS_VALUE){
+ if(s->user_specified_pts != AV_NOPTS_VALUE){
+ int64_t time= av_rescale(pic_arg->pts, s->avctx->frame_rate, s->avctx->frame_rate_base*(int64_t)AV_TIME_BASE);
+ int64_t last= av_rescale(s->user_specified_pts, s->avctx->frame_rate, s->avctx->frame_rate_base*(int64_t)AV_TIME_BASE);
+
+ if(time <= last){
+ av_log(s->avctx, AV_LOG_ERROR, "Error, Invalid timestamp=%Ld, last=%Ld\n", pic_arg->pts, s->user_specified_pts);
+ return -1;
+ }
+ }
+ s->user_specified_pts= pic_arg->pts;
+ }else{
+ if(s->user_specified_pts != AV_NOPTS_VALUE){
+ s->user_specified_pts=
+ pic_arg->pts= s->user_specified_pts + AV_TIME_BASE*(int64_t)s->avctx->frame_rate_base / s->avctx->frame_rate;
+ av_log(s->avctx, AV_LOG_INFO, "Warning: AVFrame.pts=? trying to guess (%Ld)\n", pic_arg->pts);
+ }else{
+ pic_arg->pts= av_rescale(pic_arg->display_picture_number*(int64_t)s->avctx->frame_rate_base, AV_TIME_BASE, s->avctx->frame_rate);
+ }
+ }
+ }
+
if(pic_arg){
if(encoding_delay && !(s->flags&CODEC_FLAG_INPUT_PRESERVED)) direct=0;
if(pic_arg->linesize[0] != s->linesize) direct=0;
@@ -2021,26 +2044,6 @@ static int load_input_picture(MpegEncContext *s, AVFrame *pic_arg){
pic->display_picture_number= s->input_picture_number++;
- if(pic->pts != AV_NOPTS_VALUE){
- if(s->user_specified_pts != AV_NOPTS_VALUE){
- int64_t time= av_rescale(pic->pts, s->avctx->frame_rate, s->avctx->frame_rate_base*(int64_t)AV_TIME_BASE);
- int64_t last= av_rescale(s->user_specified_pts, s->avctx->frame_rate, s->avctx->frame_rate_base*(int64_t)AV_TIME_BASE);
-
- if(time <= last){
- av_log(s->avctx, AV_LOG_ERROR, "Error, Invalid timestamp=%Ld, last=%Ld\n", pic->pts, s->user_specified_pts);
- return -1;
- }
- }
- s->user_specified_pts= pic->pts;
- }else{
- if(s->user_specified_pts != AV_NOPTS_VALUE){
- s->user_specified_pts=
- pic->pts= s->user_specified_pts + AV_TIME_BASE*(int64_t)s->avctx->frame_rate_base / s->avctx->frame_rate;
- av_log(s->avctx, AV_LOG_INFO, "Warning: AVFrame.pts=? trying to guess (%Ld)\n", pic->pts);
- }else{
- pic->pts= av_rescale(pic->display_picture_number*(int64_t)s->avctx->frame_rate_base, AV_TIME_BASE, s->avctx->frame_rate);
- }
- }
}
/* shift buffer entries */
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list