Bug Fix: Set seek position when resuming paused

And a minor reoder of seek time reset code.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2025-02-15 21:46:46 -08:00
parent b8698ea125
commit dd5be9b117
4 changed files with 21 additions and 3 deletions

View file

@ -878,6 +878,15 @@ NSDictionary *makeRGInfo(PlaylistEntry *pe) {
}
}
- (void)audioPlayer:(AudioPlayer *)player updatePosition:(id)userInfo {
if(userInfo) {
PlaylistEntry *pe = (PlaylistEntry *)userInfo;
if([pe current]) {
[self updatePosition:userInfo];
}
}
}
- (void)audioPlayer:(AudioPlayer *)player setError:(NSNumber *)status toTrack:(id)userInfo {
PlaylistEntry *pe = (PlaylistEntry *)userInfo;
[pe setError:[status boolValue]];

View file

@ -138,5 +138,6 @@
- (void)audioPlayer:(AudioPlayer *)player restartPlaybackAtCurrentPosition:(id)userInfo;
- (void)audioPlayer:(AudioPlayer *)player pushInfo:(NSDictionary *)info toTrack:(id)userInfo;
- (void)audioPlayer:(AudioPlayer *)player reportPlayCountForTrack:(id)userInfo;
- (void)audioPlayer:(AudioPlayer *)player updatePosition:(id)userInfo;
- (void)audioPlayer:(AudioPlayer *)player setError:(NSNumber *)status toTrack:(id)userInfo;
@end

View file

@ -131,8 +131,12 @@
[bufferChain launchThreads];
if(paused)
if(paused) {
[self setPlaybackStatus:CogStatusPaused waitUntilDone:YES];
if(time > 0.0) {
[self updatePosition:userInfo];
}
}
}
- (void)stop {
@ -247,6 +251,10 @@
[self sendDelegateMethod:@selector(audioPlayer:restartPlaybackAtCurrentPosition:) withObject:previousUserInfo waitUntilDone:NO];
}
- (void)updatePosition:(id)userInfo {
[self sendDelegateMethod:@selector(audioPlayer:updatePosition:) withObject:userInfo waitUntilDone:NO];
}
- (void)pushInfo:(NSDictionary *)info toTrack:(id)userInfo {
[self sendDelegateMethod:@selector(audioPlayer:pushInfo:toTrack:) withObject:info withObject:userInfo waitUntilDone:NO];
}

View file

@ -164,24 +164,24 @@ static void *kInputNodeContext = &kInputNodeContext;
[bufferChain setVolume:0.0];
ConverterNode *converter = [bufferChain converter];
VisualizationNode *visualization = [bufferChain visualization];
DSPRubberbandNode *rubberband = [bufferChain rubberband];
DSPFSurroundNode *fsurround = [bufferChain fsurround];
DSPEqualizerNode *equalizer = [bufferChain equalizer];
DSPHRTFNode *hrtf = [bufferChain hrtf];
DSPDownmixNode *downmix = [bufferChain downmix];
VisualizationNode *visualization = [bufferChain visualization];
DLog(@"SEEKING! Resetting Buffer");
// This resets the converter's buffer
[self resetBuffer];
[converter resetBuffer];
[converter inputFormatDidChange:[bufferChain inputFormat] inputConfig:[bufferChain inputConfig]];
[visualization resetBuffer];
[rubberband resetBuffer];
[fsurround resetBuffer];
[equalizer resetBuffer];
[hrtf resetBuffer];
[downmix resetBuffer];
[visualization resetBuffer];
DLog(@"Reset buffer!");