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

Commit c63c6e97 authored by Andreas Huber's avatar Andreas Huber Committed by Android Git Automerger
Browse files

am d06c435c: am c6c8a1e9: Merge "Increase the size of the pages used in...

am d06c435c: am c6c8a1e9: Merge "Increase the size of the pages used in CachingDataSource (total amount of memory used remains the same) to compensate for reduced locality of audio/video data requests. Also fixes a mistaken trailing "\r\n" in the range header and bett

Merge commit 'd06c435c' into kraken

* commit 'd06c435c':
  Increase the size of the pages used in CachingDataSource (total amount of memory used remains the same) to compensate for reduced locality of audio/video data requests. Also fixes a mistaken trailing "\r\n" in the range header and better error handling on http connection.
parents 715896be d06c435c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ protected:

private:
    enum {
        kBufferSize = 32 * 1024,
        kBufferSize = 64 * 1024,

        // If we encounter a socket-read error we'll try reconnecting
        // and restarting the read for at most this many times.
+1 −1
Original line number Diff line number Diff line
@@ -1091,7 +1091,7 @@ status_t AwesomePlayer::finishSetDataSource_l() {
        }

        dataSource = new CachingDataSource(
                mConnectingDataSource, 32 * 1024, 20);
                mConnectingDataSource, 64 * 1024, 10);

        mConnectingDataSource.clear();
    } else {
+1 −1
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ sp<DataSource> DataSource::CreateFromURI(
        if (httpSource->connect() != OK) {
            return NULL;
        }
        source = new CachingDataSource(httpSource, 32 * 1024, 20);
        source = new CachingDataSource(httpSource, 64 * 1024, 10);
    } else {
        // Assume it's a filename.
        source = new FileSource(uri);
+22 −3
Original line number Diff line number Diff line
@@ -35,7 +35,8 @@ namespace android {
// connected.
static bool PerformRedirectIfNecessary(
        HTTPStream *http, const String8 &headers,
        string *host, string *path, int *port) {
        string *host, string *path, int *port,
        status_t *result) {
    String8 request;
    request.append("GET ");
    request.append(path->c_str());
@@ -52,6 +53,8 @@ static bool PerformRedirectIfNecessary(
        err = http->receive_header(&http_status);
    }

    *result = err;

    if (err != OK) {
        return false;
    }
@@ -181,6 +184,7 @@ status_t HTTPDataSource::connect() {
         host.c_str(), port, path.c_str());

    int numRedirectsRemaining = 5;
    status_t result;
    do {
        status_t err = mHttp->connect(host.c_str(), port);

@@ -194,9 +198,19 @@ status_t HTTPDataSource::connect() {

            return err;
        }
    } while (PerformRedirectIfNecessary(mHttp, mHeaders, &host, &path, &port)
    } while (PerformRedirectIfNecessary(
                mHttp, mHeaders, &host, &path, &port, &result)
             && numRedirectsRemaining-- > 0);

    if (result != OK) {
        // An error occurred while attempting to follow redirections/connect.
        Mutex::Autolock autoLock(mStateLock);

        mState = DISCONNECTED;

        return result;
    }

    string value;
    if (mHttp->find_header_value("Content-Length", &value)) {
        char *end;
@@ -282,7 +296,7 @@ ssize_t HTTPDataSource::sendRangeRequest(size_t offset) {

    char range[128];
    if (offset > 0) {
        sprintf(range, "Range: bytes=%d-\r\n\r\n", offset);
        sprintf(range, "Range: bytes=%d-\r\n", offset);
    } else {
        range[0] = '\0';
    }
@@ -313,6 +327,7 @@ ssize_t HTTPDataSource::sendRangeRequest(size_t offset) {
    }

    if ((http_status / 100) != 2) {
        LOGE("HTTP request failed, http status = %d", http_status);
        return UNKNOWN_ERROR;
    }

@@ -349,6 +364,10 @@ rinse_repeat:

        memcpy(data, (const char *)mBuffer + (offset - mBufferOffset), copy);

        if (copy < size) {
            LOGV("short read (1), returning %d vs. %d requested", copy, size);
        }

        return copy;
    }