+
+ // Handle Timecode (if requested)
+ if (ctx->tc_format) {
+ IDeckLinkTimecode *timecode;
+ if (videoFrame->GetTimecode(ctx->tc_format, &timecode) == S_OK) {
+ const char *tc = NULL;
+ DECKLINK_STR decklink_tc;
+ if (timecode->GetString(&decklink_tc) == S_OK) {
+ tc = DECKLINK_STRDUP(decklink_tc);
+ DECKLINK_FREE(decklink_tc);
+ }
+ timecode->Release();
+ if (tc) {
+ AVDictionary* metadata_dict = NULL;
+ int metadata_len;
+ uint8_t* packed_metadata;
+ if (av_dict_set(&metadata_dict, "timecode", tc, AV_DICT_DONT_STRDUP_VAL) >= 0) {
+ packed_metadata = av_packet_pack_dictionary(metadata_dict, &metadata_len);
+ av_dict_free(&metadata_dict);
+ if (packed_metadata) {
+ if (av_packet_add_side_data(&pkt, AV_PKT_DATA_STRINGS_METADATA, packed_metadata, metadata_len) < 0)
+ av_freep(&packed_metadata);
+ }
+ }
+ }
+ } else {
+ av_log(avctx, AV_LOG_DEBUG, "Unable to find timecode.\n");
+ }
+ }