static void mls_set_frame_rate_or_disable(void* data, const Rational* frameRate) { MultipleMediaSources* multSource = (MultipleMediaSources*)data; MediaSourceElement* ele = &multSource->sources; int i; while (ele != NULL && ele->source != NULL) { msc_set_frame_rate_or_disable(ele->source, frameRate); /* recalculate disabledStreamCount */ ele->disabledStreamCount = 0; for (i = 0; i < ele->numStreams; i++) { if (msc_stream_is_disabled(ele->source, i)) { ele->disabledStreamCount++; } } ele = ele->next; } multSource->maxLength = convert_length(multSource->maxLength, &multSource->maxLengthFrameRate, frameRate); multSource->maxLengthFrameRate = *frameRate; }
static int append_source(MediaSourceList* sourceList, MediaSource** source) { MediaSourceElement* ele = sourceList; MediaSourceElement* newEle = NULL; int i; /* handle first appended source */ if (ele->source == NULL) { ele->source = *source; ele->numStreams = msc_get_num_streams(*source); *source = NULL; return 1; } /* move to end */ while (ele->next != NULL) { ele = ele->next; } /* create element */ if ((newEle = (MediaSourceElement*)malloc(sizeof(MediaSourceElement))) == NULL) { ml_log_error("Failed to allocate memory\n"); return 0; } memset(newEle, 0, sizeof(MediaSourceElement)); /* append source and take ownership */ ele->next = newEle; newEle->source = *source; /* get num streams and disabled count */ newEle->numStreams = msc_get_num_streams(*source); newEle->disabledStreamCount = 0; for (i = 0; i < newEle->numStreams; i++) { if (msc_stream_is_disabled(newEle->source, i)) { newEle->disabledStreamCount++; } } *source = NULL; return 1; }
static int mls_stream_is_disabled(void* data, int streamIndex) { MultipleMediaSources* multSource = (MultipleMediaSources*)data; MediaSourceElement* ele = &multSource->sources; int maxIndex = 0; int minIndex = 0; while (ele != NULL && ele->source != NULL) { maxIndex += ele->numStreams; if (streamIndex < maxIndex) { return msc_stream_is_disabled(ele->source, streamIndex - minIndex); } minIndex = maxIndex; ele = ele->next; } return 0; }
static int cps_stream_is_disabled(void* data, int streamIndex) { ClipSource* clipSource = (ClipSource*)data; return msc_stream_is_disabled(clipSource->targetSource, streamIndex); }