Ejemplo n.º 1
0
int vd_genDisplay( struct VoxelDisplay *display, int xSize, int ySize, int zSize ) {
    display->xSize = xSize;
    display->ySize = ySize;
    display->zSize = zSize;
    display->totSize = xSize * ySize * zSize;
    printf( "Allocating raw data...\n" );
    if( (display->voxels = malloc( display->totSize )) == NULL ) {
        free( display );
        return VD_VOXELS_NOT_ALLOCATED;
    }
    memset( display->voxels, '\0', display->totSize );

    void (*cleanupFunc)( struct VoxelDisplay * );
#ifdef __linux
    // Linux-specific networking
    // taken from http://www.linuxhowtos.org/C_C++/socket.htm
    cleanupFunc = cleanup_linux;

#elif _WIN32
    // Windows-specific networking 
    // taken from http://johnnie.jerrata.com/winsocktutorial/
    cleanupFunc = cleanup_win32;
    WSAStartup( MAKEWORD( 1, 1 ) );
#endif

    // This appears to be POSIX networking or something
    // Open the socket for data transmission
    printf( "Allocating socket...\n" );
    if( (display->socket = socket( AF_INET, SOCK_STREAM, 0 )) < 0 ) {
        cleanupFunc( display );
        return VD_SOCKET_ERROR;
    }

    // Load up the server properties
    printf( "Copying server properties...\n" );
    memset( &(display->serv_addr), 0, sizeof( struct sockaddr_in ) );
    display->serv_addr.sin_family = AF_INET;
    display->serv_addr.sin_port = htons( 8999 );
    inet_aton( "127.0.0.1", &display->serv_addr.sin_addr.s_addr );

    // And now, ladies and gentlemen, the moment you've all been waiting for
    // Connection to the actual display!
    printf( "Connecting %d to the display at %s:%d...\n",
            display->socket,
            inet_ntoa( display->serv_addr.sin_addr ),
            ntohs( display->serv_addr.sin_port ) );
    if( connect( display->socket,
                 &display->serv_addr, 
                 sizeof( struct sockaddr_in ) ) < 0 ) {
        printf( "ERROR: Cannot connect to localhost. Error code %d\n", errno );
        cleanupFunc( display );
        return( VD_NO_CONNECTION );
    }
    printf( "All operations completed successfully!\n" );
    return 0;
}
Ejemplo n.º 2
0
void QgsProviderRegistry::clean()
{
  QgsProject::instance()->removeAllMapLayers();

  Providers::const_iterator it = mProviders.begin();

  while ( it != mProviders.end() )
  {
    QgsDebugMsgLevel( QString( "cleanup:%1" ).arg( it->first ), 5 );
    QString lib = it->second->library();
    if ( !lib.isEmpty() )
    {
      QLibrary myLib( lib );
      if ( myLib.isLoaded() )
      {
        cleanupProviderFunction_t *cleanupFunc = reinterpret_cast< cleanupProviderFunction_t * >( cast_to_fptr( myLib.resolve( "cleanupProvider" ) ) );
        if ( cleanupFunc )
          cleanupFunc();
      }
    }
    delete it->second;
    ++it;
  }
  mProviders.clear();
}
Ejemplo n.º 3
0
void VideoDecoder::run() {
    videoBufferMutex.lock();
    while(!videoOutputEnded) {
        while(videoNumFrameBuffered < (VIDEOPLAYER_VIDEO_NUM_BUFFERED_FRAMES - 1) && !videoOutputEnded) {
            int indexToWrite = (videoCurrentBufferIndex + videoNumFrameBuffered) % VIDEOPLAYER_VIDEO_NUM_BUFFERED_FRAMES;

            int frameFinished = false;
            while(!frameFinished) {
                //Keep reading until a video packet is read, or stream is ended.
                while(videoPackets.empty() && readPacket());

                if(videoPackets.empty()) {
                    //End of stream reached, stop filling buffer
                    videoOutputEnded = true;
                    break;
                }

                AVPacket videoPacket = videoPackets.back();
                videoPackets.pop_back();
                videoBufferMutex.unlock();

                if(firstVideoPacket) {
                    firstVideoPacket = false;
                    videoTimestamps[indexToWrite] = timeBase*(double)videoPacket.pts;
                }

                //Decode video
                avcodec_decode_video2(videoCodecContext, frame, &frameFinished, &videoPacket);
                if(frameFinished) {
                    //The frame is finished, so scale it into an RGB frame
                    sws_scale(swsContext, (uint8_t const * const *)frame->data, frame->linesize, 0, videoCodecContext->height, rgbFrames[indexToWrite]->data, rgbFrames[indexToWrite]->linesize);
                    logDebug("[VideoPlayer::run] Filled buffer on position %d with frame %d\n", indexToWrite, numFramesDecoded++);
                    //We are done with the packet, free it, then return status.
                    av_free_packet(&videoPacket);
                    firstVideoPacket = true;
                    //Atomic increment of videoNumFrameBuffered
                    __sync_add_and_fetch(&videoNumFrameBuffered, 1);
                    if(videoBufferMutex.trylock() == 0) {
                        videoBufferConditional.signal();
                        videoBufferMutex.unlock();
                    }
                }
                videoBufferMutex.lock();
            }
        }
        videoBufferConditional.wait();
    }
    videoBufferMutex.unlock();

    if(cleanupFunc != NULL) {
        cleanupFunc(this->customFileBufferFuncData);
    }
}
Ejemplo n.º 4
0
QgsProviderRegistry::~QgsProviderRegistry()
{
  Providers::const_iterator it = mProviders.begin();

  while ( it != mProviders.end() )
  {
    QString lib = it->second->library();
    QLibrary myLib( lib );
    if ( myLib.isLoaded() )
    {
      cleanupProviderFunction_t* cleanupFunc = ( cleanupProviderFunction_t* ) cast_to_fptr( myLib.resolve( "cleanupProvider" ) );
      if ( cleanupFunc )
        cleanupFunc();
    }
    ++it;
  }
}
Ejemplo n.º 5
0
QgsAuthMethodRegistry::~QgsAuthMethodRegistry()
{
  AuthMethods::const_iterator it = mAuthMethods.begin();

  while ( it != mAuthMethods.end() )
  {
    QgsDebugMsg( QString( "cleanup: %1" ).arg( it->first ) );
    QString lib = it->second->library();
    QLibrary myLib( lib );
    if ( myLib.isLoaded() )
    {
      cleanupAuthMethod_t* cleanupFunc = ( cleanupAuthMethod_t* ) cast_to_fptr( myLib.resolve( "cleanupAuthMethod" ) );
      if ( cleanupFunc )
        cleanupFunc();
    }
    // clear cached QgsAuthMethodMetadata *
    delete it->second;
    ++it;
  }
}
Ejemplo n.º 6
0
QgsProviderRegistry::~QgsProviderRegistry()
{
    QgsMapLayerRegistry::instance()->removeAllMapLayers();

    Providers::const_iterator it = mProviders.begin();

    while ( it != mProviders.end() )
    {
        QgsDebugMsg( QString( "cleanup:%1" ).arg( it->first ) );
        QString lib = it->second->library();
        QLibrary myLib( lib );
        if ( myLib.isLoaded() )
        {
            cleanupProviderFunction_t* cleanupFunc = ( cleanupProviderFunction_t* ) cast_to_fptr( myLib.resolve( "cleanupProvider" ) );
            if ( cleanupFunc )
                cleanupFunc();
        }
        delete it->second;
        ++it;
    }
}
Ejemplo n.º 7
0
_EXPORT void
get_address_list(BList &list, const char *string, void (*cleanupFunc)(BString &))
{
	if (string == NULL || !string[0])
		return;

	const char *start = string;

	while (true) {
		if (string[0] == '"') {
			const char *quoteEnd = ++string;

			while (quoteEnd[0] && quoteEnd[0] != '"')
				quoteEnd++;

			if (!quoteEnd[0])	// string exceeds line!
				quoteEnd = string;

			string = quoteEnd + 1;
		}

		if (string[0] == ',' || string[0] == '\0') {
			BString address(start, string - start);
			trim_white_space(address);

			if (cleanupFunc)
				cleanupFunc(address);

			list.AddItem(strdup(address.String()));

			start = string + 1;
		}

		if (!string[0])
			break;

		string++;
	}
}