NdkMediaExtractor: setDataSourceWithHeaders API
Bug: 109928575
Change-Id: I90e9f6c9d6408f5c577ba75c9792bed589cee304
diff --git a/media/ndk/NdkMediaExtractor.cpp b/media/ndk/NdkMediaExtractor.cpp
index b5e60a4..fa1292e 100644
--- a/media/ndk/NdkMediaExtractor.cpp
+++ b/media/ndk/NdkMediaExtractor.cpp
@@ -84,8 +84,17 @@
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 @@
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 @@
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);
}