Merge commit '7f93a861aaf2e76fd63b53ccc465909873b8dc29'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 6 Sep 2013 11:00:47 +0000 (13:00 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 6 Sep 2013 11:00:47 +0000 (13:00 +0200)
* commit '7f93a861aaf2e76fd63b53ccc465909873b8dc29':
  mpeg12enc: K&R formatting cosmetics

Conflicts:
libavcodec/mpeg12enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/mpeg12enc.c

   * MPEG1/2 encoder
   */
  
+ #include "libavutil/attributes.h"
++#include "libavutil/avassert.h"
+ #include "libavutil/log.h"
+ #include "libavutil/opt.h"
++#include "libavutil/timecode.h"
  #include "avcodec.h"
+ #include "bytestream.h"
  #include "mathops.h"
- #include "mpegvideo.h"
  #include "mpeg12.h"
  #include "mpeg12data.h"
- #include "bytestream.h"
+ #include "mpegvideo.h"
  
- #include "libavutil/attributes.h"
- #include "libavutil/log.h"
- #include "libavutil/opt.h"
- #include "libavutil/avassert.h"
- #include "libavutil/timecode.h"
  
- static const uint8_t inv_non_linear_qscale[13] = {
-     0, 2, 4, 6, 8,
-     9,10,11,12,13,14,15,16,
+ static const uint8_t inv_non_linear_qscale[] = {
+     0, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16,
  };
  
- static const uint8_t svcd_scan_offset_placeholder[14] = {
-     0x10, 0x0E,
-     0x00, 0x80, 0x81,
-     0x00, 0x80, 0x81,
-     0xff, 0xff, 0xff,
-     0xff, 0xff, 0xff,
+ static const uint8_t svcd_scan_offset_placeholder[] = {
+     0x10, 0x0E, 0x00, 0x80, 0x81, 0x00, 0x80,
+     0x81, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  };
  
- static uint8_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
- static uint8_t fcode_tab[MAX_MV*2+1];
+ static uint8_t mv_penalty[MAX_FCODE + 1][MAX_MV * 2 + 1];
+ static uint8_t fcode_tab[MAX_MV * 2 + 1];
  
- static uint8_t  uni_mpeg1_ac_vlc_len [64*64*2];
- static uint8_t  uni_mpeg2_ac_vlc_len [64*64*2];
+ static uint8_t uni_mpeg1_ac_vlc_len[64 * 64 * 2];
+ static uint8_t uni_mpeg2_ac_vlc_len[64 * 64 * 2];
  
- /* simple include everything table for dc, first byte is bits number next 3 are code*/
+ /* simple include everything table for dc, first byte is bits
+  * number next 3 are code */
  static uint32_t mpeg1_lum_dc_uni[512];
  static uint32_t mpeg1_chr_dc_uni[512];
  
@@@ -74,65 -68,55 +70,66 @@@ static av_cold void init_uni_ac_vlc(RLT
          int run;
          if (!level)
              continue;
-         for(run=0; run<64; run++){
+         for (run = 0; run < 64; run++) {
              int len, code;
-             int alevel= FFABS(level);
+             int alevel = FFABS(level);
  
              if (alevel > rl->max_level[0][run])
-                 code= 111; /*rl->n*/
+                 code = 111;                         /* rl->n */
              else
-                 code= rl->index_run[0][run] + alevel - 1;
+                 code = rl->index_run[0][run] + alevel - 1;
  
-             if (code < 111 /* rl->n */) {
-                 /* length of vlc and sign */
-                 len=   rl->table_vlc[code][1]+1;
+             if (code < 111) {                       /* rl->n */
+                 /* length of VLC and sign */
+                 len = rl->table_vlc[code][1] + 1;
              } else {
-                 len=  rl->table_vlc[111/*rl->n*/][1]+6;
 -                len = rl->table_vlc[111][1] + 6;    /* rl->n */
++                len = rl->table_vlc[111 /* rl->n */][1] + 6;
  
-                 if (alevel < 128) {
+                 if (alevel < 128)
                      len += 8;
-                 } else {
+                 else
                      len += 16;
-                 }
              }
  
-             uni_ac_vlc_len [UNI_AC_ENC_INDEX(run, i)]= len;
+             uni_ac_vlc_len[UNI_AC_ENC_INDEX(run, i)] = len;
          }
      }
  }
  
static int find_frame_rate_index(MpegEncContext *s){
+ static int find_frame_rate_index(MpegEncContext *s)
+ {
      int i;
-     AVRational bestq= (AVRational){0, 0};
 -    int64_t dmin = INT64_MAX;
 -    int64_t d;
++    AVRational bestq = (AVRational) {0, 0};
 +    AVRational ext;
 +    AVRational target = av_inv_q(s->avctx->time_base);
  
-     for(i=1;i<14;i++) {
-         if(s->avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL && i>=9) break;
+     for (i = 1; i < 14; i++) {
 -        int64_t n0 = 1001LL / ff_mpeg12_frame_rate_tab[i].den *
 -                     ff_mpeg12_frame_rate_tab[i].num * s->avctx->time_base.num;
 -        int64_t n1 = 1001LL * s->avctx->time_base.den;
 -
+         if (s->avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL &&
+             i >= 9)
+             break;
  
 -        d = FFABS(n0 - n1);
 -        if (d < dmin) {
 -            dmin                = d;
 -            s->frame_rate_index = i;
 +        for (ext.num=1; ext.num <= 4; ext.num++) {
 +            for (ext.den=1; ext.den <= 32; ext.den++) {
 +                AVRational q = av_mul_q(ext, ff_mpeg12_frame_rate_tab[i]);
 +
-                 if(s->codec_id != AV_CODEC_ID_MPEG2VIDEO && (ext.den!=1 || ext.num!=1))
++                if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO && (ext.den!=1 || ext.num!=1))
 +                    continue;
-                 if(av_gcd(ext.den, ext.num) != 1)
++                if (av_gcd(ext.den, ext.num) != 1)
 +                    continue;
 +
-                 if(    bestq.num==0
++                if (    bestq.num==0
 +                    || av_nearer_q(target, bestq, q) < 0
-                     || ext.num==1 && ext.den==1 && av_nearer_q(target, bestq, q) == 0){
-                     bestq = q;
-                     s->frame_rate_index= i;
++                    || ext.num==1 && ext.den==1 && av_nearer_q(target, bestq, q) == 0) {
++                    bestq               = q;
++                    s->frame_rate_index = i;
 +                    s->mpeg2_frame_rate_ext.num = ext.num;
 +                    s->mpeg2_frame_rate_ext.den = ext.den;
 +                }
 +            }
          }
      }
-     if(av_cmp_q(target, bestq))
 -    if (dmin)
++    if (av_cmp_q(target, bestq))
          return -1;
      else
          return 0;
@@@ -142,18 -126,18 +139,21 @@@ static av_cold int encode_init(AVCodecC
  {
      MpegEncContext *s = avctx->priv_data;
  
-     if(ff_MPV_encode_init(avctx) < 0)
 +    if (avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO && avctx->height > 2800)
 +        avctx->thread_count = 1;
 +
+     if (ff_MPV_encode_init(avctx) < 0)
          return -1;
  
-     if(find_frame_rate_index(s) < 0){
-         if(s->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL){
-             av_log(avctx, AV_LOG_ERROR, "MPEG1/2 does not support %d/%d fps\n", avctx->time_base.den, avctx->time_base.num);
+     if (find_frame_rate_index(s) < 0) {
+         if (s->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
+             av_log(avctx, AV_LOG_ERROR, "MPEG1/2 does not support %d/%d fps\n",
+                    avctx->time_base.den, avctx->time_base.num);
              return -1;
-         }else{
-             av_log(avctx, AV_LOG_INFO, "MPEG1/2 does not support %d/%d fps, there may be AV sync issues\n", avctx->time_base.den, avctx->time_base.num);
+         } else {
+             av_log(avctx, AV_LOG_INFO,
+                    "MPEG1/2 does not support %d/%d fps, there may be AV sync issues\n",
+                    avctx->time_base.den, avctx->time_base.num);
          }
      }
  
          }
      }
  
 +    if ((avctx->width & 0xFFF) == 0 && (avctx->height & 0xFFF) == 1) {
 +        av_log(avctx, AV_LOG_ERROR, "Width / Height is invalid for MPEG2\n");
 +        return AVERROR(EINVAL);
 +    }
 +
 +    if (s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) {
 +        if ((avctx->width & 0xFFF) == 0 || (avctx->height & 0xFFF) == 0) {
 +            av_log(avctx, AV_LOG_ERROR, "Width or Height are not allowed to be multiplies of 4096\n"
 +                                        "add '-strict %d' if you want to use them anyway.\n", FF_COMPLIANCE_UNOFFICIAL);
 +            return AVERROR(EINVAL);
 +        }
 +    }
 +
 +    s->drop_frame_timecode = s->drop_frame_timecode || !!(avctx->flags2 & CODEC_FLAG2_DROP_FRAME_TIMECODE);
 +    if (s->drop_frame_timecode)
 +        s->tc.flags |= AV_TIMECODE_FLAG_DROPFRAME;
      if (s->drop_frame_timecode && s->frame_rate_index != 4) {
-         av_log(avctx, AV_LOG_ERROR, "Drop frame time code only allowed with 1001/30000 fps\n");
+         av_log(avctx, AV_LOG_ERROR,
+                "Drop frame time code only allowed with 1001/30000 fps\n");
          return -1;
      }
  
@@@ -224,120 -190,130 +232,126 @@@ static void put_header(MpegEncContext *
  /* put sequence header if needed */
  static void mpeg1_encode_sequence_header(MpegEncContext *s)
  {
-         unsigned int vbv_buffer_size;
-         unsigned int fps, v;
-         int i;
-         uint64_t time_code;
-         float best_aspect_error= 1E10;
-         float aspect_ratio= av_q2d(s->avctx->sample_aspect_ratio);
-         int constraint_parameter_flag;
+     unsigned int vbv_buffer_size, fps, v;
+     int i, constraint_parameter_flag;
+     uint64_t time_code;
+     float best_aspect_error = 1E10;
+     float aspect_ratio      = av_q2d(s->avctx->sample_aspect_ratio);
  
-         if(aspect_ratio==0.0) aspect_ratio= 1.0; //pixel aspect 1:1 (VGA)
+     if (aspect_ratio == 0.0)
+         aspect_ratio = 1.0;             // pixel aspect 1.1 (VGA)
  
-         if (s->current_picture.f.key_frame) {
-             AVRational framerate = ff_mpeg12_frame_rate_tab[s->frame_rate_index];
+     if (s->current_picture.f.key_frame) {
+         AVRational framerate = ff_mpeg12_frame_rate_tab[s->frame_rate_index];
  
-             /* mpeg1 header repeated every gop */
-             put_header(s, SEQ_START_CODE);
+         /* mpeg1 header repeated every gop */
+         put_header(s, SEQ_START_CODE);
  
-             put_sbits(&s->pb, 12, s->width  & 0xFFF);
-             put_sbits(&s->pb, 12, s->height & 0xFFF);
 -        put_sbits(&s->pb, 12, s->width);
 -        put_sbits(&s->pb, 12, s->height);
++        put_sbits(&s->pb, 12, s->width  & 0xFFF);
++        put_sbits(&s->pb, 12, s->height & 0xFFF);
  
-             for(i=1; i<15; i++){
-                 float error= aspect_ratio;
-                 if(s->codec_id == AV_CODEC_ID_MPEG1VIDEO || i <=1)
-                     error-= 1.0/ff_mpeg1_aspect[i];
-                 else
-                     error-= av_q2d(ff_mpeg2_aspect[i])*s->height/s->width;
+         for (i = 1; i < 15; i++) {
+             float error = aspect_ratio;
+             if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO || i <= 1)
+                 error -= 1.0 / ff_mpeg1_aspect[i];
+             else
+                 error -= av_q2d(ff_mpeg2_aspect[i]) * s->height / s->width;
  
-                 error= FFABS(error);
+             error = FFABS(error);
  
-                 if(error < best_aspect_error){
-                     best_aspect_error= error;
-                     s->aspect_ratio_info= i;
-                 }
+             if (error < best_aspect_error) {
+                 best_aspect_error    = error;
+                 s->aspect_ratio_info = i;
              }
+         }
  
-             put_bits(&s->pb, 4, s->aspect_ratio_info);
-             put_bits(&s->pb, 4, s->frame_rate_index);
+         put_bits(&s->pb, 4, s->aspect_ratio_info);
+         put_bits(&s->pb, 4, s->frame_rate_index);
  
-             if(s->avctx->rc_max_rate){
-                 v = (s->avctx->rc_max_rate + 399) / 400;
-                 if (v > 0x3ffff && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)
-                     v = 0x3ffff;
-             }else{
-                 v= 0x3FFFF;
-             }
-             if(s->avctx->rc_buffer_size)
-                 vbv_buffer_size = s->avctx->rc_buffer_size;
-             else
-                 /* VBV calculation: Scaled so that a VCD has the proper VBV size of 40 kilobytes */
-                 vbv_buffer_size = (( 20 * s->bit_rate) / (1151929 / 2)) * 8 * 1024;
-             vbv_buffer_size= (vbv_buffer_size + 16383) / 16384;
-             put_sbits(&s->pb, 18, v);
-             put_bits(&s->pb, 1, 1); /* marker */
-             put_sbits(&s->pb, 10, vbv_buffer_size);
-             constraint_parameter_flag=
-                 s->width <= 768 && s->height <= 576 &&
-                 s->mb_width * s->mb_height <= 396 &&
-                 s->mb_width * s->mb_height * framerate.num <= framerate.den*396*25 &&
-                 framerate.num <= framerate.den*30 &&
-                 s->avctx->me_range && s->avctx->me_range < 128 &&
-                 vbv_buffer_size <= 20 &&
-                 v <= 1856000/400 &&
-                 s->codec_id == AV_CODEC_ID_MPEG1VIDEO;
-             put_bits(&s->pb, 1, constraint_parameter_flag);
-             ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
-             ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
-             if(s->codec_id == AV_CODEC_ID_MPEG2VIDEO){
-                 put_header(s, EXT_START_CODE);
-                 put_bits(&s->pb, 4, 1); //seq ext
-                 put_bits(&s->pb, 1, s->avctx->profile == 0); //escx 1 for 4:2:2 profile */
-                 put_bits(&s->pb, 3, s->avctx->profile); //profile
-                 put_bits(&s->pb, 4, s->avctx->level); //level
-                 put_bits(&s->pb, 1, s->progressive_sequence);
-                 put_bits(&s->pb, 2, s->chroma_format);
-                 put_bits(&s->pb, 2, s->width >>12);
-                 put_bits(&s->pb, 2, s->height>>12);
-                 put_bits(&s->pb, 12, v>>18); //bitrate ext
-                 put_bits(&s->pb, 1, 1); //marker
-                 put_bits(&s->pb, 8, vbv_buffer_size >>10); //vbv buffer ext
-                 put_bits(&s->pb, 1, s->low_delay);
-                 put_bits(&s->pb, 2, s->mpeg2_frame_rate_ext.num-1); // frame_rate_ext_n
-                 put_bits(&s->pb, 5, s->mpeg2_frame_rate_ext.den-1); // frame_rate_ext_d
-             }
+         if (s->avctx->rc_max_rate) {
+             v = (s->avctx->rc_max_rate + 399) / 400;
+             if (v > 0x3ffff && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)
+                 v = 0x3ffff;
+         } else {
+             v = 0x3FFFF;
+         }
  
-             put_header(s, GOP_START_CODE);
-             put_bits(&s->pb, 1, s->drop_frame_timecode); /* drop frame flag */
-             /* time code : we must convert from the real frame rate to a
-                fake mpeg frame rate in case of low frame rate */
-             fps = (framerate.num + framerate.den/2)/ framerate.den;
-             time_code = s->current_picture_ptr->f.coded_picture_number + s->avctx->timecode_frame_start;
-             s->gop_picture_number = s->current_picture_ptr->f.coded_picture_number;
-             av_assert0(s->drop_frame_timecode == !!(s->tc.flags & AV_TIMECODE_FLAG_DROPFRAME));
-             if (s->drop_frame_timecode)
-                 time_code = av_timecode_adjust_ntsc_framenum2(time_code, fps);
-             put_bits(&s->pb, 5, (uint32_t)((time_code / (fps * 3600)) % 24));
-             put_bits(&s->pb, 6, (uint32_t)((time_code / (fps * 60)) % 60));
-             put_bits(&s->pb, 1, 1);
-             put_bits(&s->pb, 6, (uint32_t)((time_code / fps) % 60));
-             put_bits(&s->pb, 6, (uint32_t)((time_code % fps)));
-             put_bits(&s->pb, 1, !!(s->flags & CODEC_FLAG_CLOSED_GOP));
-             put_bits(&s->pb, 1, 0); /* broken link */
+         if (s->avctx->rc_buffer_size)
+             vbv_buffer_size = s->avctx->rc_buffer_size;
+         else
+             /* VBV calculation: Scaled so that a VCD has the proper
+              * VBV size of 40 kilobytes */
+             vbv_buffer_size = ((20 * s->bit_rate) / (1151929 / 2)) * 8 * 1024;
+         vbv_buffer_size = (vbv_buffer_size + 16383) / 16384;
+         put_sbits(&s->pb, 18, v);
+         put_bits(&s->pb, 1, 1);         // marker
+         put_sbits(&s->pb, 10, vbv_buffer_size);
+         constraint_parameter_flag =
+             s->width  <= 768                                    &&
+             s->height <= 576                                    &&
+             s->mb_width * s->mb_height                 <= 396   &&
+             s->mb_width * s->mb_height * framerate.num <= 396 * 25 * framerate.den &&
+             framerate.num <= framerate.den * 30                 &&
+             s->avctx->me_range                                  &&
+             s->avctx->me_range < 128                            &&
+             vbv_buffer_size <= 20                               &&
+             v <= 1856000 / 400                                  &&
+             s->codec_id == AV_CODEC_ID_MPEG1VIDEO;
+         put_bits(&s->pb, 1, constraint_parameter_flag);
+         ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
+         ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
+         if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
+             put_header(s, EXT_START_CODE);
+             put_bits(&s->pb, 4, 1);                 // seq ext
+             put_bits(&s->pb, 1, s->avctx->profile == 0); // escx 1 for 4:2:2 profile
+             put_bits(&s->pb, 3, s->avctx->profile); // profile
+             put_bits(&s->pb, 4, s->avctx->level);   // level
+             put_bits(&s->pb, 1, s->progressive_sequence);
+             put_bits(&s->pb, 2, s->chroma_format);
+             put_bits(&s->pb, 2, s->width  >> 12);
+             put_bits(&s->pb, 2, s->height >> 12);
+             put_bits(&s->pb, 12, v >> 18);          // bitrate ext
+             put_bits(&s->pb, 1, 1);                 // marker
+             put_bits(&s->pb, 8, vbv_buffer_size >> 10); // vbv buffer ext
+             put_bits(&s->pb, 1, s->low_delay);
 -            put_bits(&s->pb, 2, 0);                 // frame_rate_ext_n
 -            put_bits(&s->pb, 5, 0);                 // frame_rate_ext_d
++            put_bits(&s->pb, 2, s->mpeg2_frame_rate_ext.num-1); // frame_rate_ext_n
++            put_bits(&s->pb, 5, s->mpeg2_frame_rate_ext.den-1); // frame_rate_ext_d
          }
 -        if (s->drop_frame_timecode) {
 -            /* only works for NTSC 29.97 */
 -            int d = time_code / 17982;
 -            int m = time_code % 17982;
 -            /* not needed since -2,-1 / 1798 in C returns 0 */
 -            // if (m < 2)
 -            //     m += 2;
 -            time_code += 18 * d + 2 * ((m - 2) / 1798);
 -        }
+         put_header(s, GOP_START_CODE);
+         put_bits(&s->pb, 1, s->drop_frame_timecode);    // drop frame flag
+         /* time code: we must convert from the real frame rate to a
+          * fake MPEG frame rate in case of low frame rate */
+         fps       = (framerate.num + framerate.den / 2) / framerate.den;
+         time_code = s->current_picture_ptr->f.coded_picture_number +
+                     s->avctx->timecode_frame_start;
+         s->gop_picture_number = s->current_picture_ptr->f.coded_picture_number;
++
++        av_assert0(s->drop_frame_timecode == !!(s->tc.flags & AV_TIMECODE_FLAG_DROPFRAME));
++        if (s->drop_frame_timecode)
++            time_code = av_timecode_adjust_ntsc_framenum2(time_code, fps);
++
+         put_bits(&s->pb, 5, (uint32_t)((time_code / (fps * 3600)) % 24));
+         put_bits(&s->pb, 6, (uint32_t)((time_code / (fps *   60)) % 60));
+         put_bits(&s->pb, 1, 1);
+         put_bits(&s->pb, 6, (uint32_t)((time_code / fps) % 60));
+         put_bits(&s->pb, 6, (uint32_t)((time_code % fps)));
+         put_bits(&s->pb, 1, !!(s->flags & CODEC_FLAG_CLOSED_GOP));
+         put_bits(&s->pb, 1, 0);                     // broken link
+     }
  }
  
- static inline void encode_mb_skip_run(MpegEncContext *s, int run){
+ static inline void encode_mb_skip_run(MpegEncContext *s, int run)
+ {
      while (run >= 33) {
          put_bits(&s->pb, 11, 0x008);
          run -= 33;
  
  static av_always_inline void put_qscale(MpegEncContext *s)
  {
-     if(s->q_scale_type){
-         av_assert2(s->qscale>=1 && s->qscale <=12);
+     if (s->q_scale_type) {
 -        assert(s->qscale >= 1 && s->qscale <= 12);
++        av_assert2(s->qscale >= 1 && s->qscale <= 12);
          put_bits(&s->pb, 5, inv_non_linear_qscale[s->qscale]);
-     }else{
+     } else {
          put_bits(&s->pb, 5, s->qscale);
      }
  }
  
- void ff_mpeg1_encode_slice_header(MpegEncContext *s){
+ void ff_mpeg1_encode_slice_header(MpegEncContext *s)
+ {
 -    if (s->height > 2800) {
 +    if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO && s->height > 2800) {
          put_header(s, SLICE_MIN_START_CODE + (s->mb_y & 127));
-         put_bits(&s->pb, 3, s->mb_y >> 7);  /* slice_vertical_position_extension */
+         /* slice_vertical_position_extension */
+         put_bits(&s->pb, 3, s->mb_y >> 7);
      } else {
          put_header(s, SLICE_MIN_START_CODE + s->mb_y);
      }
@@@ -421,15 -402,13 +440,13 @@@ void ff_mpeg1_encode_picture_header(Mpe
          }
          put_bits(&s->pb, 2, s->intra_dc_precision);
  
 -        assert(s->picture_structure == PICT_FRAME);
 +        av_assert0(s->picture_structure == PICT_FRAME);
          put_bits(&s->pb, 2, s->picture_structure);
-         if (s->progressive_sequence) {
-             put_bits(&s->pb, 1, 0); /* no repeat */
-         } else {
+         if (s->progressive_sequence)
+             put_bits(&s->pb, 1, 0);             /* no repeat */
+         else
              put_bits(&s->pb, 1, s->current_picture_ptr->f.top_field_first);
-         }
-         /* XXX: optimize the generation of this flag with entropy
-            measures */
+         /* XXX: optimize the generation of this flag with entropy measures */
          s->frame_pred_frame_dct = s->progressive_sequence;
  
          put_bits(&s->pb, 1, s->frame_pred_frame_dct);
@@@ -637,30 -612,37 +650,37 @@@ static av_always_inline void mpeg1_enco
  
      /* compute cbp */
      cbp = 0;
-     for(i=0;i<mb_block_count;i++) {
+     for (i = 0; i < mb_block_count; i++)
          if (s->block_last_index[i] >= 0)
              cbp |= 1 << (mb_block_count - 1 - i);
-     }
  
      if (cbp == 0 && !first_mb && s->mv_type == MV_TYPE_16X16 &&
-         (mb_x != s->mb_width - 1 || (mb_y != s->end_mb_y - 1 && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)) &&
+         (mb_x != s->mb_width - 1 ||
 -         (mb_y != s->mb_height - 1 && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)) &&
++         (mb_y != s->end_mb_y - 1 && s->codec_id == AV_CODEC_ID_MPEG1VIDEO)) &&
          ((s->pict_type == AV_PICTURE_TYPE_P && (motion_x | motion_y) == 0) ||
-         (s->pict_type == AV_PICTURE_TYPE_B && s->mv_dir == s->last_mv_dir && (((s->mv_dir & MV_DIR_FORWARD) ? ((s->mv[0][0][0] - s->last_mv[0][0][0])|(s->mv[0][0][1] - s->last_mv[0][0][1])) : 0) |
-         ((s->mv_dir & MV_DIR_BACKWARD) ? ((s->mv[1][0][0] - s->last_mv[1][0][0])|(s->mv[1][0][1] - s->last_mv[1][0][1])) : 0)) == 0))) {
+          (s->pict_type == AV_PICTURE_TYPE_B && s->mv_dir == s->last_mv_dir &&
+           (((s->mv_dir & MV_DIR_FORWARD)
+             ? ((s->mv[0][0][0] - s->last_mv[0][0][0]) |
+                (s->mv[0][0][1] - s->last_mv[0][0][1])) : 0) |
+            ((s->mv_dir & MV_DIR_BACKWARD)
+             ? ((s->mv[1][0][0] - s->last_mv[1][0][0]) |
+                (s->mv[1][0][1] - s->last_mv[1][0][1])) : 0)) == 0))) {
          s->mb_skip_run++;
          s->qscale -= s->dquant;
          s->skip_count++;
          s->misc_bits++;
          s->last_bits++;
-         if(s->pict_type == AV_PICTURE_TYPE_P){
-             s->last_mv[0][1][0]= s->last_mv[0][0][0]=
-             s->last_mv[0][1][1]= s->last_mv[0][0][1]= 0;
+         if (s->pict_type == AV_PICTURE_TYPE_P) {
+             s->last_mv[0][0][0] =
+             s->last_mv[0][0][1] =
+             s->last_mv[0][1][0] =
+             s->last_mv[0][1][1] = 0;
          }
      } else {
-         if(first_mb){
+         if (first_mb) {
 -            assert(s->mb_skip_run == 0);
 +            av_assert0(s->mb_skip_run == 0);
              encode_mb_skip_run(s, s->mb_x);
-         }else{
+         } else {
              encode_mb_skip_run(s, s->mb_skip_run);
          }
  
              s->i_count++;
              memset(s->last_mv, 0, sizeof(s->last_mv));
          } else if (s->pict_type == AV_PICTURE_TYPE_P) {
-             if(s->mv_type == MV_TYPE_16X16){
+             if (s->mv_type == MV_TYPE_16X16) {
                  if (cbp != 0) {
-                     if ((motion_x|motion_y) == 0) {
-                         if(s->dquant){
-                             put_mb_modes(s, 5, 1, 0, 0); /* macroblock_pattern & quant */
+                     if ((motion_x | motion_y) == 0) {
+                         if (s->dquant) {
+                             /* macroblock_pattern & quant */
+                             put_mb_modes(s, 5, 1, 0, 0);
                              put_qscale(s);
-                         }else{
-                             put_mb_modes(s, 2, 1, 0, 0); /* macroblock_pattern only */
+                         } else {
+                             /* macroblock_pattern only */
+                             put_mb_modes(s, 2, 1, 0, 0);
                          }
-                         s->misc_bits+= get_bits_diff(s);
+                         s->misc_bits += get_bits_diff(s);
                      } else {
-                         if(s->dquant){
-                             put_mb_modes(s, 5, 2, 1, 0); /* motion + cbp */
+                         if (s->dquant) {
+                             put_mb_modes(s, 5, 2, 1, 0);    /* motion + cbp */
                              put_qscale(s);
-                         }else{
-                             put_mb_modes(s, 1, 1, 1, 0); /* motion + cbp */
+                         } else {
+                             put_mb_modes(s, 1, 1, 1, 0);    /* motion + cbp */
                          }
-                         s->misc_bits+= get_bits_diff(s);
-                         mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code);    // RAL: f_code parameter added
-                         mpeg1_encode_motion(s, motion_y - s->last_mv[0][0][1], s->f_code);    // RAL: f_code parameter added
-                         s->mv_bits+= get_bits_diff(s);
+                         s->misc_bits += get_bits_diff(s);
+                         // RAL: f_code parameter added
+                         mpeg1_encode_motion(s,
+                                             motion_x - s->last_mv[0][0][0],
+                                             s->f_code);
+                         // RAL: f_code parameter added
+                         mpeg1_encode_motion(s,
+                                             motion_y - s->last_mv[0][0][1],
+                                             s->f_code);
+                         s->mv_bits += get_bits_diff(s);
                      }
                  } else {
-                     put_bits(&s->pb, 3, 1); /* motion only */
+                     put_bits(&s->pb, 3, 1);         /* motion only */
                      if (!s->frame_pred_frame_dct)
-                         put_bits(&s->pb, 2, 2); /* motion_type: frame */
-                     s->misc_bits+= get_bits_diff(s);
-                     mpeg1_encode_motion(s, motion_x - s->last_mv[0][0][0], s->f_code);    // RAL: f_code parameter added
-                     mpeg1_encode_motion(s, motion_y - s->last_mv[0][0][1], s->f_code);    // RAL: f_code parameter added
-                     s->qscale -= s->dquant;
-                     s->mv_bits+= get_bits_diff(s);
+                         put_bits(&s->pb, 2, 2);     /* motion_type: frame */
+                     s->misc_bits += get_bits_diff(s);
+                     // RAL: f_code parameter added
+                     mpeg1_encode_motion(s,
+                                         motion_x - s->last_mv[0][0][0],
+                                         s->f_code);
+                     // RAL: f_code parameter added
+                     mpeg1_encode_motion(s,
+                                         motion_y - s->last_mv[0][0][1],
+                                         s->f_code);
+                     s->qscale  -= s->dquant;
+                     s->mv_bits += get_bits_diff(s);
                  }
-                 s->last_mv[0][1][0]= s->last_mv[0][0][0]= motion_x;
-                 s->last_mv[0][1][1]= s->last_mv[0][0][1]= motion_y;
-             }else{
+                 s->last_mv[0][1][0] = s->last_mv[0][0][0] = motion_x;
+                 s->last_mv[0][1][1] = s->last_mv[0][0][1] = motion_y;
+             } else {
 -                assert(!s->frame_pred_frame_dct && s->mv_type == MV_TYPE_FIELD);
 +                av_assert2(!s->frame_pred_frame_dct && s->mv_type == MV_TYPE_FIELD);
  
                  if (cbp) {
-                     if(s->dquant){
-                         put_mb_modes(s, 5, 2, 1, 1); /* motion + cbp */
+                     if (s->dquant) {
+                         put_mb_modes(s, 5, 2, 1, 1);    /* motion + cbp */
                          put_qscale(s);
-                     }else{
-                         put_mb_modes(s, 1, 1, 1, 1); /* motion + cbp */
+                     } else {
+                         put_mb_modes(s, 1, 1, 1, 1);    /* motion + cbp */
                      }
                  } else {
-                     put_bits(&s->pb, 3, 1); /* motion only */
-                     put_bits(&s->pb, 2, 1); /* motion_type: field */
+                     put_bits(&s->pb, 3, 1);             /* motion only */
+                     put_bits(&s->pb, 2, 1);             /* motion_type: field */
                      s->qscale -= s->dquant;
                  }
-                 s->misc_bits+= get_bits_diff(s);
-                 for(i=0; i<2; i++){
+                 s->misc_bits += get_bits_diff(s);
+                 for (i = 0; i < 2; i++) {
                      put_bits(&s->pb, 1, s->field_select[0][i]);
-                     mpeg1_encode_motion(s, s->mv[0][i][0] -  s->last_mv[0][i][0]    , s->f_code);
-                     mpeg1_encode_motion(s, s->mv[0][i][1] - (s->last_mv[0][i][1]>>1), s->f_code);
-                     s->last_mv[0][i][0]=   s->mv[0][i][0];
-                     s->last_mv[0][i][1]= 2*s->mv[0][i][1];
+                     mpeg1_encode_motion(s,
+                                         s->mv[0][i][0] - s->last_mv[0][i][0],
+                                         s->f_code);
+                     mpeg1_encode_motion(s,
+                                         s->mv[0][i][1] - (s->last_mv[0][i][1] >> 1),
+                                         s->f_code);
+                     s->last_mv[0][i][0] = s->mv[0][i][0];
+                     s->last_mv[0][i][1] = 2 * s->mv[0][i][1];
                  }
-                 s->mv_bits+= get_bits_diff(s);
+                 s->mv_bits += get_bits_diff(s);
              }
-             if(cbp) {
+             if (cbp) {
                  if (s->chroma_y_shift) {
-                     put_bits(&s->pb, ff_mpeg12_mbPatTable[cbp][1], ff_mpeg12_mbPatTable[cbp][0]);
+                     put_bits(&s->pb,
+                              ff_mpeg12_mbPatTable[cbp][1],
+                              ff_mpeg12_mbPatTable[cbp][0]);
                  } else {
-                     put_bits(&s->pb, ff_mpeg12_mbPatTable[cbp>>2][1], ff_mpeg12_mbPatTable[cbp>>2][0]);
+                     put_bits(&s->pb,
+                              ff_mpeg12_mbPatTable[cbp >> 2][1],
+                              ff_mpeg12_mbPatTable[cbp >> 2][0]);
                      put_sbits(&s->pb, 2, cbp);
                  }
              }
                      s->qscale -= s->dquant;
                  }
                  s->misc_bits += get_bits_diff(s);
-                 if (s->mv_dir&MV_DIR_FORWARD){
-                     mpeg1_encode_motion(s, s->mv[0][0][0] - s->last_mv[0][0][0], s->f_code);
-                     mpeg1_encode_motion(s, s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code);
-                     s->last_mv[0][0][0]=s->last_mv[0][1][0]= s->mv[0][0][0];
-                     s->last_mv[0][0][1]=s->last_mv[0][1][1]= s->mv[0][0][1];
+                 if (s->mv_dir & MV_DIR_FORWARD) {
+                     mpeg1_encode_motion(s,
+                                         s->mv[0][0][0] - s->last_mv[0][0][0],
+                                         s->f_code);
+                     mpeg1_encode_motion(s,
+                                         s->mv[0][0][1] - s->last_mv[0][0][1],
+                                         s->f_code);
+                     s->last_mv[0][0][0] =
+                     s->last_mv[0][1][0] = s->mv[0][0][0];
+                     s->last_mv[0][0][1] =
+                     s->last_mv[0][1][1] = s->mv[0][0][1];
                      s->f_count++;
                  }
-                 if (s->mv_dir&MV_DIR_BACKWARD){
-                     mpeg1_encode_motion(s, s->mv[1][0][0] - s->last_mv[1][0][0], s->b_code);
-                     mpeg1_encode_motion(s, s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code);
-                     s->last_mv[1][0][0]=s->last_mv[1][1][0]= s->mv[1][0][0];
-                     s->last_mv[1][0][1]=s->last_mv[1][1][1]= s->mv[1][0][1];
+                 if (s->mv_dir & MV_DIR_BACKWARD) {
+                     mpeg1_encode_motion(s,
+                                         s->mv[1][0][0] - s->last_mv[1][0][0],
+                                         s->b_code);
+                     mpeg1_encode_motion(s,
+                                         s->mv[1][0][1] - s->last_mv[1][0][1],
+                                         s->b_code);
+                     s->last_mv[1][0][0] =
+                     s->last_mv[1][1][0] = s->mv[1][0][0];
+                     s->last_mv[1][0][1] =
+                     s->last_mv[1][1][1] = s->mv[1][0][1];
                      s->b_count++;
                  }
-             }else{
+             } else {
 -                assert(s->mv_type == MV_TYPE_FIELD);
 -                assert(!s->frame_pred_frame_dct);
 +                av_assert2(s->mv_type == MV_TYPE_FIELD);
 +                av_assert2(!s->frame_pred_frame_dct);
-                 if (cbp){    // With coded bloc pattern
+                 if (cbp) {                      // With coded bloc pattern
                      if (s->dquant) {
-                         if(s->mv_dir == MV_DIR_FORWARD)
+                         if (s->mv_dir == MV_DIR_FORWARD)
                              put_mb_modes(s, 6, 3, 1, 1);
                          else
-                             put_mb_modes(s, 8-s->mv_dir, 2, 1, 1);
+                             put_mb_modes(s, 8 - s->mv_dir, 2, 1, 1);
                          put_qscale(s);
                      } else {
-                         put_mb_modes(s, 5-s->mv_dir, 3, 1, 1);
+                         put_mb_modes(s, 5 - s->mv_dir, 3, 1, 1);
                      }
-                 }else{    // No coded bloc pattern
-                     put_bits(&s->pb, 5-s->mv_dir, 2);
-                     put_bits(&s->pb, 2, 1); /* motion_type: field */
+                 } else {                        // No coded bloc pattern
+                     put_bits(&s->pb, 5 - s->mv_dir, 2);
+                     put_bits(&s->pb, 2, 1);     /* motion_type: field */
                      s->qscale -= s->dquant;
                  }
                  s->misc_bits += get_bits_diff(s);
@@@ -956,11 -987,13 +1025,15 @@@ av_cold void ff_mpeg1_encode_init(MpegE
  
  #define OFFSET(x) offsetof(MpegEncContext, x)
  #define VE AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
- #define COMMON_OPTS\
-     { "gop_timecode",        "MPEG GOP Timecode in hh:mm:ss[:;.]ff format", OFFSET(tc_opt_str), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX, VE },\
-     { "intra_vlc",           "Use MPEG-2 intra VLC table.",       OFFSET(intra_vlc_format),    AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },\
-     { "drop_frame_timecode", "Timecode is in drop frame format.", OFFSET(drop_frame_timecode), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE}, \
-     { "scan_offset",         "Reserve space for SVCD scan offset user data.", OFFSET(scan_offset), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
+ #define COMMON_OPTS                                                           \
++    { "gop_timecode",        "MPEG GOP Timecode in hh:mm:ss[:;.]ff format",   \
++      OFFSET(tc_opt_str), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX, VE },\
+     { "intra_vlc",           "Use MPEG-2 intra VLC table.",                   \
+       OFFSET(intra_vlc_format),    AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, \
+     { "drop_frame_timecode", "Timecode is in drop frame format.",             \
+       OFFSET(drop_frame_timecode), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, \
+     { "scan_offset",         "Reserve space for SVCD scan offset user data.", \
+       OFFSET(scan_offset),         AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE },
  
  static const AVOption mpeg1_options[] = {
      COMMON_OPTS
@@@ -1011,10 -1044,10 +1084,10 @@@ AVCodec ff_mpeg2video_encoder = 
      .init                 = encode_init,
      .encode2              = ff_MPV_encode_picture,
      .close                = ff_MPV_encode_end,
 -    .supported_framerates = ff_mpeg12_frame_rate_tab + 1,
 +    .supported_framerates = ff_mpeg2_frame_rate_tab,
-     .pix_fmts             = (const enum AVPixelFormat[]){
-         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE
-     },
+     .pix_fmts             = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
+                                                            AV_PIX_FMT_YUV422P,
+                                                            AV_PIX_FMT_NONE },
      .capabilities         = CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS,
      .long_name            = NULL_IF_CONFIG_SMALL("MPEG-2 video"),
      .priv_class           = &mpeg2_class,