avformat/utils: fix ff_dict_set_timestamp() with negative timestamps

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint
2026-06-15 23:17:09 +02:00
parent c434d0a160
commit dab1ac3e6e

View File

@@ -609,14 +609,15 @@ int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf
int ff_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp)
{
time_t seconds = timestamp / 1000000;
int microsecs = timestamp % 1000000;
time_t seconds = timestamp / 1000000 - (microsecs < 0);
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_strlcatf(buf, sizeof(buf), ".%06dZ", microsecs + (microsecs < 0) * 1000000);
return av_dict_set(dict, key, buf, 0);
} else {
return AVERROR_EXTERNAL;