]> git.sesse.net Git - vlc/commitdiff
avcodec: settings pts doesn't segfault with mp4v
authorIlkka Ollakka <ileoo@videolan.org>
Wed, 24 Oct 2012 06:17:43 +0000 (09:17 +0300)
committerIlkka Ollakka <ileoo@videolan.org>
Wed, 24 Oct 2012 06:18:06 +0000 (09:18 +0300)
modules/codec/avcodec/encoder.c

index 729528e25686828aca65d8fc7aa14201a27e93c0..dc71b8ace903e1dad8746a812cdd7338aa0a5aca 100644 (file)
@@ -871,51 +871,44 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )
         frame->interlaced_frame = !p_pict->b_progressive;
         frame->top_field_first = !!p_pict->b_top_field_first;
 
-        /* Set the pts of the frame being encoded (segfaults with mpeg4!)*/
-        if( p_enc->fmt_out.i_codec != VLC_CODEC_MP4V )
+        /* Set the pts of the frame being encoded */
+        frame->pts = p_pict->date ? p_pict->date : (int64_t)AV_NOPTS_VALUE;
+
+        if ( p_sys->b_hurry_up && frame->pts != (int64_t)AV_NOPTS_VALUE )
         {
-            frame->pts = p_pict->date ? p_pict->date : (int64_t)AV_NOPTS_VALUE;
+            mtime_t current_date = mdate();
 
-            if ( p_sys->b_hurry_up && frame->pts != (int64_t)AV_NOPTS_VALUE )
+            if ( current_date + HURRY_UP_GUARD3 > frame->pts )
+            {
+                p_sys->p_context->mb_decision = FF_MB_DECISION_SIMPLE;
+                p_sys->p_context->trellis = 0;
+                msg_Dbg( p_enc, "hurry up mode 3" );
+            }
+            else
             {
-                mtime_t current_date = mdate();
+                p_sys->p_context->mb_decision = p_sys->i_hq;
 
-                if ( current_date + HURRY_UP_GUARD3 > frame->pts )
+                if ( current_date + HURRY_UP_GUARD2 > frame->pts )
                 {
-                    p_sys->p_context->mb_decision = FF_MB_DECISION_SIMPLE;
                     p_sys->p_context->trellis = 0;
-                    msg_Dbg( p_enc, "hurry up mode 3" );
+                    p_sys->p_context->noise_reduction = p_sys->i_noise_reduction
+                        + (HURRY_UP_GUARD2 + current_date - frame->pts) / 500;
+                    msg_Dbg( p_enc, "hurry up mode 2" );
                 }
                 else
                 {
-                    p_sys->p_context->mb_decision = p_sys->i_hq;
-
-                    if ( current_date + HURRY_UP_GUARD2 > frame->pts )
-                    {
-                        p_sys->p_context->trellis = 0;
-                        p_sys->p_context->noise_reduction = p_sys->i_noise_reduction
-                            + (HURRY_UP_GUARD2 + current_date - frame->pts) / 500;
-                        msg_Dbg( p_enc, "hurry up mode 2" );
-                    }
-                    else
-                    {
-                        p_sys->p_context->trellis = p_sys->b_trellis;
-
-                        p_sys->p_context->noise_reduction =
-                           p_sys->i_noise_reduction;
-                    }
-                }
+                    p_sys->p_context->trellis = p_sys->b_trellis;
 
-                if ( current_date + HURRY_UP_GUARD1 > frame->pts )
-                {
-                    frame->pict_type = AV_PICTURE_TYPE_P;
-                    /* msg_Dbg( p_enc, "hurry up mode 1 %lld", current_date + HURRY_UP_GUARD1 - frame.pts ); */
+                    p_sys->p_context->noise_reduction =
+                       p_sys->i_noise_reduction;
                 }
             }
-        }
-        else
-        {
-            frame->pts = (int64_t)AV_NOPTS_VALUE;
+
+            if ( current_date + HURRY_UP_GUARD1 > frame->pts )
+            {
+                frame->pict_type = AV_PICTURE_TYPE_P;
+                /* msg_Dbg( p_enc, "hurry up mode 1 %lld", current_date + HURRY_UP_GUARD1 - frame.pts ); */
+            }
         }
 
         if ( frame->pts != (int64_t)AV_NOPTS_VALUE && frame->pts != 0 )