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 | #include "libavutil/imgutils.h" | 42 | #include "libavutil/imgutils.h" |
| 43 | #include "libavutil/intreadwrite.h" | 43 | #include "libavutil/intreadwrite.h" |
| 44 | #include "libavutil/time.h" | 44 | #include "libavutil/time.h" |
| 45 | #include "libavutil/timecode.h" | ||
| 45 | #include "libavutil/mathematics.h" | 46 | #include "libavutil/mathematics.h" |
| 46 | #include "libavutil/reverse.h" | 47 | #include "libavutil/reverse.h" |
| 47 | #include "avdevice.h" | 48 | #include "avdevice.h" |
| @@ -882,6 +883,19 @@ HRESULT decklink_input_callback::VideoInputFrameArrived( · 834 unmodified lines | |||
| 882 | AVDictionary* metadata_dict = NULL; | 883 | AVDictionary* metadata_dict = NULL; |
| 883 | int metadata_len; | 884 | int metadata_len; |
| 884 | uint8_t* packed_metadata; | 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 | if (av_dict_set(&metadata_dict, "timecode", tc, AV_DICT_DONT_STRDUP_VAL) >= 0) { | 899 | if (av_dict_set(&metadata_dict, "timecode", tc, AV_DICT_DONT_STRDUP_VAL) >= 0) { |
| 886 | packed_metadata = av_packet_pack_dictionary(metadata_dict, &metadata_len); | 900 | packed_metadata = av_packet_pack_dictionary(metadata_dict, &metadata_len); |
| 887 | av_dict_free(&metadata_dict); | 901 | av_dict_free(&metadata_dict); |