AudioVideoPlayerSample icon indicating copy to clipboard operation
AudioVideoPlayerSample copied to clipboard

fixed state changed exceptions on stop for audio and video.

Open bharatmolleti opened this issue 10 years ago • 1 comments

attempting to fix the Null Pointer and Illegal State exceptions as below when the player is being paused. Issue has been fixed using an AtomicBoolean and making the video and audio Thread's global.

12-11 11:40:42.080: V/MediaMoviePlayer:MediaMoviePlayer(7398): handleStop: 12-11 11:40:42.080: V/MediaMoviePlayer:MediaMoviePlayer(7398): internal_stop_video: 12-11 11:40:42.080: V/MediaMoviePlayer:MediaMoviePlayer(7398): internal_stop_audio: 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): VideoTask: 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): java.lang.NullPointerException: Attempt to get length of null array 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer.internal_write_audio(MediaMoviePlayer.java:942) 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer.handleOutputAudio(MediaMoviePlayer.java:916) 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer.access$24(MediaMoviePlayer.java:899) 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer$3.run(MediaMoviePlayer.java:370) 12-11 11:40:42.090: E/MediaMoviePlayer:MediaMoviePlayer(7398): at java.lang.Thread.run(Thread.java:818) 12-11 11:40:42.090: V/MediaMoviePlayer:MediaMoviePlayer(7398): AudioTask:finished 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): VideoTask: 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): java.lang.IllegalStateException 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): at android.media.MediaCodec.releaseOutputBuffer(Native Method) 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): at android.media.MediaCodec.releaseOutputBuffer(MediaCodec.java:2424) 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer.handleOutputVideo(MediaMoviePlayer.java:849) 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer.access$18(MediaMoviePlayer.java:823) 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): at com.serenegiant.media.MediaMoviePlayer$2.run(MediaMoviePlayer.java:341) 12-11 11:40:42.097: E/MediaMoviePlayer:MediaMoviePlayer(7398): at java.lang.Thread.run(Thread.java:818) 12-11 11:40:42.097: V/MediaMoviePlayer:MediaMoviePlayer(7398): VideoTask:finished 12-11 11:40:42.109: V/MediaMoviePlayer:MediaMoviePlayer(7398): player task finished:local_isRunning=false 12-11 11:40:42.109: V/MediaMoviePlayer:MediaMoviePlayer(7398): handleStop: 12-11 11:40:42.109: V/MediaMoviePlayer:MediaMoviePlayer(7398): internal_stop_video: 12-11 11:40:42.109: V/MediaMoviePlayer:MediaMoviePlayer(7398): internal_stop_audio:

After the fix, the new log looks as so,

12-11 11:44:59.200: V/MediaMoviePlayer:MediaMoviePlayer(8168): handleStop: 12-11 11:44:59.200: V/MediaMoviePlayer:MediaMoviePlayer(8168): internal_stop_video : 12-11 11:44:59.200: V/MediaMoviePlayer:MediaMoviePlayer(8168): internal_stop_video + 12-11 11:44:59.201: D/MediaMoviePlayer:MediaMoviePlayer(8168): VideoTask Stop Called. 12-11 11:44:59.201: V/MediaMoviePlayer:MediaMoviePlayer(8168): VideoTask:finished 12-11 11:44:59.207: D/MediaMoviePlayer:MediaMoviePlayer(8168): AudioTask Stop Called. 12-11 11:44:59.207: V/MediaMoviePlayer:MediaMoviePlayer(8168): AudioTask:finished 12-11 11:44:59.211: D/MediaMoviePlayer:MediaMoviePlayer(8168): internal_stop_video - 12-11 11:44:59.211: V/MediaMoviePlayer:MediaMoviePlayer(8168): internal_stop_audio: 12-11 11:44:59.240: V/MediaMoviePlayer:MediaMoviePlayer(8168): player task finished:local_isRunning=false 12-11 11:44:59.240: V/MediaMoviePlayer:MediaMoviePlayer(8168): handleStop: 12-11 11:44:59.240: V/MediaMoviePlayer:MediaMoviePlayer(8168): internal_stop_video : 12-11 11:44:59.240: V/MediaMoviePlayer:MediaMoviePlayer(8168): internal_stop_audio:

Thank you.

bharatmolleti avatar Dec 11 '15 06:12 bharatmolleti

Hi, thank you for providing pull-request. I think using slower AtomicBoolean in a loop is redundant because there is no compare-and-set operation under racy condition in this case. Please use volatile boolean instead. (I checked this repository and found other issue, I will update later) saki

saki4510t avatar Dec 14 '15 03:12 saki4510t