Commit 9938697c authored by Derek Buitenhuis's avatar Derek Buitenhuis

Merge commit 'd7496153'

* commit 'd7496153':
  lavc: Move timecode_frame_start to codec private options
Merged-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
parents b4af7d68 d7496153
...@@ -2633,12 +2633,11 @@ typedef struct AVCodecContext { ...@@ -2633,12 +2633,11 @@ typedef struct AVCodecContext {
*/ */
int max_prediction_order; int max_prediction_order;
/** #if FF_API_PRIVATE_OPT
* GOP timecode frame start number /** @deprecated use encoder private options instead */
* - encoding: Set by user, in non drop frame format attribute_deprecated
* - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset)
*/
int64_t timecode_frame_start; int64_t timecode_frame_start;
#endif
#if FF_API_RTP_CALLBACK #if FF_API_RTP_CALLBACK
/** /**
......
...@@ -206,16 +206,24 @@ static av_cold int encode_init(AVCodecContext *avctx) ...@@ -206,16 +206,24 @@ static av_cold int encode_init(AVCodecContext *avctx)
return -1; return -1;
} }
#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) { if (s->tc_opt_str) {
AVRational rate = ff_mpeg12_frame_rate_tab[s->frame_rate_index]; 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); int ret = av_timecode_init_from_string(&s->tc, rate, s->tc_opt_str, s);
if (ret < 0) if (ret < 0)
return ret; return ret;
s->drop_frame_timecode = !!(s->tc.flags & AV_TIMECODE_FLAG_DROPFRAME); s->drop_frame_timecode = !!(s->tc.flags & AV_TIMECODE_FLAG_DROPFRAME);
s->avctx->timecode_frame_start = s->tc.start; s->timecode_frame_start = s->tc.start;
} else { } else {
s->avctx->timecode_frame_start = 0; // default is -1 s->timecode_frame_start = 0; // default is -1
} }
return 0; return 0;
} }
...@@ -363,7 +371,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s) ...@@ -363,7 +371,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
* fake MPEG frame rate in case of low frame rate */ * fake MPEG frame rate in case of low frame rate */
fps = (framerate.num + framerate.den / 2) / framerate.den; fps = (framerate.num + framerate.den / 2) / framerate.den;
time_code = s->current_picture_ptr->f->coded_picture_number + 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; s->gop_picture_number = s->current_picture_ptr->f->coded_picture_number;
...@@ -1092,14 +1100,16 @@ av_cold void ff_mpeg1_encode_init(MpegEncContext *s) ...@@ -1092,14 +1100,16 @@ av_cold void ff_mpeg1_encode_init(MpegEncContext *s)
#define OFFSET(x) offsetof(MpegEncContext, x) #define OFFSET(x) offsetof(MpegEncContext, x)
#define VE AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM #define VE AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
#define COMMON_OPTS \ #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 },\ OFFSET(tc_opt_str), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX, VE },\
{ "intra_vlc", "Use MPEG-2 intra VLC table.", \ { "intra_vlc", "Use MPEG-2 intra VLC table.", \
OFFSET(intra_vlc_format), AV_OPT_TYPE_BOOL, { .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.", \ { "drop_frame_timecode", "Timecode is in drop frame format.", \
OFFSET(drop_frame_timecode), AV_OPT_TYPE_BOOL, { .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.", \ { "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_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 = -1 }, -1, INT64_MAX, VE}, \
static const AVOption mpeg1_options[] = { static const AVOption mpeg1_options[] = {
COMMON_OPTS COMMON_OPTS
......
...@@ -453,6 +453,7 @@ typedef struct MpegEncContext { ...@@ -453,6 +453,7 @@ typedef struct MpegEncContext {
// picture structure defines are loaded from mpegutils.h // picture structure defines are loaded from mpegutils.h
int picture_structure; int picture_structure;
int64_t timecode_frame_start; ///< GOP timecode frame start number, in non drop frame format
int intra_dc_precision; int intra_dc_precision;
int frame_pred_frame_dct; int frame_pred_frame_dct;
int top_field_first; int top_field_first;
......
...@@ -432,7 +432,9 @@ static const AVOption avcodec_options[] = { ...@@ -432,7 +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}, {"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}, {"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}, {"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|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}, {"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}, {"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"}, {"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"}, {"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_layout"},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment