Example #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;
}
Example #2
0
int uhMpd(UrlHandlerParam* param)
{
	char *cmd=param->pucRequest;
	if (!strncmp(cmd,"open=",5)) {
		if (mpOpen(cmd+5) || !(mpRead(param->pucBuffer,param->iDataBytes))) {
			strcpy(param->pucBuffer,"Failed to launch MPlayer");
		}
	} else if (!strncmp(cmd,"command=",8)) {
		strcpy(param->pucBuffer,(mpCommand(cmd+8)>0)?"OK":"Error");
	} else {
		return 0;
	}
	param->iDataBytes=strlen(param->pucBuffer);
	param->fileType=HTTPFILETYPE_TEXT;
	return FLAG_DATA_RAW;
}
Example #3
0
int handleFileFunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {
    int32_t ret = -1;
    int32_t index = -1;
    int32_t mode = -1;
    int32_t flags = -1;
    int32_t fd = -1;
    int32_t maxBytes = -1;

    int sendRet = 0;
    int namelen = 0;
    short extensionId = -1;

    switch (type) {

        case FILE_CTRL_OPEN:
            flags = getInt32(inBuffer, 12);
            mode = getInt32(inBuffer, 16);
            ret = mpOpen(inBuffer + 20, flags, mode);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case FILE_CTRL_CREATE:
            flags = getInt32(inBuffer, 12);
            ret = mpCreate(inBuffer + 16, flags);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case FILE_CTRL_CLOSE:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpClose = %d != 12\n", msgSize);
                return -1;
            }
            fd = getInt32(inBuffer, 12);
            if (fd < 1) {
                fprintf(stderr, "tcpSvr: invalid fd for mpRead = %d\n", fd);
                return -1;
            }
            ret = mpClose(fd);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case FILE_CTRL_READ:
            fd = getInt32(inBuffer, 12);
            if (fd < 1) {
                fprintf(stderr, "tcpSvr: invalid fd for mpRead = %d\n", fd);
                return -1;
            }
            maxBytes = getInt32(inBuffer, 16);
            if (maxBytes < 1 || maxBytes >= (BUFF_MAX - 8)) {
                fprintf(stderr, "tcpSvr: invalid maxBytes for mpRead = %d max = %d\n", maxBytes,(BUFF_MAX-8));
                return -1;
            }
            ret = mpRead(fd, outBuffer + 8, maxBytes);
            setInt32(outBuffer, 0, 4 + (ret > 0 ? ret : 0));
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8 + (ret > 0 ? ret : 0), 0);
            if (sendRet != 8 + (ret > 0 ? ret : 0)) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + (ret > 0?ret:0)\n", sendRet);
                return -1;
            }
            break;


        case FILE_CTRL_WRITE:
            fd = getInt32(inBuffer, 12);
            if (fd < 1) {
                fprintf(stderr, "tcpSvr: invalid fd for mpRead = %d\n", fd);
                return -1;
            }
            maxBytes = getInt32(inBuffer, 16);
            if (maxBytes < 1 || maxBytes >= (BUFF_MAX - 8)) {
                fprintf(stderr, "tcpSvr: invalid maxBytes for mpRead = %d max = %d\n", maxBytes,(BUFF_MAX-8));
                return -1;
            }
            ret = mpWrite(fd, inBuffer+20, maxBytes);
            setInt32(outBuffer, 0, 4 + (ret > 0 ? ret : 0));
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8 + (ret > 0 ? ret : 0), 0);
            if (sendRet != 8 + (ret > 0 ? ret : 0)) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + (ret > 0?ret:0)\n", sendRet);
                return -1;
            }
            break;

        default:
            fprintf(stderr, "tcpSvr: invalid file function type = %d\n", type);
            return -1;
    }
    return 0;
}