MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_alloc_timecode_sei

Function ff_alloc_timecode_sei

libavcodec/utils.c:982–1029  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

980}
981
982int ff_alloc_timecode_sei(const AVFrame *frame, AVRational rate, size_t prefix_len,
983 void **data, size_t *sei_size)
984{
985 AVFrameSideData *sd = NULL;
986 uint8_t *sei_data;
987 PutBitContext pb;
988 uint32_t *tc;
989 int m;
990
991 if (frame)
992 sd = av_frame_get_side_data(frame, AV_FRAME_DATA_S12M_TIMECODE);
993
994 if (!sd) {
995 *data = NULL;
996 return 0;
997 }
998 tc = (uint32_t*)sd->data;
999 m = tc[0] & 3;
1000
1001 *sei_size = sizeof(uint32_t) * 4;
1002 *data = av_mallocz(*sei_size + prefix_len);
1003 if (!*data)
1004 return AVERROR(ENOMEM);
1005 sei_data = (uint8_t*)*data + prefix_len;
1006
1007 init_put_bits(&pb, sei_data, *sei_size);
1008 put_bits(&pb, 2, m); // num_clock_ts
1009
1010 for (int j = 1; j <= m; j++) {
1011 unsigned hh, mm, ss, ff, drop;
1012 ff_timecode_set_smpte(&drop, &hh, &mm, &ss, &ff, rate, tc[j], 0, 0);
1013
1014 put_bits(&pb, 1, 1); // clock_timestamp_flag
1015 put_bits(&pb, 1, 1); // units_field_based_flag
1016 put_bits(&pb, 5, 0); // counting_type
1017 put_bits(&pb, 1, 1); // full_timestamp_flag
1018 put_bits(&pb, 1, 0); // discontinuity_flag
1019 put_bits(&pb, 1, drop);
1020 put_bits(&pb, 9, ff);
1021 put_bits(&pb, 6, ss);
1022 put_bits(&pb, 6, mm);
1023 put_bits(&pb, 5, hh);
1024 put_bits(&pb, 5, 0);
1025 }
1026 flush_put_bits(&pb);
1027
1028 return 0;
1029}
1030
1031int64_t ff_guess_coded_bitrate(AVCodecContext *avctx)
1032{

Callers 1

prepare_sei_data_arrayFunction · 0.85

Calls 6

av_frame_get_side_dataFunction · 0.85
init_put_bitsFunction · 0.85
ff_timecode_set_smpteFunction · 0.85
flush_put_bitsFunction · 0.85
put_bitsFunction · 0.70
av_malloczFunction · 0.50

Tested by

no test coverage detected