*** ffmpeg.c.orig	Thu Mar 17 05:10:27 2011
--- ffmpeg.c	Fri May  6 00:43:04 2011
***************
*** 143,148 ****
--- 143,149 ----
  static int same_quality = 0;
  static int do_deinterlace = 0;
  static int top_field_first = -1;
+ static int ejo_interlaced = -1;
  static int me_threshold = 0;
  static int intra_dc_precision = 8;
  static int loop_input = 0;
***************
*** 951,957 ****
              big_picture= *final_picture;
              /* better than nothing: use input picture interlaced
                 settings */
!             big_picture.interlaced_frame = in_picture->interlaced_frame;
              if(avctx_opts[CODEC_TYPE_VIDEO]->flags & (CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_INTERLACED_ME)){
                  if(top_field_first == -1)
                      big_picture.top_field_first = in_picture->top_field_first;
--- 952,962 ----
              big_picture= *final_picture;
              /* better than nothing: use input picture interlaced
                 settings */
!             if(ejo_interlaced == -1)
!                 big_picture.interlaced_frame = in_picture->interlaced_frame;
!             else
!                 big_picture.interlaced_frame = ejo_interlaced;
! 
              if(avctx_opts[CODEC_TYPE_VIDEO]->flags & (CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_INTERLACED_ME)){
                  if(top_field_first == -1)
                      big_picture.top_field_first = in_picture->top_field_first;
***************
*** 1030,1040 ****
      enc = ost->st->codec;
      if (enc->codec_type == CODEC_TYPE_VIDEO) {
          frame_number = ost->frame_number;
!         fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality/(float)FF_QP2LAMBDA);
          if (enc->flags&CODEC_FLAG_PSNR)
!             fprintf(vstats_file, "PSNR= %6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0)));
  
!         fprintf(vstats_file,"f_size= %6d ", frame_size);
          /* compute pts value */
          ti1 = ost->sync_opts * av_q2d(enc->time_base);
          if (ti1 < 0.01)
--- 1035,1049 ----
      enc = ost->st->codec;
      if (enc->codec_type == CODEC_TYPE_VIDEO) {
          frame_number = ost->frame_number;
!         fprintf(vstats_file, "f=%5d%c q=%2.1f ", 
! 			frame_number, 
! 			enc->coded_frame->interlaced_frame?
! 				(enc->coded_frame->top_field_first?'t':'b'):'p',
! 			enc->coded_frame->quality/(float)FF_QP2LAMBDA);
          if (enc->flags&CODEC_FLAG_PSNR)
!             fprintf(vstats_file, "PSNR=%6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0)));
  
!         fprintf(vstats_file,"f_size=%6d ", frame_size);
          /* compute pts value */
          ti1 = ost->sync_opts * av_q2d(enc->time_base);
          if (ti1 < 0.01)
***************
*** 1042,1050 ****
  
          bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0;
          avg_bitrate = (double)(video_size * 8) / ti1 / 1000.0;
!         fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
              (double)video_size / 1024, ti1, bitrate, avg_bitrate);
!         fprintf(vstats_file,"type= %c\n", av_get_pict_type_char(enc->coded_frame->pict_type));
      }
  }
  
--- 1051,1059 ----
  
          bitrate = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0;
          avg_bitrate = (double)(video_size * 8) / ti1 / 1000.0;
!         fprintf(vstats_file, "s_size=%8.0fkB time=%0.3f br=%7.1fkbits/s avg_br=%7.1fkbits/s ",
              (double)video_size / 1024, ti1, bitrate, avg_bitrate);
!         fprintf(vstats_file,"type=%c\n", av_get_pict_type_char(enc->coded_frame->pict_type));
      }
  }
  
***************
*** 1098,1105 ****
              float t = (av_gettime()-timer_start) / 1000000.0;
  
              frame_number = ost->frame_number;
!             snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "frame=%5d fps=%3d q=%3.1f ",
!                      frame_number, (t>1)?(int)(frame_number/t+0.5) : 0,
                       !ost->st->stream_copy ?
                       enc->coded_frame->quality/(float)FF_QP2LAMBDA : -1);
              if(is_last_report)
--- 1107,1117 ----
              float t = (av_gettime()-timer_start) / 1000000.0;
  
              frame_number = ost->frame_number;
!             snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "f=%5d%c fps=%3d q=%3.1f ",
!                      frame_number,
! 		            enc->coded_frame->interlaced_frame?
! 		                (enc->coded_frame->top_field_first?'t':'b'):'p',
! 					(t>1)?(int)(frame_number/t+0.5) : 0,
                       !ost->st->stream_copy ?
                       enc->coded_frame->quality/(float)FF_QP2LAMBDA : -1);
              if(is_last_report)
***************
*** 2567,2572 ****
--- 2579,2589 ----
      }
  }
  
+ static void opt_ejo_interlaced(const char *arg)
+ {
+     ejo_interlaced= atoi(arg);
+ }
+ 
  static void opt_top_field_first(const char *arg)
  {
      top_field_first= atoi(arg);
***************
*** 3842,3847 ****
--- 3859,3865 ----
  #endif
      { "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_intra_matrix}, "specify intra matrix coeffs", "matrix" },
      { "inter_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_inter_matrix}, "specify inter matrix coeffs", "matrix" },
+     { "interlace", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_ejo_interlaced}, "progressive=0/interlaced=1/auto=-1", "" },
      { "top", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_top_field_first}, "top=1/bottom=0/auto=-1 field first", "" },
      { "dc", OPT_INT | HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)&intra_dc_precision}, "intra_dc_precision", "precision" },
      { "vtag", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_video_tag}, "force video tag/fourcc", "fourcc/tag" },
