mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
avformat/mov: factorize reading creation time metadata
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
a0cb29261c
commit
bbb885e6a5
@ -1515,14 +1515,22 @@ static int mov_read_moof(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
return mov_read_default(c, pb, atom);
|
||||
}
|
||||
|
||||
static void mov_metadata_creation_time(AVDictionary **metadata, int64_t time, void *logctx)
|
||||
static void mov_metadata_creation_time(MOVContext *c, AVIOContext *pb, AVDictionary **metadata, int version)
|
||||
{
|
||||
int64_t time;
|
||||
if (version == 1) {
|
||||
time = avio_rb64(pb);
|
||||
avio_rb64(pb);
|
||||
} else {
|
||||
time = avio_rb32(pb);
|
||||
avio_rb32(pb); /* modification time */
|
||||
}
|
||||
if (time) {
|
||||
if (time >= 2082844800)
|
||||
time -= 2082844800; /* seconds between 1904-01-01 and Epoch */
|
||||
|
||||
if ((int64_t)(time * 1000000ULL) / 1000000 != time) {
|
||||
av_log(logctx, AV_LOG_DEBUG, "creation_time is not representable\n");
|
||||
av_log(c->fc, AV_LOG_DEBUG, "creation_time is not representable\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1537,7 +1545,6 @@ static int mov_read_mdhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
int version;
|
||||
char language[4] = {0};
|
||||
unsigned lang;
|
||||
int64_t creation_time;
|
||||
|
||||
if (c->fc->nb_streams < 1)
|
||||
return 0;
|
||||
@ -1555,14 +1562,7 @@ static int mov_read_mdhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
avio_rb24(pb); /* flags */
|
||||
if (version == 1) {
|
||||
creation_time = avio_rb64(pb);
|
||||
avio_rb64(pb);
|
||||
} else {
|
||||
creation_time = avio_rb32(pb);
|
||||
avio_rb32(pb); /* modification time */
|
||||
}
|
||||
mov_metadata_creation_time(&st->metadata, creation_time, c->fc);
|
||||
mov_metadata_creation_time(c, pb, &st->metadata, version);
|
||||
|
||||
sc->time_scale = avio_rb32(pb);
|
||||
if (sc->time_scale <= 0) {
|
||||
@ -1587,18 +1587,10 @@ static int mov_read_mdhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
static int mov_read_mvhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
{
|
||||
int i;
|
||||
int64_t creation_time;
|
||||
int version = avio_r8(pb); /* version */
|
||||
avio_rb24(pb); /* flags */
|
||||
|
||||
if (version == 1) {
|
||||
creation_time = avio_rb64(pb);
|
||||
avio_rb64(pb);
|
||||
} else {
|
||||
creation_time = avio_rb32(pb);
|
||||
avio_rb32(pb); /* modification time */
|
||||
}
|
||||
mov_metadata_creation_time(&c->fc->metadata, creation_time, c->fc);
|
||||
mov_metadata_creation_time(c, pb, &c->fc->metadata, version);
|
||||
c->time_scale = avio_rb32(pb); /* time scale */
|
||||
if (c->time_scale <= 0) {
|
||||
av_log(c->fc, AV_LOG_ERROR, "Invalid mvhd time scale %d, defaulting to 1\n", c->time_scale);
|
||||
|
Loading…
Reference in New Issue
Block a user