Esempio n. 1
0
void* mpThread(void* _args)
{
    char *p = NULL;
    char buf[1024];
    char* args = _args ? strdup(_args) : 0;
    int n;
    int offset;
    void* data;
    for (;;)
    {
        if (data = plGetEntry(&playlist))
        {
            n = mpOpen(data, args);
        }
        else
        {
            if (!loopclip) break;
            n = mpOpen(loopclip, 0);
        }
        free(data);
        if (n) break;

        mpState = MP_PLAYING;
        MutexLock(&mpConsoleMutex);
        while (mpCommand("get_time_pos") <= 0) msleep(500);
        do
        {
            offset = 0;
            while (offset < sizeof(buf) - 1)
            {
                n = mpRead(buf + offset, sizeof(buf) - 1 - offset);
                if (n <= 0) break;
                offset += n;
                buf[offset] = 0;
                if (p = strstr(buf, "ANS_TIME_POSITION="))
                {
                    mpPos = atoi(p + 18);
                    break;
                }
            }
            // stop here when paused
            MutexUnlock(&mpConsoleMutex);
            do
            {
                msleep(500);
            }
            while (mpState == MP_PAUSED);
            MutexLock(&mpConsoleMutex);
        }
        while (mpCommand("get_time_pos") > 0);
        MutexUnlock(&mpConsoleMutex);
        ShellTerminate(&mpx);
        ShellClean(&mpx);
    }
    free(args);
    mpState = MP_IDLE;
    mpThreadHandle = 0;
    return 0;
}
Esempio n. 2
0
void mpClose()
{
	if (mpState) {
		mpCommand("quit");
		ShellWait(&mpx,1);
		ShellClean(&mpx);
	}
}
Esempio n. 3
0
File: mpd.c Progetto: avih/miniweb
void mpClose()
{
	mpPos = -1;
	if (mpState != MP_IDLE) {
		if (mpCommand("quit") > 0) ShellWait(&mpx,1000);
		ShellTerminate(&mpx);
		ShellClean(&mpx);
	}
}
Esempio n. 4
0
int ShellRun(SHELL_PARAM* param, const char* cmdline)
{
    int ret;
    SHELL_PARAM* proc = param;
    if (!param) proc = calloc(1, sizeof(SHELL_PARAM));

    ret = ShellExec(proc, cmdline);
    if (ret == 0)
    {
        if (proc->flags & SF_READ_STDOUT_ALL)
            ShellRead(proc, -1);
        else
            ShellWait(proc, -1);
    }
    ShellClean(proc);

    if (!param)
    {
        free(proc);
    }
    return ret;
}