summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2023-04-10 21:32:41 +0200
committerMarton Balint <cus@passwd.hu>2023-04-24 23:00:50 +0200
commitbbb885e6a5219afb4177b78fb31c3a95e2db294a (patch)
tree5c6b914e026fd3179abe765cc9a4c4dc8420bd4d /libavformat
parenta0cb29261cddb2b62ee57fbeb689a0234f0cc735 (diff)
downloadffmpeg-bbb885e6a5219afb4177b78fb31c3a95e2db294a.tar.gz
avformat/mov: factorize reading creation time metadata
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 057fd872b1..5d00ff6e8b 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -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);