Merge commit 'd749615333084e62c9fcc480d1ae466369fdf14f'
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Sun, 31 Jan 2016 12:28:04 +0000 (12:28 +0000)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Sun, 31 Jan 2016 12:28:04 +0000 (12:28 +0000)
* commit 'd749615333084e62c9fcc480d1ae466369fdf14f':
  lavc: Move timecode_frame_start to codec private options

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
1  2 
libavcodec/avcodec.h
libavcodec/mpeg12enc.c
libavcodec/mpegvideo.h
libavcodec/options_table.h

Simple merge
@@@ -206,16 -182,13 +206,24 @@@ static av_cold int encode_init(AVCodecC
          return -1;
      }
  
-         s->avctx->timecode_frame_start = s->tc.start;
+ #if FF_API_PRIVATE_OPT
+ FF_DISABLE_DEPRECATION_WARNINGS
+     if (avctx->timecode_frame_start)
+         s->timecode_frame_start = avctx->timecode_frame_start;
+ FF_ENABLE_DEPRECATION_WARNINGS
+ #endif
 +    if (s->tc_opt_str) {
 +        AVRational rate = ff_mpeg12_frame_rate_tab[s->frame_rate_index];
 +        int ret = av_timecode_init_from_string(&s->tc, rate, s->tc_opt_str, s);
 +        if (ret < 0)
 +            return ret;
 +        s->drop_frame_timecode = !!(s->tc.flags & AV_TIMECODE_FLAG_DROPFRAME);
-         s->avctx->timecode_frame_start = 0; // default is -1
++        s->timecode_frame_start = s->tc.start;
 +    } else {
++        s->timecode_frame_start = 0; // default is -1
 +    }
++
      return 0;
  }
  
@@@ -363,14 -314,18 +371,14 @@@ static void mpeg1_encode_sequence_heade
           * 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->timecode_frame_start;
  
          s->gop_picture_number = s->current_picture_ptr->f->coded_picture_number;
 -        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);
 -        }
 +
 +        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);
@@@ -1092,14 -1052,14 +1100,16 @@@ 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",   \
++    { "gop_timecode",        "MPEG GOP Timecode in hh:mm:ss[:;.]ff format. Overrides timecode_frame_start.",   \
 +      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 }, \
 +      OFFSET(intra_vlc_format),    AV_OPT_TYPE_BOOL, { .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 }, \
 +      OFFSET(drop_frame_timecode), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, \
      { "scan_offset",         "Reserve space for SVCD scan offset user data.", \
-       OFFSET(scan_offset),         AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
 -      OFFSET(scan_offset),         AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, \
++      OFFSET(scan_offset),         AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, \
+     { "timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", \
 -      OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, VE}, \
++      OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, VE}, \
  
  static const AVOption mpeg1_options[] = {
      COMMON_OPTS
Simple merge
@@@ -432,7 -412,9 +432,9 @@@ static const AVOption avcodec_options[
  {"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.i64 = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E},
  {"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E},
  {"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E},
 -{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, V|E},
+ #if FF_API_PRIVATE_OPT
 +{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, V|E},
+ #endif
  {"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
  {"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|E|D, "channel_layout"},
  {"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_layout"},