Reset VideoSurface of Videoplayer after it has been destroyed

This commit is contained in:
daniel oeh 2012-09-06 17:47:47 +02:00
parent 141515f078
commit 906f85da07
3 changed files with 19 additions and 6 deletions

View File

@ -195,6 +195,7 @@ public class VideoplayerActivity extends MediaplayerActivity implements
if (AppConfig.DEBUG) if (AppConfig.DEBUG)
Log.d(TAG, "Videosurface was destroyed"); Log.d(TAG, "Videosurface was destroyed");
videoSurfaceCreated = false; videoSurfaceCreated = false;
controller.notifyVideoSurfaceAbandoned();
} }
@Override @Override

View File

@ -32,16 +32,13 @@ import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R; import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.activity.AudioplayerActivity;
import de.danoeh.antennapod.activity.VideoplayerActivity; import de.danoeh.antennapod.activity.VideoplayerActivity;
import de.danoeh.antennapod.asynctask.FeedImageLoader;
import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.feed.FeedImage;
import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedItem;
import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.feed.FeedManager;
import de.danoeh.antennapod.feed.FeedMedia; import de.danoeh.antennapod.feed.FeedMedia;
import de.danoeh.antennapod.feed.SimpleChapter; import de.danoeh.antennapod.feed.SimpleChapter;
import de.danoeh.antennapod.receiver.MediaButtonReceiver; import de.danoeh.antennapod.receiver.MediaButtonReceiver;
import de.danoeh.antennapod.receiver.PlayerWidget; import de.danoeh.antennapod.receiver.PlayerWidget;
import de.danoeh.antennapod.util.Converter;
/** Controls the MediaPlayer that plays a FeedMedia-file */ /** Controls the MediaPlayer that plays a FeedMedia-file */
public class PlaybackService extends Service { public class PlaybackService extends Service {
@ -233,7 +230,8 @@ public class PlaybackService extends Service {
if (AppConfig.DEBUG) if (AppConfig.DEBUG)
Log.d(TAG, "Gained audio focus"); Log.d(TAG, "Gained audio focus");
if (pausedBecauseOfTransientAudiofocusLoss) { if (pausedBecauseOfTransientAudiofocusLoss) {
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0); audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, 0);
play(); play();
} }
break; break;
@ -365,8 +363,12 @@ public class PlaybackService extends Service {
} }
/** Called when the surface holder of the mediaplayer has to be changed. */ /** Called when the surface holder of the mediaplayer has to be changed. */
public void resetVideoSurface() { private void resetVideoSurface() {
if (AppConfig.DEBUG)
Log.d(TAG, "Resetting video surface");
if (positionSaver != null) {
positionSaver.cancel(true); positionSaver.cancel(true);
}
player.setDisplay(null); player.setDisplay(null);
player.reset(); player.reset();
player.release(); player.release();
@ -381,6 +383,10 @@ public class PlaybackService extends Service {
setupMediaplayer(); setupMediaplayer();
} }
public void notifyVideoSurfaceAbandoned() {
resetVideoSurface();
}
/** Called after service has extracted the media it is supposed to play. */ /** Called after service has extracted the media it is supposed to play. */
private void setupMediaplayer() { private void setupMediaplayer() {
if (AppConfig.DEBUG) if (AppConfig.DEBUG)

View File

@ -574,4 +574,10 @@ public abstract class PlaybackController {
} }
return false; return false;
} }
public void notifyVideoSurfaceAbandoned() {
if (playbackService != null) {
playbackService.notifyVideoSurfaceAbandoned();
}
}
} }