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