Signed-off-by: Marton Balint <cus@passwd.hu>tags/n4.4
| @@ -15,6 +15,9 @@ libavutil: 2017-10-21 | |||||
| API changes, most recent first: | API changes, most recent first: | ||||
| 2020-09-xx - xxxxxxxxxx - lavu 56.59.100 - timecode.h | |||||
| Add av_timecode_make_smpte_tc_string2. | |||||
| 2020-08-21 - xxxxxxxxxx - lavu 56.58.100 - avstring.h | 2020-08-21 - xxxxxxxxxx - lavu 56.58.100 - avstring.h | ||||
| Deprecate av_d2str(). Use av_asprintf() instead. | Deprecate av_d2str(). Use av_asprintf() instead. | ||||
| @@ -136,16 +136,33 @@ static unsigned bcd2uint(uint8_t bcd) | |||||
| return low + 10*high; | return low + 10*high; | ||||
| } | } | ||||
| char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df) | |||||
| char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field) | |||||
| { | { | ||||
| unsigned hh = bcd2uint(tcsmpte & 0x3f); // 6-bit hours | unsigned hh = bcd2uint(tcsmpte & 0x3f); // 6-bit hours | ||||
| unsigned mm = bcd2uint(tcsmpte>>8 & 0x7f); // 7-bit minutes | unsigned mm = bcd2uint(tcsmpte>>8 & 0x7f); // 7-bit minutes | ||||
| unsigned ss = bcd2uint(tcsmpte>>16 & 0x7f); // 7-bit seconds | unsigned ss = bcd2uint(tcsmpte>>16 & 0x7f); // 7-bit seconds | ||||
| unsigned ff = bcd2uint(tcsmpte>>24 & 0x3f); // 6-bit frames | unsigned ff = bcd2uint(tcsmpte>>24 & 0x3f); // 6-bit frames | ||||
| unsigned drop = tcsmpte & 1<<30 && !prevent_df; // 1-bit drop if not arbitrary bit | unsigned drop = tcsmpte & 1<<30 && !prevent_df; // 1-bit drop if not arbitrary bit | ||||
| if (av_cmp_q(rate, (AVRational) {30, 1}) == 1) { | |||||
| ff <<= 1; | |||||
| if (!skip_field) { | |||||
| if (av_cmp_q(rate, (AVRational) {50, 1}) == 0) | |||||
| ff += !!(tcsmpte & 1 << 7); | |||||
| else | |||||
| ff += !!(tcsmpte & 1 << 23); | |||||
| } | |||||
| } | |||||
| snprintf(buf, AV_TIMECODE_STR_SIZE, "%02u:%02u:%02u%c%02u", | snprintf(buf, AV_TIMECODE_STR_SIZE, "%02u:%02u:%02u%c%02u", | ||||
| hh, mm, ss, drop ? ';' : ':', ff); | hh, mm, ss, drop ? ';' : ':', ff); | ||||
| return buf; | return buf; | ||||
| } | |||||
| char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df) | |||||
| { | |||||
| return av_timecode_make_smpte_tc_string2(buf, (AVRational){30, 1}, tcsmpte, prevent_df, 1); | |||||
| } | } | ||||
| char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit) | char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit) | ||||
| @@ -109,6 +109,23 @@ uint32_t av_timecode_get_smpte(AVRational rate, int drop, int hh, int mm, int ss | |||||
| */ | */ | ||||
| char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); | char *av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum); | ||||
| /** | |||||
| * Get the timecode string from the SMPTE timecode format. | |||||
| * | |||||
| * In contrast to av_timecode_make_smpte_tc_string this function supports 50/60 | |||||
| * fps timecodes by using the field bit. | |||||
| * | |||||
| * @param buf destination buffer, must be at least AV_TIMECODE_STR_SIZE long | |||||
| * @param rate frame rate of the timecode | |||||
| * @param tcsmpte the 32-bit SMPTE timecode | |||||
| * @param prevent_df prevent the use of a drop flag when it is known the DF bit | |||||
| * is arbitrary | |||||
| * @param skip_field prevent the use of a field flag when it is known the field | |||||
| * bit is arbitrary (e.g. because it is used as PC flag) | |||||
| * @return the buf parameter | |||||
| */ | |||||
| char *av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field); | |||||
| /** | /** | ||||
| * Get the timecode string from the SMPTE timecode format. | * Get the timecode string from the SMPTE timecode format. | ||||
| * | * | ||||
| @@ -79,7 +79,7 @@ | |||||
| */ | */ | ||||
| #define LIBAVUTIL_VERSION_MAJOR 56 | #define LIBAVUTIL_VERSION_MAJOR 56 | ||||
| #define LIBAVUTIL_VERSION_MINOR 58 | |||||
| #define LIBAVUTIL_VERSION_MINOR 59 | |||||
| #define LIBAVUTIL_VERSION_MICRO 100 | #define LIBAVUTIL_VERSION_MICRO 100 | ||||
| #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||