Esempio n. 1
0
void Gn2DMeshObject::SetFlipX(bool val)
{
	if( GetFlipX() != val )
	{
		SetVectorExtraDataFlipX();
	}
	
	mpMesh->setFlipX( val );
	SetPosition( GetOriginalPosition() );
	if( GetAVData() )
	{
		if( val )
		{
			GetAVData()->FlipX( val, GetOriginalPosition().x );
		}
		else
		{			
			GetAVData()->FlipX( val, GetOriginalPosition().x );
		}
	}
	
	//if( mpsAVData )
	//{
	//	if( mpMesh->isFlipX() )
	//	{
	//		mpMesh->setPosition( GetOriginalPosition() - GetAVData()->GetAnchorPoint() );
	//	}
	//	else
	//	{
	//		mpMesh->setPosition( GetOriginalPosition() + GetAVData()->GetAnchorPoint() );
	//	}
	//}
}
Esempio n. 2
0
int audio_get(request * req, int video_type)
{
	AV_DATA av_data;
	int ret;

	if (req->audio_book == 0) {
		GetAVData(AV_OP_GET_ULAW_SERIAL, -1, &av_data );
		if (av_data.serial <= req->audio_lock) {
			dbg("av_data.serial <= req->audio_lock!!!\n");
			req->busy_flag &= ~BUSY_FLAG_AUDIO;
			return 0;
		}
		req->audio_book = av_data.serial;
	}

	ret = GetAVData(AV_OP_LOCK_ULAW, req->audio_book, &av_data );
	if (ret == RET_SUCCESS) {
		extern int CheckAudioStatus(void);
		if (req->audio_lock > 0) {
			GetAVData(AV_OP_UNLOCK_ULAW, req->audio_lock, NULL);
			req->audio_lock = 0;
		}
		if(CheckAudioStatus())
		{
			req->data_mem = av_data.ptr;
		}else{
			static int IsFirst = 1;

			if(IsFirst)
			{
				IsFirst = 0;
				memset(AUDIO_MUTE_ARRAY,0xff,sizeof(AUDIO_MUTE_ARRAY));
			}

			req->data_mem = AUDIO_MUTE_ARRAY;
		}
		req->filesize = av_data.size;
		req->filepos = 0;
		req->audio_lock = av_data.serial;
		req->audio_book = av_data.serial + 1;
		req->audio_sync = av_data.ref_serial[video_type];
		reset_output_buffer(req);
		req_write(req, "\r\n");
		print_audio_headers(req);
		return 1;
	}
	else if (ret == RET_NO_VALID_DATA) {
		req->busy_flag &= ~BUSY_FLAG_AUDIO;
		return 0;
	}
	else {
		req->audio_book = 0;
		dbg("ERROR, ret=%d\n", ret);
		return -1;
	}

}
Esempio n. 3
0
void Gn2DMeshObject::SetVectorExtraDataFlipX()
{
	if( GetAVData() && GetAVData()->GetCollisionCount() )
	{
		float* point;
		GnVector2ExtraData* vector2Extra;
		for( gtuint i = 0; i < GetExtraDataSize(); i++ )
		{		
			vector2Extra = GnDynamicCast( GnVector2ExtraData, GetExtraData( i ) );
			if( vector2Extra )
			{
				Gn2DAVData::CollisionRect& baseRect = GetAVData()->GetOriginalCollisionRect( 0 );
				float flip = baseRect.mRect.left + baseRect.mRect.right;
				point = vector2Extra->GetValue();
				point[0] = flip - point[0];
				vector2Extra->SetValue( point );	
			}
		}
	}
}
Esempio n. 4
0
int audio_get(request * req)
{
	AV_DATA av_data;
	int ret;

	if (req->audio_book == 0) {
		GetAVData(AV_OP_GET_ULAW_SERIAL, -1, &av_data );
		if (av_data.serial <= req->audio_lock) {
			dbg("av_data.serial <= req->audio_lock!!!\n");
			req->busy_flag &= ~BUSY_FLAG_AUDIO;
			return 0;
		}
		req->audio_book = av_data.serial;
	}

	ret = GetAVData(AV_OP_LOCK_ULAW, req->audio_book, &av_data );
	if (ret == RET_SUCCESS) {
		if (req->audio_lock > 0)
			GetAVData(AV_OP_UNLOCK_ULAW, req->audio_lock, NULL);

		if (req->audio_length + av_data.size > SOCKETBUF_SIZE)
			req->audio_length = 0;

		memcpy(req->audio_data+req->audio_length, av_data.ptr, av_data.size);
		req->audio_length += av_data.size;
		req->audio_lock = av_data.serial;
		req->audio_book = av_data.serial + 1;
//dbg("av_data.serial = %d, av_data.size = %d\n", av_data.serial, av_data.size);
		return 1;
	}
	else if (ret == RET_NO_VALID_DATA) {
		req->busy_flag &= ~BUSY_FLAG_AUDIO;
		return 0;
	}
	else {
		req->audio_book = 0;
		dbg("ERROR, ret=%d\n", ret);
		return -1;
	}

}
Esempio n. 5
0
void Gn2DMeshObject::SetPosition(GnVector2 val)
{
	SetOriginalPosition( val );
	if( GetAVData() )
	{
		if( mpMesh->isFlipX() )
		{
			val = GetOriginalPosition() - GetAVData()->GetImageCenter();
			mpMesh->setPosition( CCPointMake(val.x, val.y) );
		}
		else
		{			
			mpMesh->setPosition( CCPointMake(val.x, val.y) );
		}
		GetAVData()->Move( GetOriginalPosition() );
	}
	else
	{
		mpMesh->setPosition( CCPointMake(val.x, val.y) );
	}
}
Esempio n. 6
0
/**
* @brief Save specific JPEG file to JPG_PATH.
*
* @param iSerial [I ] Serial number in Appro interface.
* @param pFilePath [O ] File name.
* @return Error code from Appro interface.
* @retval -1028 File create fail.
*/
int SaveJpegBySerial(int iSerial, char *pFilePath)
{
	int ret = 0;
	AV_DATA tAVData;
	int fd;
	char strJpegFile[JPG_PATH_LEN];
	if((ret = GetAVData(AV_OP_LOCK_MJPEG, iSerial, &tAVData)) != RET_SUCCESS)
		return ret;
	GenerateJpegFileName(pFilePath);
	sprintf(strJpegFile, "%s/%s", TEMP_FOLDER, pFilePath);
	 fd = open(strJpegFile, O_CREAT | O_TRUNC | O_WRONLY, 0666);
	if(fd){
		if(write(fd, tAVData.ptr, tAVData.size) != tAVData.size)
			JPG_ERR("File write fail\n");
		fsync(fd);
             posix_fadvise(fd, 0,0, POSIX_FADV_DONTNEED  );
		close(fd);
	} else {
		JPG_ERR("File open fail\n");
		ret = -1028;
	}
	GetAVData(AV_OP_UNLOCK_MJPEG, iSerial, &tAVData);
	return ret;
}
Esempio n. 7
0
int process_get(request * req)
{
    int bytes_written;
    volatile int bytes_to_write;

    bytes_to_write = req->filesize - req->filepos;
    if (bytes_to_write > SOCKETBUF_SIZE)
        bytes_to_write = SOCKETBUF_SIZE;


    if (sigsetjmp(env, 1) == 0) {
        handle_sigbus = 1;
#ifdef SERVER_SSL
	if(req->ssl == NULL){
#endif /*SERVER_SSL*/
        bytes_written = write(req->fd, req->data_mem + req->filepos,
                              bytes_to_write);
#ifdef SERVER_SSL
	}else{
		bytes_written = SSL_write(req->ssl, req->data_mem + req->filepos, bytes_to_write);
#if 0
		printf("SSL_write\n");
#endif /*0*/
	}
#endif /*SERVER_SSL*/
        handle_sigbus = 0;
        /* OK, SIGBUS **after** this point is very bad! */
    } else {
        /* sigbus! */
        log_error_doc(req);
        /* sending an error here is inappropriate
         * if we are here, the file is mmapped, and thus,
         * a content-length has been sent. If we send fewer bytes
         * the client knows there has been a problem.
         * We run the risk of accidentally sending the right number
         * of bytes (or a few too many) and the client
         * won't be the wiser.
         */
        req->status = DEAD;
        fprintf(stderr, "%sGot SIGBUS in write(2)!\n", get_commonlog_time());
        return 0;
    }

    if (bytes_written < 0) {
        if (errno == EWOULDBLOCK || errno == EAGAIN)
            return -1;
        /* request blocked at the pipe level, but keep going */
        else {
            if (errno != EPIPE) {
                log_error_doc(req);
                /* Can generate lots of log entries, */
                perror("write");
                /* OK to disable if your logs get too big */
            }
            req->status = DEAD;
            return 0;
        }
    }
    req->filepos += bytes_written;
	req->busy_flag = BUSY_FLAG_AUDIO|BUSY_FLAG_VIDEO;
    if (req->filepos == req->filesize) { /* EOF */

#ifdef DAVINCI_IPCAM
        if (req->http_stream == URI_STREAM_MJPEG) {
#if 1
#if 0
            while (audio_get(req) > 0);
            if (req->audio_length >= AUDIO_SEND_SIZE) {
                audio_send(req);
                return 1;
            }
#else
            if (audio_get(req, FMT_MJPEG) > 0)
			return 1;
#endif
#else
		req->busy_flag &= ~BUSY_FLAG_AUDIO;
#endif
            if (req->serial_lock) {
                GetAVData(AV_OP_UNLOCK_MJPEG, req->serial_lock, NULL);
                req->serial_lock = 0;
            }
            GetAVData(AV_OP_GET_MJPEG_SERIAL, -1, &req->av_data);
            if (req->av_data.serial < req->serial_book) {
                req->busy_flag &= ~BUSY_FLAG_VIDEO;
                return 1;
            }
            GetAVData(AV_OP_LOCK_MJPEG, req->av_data.serial, &req->av_data );
            req->data_mem = req->av_data.ptr;
            req->filesize = req->av_data.size+16;
            req->filepos = 0;
            req->serial_lock = req->av_data.serial;
            req->serial_book = req->av_data.serial+1;
            reset_output_buffer(req);
            req_write(req, "\r\n");
            print_mjpeg_headers(req);
            return 1;
        }
        if (req->http_stream == URI_STREAM_MPEG4 || req->http_stream == URI_STREAM_AVC) {
            int ret;
#if 1
#if 0
		while (audio_get(req) > 0);
		if (req->audio_length > AUDIO_SEND_SIZE) {
			req->busy_flag |= BUSY_FLAG_AUDIO;
			audio_send(req);
      		      return 1;
		}
#else
            if (audio_get(req, FMT_MPEG4) > 0)
			return 1;
#endif
#else
		req->busy_flag &= ~BUSY_FLAG_AUDIO;
#endif
            ret = GetAVData(AV_OP_LOCK_MP4, req->serial_book, &req->av_data);
            if (ret == RET_SUCCESS) {
                GetAVData(AV_OP_UNLOCK_MP4, req->serial_lock, NULL);
                req->data_mem = req->av_data.ptr;
                req->filesize = req->av_data.size+16;
                req->filepos = 0;

                req->serial_lock = req->av_data.serial;
                req->serial_book = req->av_data.serial+1;

                reset_output_buffer(req);
                req_write(req, "\r\n");
				if (req->http_stream == URI_STREAM_AVC)
                { print_avc_headers(req); }
				else
				{ print_mpeg4_headers(req); }
                return 1;
            }
            else if (ret == RET_NO_VALID_DATA) {
                req->busy_flag &= ~BUSY_FLAG_VIDEO;
                return 1;
            }
            else {
                GetAVData(AV_OP_GET_MPEG4_SERIAL, -1, &req->av_data );
                req->serial_book = req->av_data.serial;
                dbg("lock error ret=%d\n", ret);
                return 1;
            }
        }
        if (req->http_stream == URI_STREAM_MPEG4CIF || req->http_stream == URI_STREAM_AVCCIF) {
            int ret;
#if 1
#if 0
		while (audio_get(req) > 0);
		if (req->audio_length > AUDIO_SEND_SIZE) {
			audio_send(req);
      		      return 1;
		}
#else
            if (audio_get(req, FMT_MPEG4_EXT) > 0)
			return 1;
#endif
#else
		req->busy_flag &= ~BUSY_FLAG_AUDIO;
#endif
            ret = GetAVData(AV_OP_LOCK_MP4_CIF, req->serial_book, &req->av_data);
            if (ret == RET_SUCCESS) {
                GetAVData(AV_OP_UNLOCK_MP4_CIF, req->serial_lock, NULL);
                req->data_mem = req->av_data.ptr;
                req->filesize = req->av_data.size+16;
                req->filepos = 0;

                req->serial_lock = req->av_data.serial;
                req->serial_book = req->av_data.serial+1;

                reset_output_buffer(req);
                req_write(req, "\r\n");
				if (req->http_stream == URI_STREAM_AVCCIF)
                { print_avc_headers(req); }
				else
				{ print_mpeg4_headers(req); }
                return 1;
            }
            else if (ret == RET_NO_VALID_DATA) {
                req->busy_flag &= ~BUSY_FLAG_VIDEO;
                return 1;
            }
            else {
                GetAVData(AV_OP_GET_MPEG4_CIF_SERIAL, -1, &req->av_data );
                req->serial_book = req->av_data.serial;
                dbg("lock error ret=%d\n", ret);
                return 1;
            }
        }
#endif  // DAVINCI_IPCAM
        return 0;
    } else
        return 1;               /* more to do */
}
Esempio n. 8
0
/**
* @brief Save some JPEG files.
*
* @retval 0 Success.
* @param nDstFlg [I ] Where JPEG will save.
* @retval -1 Fail.
*/
int SaveJpeg(int nDstFlg)
{
	int ret = 0, i, iSerial, nCount, nState;
	int j, nSleepCount;
	unsigned int nTime, nDiffTime;
	char strFileName[80];
	char JpegFiles[JPEG_COUNT][JPG_PATH_LEN];
	AV_DATA tAVData;
	JPG_DBG("Enter %s\n", __func__);
	if((ret = GetAVData(AV_OP_GET_MJPEG_SERIAL, -1, &tAVData)) != 0){
		JPG_ERR("Can't get JPEG image\n");
		return ret;
	}
	/* If JpegStartSerial < 0 or JpegStartSerial is very old. */
	if((iSerial = GetJpegStartSerial()) < 0 || tAVData.serial - iSerial > 40){
		iSerial = tAVData.serial;
	} else {
		GetAVData(AV_OP_GET_MJPEG_SERIAL, iSerial, &tAVData);
	}
	nTime = tAVData.timestamp;
	nCount = pSysinfo->smtp_config.attachments;
	JPG_DBG("Count:%d\n", nCount);
	nSleepCount = 200 / nCount;
	nDiffTime = 10000 / nCount;
	for(i = 0;i < nCount;){
		JPG_DBG("Serial = %d\n", iSerial);
		if(SaveJpegBySerial(iSerial, JpegFiles[i]) == 0){
			i++;
		} else
			JPG_DBG("Not save\n");
		nState = GetJpgState(JPG_STOP);
		if(nState & JPG_STOP){
			JPG_DBG("JPG_STOP flag is set\n");
			break;
		}
		/* Get new JPEG */
		if(nState & JPG_SERIAL_UPDATE){
			iSerial = GetJpegStartSerial();
			GetAVData(AV_OP_GET_MJPEG_SERIAL, iSerial, &tAVData);
			nTime = tAVData.timestamp;
		} else
			nTime += nDiffTime;
		j = 0;
		while(nTime > tAVData.timestamp && j++ < nSleepCount){
			usleep(100000);
			GetAVData(AV_OP_GET_MJPEG_SERIAL, -1, &tAVData);
		}
		if(j > nSleepCount){
			JPG_DBG("Time out!!!\n");
			ret = -1;
			break;
		}
		iSerial = tAVData.serial;
	}
	if(i > 0){
		strcpy(strFileName, JpegFiles[0]);
		strcpy(strFileName + strlen(strFileName) - 3, "cfg");
		GenerateJpgConfigFile(JpegFiles, strFileName, i);
		DoFileDispatch(strFileName, nDstFlg);
	}
	/* Update JPEG start serial */
	pthread_mutex_lock(&gJpgMutex);
	if(!(gJpgState & JPG_SERIAL_UPDATE))
		gJpgStartSerial = iSerial;
	pthread_mutex_unlock(&gJpgMutex);
	return ret;
}