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

Commit b9b8d14d authored by hovanchen's avatar hovanchen Committed by Cheng-Hao Chen
Browse files

Prevent Media Server crash while the AwesomePlayer getBitrate return true with...

Prevent Media Server crash while the AwesomePlayer getBitrate return true with mBitrate equals to zero.

[Cause]
   - getBitrate(int64_t *bitrate) will return true if mBitrate = 0.
   - Then, in getCachedDuration_l(int64_t *durationUs, bool *eos), 
     we might execute the following function when 
     getBitrate(&bitrate) = true and bitrate = 0.
        *durationUs = cachedDataRemaining * 8000000ll / bitrate;
   - Mediaserver will be crashed when divided by zero.
   - The mediaserver crash often occur when DLNA IOP tests on Golden DMS
     with AAC_ADTS_320 audio.
[Solution]
   - Prevent the divide function executing when bitrate is zero.

Change-Id: I4439d92cee5faec95df2109e9186c33b3fff6c66
parent a9aa6baa
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -617,7 +617,7 @@ bool AwesomePlayer::getBitrate(int64_t *bitrate) {
bool AwesomePlayer::getCachedDuration_l(int64_t *durationUs, bool *eos) {
    int64_t bitrate;

    if (mCachedSource != NULL && getBitrate(&bitrate)) {
    if (mCachedSource != NULL && getBitrate(&bitrate) && (bitrate > 0)) {
        status_t finalStatus;
        size_t cachedDataRemaining = mCachedSource->approxDataRemaining(&finalStatus);
        *durationUs = cachedDataRemaining * 8000000ll / bitrate;