Showing the changes to libavdevice/decklink_dec.cpp (1 of 1 file). Show all
Unified · Split
| @@ -42,6 +42,7 @@ extern "C" { · 41 unmodified lines | ||
| 42 | 42 | #include "libavutil/imgutils.h" |
| 43 | 43 | #include "libavutil/intreadwrite.h" |
| 44 | 44 | #include "libavutil/time.h" |
| 45 | +#include "libavutil/timecode.h" | |
| 45 | 46 | #include "libavutil/mathematics.h" |
| 46 | 47 | #include "libavutil/reverse.h" |
| 47 | 48 | #include "avdevice.h" |
| @@ -882,6 +883,19 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( · 834 unmodified lines | ||
| 882 | 883 | AVDictionary* metadata_dict = NULL; |
| 883 | 884 | int metadata_len; |
| 884 | 885 | uint8_t* packed_metadata; |
| 886 | + AVTimecode tcr; | |
| 887 | + | |
| 888 | + if (av_timecode_init_from_string(&tcr, ctx->video_st->r_frame_rate, tc, ctx) >= 0) { | |
| 889 | + uint32_t tc_data = av_timecode_get_smpte_from_framenum(&tcr, 0); | |
| 890 | + int size = sizeof(uint32_t) * 4; | |
| 891 | + uint32_t *sd = (uint32_t *)av_packet_new_side_data(&pkt, AV_PKT_DATA_S12M_TIMECODE, size); | |
| 892 | + | |
| 893 | + if (sd) { | |
| 894 | + *sd = 1; // one TC | |
| 895 | + *(sd + 1) = tc_data; // TC | |
| 896 | + } | |
| 897 | + } | |
| 898 | + | |
| 885 | 899 | if (av_dict_set(&metadata_dict, "timecode", tc, AV_DICT_DONT_STRDUP_VAL) >= 0) { |
| 886 | 900 | packed_metadata = av_packet_pack_dictionary(metadata_dict, &metadata_len); |
| 887 | 901 | av_dict_free(&metadata_dict); |