Beispiel #1
0
void PlayThread::imageUpdate() {
#ifdef MESSAGE_ON
    cout << "@player.imageUpdate(): " << currentThreadId() << endl;
#endif
    mutex.lock();
    if(imgBuffer->length() - frame_pos <= 0) {
        stop_play();
        state_t = BUFFERING;
        status  = QString::fromStdString("Buffering");
//        ui->label_status->setText(QString::fromStdString("Buffering"));
#ifdef MESSAGE_ON
        cout << "video buffering" << endl;
#endif
    } else if(!imgBuffer->isEmpty()){
        imgLabel->setPixmap(QPixmap::fromImage(imgBuffer->at(frame_pos)));
        switch(label_t){
        case ORIGINAL:
            dbgLabel->setPixmap(QPixmap::fromImage(imgBuffer->at(frame_pos)));
            break;
        case GREYSCALE:
            dbgLabel->setPixmap(QPixmap::fromImage(gryBuffer->at(frame_pos)));
            break;
        case BACKGROUND:
            dbgLabel->setPixmap(QPixmap::fromImage(backBuffer->at(frame_pos)));
            break;
        case FOREGROUND:
            dbgLabel->setPixmap(QPixmap::fromImage(dbgBuffer->at(frame_pos)));
            break;
        default:
            break;
        }
//        imgBuffer->removeFirst();
//        dbgBuffer->removeFirst();
    }
    else{
        status  = QString::fromStdString("Buffering");
#ifdef MESSAGE_ON
        cout << "image buffer empty" << endl;
#endif
    }
#ifdef MESSAGE_ON
    time_t now = time(NULL);
    cout << now%60 << ": [" << *fps << "]" <<  "<" << played_frame_cnt++ << ", (";
    cout << imgBuffer->length() << ", " << dbgBuffer->length() << "), " << imgBuffer->length() - frame_pos << ">" << endl;    
#endif
    frame_pos++;
    mutex.unlock();
}
Beispiel #2
0
void PlayThread::imageUpdate() {
#ifdef MESSAGE_ON
    cout << "@player.imageUpdate(): " << currentThreadId() << endl;
#endif
    mutex.lock();
    if(imgBuffer->size() - frame_pos <= 0) {
        stop_play();
        state_t = BUFFERING;
        status  = QString::fromStdString("Buffering");
//        ui->label_status->setText(QString::fromStdString("Buffering"));
#ifdef MESSAGE_ON
        cout << "video buffering" << endl;
#endif
    } else if(!imgBuffer->empty()){
        list<QImage>::iterator i_itr, c_itr, g_itr, b_itr, d_itr;
        i_itr = imgBuffer->begin();
        c_itr = clrBuffer->begin();
        g_itr = gryBuffer->begin();
        b_itr = backBuffer->begin();
        d_itr = dbgBuffer->begin();
        advance(i_itr, frame_pos);
        advance(c_itr, frame_pos);
        advance(g_itr, frame_pos);
        advance(b_itr, frame_pos);
        advance(d_itr, frame_pos);

        imgLabel->setPixmap(QPixmap::fromImage(*i_itr));
        if((*i_itr).isNull()){
            cerr << "empty image @" << frame_pos << endl;
            frame_pos++;
            mutex.unlock();
            return;
        }

        switch(label_t){
        case ORIGINAL:
            dbgLabel->setPixmap(QPixmap::fromImage(*i_itr));
            break;
        case COLOR:
            dbgLabel->setPixmap(QPixmap::fromImage(*c_itr));
            break;
        case GREYSCALE:
            dbgLabel->setPixmap(QPixmap::fromImage(*g_itr));
            break;
        case BACKGROUND:
            dbgLabel->setPixmap(QPixmap::fromImage(*b_itr));
            break;
        case FOREGROUND:
            dbgLabel->setPixmap(QPixmap::fromImage(*d_itr));
            break;
        default:
            break;
        }
    } else {
        status  = QString::fromStdString("Buffering");
#ifdef MESSAGE_ON
        cout << "image buffer empty" << endl;
#endif
    }
#ifdef MESSAGE_ON
    time_t now = time(NULL);
    cout << now%60 << ": [" << *fps << "]" <<  "<" << played_frame_cnt++ << ", (";
    cout << imgBuffer->length() << ", " << dbgBuffer->length() << "), " << imgBuffer->length() - frame_pos << ">" << endl;
#endif
    frame_pos++;
    mutex.unlock();
}
Beispiel #3
0
static void * proc_control(void *args) {
	struct frame_manager *manager = get_frame_manager(CONTROL_MANAGER);
	struct record_manager * record_manager=get_record_manager();
	struct block_filter *filter = NULL;

	struct frame *pframe = NULL;
	struct block * pblock = NULL;
	char buffer[64];
	int length;
	char dest_addr = 0;
	char src_addr = 0;
	char operation = 0;
	char cmd = 0;
	char tmp;

	if (manager == NULL)
		return NULL;
	filter = get_frame_filter(manager);
	while (1) {
		pblock = get_block(filter, TIMEOUT_MAIN_UNIT, BLOCK_FULL);
		if (pblock != NULL) {
			set_sys_state(BIT5_MAIN_UNIT,STATE_MAINUNIT_OK);
			light_on(0);
			light_main_alarm(0);
			pframe = (struct frame*) pblock->data;
			pframe->length = pblock->data_length;
			dest_addr = destination_of_frame(pframe);
			src_addr = pframe->data[4];
			cmd = command_of_frame(pframe);
			operation = operation_of_frame(pframe);

			if (src_addr == MASTER_ADDRESS) {

				switch (dest_addr) {
				case RADIO_450M_ADDRESS:
					if ((operation == 0x03) && (cmd == 0x20)) { //向450M发送机车号
						char * cab_id = get_id();

						get_frame_real_data(pframe, buffer, &length);

						buffer[8] = 0;
						tmp = buffer[3];
						buffer[3] = 0;
						int cab_type = atoi(buffer);

						buffer[3] = tmp;

						sprintf(cab_id, "%s-%s", get_cab_code(cab_type),
								buffer + 3);

					}
					break;
				case ALL_MMI_ADDRESS:
					if ((operation == 0x03) && (cmd == 0x46)) { //关机命令

						flush_all_data(record_manager);
					}
					break;
				}

			}

			if (dest_addr == RECORD_ADDRESS) {

				switch (operation) {
				case 1: //维护信息
					// echo off
					tmp = 0;
					if (src_addr == 0x01) {
						tmp = 0x01;
					} else if ((src_addr == 0x03) || (src_addr == 0x04)) {
						tmp = 0x41;
					}
					send_frame(manager, RECORD_ADDRESS, src_addr, 1, tmp,
							pframe->data + 9, 2);

					switch (cmd) {
					case (char) 0x33: //播放控制
					{
						if (pframe->data[10] == (char) 0xff) {
							start_play(src_addr);
						} else if (pframe->data[10] == 0) {
							stop_play();
						}
					}
						break;
					case (char) 0xfa: //问询测试
						break;
					case (char) 0x34: //查询时钟
					{
						struct tm time;
						get_time(&time);

						buffer[0] = to_bcd(time.tm_year - 100); //year
						buffer[1] = to_bcd(time.tm_mon + 1);
						buffer[2] = to_bcd(time.tm_mday);
						buffer[3] = to_bcd(time.tm_hour);
						buffer[4] = to_bcd(time.tm_min);
						buffer[5] = to_bcd(time.tm_sec);
						send_frame(manager, RECORD_ADDRESS, src_addr, 1,
								(char) 0x91, buffer, 6);
					}
						break;
					case (char) 0x35: //设置时钟
						break;
					case (char) 0xa5: //查询软件版本
					{

						bcopy(version, buffer, 16);
						send_frame(manager, RECORD_ADDRESS, src_addr, 1,
								(char) 0xaa, buffer, 16);
					}
						break;

					}

					break;
				case 3: //不需要应答
					break;
				}
			}
			put_block(pblock, BLOCK_EMPTY);
		} else {
			set_sys_state(BIT5_MAIN_UNIT,STATE_MAINUNIT_FAIL);
			light_main_alarm(1);
		}
	}

	return NULL;
}
Beispiel #4
0
void main(){
	
	int listenSock, connSock;
    struct sockaddr_in serv_addr, client_addr;
    int clientAddrLenght;
    User user[100];
    char tmp[100];
    int max_user;
    char mesg[LEN];
    char mesg2[LEN];
    char buff[LEN]="11|";
    int t,n;
    int recvBytes,sentBytes;
    fd_set readfds,allset;
    int i, maxi,sockfd;
    int rv;
    struct pollfd client[30];

    serv_addr.sin_family = AF_INET;       
    serv_addr.sin_addr.s_addr = INADDR_ANY;  
    serv_addr.sin_port = htons(5556); 

    
    if((listenSock = socket(AF_INET, SOCK_STREAM, 0)) == -1){
        printf("\nTao socket loi!!\n");
        return;
    }
    if(bind(listenSock, (struct sockaddr *) &serv_addr,sizeof(serv_addr))<0) {
        printf("\nBind loi!!\n");
        return;
        }
    if(listen(listenSock, 10) == -1) {
        printf("\nListen loi!!\n");
        return;
    }
    for ( i = 1; i < 30; i++){
        client[i].fd=-1;
    }
    client[0].fd = listenSock;
    client[0].events = POLLRDNORM;	
    max_user= take_user(user);
        
    while(1){
     	rv = poll(client, 30,3); //Number of client = 30, time out=3
    
     	if(client[0].revents & POLLRDNORM){
            clientAddrLenght=sizeof(client_addr);
            connSock = accept(listenSock, (struct sockaddr *) &client_addr, (socklen_t*)&clientAddrLenght);
            

            for(i=1;i < 30;i++){
                if(client[i].fd < 0){
                    client[i].fd = connSock;
                    break;
                }
            }//end for
            client[i].events = POLLRDNORM;
            if(--rv <= 0) //no more readable descriptor. Decrement before return
                continue;
        }//end if
        for(i=1;i<30;i++){
            if((sockfd = client[i].fd) <0)
                continue;
            if(client[i].revents & (POLLRDNORM | POLLERR)){
                strcpy(mesg,"");
                n=recv(sockfd, mesg, LEN, 0);

                printf("\nXau nhan tu Client: %s",mesg );
                
                mesg[n]='\0';
                if((n)==0){
                    close(sockfd);
                    client[i].fd = -1;
                    for ( i = 0; i < max_user; i++){
                    	if(user[i].sockfd==sockfd){
                    		user[i].status=0;
                    		break;
                    	}
                    }
                }else{
                    // printf("\nXau nhan tu Client: %s",mesg );
                    t=check_mark(mesg);
                   	if(t == 0)	max_user = sign_up(sockfd,mesg,user,max_user);
                   	if(t == 1)	{
                   		login(sockfd,mesg,user,max_user);
                   		
                   	}
                   	if(t == 2)	show_user_list(sockfd,user,max_user);
                   	if(t == 3)	play_request(sockfd,mesg,user,max_user);
                   	if(t == 4)	accept_request(sockfd,mesg,user,max_user);
                   	if(t == 5)	not_accept_request(sockfd,mesg,user,max_user);
                   	if(t == 6)	playing(sockfd,mesg,user,max_user);
                   	if(t == 7)	stop_play(sockfd,mesg,user,max_user);
                   	if(t == 8)	log_out(sockfd,user,max_user);
                }
                
            if(--rv <= 0)
                break;
            }
        }
    	
     	
    }//end while
}