static int64_t mls_convert_position(void* data, int64_t position, MediaSource* childSource) { MultipleMediaSources* multSource = (MultipleMediaSources*)data; MediaSourceElement* ele = &multSource->sources; int64_t returnPosition = position; int64_t childPosition; if (childSource == &multSource->collectiveSource) { return position; } /* we take the position of any child source that deviates from the given position */ while (ele != NULL && ele->source != NULL) { childPosition = msc_convert_position(ele->source, position, childSource); if (childPosition != position) { returnPosition = childPosition; break; } ele = ele->next; } return returnPosition; }
static int64_t cps_convert_position(void* data, int64_t position, MediaSource* childSource) { ClipSource* clipSource = (ClipSource*)data; int64_t childPosition = position; if (childSource != &clipSource->mediaSource) { childPosition = msc_convert_position(clipSource->targetSource, position, childSource); } return childPosition - clipSource->start; }