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

Commit 6a59e4ae authored by Robert Shih's avatar Robert Shih
Browse files

NdkMediaExtractor: setDataSourceWithHeaders API

Bug: 109928575
Change-Id: I90e9f6c9d6408f5c577ba75c9792bed589cee304
parent e8198ce2
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -84,8 +84,17 @@ media_status_t AMediaExtractor_setDataSourceFd(AMediaExtractor *mData, int fd, o

EXPORT
media_status_t AMediaExtractor_setDataSource(AMediaExtractor *mData, const char *location) {
    ALOGV("setDataSource(%s)", location);
    // TODO: add header support
    return AMediaExtractor_setDataSourceWithHeaders(mData, location, 0, NULL, NULL);
}

EXPORT
media_status_t AMediaExtractor_setDataSourceWithHeaders(AMediaExtractor *mData,
        const char *uri,
        int numheaders,
        const char * const *keys,
        const char * const *values) {

    ALOGV("setDataSource(%s)", uri);

    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jobject service = NULL;
@@ -109,7 +118,7 @@ media_status_t AMediaExtractor_setDataSource(AMediaExtractor *mData, const char
        return AMEDIA_ERROR_UNSUPPORTED;
    }

    jstring jloc = env->NewStringUTF(location);
    jstring jloc = env->NewStringUTF(uri);

    service = env->CallStaticObjectMethod(mediahttpclass, mediaHttpCreateMethod, jloc);
    env->DeleteLocalRef(jloc);
@@ -120,7 +129,15 @@ media_status_t AMediaExtractor_setDataSource(AMediaExtractor *mData, const char
        httpService = interface_cast<IMediaHTTPService>(binder);
    }

    status_t err = mData->mImpl->setDataSource(httpService, location, NULL);
    KeyedVector<String8, String8> headers;
    for (int i = 0; i < numheaders; ++i) {
        String8 key8(keys[i]);
        String8 value8(values[i]);
        headers.add(key8, value8);
    }

    status_t err;
    err = mData->mImpl->setDataSource(httpService, uri, numheaders > 0 ? &headers : NULL);
    env->ExceptionClear();
    return translate_error(err);
}
+21 −1
Original line number Diff line number Diff line
@@ -72,7 +72,27 @@ media_status_t AMediaExtractor_setDataSourceFd(AMediaExtractor*, int fd, off64_t
 */
media_status_t AMediaExtractor_setDataSource(AMediaExtractor*,
        const char *location) __INTRODUCED_IN(21);
        // TODO support headers

#if __ANDROID_API__ >= 29
/**
 * Set the |uri| from which the extractor will read,
 * plus additional http headers when initiating the request.
 *
 * Headers will contain corresponding items from |keys| & |values|
 * from indices 0 (inclusive) to numheaders-1 (inclusive):
 *
 * keys[0]:values[0]
 * ...
 * keys[numheaders - 1]:values[numheaders - 1]
 *
 */
media_status_t AMediaExtractor_setDataSourceWithHeaders(AMediaExtractor*,
        const char *uri,
        int numheaders,
        const char * const *keys,
        const char * const *values) __INTRODUCED_IN(29);

#endif /* __ANDROID_API__ >= 29 */

#if __ANDROID_API__ >= 28

+1 −0
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ LIBMEDIANDK {
    AMediaExtractor_setDataSource;
    AMediaExtractor_setDataSourceCustom; # introduced=28
    AMediaExtractor_setDataSourceFd;
    AMediaExtractor_setDataSourceWithHeaders; # introduced=29
    AMediaExtractor_unselectTrack;
    AMediaFormat_delete;
    AMediaFormat_getBuffer;