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; }
int msc_get_id(MediaSource* source, int* sourceId) { const StreamInfo* streamInfo; if (msc_get_num_streams(source) <= 0 || !msc_get_stream_info(source, 0, &streamInfo)) { return 0; } *sourceId = streamInfo->sourceId; return 1; }
static int cps_get_num_streams(void* data) { ClipSource* clipSource = (ClipSource*)data; return msc_get_num_streams(clipSource->targetSource); }