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(); }
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(); }
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; }
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 }