mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-04-30 13:20:51 +00:00
Cinematic Video and Audio memory management fixes
(cherry picked from commit 40a9190283d30180a3b7e4ab9b77f3c3728dad4f)
This commit is contained in:
parent
1f2df87be7
commit
922f9eddef
3 changed files with 9 additions and 7 deletions
|
@ -790,7 +790,9 @@ bool idCinematicLocal::InitFromFFMPEGFile( const char* qpath, bool amilooping )
|
||||||
frameRate = av_q2d( fmt_ctx->streams[video_stream_index]->avg_frame_rate );
|
frameRate = av_q2d( fmt_ctx->streams[video_stream_index]->avg_frame_rate );
|
||||||
common->Printf( "Loaded FFMPEG file: '%s', looping=%d, %dx%d, %f FPS, %f sec\n", qpath, looping, CIN_WIDTH, CIN_HEIGHT, frameRate, durationSec );
|
common->Printf( "Loaded FFMPEG file: '%s', looping=%d, %dx%d, %f FPS, %f sec\n", qpath, looping, CIN_WIDTH, CIN_HEIGHT, frameRate, durationSec );
|
||||||
|
|
||||||
image = ( byte* )Mem_Alloc( CIN_WIDTH * CIN_HEIGHT * 4 * 2, TAG_CINEMATIC );
|
// SRS - Get number of image bytes needed by querying with NULL first, then allocate image and fill with correct parameters
|
||||||
|
int img_bytes = av_image_fill_arrays( frame2->data, frame2->linesize, NULL, AV_PIX_FMT_BGR32, CIN_WIDTH, CIN_HEIGHT, 1 );
|
||||||
|
image = ( byte* )Mem_Alloc( img_bytes, TAG_CINEMATIC );
|
||||||
av_image_fill_arrays( frame2->data, frame2->linesize, image, AV_PIX_FMT_BGR32, CIN_WIDTH, CIN_HEIGHT, 1 ); //GK: Straight out of the FFMPEG source code
|
av_image_fill_arrays( frame2->data, frame2->linesize, image, AV_PIX_FMT_BGR32, CIN_WIDTH, CIN_HEIGHT, 1 ); //GK: Straight out of the FFMPEG source code
|
||||||
if( img_convert_ctx )
|
if( img_convert_ctx )
|
||||||
{
|
{
|
||||||
|
@ -1586,7 +1588,7 @@ cinData_t idCinematicLocal::ImageForTimeBinkDec( int thisTime )
|
||||||
|
|
||||||
if( audioTracks > 0 )
|
if( audioTracks > 0 )
|
||||||
{
|
{
|
||||||
audioBuffer = ( int16_t* )malloc( binkInfo.idealBufferSize );
|
audioBuffer = ( int16_t* )Mem_Alloc( binkInfo.idealBufferSize, TAG_AUDIO );
|
||||||
num_bytes = Bink_GetAudioData( binkHandle, trackIndex, audioBuffer );
|
num_bytes = Bink_GetAudioData( binkHandle, trackIndex, audioBuffer );
|
||||||
|
|
||||||
// SRS - If we have cinematic audio data, start playing it now
|
// SRS - If we have cinematic audio data, start playing it now
|
||||||
|
@ -1598,7 +1600,7 @@ cinData_t idCinematicLocal::ImageForTimeBinkDec( int thisTime )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// SRS - Even though we have no audio data to play, still need to free the audio buffer
|
// SRS - Even though we have no audio data to play, still need to free the audio buffer
|
||||||
free( audioBuffer );
|
Mem_Free( audioBuffer );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ void CinematicAudio_OpenAL::PlayAudio( uint8_t* data, int size )
|
||||||
#if defined(USE_FFMPEG)
|
#if defined(USE_FFMPEG)
|
||||||
av_freep( &tempdata );
|
av_freep( &tempdata );
|
||||||
#elif defined(USE_BINKDEC)
|
#elif defined(USE_BINKDEC)
|
||||||
free( tempdata );
|
Mem_Free( tempdata );
|
||||||
#endif
|
#endif
|
||||||
alSourceQueueBuffers( alMusicSourceVoicecin, 1, &bufid );
|
alSourceQueueBuffers( alMusicSourceVoicecin, 1, &bufid );
|
||||||
ALenum error = alGetError();
|
ALenum error = alGetError();
|
||||||
|
@ -149,7 +149,7 @@ void CinematicAudio_OpenAL::PlayAudio( uint8_t* data, int size )
|
||||||
#if defined(USE_FFMPEG)
|
#if defined(USE_FFMPEG)
|
||||||
av_freep( &data );
|
av_freep( &data );
|
||||||
#elif defined(USE_BINKDEC)
|
#elif defined(USE_BINKDEC)
|
||||||
free( data );
|
Mem_Free( data );
|
||||||
#endif
|
#endif
|
||||||
offset++;
|
offset++;
|
||||||
if( offset == NUM_BUFFERS )
|
if( offset == NUM_BUFFERS )
|
||||||
|
@ -221,7 +221,7 @@ void CinematicAudio_OpenAL::ShutdownAudio()
|
||||||
#if defined(USE_FFMPEG)
|
#if defined(USE_FFMPEG)
|
||||||
av_freep( &tempdata );
|
av_freep( &tempdata );
|
||||||
#elif defined(USE_BINKDEC)
|
#elif defined(USE_BINKDEC)
|
||||||
free( tempdata );
|
Mem_Free( tempdata );
|
||||||
#endif
|
#endif
|
||||||
buffersize--;
|
buffersize--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ public:
|
||||||
#if defined(USE_FFMPEG)
|
#if defined(USE_FFMPEG)
|
||||||
av_freep( &data );
|
av_freep( &data );
|
||||||
#elif defined(USE_BINKDEC)
|
#elif defined(USE_BINKDEC)
|
||||||
free( data );
|
Mem_Free( data );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
//Unused methods are stubs
|
//Unused methods are stubs
|
||||||
|
|
Loading…
Reference in a new issue