diff --git a/engine/client/avi/avi.h b/engine/client/avi/avi.h index 9adc504a..ace67167 100644 --- a/engine/client/avi/avi.h +++ b/engine/client/avi/avi.h @@ -22,8 +22,7 @@ typedef struct movie_state_s movie_state_t; int AVI_GetVideoFrameNumber( movie_state_t *Avi, float time ); byte *AVI_GetVideoFrame( movie_state_t *Avi, int frame ); qboolean AVI_GetVideoInfo( movie_state_t *Avi, int *xres, int *yres, float *duration ); -qboolean AVI_GetAudioInfo( movie_state_t *Avi, wavdata_t *snd_info ); -int AVI_GetAudioChunk( movie_state_t *Avi, char *audiodata, int offset, int length ); +qboolean AVI_HaveAudioTrack( const movie_state_t *Avi ); void AVI_OpenVideo( movie_state_t *Avi, const char *filename, qboolean load_audio, int quiet ); movie_state_t *AVI_LoadVideo( const char *filename, qboolean load_audio ); int AVI_TimeToSoundPosition( movie_state_t *Avi, int time ); diff --git a/engine/client/avi/avi_ffmpeg.c b/engine/client/avi/avi_ffmpeg.c index e5ea9329..b5c20a0d 100644 --- a/engine/client/avi/avi_ffmpeg.c +++ b/engine/client/avi/avi_ffmpeg.c @@ -235,18 +235,9 @@ qboolean AVI_GetVideoInfo( movie_state_t *Avi, int *xres, int *yres, float *dura return true; } -qboolean AVI_GetAudioInfo( movie_state_t *Avi, wavdata_t *snd_info ) +qboolean AVI_HaveAudioTrack( const movie_state_t *Avi ) { - if( !Avi->active || Avi->audio_stream < 0 ) - return false; - - snd_info->rate = Avi->rate; - snd_info->channels = Avi->channels; - snd_info->width = av_get_bytes_per_sample( Avi->s_fmt ); - snd_info->size = (size_t)snd_info->rate * snd_info->width * snd_info->channels; - snd_info->loopStart = 0; - - return true; + return Avi ? Avi->active && Avi->audio_ctx : false; } // just let it compile, bruh! @@ -255,11 +246,6 @@ byte *AVI_GetVideoFrame( movie_state_t *Avi, int target ) return Avi->dst; } -int AVI_GetAudioChunk( movie_state_t *Avi, char *audiodata, int offset, int length ) -{ - return 0; -} - static void AVI_StreamAudio( movie_state_t *Avi ) { int buffer_samples, file_samples, file_bytes; diff --git a/engine/client/cl_render.c b/engine/client/cl_render.c index 87feac0e..8ad4aded 100644 --- a/engine/client/cl_render.c +++ b/engine/client/cl_render.c @@ -236,6 +236,11 @@ static intptr_t pfnRenderGetParm( int parm, int arg ) return CL_RenderGetParm( parm, arg, true ); } +static void pfnAVI_StreamSound( movie_state_t *avi, int entnum, float fvol, float attn, float synctime ) +{ + return; // stub, use AVI_SetParm and AVI_Think to stream AVI sound +} + static render_api_t gRenderAPI = { pfnRenderGetParm, // GL_RenderGetParm, @@ -268,7 +273,7 @@ static render_api_t gRenderAPI = NULL, // R_UploadStretchRaw, (void*)AVI_FreeVideo, (void*)AVI_IsActive, - S_StreamAviSamples, + (void*)pfnAVI_StreamSound, AVI_Think, AVI_SetParm, NULL, // GL_Bind, diff --git a/engine/client/cl_video.c b/engine/client/cl_video.c index a23554d1..ed0bd86e 100644 --- a/engine/client/cl_video.c +++ b/engine/client/cl_video.c @@ -24,9 +24,6 @@ AVI PLAYING ================================================================= */ -static int xres, yres; -static float video_duration; -static wavdata_t cin_audio; static movie_state_t *cin_state; /* @@ -203,13 +200,7 @@ qboolean SCR_PlayCinematic( const char *arg ) return false; } - if( !( AVI_GetVideoInfo( cin_state, &xres, &yres, &video_duration ))) // couldn't open this at all. - { - AVI_CloseVideo( cin_state ); - return false; - } - - if( AVI_GetAudioInfo( cin_state, &cin_audio )) + if( AVI_HaveAudioTrack( cin_state )) { // begin streaming S_StopAllSounds( true ); @@ -231,23 +222,6 @@ qboolean SCR_PlayCinematic( const char *arg ) return true; } -int SCR_GetAudioChunk( char *rawdata, int length ) -{ - int r; - - r = AVI_GetAudioChunk( cin_state, rawdata, cin_audio.loopStart, length ); - cin_audio.loopStart += r; // advance play position - - return r; -} - -wavdata_t *SCR_GetMovieInfo( void ) -{ - if( AVI_IsActive( cin_state )) - return &cin_audio; - return NULL; -} - /* ================== SCR_StopCinematic diff --git a/engine/client/s_main.c b/engine/client/s_main.c index 4e8d26ca..512cc6a2 100644 --- a/engine/client/s_main.c +++ b/engine/client/s_main.c @@ -1205,86 +1205,6 @@ void S_RawSamples( uint samples, uint rate, word width, word channels, const byt S_RawEntSamples( entnum, samples, rate, width, channels, data, snd_vol ); } -/* -=================== -S_PositionedRawSamples -=================== -*/ -void S_StreamAviSamples( void *Avi, int entnum, float fvol, float attn, float synctime ) -{ - int bufferSamples; - int fileSamples; - byte raw[MAX_RAW_SAMPLES]; - float duration = 0.0f; - int r, fileBytes; - rawchan_t *ch = NULL; - - if( !dma.initialized || s_listener.paused || !CL_IsInGame( )) - return; - - if( entnum < 0 || entnum >= GI->max_edicts ) - return; - - if( !( ch = S_FindRawChannel( entnum, true ))) - return; - - if( ch->sound_info.rate == 0 ) - { - if( !AVI_GetAudioInfo( Avi, &ch->sound_info )) - return; // no audiotrack - } - - ch->master_vol = bound( 0, fvol * 255, 255 ); - ch->dist_mult = (attn / SND_CLIP_DISTANCE); - - // see how many samples should be copied into the raw buffer - if( ch->s_rawend < soundtime ) - ch->s_rawend = soundtime; - - // position is changed, synchronization is lost etc - if( fabs( ch->oldtime - synctime ) > s_mixahead.value ) - ch->sound_info.loopStart = AVI_TimeToSoundPosition( Avi, synctime * 1000 ); - ch->oldtime = synctime; // keep actual time - - while( ch->s_rawend < soundtime + ch->max_samples ) - { - wavdata_t *info = &ch->sound_info; - - bufferSamples = ch->max_samples - (ch->s_rawend - soundtime); - - // decide how much data needs to be read from the file - fileSamples = bufferSamples * ((float)info->rate / SOUND_DMA_SPEED ); - if( fileSamples <= 1 ) return; // no more samples need - - // our max buffer size - fileBytes = fileSamples * ( info->width * info->channels ); - - if( fileBytes > sizeof( raw )) - { - fileBytes = sizeof( raw ); - fileSamples = fileBytes / ( info->width * info->channels ); - } - - // read audio stream - r = AVI_GetAudioChunk( Avi, raw, info->loopStart, fileBytes ); - info->loopStart += r; // advance play position - - if( r < fileBytes ) - { - fileBytes = r; - fileSamples = r / ( info->width * info->channels ); - } - - if( r > 0 ) - { - // add to raw buffer - ch->s_rawend = S_RawSamplesStereo( ch->rawsamples, ch->s_rawend, ch->max_samples, - fileSamples, info->rate, info->width, info->channels, raw ); - } - else break; // no more samples for this frame - } -} - /* =================== S_FreeIdleRawChannels @@ -1688,7 +1608,6 @@ void SND_UpdateSound( void ) } S_StreamBackgroundTrack (); - S_StreamSoundTrack (); // mix some sound S_UpdateChannels (); diff --git a/engine/client/s_stream.c b/engine/client/s_stream.c index 7f3e2973..555df323 100644 --- a/engine/client/s_stream.c +++ b/engine/client/s_stream.c @@ -286,66 +286,3 @@ void S_StopStreaming( void ) if( !dma.initialized ) return; s_listener.streaming = false; } - -/* -================= -S_StreamSoundTrack -================= -*/ -void S_StreamSoundTrack( void ) -{ - int bufferSamples; - int fileSamples; - byte raw[MAX_RAW_SAMPLES]; - int r, fileBytes; - rawchan_t *ch = NULL; - - if( !dma.initialized || !s_listener.streaming || s_listener.paused ) - return; - - ch = S_FindRawChannel( S_RAW_SOUND_SOUNDTRACK, true ); - - Assert( ch != NULL ); - - // see how many samples should be copied into the raw buffer - if( ch->s_rawend < soundtime ) - ch->s_rawend = soundtime; - - while( ch->s_rawend < soundtime + ch->max_samples ) - { - wavdata_t *info = SCR_GetMovieInfo(); - - if( !info ) break; // bad soundtrack? - - bufferSamples = ch->max_samples - (ch->s_rawend - soundtime); - - // decide how much data needs to be read from the file - fileSamples = bufferSamples * ((float)info->rate / SOUND_DMA_SPEED ); - if( fileSamples <= 1 ) return; // no more samples need - - // our max buffer size - fileBytes = fileSamples * ( info->width * info->channels ); - - if( fileBytes > sizeof( raw )) - { - fileBytes = sizeof( raw ); - fileSamples = fileBytes / ( info->width * info->channels ); - } - - // read audio stream - r = SCR_GetAudioChunk( raw, fileBytes ); - - if( r < fileBytes ) - { - fileBytes = r; - fileSamples = r / ( info->width * info->channels ); - } - - if( r > 0 ) - { - // add to raw buffer - S_RawSamples( fileSamples, info->rate, info->width, info->channels, raw, S_RAW_SOUND_SOUNDTRACK ); - } - else break; // no more samples for this frame - } -} diff --git a/engine/client/sound.h b/engine/client/sound.h index 01dc6c5e..d0a6e812 100644 --- a/engine/client/sound.h +++ b/engine/client/sound.h @@ -265,7 +265,6 @@ void SND_ForceCloseMouth( int entnum ); // // s_stream.c // -void S_StreamSoundTrack( void ); void S_StreamBackgroundTrack( void ); void S_PrintBackgroundTrackState( void ); void S_FadeMusicVolume( float fadePercent ); diff --git a/engine/common/common.h b/engine/common/common.h index 7b1a4047..97d47fed 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -741,8 +741,6 @@ void SCR_Init( void ); void SCR_UpdateScreen( void ); void SCR_BeginLoadingPlaque( qboolean is_background ); void SCR_CheckStartupVids( void ); -int SCR_GetAudioChunk( char *rawdata, int length ); -wavdata_t *SCR_GetMovieInfo( void ); void SCR_Shutdown( void ); void Con_Print( const char *txt ); void Con_NPrintf( int idx, const char *fmt, ... ) FORMAT_CHECK( 2 );