mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-09-07 16:40:10 +02:00
avcodec/dpx: Read SMPTE timecode from DPX
Signed-off-by: Harry Mallon <harry.mallon@codex.online>
This commit is contained in:
parent
6623421454
commit
a041c0a031
@ -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;
|
||||
|
@ -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]
|
||||
|
Loading…
Reference in New Issue
Block a user