AMediaDataSource: add getAvailableSize callback
Bug: 109928575
Test: android.media.cts.NativeDecoderTest#testExtractorCachedDurationNative
Change-Id: I77af46e58bd81bc24a8682d6d2a48646c5f13e8f
diff --git a/media/ndk/NdkMediaDataSource.cpp b/media/ndk/NdkMediaDataSource.cpp
index 75477b4..43c89bb 100644
--- a/media/ndk/NdkMediaDataSource.cpp
+++ b/media/ndk/NdkMediaDataSource.cpp
@@ -48,6 +48,7 @@
AMediaDataSourceReadAt readAt;
AMediaDataSourceGetSize getSize;
AMediaDataSourceClose close;
+ AMediaDataSourceGetAvailableSize getAvailableSize;
sp<DataSource> mImpl;
uint32_t mFlags;
};
@@ -107,6 +108,17 @@
}
}
+status_t NdkDataSource::getAvailableSize(off64_t offset, off64_t *sizeptr) {
+ off64_t size = -1;
+ if (mDataSource->getAvailableSize != NULL
+ && mDataSource->userdata != NULL
+ && sizeptr != NULL) {
+ size = mDataSource->getAvailableSize(mDataSource->userdata, offset);
+ *sizeptr = size;
+ }
+ return size >= 0 ? OK : UNKNOWN_ERROR;
+}
+
static sp<MediaHTTPService> createMediaHttpServiceFromJavaObj(JNIEnv *env, jobject obj, int version) {
if (obj == NULL) {
return NULL;
@@ -251,5 +263,11 @@
return mSource->close(mSource->userdata);
}
+EXPORT
+void AMediaDataSource_setGetAvailableSize(AMediaDataSource *mSource,
+ AMediaDataSourceGetAvailableSize getAvailableSize) {
+ mSource->getAvailableSize = getAvailableSize;
+}
+
} // extern "C"