ndk data source: add close API
Bug: 63934228
Change-Id: I4d5f0d6d6bee22d9ef61b85343beffa9e8bd5e74
diff --git a/media/ndk/NdkMediaDataSource.cpp b/media/ndk/NdkMediaDataSource.cpp
index 0cae6f4..f190f80 100644
--- a/media/ndk/NdkMediaDataSource.cpp
+++ b/media/ndk/NdkMediaDataSource.cpp
@@ -40,6 +40,7 @@
void *userdata;
AMediaDataSourceReadAt readAt;
AMediaDataSourceGetSize getSize;
+ AMediaDataSourceClose close;
};
NdkDataSource::NdkDataSource(AMediaDataSource *dataSource)
@@ -77,6 +78,12 @@
return String8("application/octet-stream");
}
+void NdkDataSource::close() {
+ if (mDataSource->close != NULL && mDataSource->userdata != NULL) {
+ mDataSource->close(mDataSource->userdata);
+ }
+}
+
extern "C" {
EXPORT
@@ -85,6 +92,7 @@
mSource->userdata = NULL;
mSource->readAt = NULL;
mSource->getSize = NULL;
+ mSource->close = NULL;
return mSource;
}
@@ -111,5 +119,10 @@
mSource->getSize = getSize;
}
+EXPORT
+void AMediaDataSource_setClose(AMediaDataSource *mSource, AMediaDataSourceClose close) {
+ mSource->close = close;
+}
+
} // extern "C"
diff --git a/media/ndk/NdkMediaDataSourcePriv.h b/media/ndk/NdkMediaDataSourcePriv.h
index a1cb331..65ddd2a 100644
--- a/media/ndk/NdkMediaDataSourcePriv.h
+++ b/media/ndk/NdkMediaDataSourcePriv.h
@@ -47,6 +47,7 @@
virtual status_t getSize(off64_t *);
virtual String8 toString();
virtual String8 getMIMEType() const;
+ virtual void close();
private:
diff --git a/media/ndk/include/media/NdkMediaDataSource.h b/media/ndk/include/media/NdkMediaDataSource.h
index 752b684..9e2e351 100644
--- a/media/ndk/include/media/NdkMediaDataSource.h
+++ b/media/ndk/include/media/NdkMediaDataSource.h
@@ -74,6 +74,13 @@
typedef ssize_t (*AMediaDataSourceGetSize)(void *userdata);
/**
+ * Called to close the data source and release associated resources.
+ * The NDK media framework guarantees that after |close| is called
+ * no future callbacks will be invoked on the data source.
+ */
+typedef void (*AMediaDataSourceClose)(void *userdata);
+
+/**
* Create new media data source. Returns NULL if memory allocation
* for the new data source object fails.
*/
@@ -117,6 +124,17 @@
AMediaDataSource*,
AMediaDataSourceGetSize);
+/**
+ * Set a custom callback to receive signal from the NDK media framework
+ * when the data source is closed.
+ *
+ * Please refer to the definition of AMediaDataSourceClose for
+ * additional details.
+ */
+void AMediaDataSource_setClose(
+ AMediaDataSource*,
+ AMediaDataSourceClose);
+
#endif /*__ANDROID_API__ >= 28 */
__END_DECLS
diff --git a/media/ndk/libmediandk.map.txt b/media/ndk/libmediandk.map.txt
index 37c557a..17c1a0d 100644
--- a/media/ndk/libmediandk.map.txt
+++ b/media/ndk/libmediandk.map.txt
@@ -125,6 +125,7 @@
AMediaCrypto_requiresSecureDecoderComponent;
AMediaDataSource_delete; # introduced=28
AMediaDataSource_new; # introduced=28
+ AMediaDataSource_setClose; # introduced=28
AMediaDataSource_setGetSize; # introduced=28
AMediaDataSource_setReadAt; # introduced=28
AMediaDataSource_setUserdata; # introduced=28