Also allow overriding the rounding direction.
This is similar to what we have in sidxindex already.
---
libavformat/dashenc.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/libavformat/dashenc.c b/libavformat/dashenc.c
index b986136..1368b19 100644
--- a/libavformat/dashenc.c
+++ b/libavformat/dashenc.c
@@ -266,12 +266,14 @@ static char *xmlescape(const char *str) {
return out;
}
-static void write_time(AVIOContext *out, int64_t time)
+static void write_time(AVIOContext *out, int64_t time, int decimals,
+ enum AVRounding round)
{
int seconds = time / AV_TIME_BASE;
int fractions = time % AV_TIME_BASE;
int minutes = seconds / 60;
int hours = minutes / 60;
+ fractions = av_rescale_rnd(fractions, pow(10, decimals), AV_TIME_BASE,
round);
seconds %= 60;
minutes %= 60;
avio_printf(out, "PT");
@@ -279,7 +281,7 @@ static void write_time(AVIOContext *out, int64_t time)
avio_printf(out, "%dH", hours);
if (hours || minutes)
avio_printf(out, "%dM", minutes);
- avio_printf(out, "%d.%dS", seconds, fractions / (AV_TIME_BASE / 10));
+ avio_printf(out, "%d.%0*dS", seconds, decimals, fractions);
}
static int write_manifest(AVFormatContext *s, int final)
@@ -305,7 +307,7 @@ static int write_manifest(AVFormatContext *s, int final)
"\ttype=\"%s\"\n", final ? "static" : "dynamic");
if (final) {
avio_printf(out, "\tmediaPresentationDuration=\"");
- write_time(out, c->total_duration);
+ write_time(out, c->total_duration, 1, AV_ROUND_DOWN);
avio_printf(out, "\"\n");
} else {
int update_period = c->last_duration / AV_TIME_BASE;
@@ -327,12 +329,12 @@ static int write_manifest(AVFormatContext *s, int final)
avio_printf(out, "\tavailabilityStartTime=\"%s\"\n",
c->availability_start_time);
if (c->window_size && c->use_template) {
avio_printf(out, "\ttimeShiftBufferDepth=\"");
- write_time(out, c->last_duration * c->window_size);
+ write_time(out, c->last_duration * c->window_size, 1,
AV_ROUND_DOWN);
avio_printf(out, "\"\n");
}
}
avio_printf(out, "\tminBufferTime=\"");
- write_time(out, c->last_duration);
+ write_time(out, c->last_duration, 1, AV_ROUND_DOWN);
avio_printf(out, "\">\n");
avio_printf(out, "\t<ProgramInformation>\n");
if (title) {
@@ -346,7 +348,7 @@ static int write_manifest(AVFormatContext *s, int final)
int start_index = FFMAX(os->nb_segments - c->window_size, 0);
int64_t start_time = av_rescale_q(os->segments[start_index]->time,
s->streams[0]->time_base, AV_TIME_BASE_Q);
avio_printf(out, "\t<Period start=\"");
- write_time(out, start_time);
+ write_time(out, start_time, 1, AV_ROUND_UP);
avio_printf(out, "\">\n");
} else {
avio_printf(out, "\t<Period start=\"PT0.0S\">\n");
--
1.9.3 (Apple Git-50)
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel