mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-28 10:22:10 +00:00
avformat/utils: add a function to standardize creation time
This can be used for formats which write all format metadata as string to files, therefore non-standard creation times such as 'now' will be parsed. The standardized creation time is UTC ISO 8601 with microsecond precision. Reviewed-by: wm4 <nfxjfg@googlemail.com> Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
3af71ac3f9
commit
e7dd97b5d8
@ -560,6 +560,14 @@ void ff_format_io_close(AVFormatContext *s, AVIOContext **pb);
|
||||
*/
|
||||
int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds);
|
||||
|
||||
/**
|
||||
* Standardize creation_time metadata in AVFormatContext to an ISO-8601
|
||||
* timestamp string.
|
||||
*
|
||||
* @param s AVFormatContext
|
||||
* @return <0 on error
|
||||
*/
|
||||
int ff_standardize_creation_time(AVFormatContext *s);
|
||||
|
||||
#define CONTAINS_PAL 2
|
||||
/**
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/time.h"
|
||||
#include "libavutil/time_internal.h"
|
||||
#include "libavutil/timestamp.h"
|
||||
|
||||
#include "libavcodec/bytestream.h"
|
||||
@ -4760,6 +4761,27 @@ int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ff_standardize_creation_time(AVFormatContext *s)
|
||||
{
|
||||
int64_t timestamp;
|
||||
int ret = ff_parse_creation_time_metadata(s, ×tamp, 0);
|
||||
if (ret == 1) {
|
||||
time_t seconds = timestamp / 1000000;
|
||||
struct tm *ptm, tmbuf;
|
||||
ptm = gmtime_r(&seconds, &tmbuf);
|
||||
if (ptm) {
|
||||
char buf[32];
|
||||
if (!strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S", ptm))
|
||||
return AVERROR_EXTERNAL;
|
||||
av_strlcatf(buf, sizeof(buf), ".%06dZ", (int)(timestamp % 1000000));
|
||||
av_dict_set(&s->metadata, "creation_time", buf, 0);
|
||||
} else {
|
||||
return AVERROR_EXTERNAL;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, const uint8_t **palette)
|
||||
{
|
||||
int size;
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MAJOR 57
|
||||
#define LIBAVFORMAT_VERSION_MINOR 27
|
||||
#define LIBAVFORMAT_VERSION_MICRO 101
|
||||
#define LIBAVFORMAT_VERSION_MICRO 102
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
LIBAVFORMAT_VERSION_MINOR, \
|
||||
|
Loading…
Reference in New Issue
Block a user