Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 112dd3aa authored by Anders3 Petersson's avatar Anders3 Petersson Committed by Steve Kondik
Browse files

Solved problem with hanging decode call

Improved error handling in Mediaplayer service,
stops decode from hanging when player->start()
fails.

Change-Id: Ia160ff6eb9aeef0971c004e8baa90750e5636479
parent bb784236
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -1319,6 +1319,7 @@ status_t MediaPlayerService::decode(
    ALOGV("decode(%s)", url);
    sp<MediaPlayerBase> player;
    status_t status = BAD_VALUE;
    status_t err = OK;

    // Protect our precious, precious DRMd ringtones by only allowing
    // decoding of http, but not filesystem paths or content Uris.
@@ -1351,7 +1352,11 @@ status_t MediaPlayerService::decode(
    if (cache->wait() != NO_ERROR) goto Exit;

    ALOGV("start");
    player->start();
    err = player->start();
    if (err != NO_ERROR) {
        ALOGE("Error: %d Starting player in decode", err);
        goto Exit;
    }

    ALOGV("wait for playback complete");
    cache->wait();
@@ -1381,6 +1386,7 @@ status_t MediaPlayerService::decode(int fd, int64_t offset, int64_t length,
    ALOGV("decode(%d, %lld, %lld)", fd, offset, length);
    sp<MediaPlayerBase> player;
    status_t status = BAD_VALUE;
    status_t err = OK;

    player_type playerType = MediaPlayerFactory::getPlayerType(NULL /* client */,
                                                               fd,
@@ -1406,7 +1412,11 @@ status_t MediaPlayerService::decode(int fd, int64_t offset, int64_t length,
    if (cache->wait() != NO_ERROR) goto Exit;

    ALOGV("start");
    player->start();
    err = player->start();
    if (err != NO_ERROR) {
        ALOGE("Error: %d Starting player in decode", err);
        goto Exit;
    }

    ALOGV("wait for playback complete");
    cache->wait();