I have success implementing the free software ffmpeg library in Source. There is nothing like watching a 720p HD xvid on an ingame surface. :D It's not very well implemented though and I don't have any sound support. I'd gladly share the source code with you. ffmpeg is very fast and it provides all the codecs itself and supports most formats VLC do (because it is used by VLC).
Rodrigo 'r2d2rigo' Diaz skrev: > AVIkit was used in a demo MOD from the creator of the library, but AFAIK he > didn't release the source code. I tried to add it some time ago, but finally > dropped the idea. > > 2010/3/18 kevin bowen <[email protected]> > > >> Just wondering if anyone has implemented AVIkit and is willing to part with >> the code :) or if AVIkit has been used in any open source mods (rebirth and >> arrangemod have the lib's included but don't actually call the functions). >> I'd do it myself but it would literally take years (I'm a moron), it'd be >> easier just to ask for it here just incase any devs have a dead hl1 mod >> with >> the code already laid out :) >> >> I've scoured the internet and all I could find was this on a russian HL >> coding site which seems to use the code but I'm not sure if it's an entire >> replacement for avikit.cpp or if it fits in there somehow (again I'm a >> moron >> when it comes to this) >> >> >> >> /////////////////////////////////////////////////////////////// >> // Only setup the avi if it's actually a video screen >> >> if (isVideoScreen && replacement[0] != '\0') { >> char *error_msg = NULL; >> long xres = 0; >> long yres = 0; >> float duration = 0.0f; >> >> movie = new AVIKit( absolute_replacement, false ); >> if (movie->getError( &error_msg ) != AVIKIT_NOERROR) { >> gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Error opening %s: >> %s\n", absolute_replacement, error_msg ); >> delete movie; >> break; >> } >> movie->getVideoInfo( &xres, &yres, &duration ); >> gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Opened %s: %ld x %ld (%f >> secs)\n", replacement, xres, yres, duration ); >> gEngfuncs.Con_DPrintf( "Video screen at (%d %d %d), with extents (%d %d >> %d)\n", >> (int)origin[0], (int)origin[1], (int)origin[2], >> (int)extents[0], (int)extents[1], (int)extents[2] ); >> >> // Create the OpenGL texture >> GLuint texnum; >> glGenTextures( 1, &texnum ); >> >> if (!AddComplexAvi( movie, texnum, origin, angles, extents, &error_msg >> )) { >> gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Error adding movie: >> %s\n", error_msg ); >> delete movie; >> } >> } else if (isVideoScreen) { >> gEngfuncs.Con_DPrintf( "SetupAvisFromEntities: Video screen didn't >> have a movie specified!\n" ); >> } >> >> //Setting up the texture: >> >> movie->getVideoInfo( &data->width, &data->height, &data->total_length ); >> glEnable( GL_TEXTURE_2D ); >> glBindTexture( GL_TEXTURE_2D, data->texture_index ); >> glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); >> glTexImage2D( GL_TEXTURE_2D, 0, 3, data->width, data->height, 0, GL_RGB, >> GL_UNSIGNED_BYTE, tmpbuffer ); >> >> //Updating the texture each frame: >> >> // Calculate the frame needed >> int frame = i->movie->getVideoFrameNumber( i->current_time ); >> >> // If the frame has changed, re-upload it >> if (frame != i->current_frame) { >> i->current_frame = frame; >> i->movie->getVideoFrame( (char*)i->buffer, frame ); >> >> // If the video isn't a power of two on all sides, we need to resize >> it... <img src="images/smilies/frown.gif" border="0" alt=""> >> if (i->resized_buffer) { >> gluScaleImage( GL_RGB, i->realwidth, i->realheight, >> GL_UNSIGNED_BYTE, i->buffer, i->width, i->height, GL_UNSIGNED_BYTE, >> i->resized_buffer ); >> // ... and update the OpenGL texture ... >> glEnable(GL_TEXTURE_2D); >> glBindTexture( GL_TEXTURE_2D, i->texture_index ); >> glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, i->width, i->height, >> GL_RGB, GL_UNSIGNED_BYTE, i->resized_buffer ); >> } else { >> // ... and update the OpenGL texture ... >> glEnable(GL_TEXTURE_2D); >> glBindTexture( GL_TEXTURE_2D, i->texture_index ); >> glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, i->width, >> i->height, GL_RGB, GL_UNSIGNED_BYTE, i->buffer ); >> } >> } >> >> // If this is a complex movie, draw the polygons >> if (i->texture_type == AVI_TEXTURE_USER) { >> >> glEnable( GL_TEXTURE_2D ); >> glBindTexture( GL_TEXTURE_2D, i->texture_index ); >> glDisable( GL_BLEND ); >> glBegin( GL_QUADS ); >> >> // Top left >> glColor3f( 1.0f, 1.0f, 1.0f ); >> glTexCoord2f( 0.0f, 1.0f ); >> glVertex3f( i->vertexes[0].x, i->vertexes[0].y, i->vertexes[0].z >> ); >> >> // Bottom left >> glColor3f( 1.0f, 1.0f, 1.0f ); >> glTexCoord2f( 0.0f, 0.0f ); >> glVertex3f( i->vertexes[1].x, i->vertexes[1].y, i->vertexes[1].z >> ); >> >> // Bottom right >> glColor3f( 1.0f, 1.0f, 1.0f ); >> glTexCoord2f( 1.0f, 0.0f ); >> glVertex3f( i->vertexes[2].x, i->vertexes[2].y, i->vertexes[2].z >> ); >> >> // Top right >> glColor3f( 1.0f, 1.0f, 1.0f ); >> glTexCoord2f( 1.0f, 1.0f ); >> glVertex3f( i->vertexes[3].x, i->vertexes[3].y, i->vertexes[3].z >> ); >> >> glEnd(); >> } >> /////////////////////////////////////////////////////////////// >> >> >> Regardless of this, the AVIkit mod also included fmod.dll, which I'm >> guessing is used for sound and I'm not sure how it pulls this from the AVI. >> >> Kevin >> _______________________________________________ >> To unsubscribe, edit your list preferences, or view the list archives, >> please visit: >> http://list.valvesoftware.com/mailman/listinfo/hlcoders >> >> >> > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, please > visit: > http://list.valvesoftware.com/mailman/listinfo/hlcoders > _______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders

