From e2c442c898ba56b2c76d9d039790531902ae0b41 Mon Sep 17 00:00:00 2001 From: martii Date: Sat, 2 Nov 2013 12:58:29 +0100 Subject: [PATCH] libspark/player, libeplayer3/ffmpeg: improve termination handling Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/773553ddb570c9030b513039c2d083d27f09a588 Author: martii Date: 2013-11-02 (Sat, 02 Nov 2013) ------------------ No further description and justification available within origin commit message! ------------------ This commit was generated by Migit --- libeplayer3/container/container_ffmpeg.c | 2 +- libspark/playback_libeplayer3.cpp | 13 +++++++++++-- libspark/playback_libeplayer3.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libeplayer3/container/container_ffmpeg.c b/libeplayer3/container/container_ffmpeg.c index ab03e51..4f503ad 100644 --- a/libeplayer3/container/container_ffmpeg.c +++ b/libeplayer3/container/container_ffmpeg.c @@ -346,7 +346,7 @@ static void FFMPEGThread(Context_t *context) { } ffmpeg_printf(10, "Running!\n"); - while ( context && context->playback && context->playback->isPlaying ) { + while ( context && context->playback && context->playback->isPlaying && !context->playback->abortRequested ) { //IF MOVIE IS PAUSED, WAIT if (context->playback->isPaused) { diff --git a/libspark/playback_libeplayer3.cpp b/libspark/playback_libeplayer3.cpp index 9bcd67c..4c2ca4f 100644 --- a/libspark/playback_libeplayer3.cpp +++ b/libspark/playback_libeplayer3.cpp @@ -15,7 +15,7 @@ extern ManagerHandler_t ManagerHandler; #include "playback_libeplayer3.h" #include "subtitle.h" -static Context_t *player; +static Context_t *player = NULL; extern cAudio *audioDecoder; extern cVideo *videoDecoder; @@ -710,8 +710,17 @@ void cPlayback::SuspendSubtitle(bool b) } void cPlayback::RequestAbort() { - if (player->playback) + if (player && player->playback) { player->playback->abortRequested = 1; + while (player->playback->isPlaying) + usleep(100000); + } +} + +bool cPlayback::isPlaying() { + if (player && player->playback) + return player->playback->isPlaying; + return false; } #if 0 bool cPlayback::IsPlaying(void) const diff --git a/libspark/playback_libeplayer3.h b/libspark/playback_libeplayer3.h index 2d8547a..c753001 100644 --- a/libspark/playback_libeplayer3.h +++ b/libspark/playback_libeplayer3.h @@ -48,6 +48,7 @@ class cPlayback void FindAllDvbsubtitlePids(int *pids, unsigned int *numpids, std::string *language); void FindAllTeletextsubtitlePids(int *pids, unsigned int *numpidt, std::string *tlanguage); void RequestAbort(void); + bool isPlaying(void); #if 0 void FindAllSubs(uint16_t *pids, unsigned short *supported, uint16_t *numpida, std::string *language); bool SelectSubtitles(int pid);