diff options
author | Harry Mallon <harry.mallon@codex.online> | 2020-12-07 10:32:11 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2020-12-17 13:02:49 +0100 |
commit | a041c0a0315f0941ddc2b3258c74edf40f86c8f5 (patch) | |
tree | 8ba652ff4364287952d64838bc166a60b0272a41 | |
parent | 6623421454c55890a720b8dd818bb9304e9ff529 (diff) | |
download | ffmpeg-a041c0a0315f0941ddc2b3258c74edf40f86c8f5.tar.gz |
avcodec/dpx: Read SMPTE timecode from DPX
Signed-off-by: Harry Mallon <harry.mallon@codex.online>
-rw-r--r-- | libavcodec/dpx.c | 29 | ||||
-rw-r--r-- | tests/ref/fate/dpx-probe | 7 |
2 files changed, 36 insertions, 0 deletions
diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 7e3ac0af2e..51428459ef 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -23,6 +23,7 @@ #include "libavutil/intreadwrite.h" #include "libavutil/intfloat.h" #include "libavutil/imgutils.h" +#include "libavutil/timecode.h" #include "bytestream.h" #include "avcodec.h" #include "internal.h" @@ -239,6 +240,34 @@ static int decode_frame(AVCodecContext *avctx, } } + /* SMPTE TC from television header */ + if (offset >= 1920 + 4) { + uint32_t tc; + uint32_t *tc_sd; + char tcbuf[AV_TIMECODE_STR_SIZE]; + + buf = avpkt->data + 1920; + // read32 to native endian, av_bswap32 to opposite of native for + // compatibility with av_timecode_make_smpte_tc_string2 etc + tc = av_bswap32(read32(&buf, endian)); + + if (i != 0xFFFFFFFF) { + AVFrameSideData *tcside = + av_frame_new_side_data(p, AV_FRAME_DATA_S12M_TIMECODE, + sizeof(uint32_t) * 4); + if (!tcside) + return AVERROR(ENOMEM); + + tc_sd = (uint32_t*)tcside->data; + tc_sd[0] = 1; + tc_sd[1] = tc; + + av_timecode_make_smpte_tc_string2(tcbuf, avctx->framerate, + tc_sd[1], 0, 0); + av_dict_set(&p->metadata, "timecode", tcbuf, 0); + } + } + switch (descriptor) { case 6: // Y elements = 1; diff --git a/tests/ref/fate/dpx-probe b/tests/ref/fate/dpx-probe index c5d049d038..419cd06799 100644 --- a/tests/ref/fate/dpx-probe +++ b/tests/ref/fate/dpx-probe @@ -4,6 +4,13 @@ color_range=unknown color_space=unknown color_primaries=unknown color_transfer=unknown +TAG:timecode=00:00:01:18 TAG:Creator=Apple Compressor TAG:Input Device= +[SIDE_DATA] +side_data_type=SMPTE 12-1 timecode +[TIMECODE] +value=00:00:01:18 +[/TIMECODE] +[/SIDE_DATA] [/FRAME] |