From 403d8fc06fda157b134f96328f98b9305509b5a3 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Tue, 6 Oct 2020 13:27:31 +0300 Subject: Updating media content Making it possible for media to be partially updated, for streaming. Also fixed a problem with multiple concurrent audio players started on a single media item. --- src/audio/player.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/audio') diff --git a/src/audio/player.c b/src/audio/player.c index f1d6a2c8..177613bb 100644 --- a/src/audio/player.c +++ b/src/audio/player.c @@ -477,10 +477,16 @@ void updateSourceData_Player(iPlayer *d, const iBlock *data, enum iPlayerUpdate set_Block(&input->data, data); input->isComplete = iFalse; break; - case append_PlayerUpdate: - append_Block(&input->data, data); + case append_PlayerUpdate: { + const size_t oldSize = size_Block(&input->data); + const size_t newSize = size_Block(data); + iAssert(newSize >= oldSize); + /* The old parts cannot have changed. */ + iAssert(memcmp(constData_Block(&input->data), constData_Block(data), oldSize) == 0); + appendData_Block(&input->data, constBegin_Block(data) + oldSize, newSize - oldSize); input->isComplete = iFalse; break; + } case complete_PlayerUpdate: input->isComplete = iTrue; break; -- cgit v1.2.3