Loading media/java/android/media/CallbackDataSourceDesc.java +14 −14 Original line number Diff line number Diff line Loading @@ -31,18 +31,18 @@ import android.annotation.NonNull; * */ public class CallbackDataSourceDesc extends DataSourceDesc { private Media2DataSource mMedia2DataSource; private DataSourceCallback mDataSourceCallback; private CallbackDataSourceDesc() { } /** * Return the Media2DataSource of this data source. * Return the DataSourceCallback of this data source. * It's meaningful only when {@code getType} returns {@link #TYPE_CALLBACK}. * @return the Media2DataSource of this data source * @return the DataSourceCallback of this data source */ public Media2DataSource getMedia2DataSource() { return mMedia2DataSource; public DataSourceCallback getDataSourceCallback() { return mDataSourceCallback; } /** Loading @@ -60,7 +60,7 @@ public class CallbackDataSourceDesc extends DataSourceDesc { * </pre> */ public static class Builder extends BuilderBase<Builder> { private Media2DataSource mMedia2DataSource; private DataSourceCallback mDataSourceCallback; /** * Constructs a new Builder with the defaults. Loading @@ -79,7 +79,7 @@ public class CallbackDataSourceDesc extends DataSourceDesc { if (dsd == null) { return; // use default } mMedia2DataSource = dsd.mMedia2DataSource; mDataSourceCallback = dsd.mDataSourceCallback; } /** Loading @@ -92,21 +92,21 @@ public class CallbackDataSourceDesc extends DataSourceDesc { public @NonNull CallbackDataSourceDesc build() { CallbackDataSourceDesc dsd = new CallbackDataSourceDesc(); super.build(dsd); dsd.mMedia2DataSource = mMedia2DataSource; dsd.mDataSourceCallback = mDataSourceCallback; return dsd; } /** * Sets the data source (Media2DataSource) to use. * Sets the data source (DataSourceCallback) to use. * * @param m2ds the Media2DataSource for the media to play * @param dscb the DataSourceCallback for the media to play * @return the same Builder instance. * @throws NullPointerException if m2ds is null. * @throws NullPointerException if dscb is null. */ public @NonNull Builder setDataSource(@NonNull Media2DataSource m2ds) { Media2Utils.checkArgument(m2ds != null, "data source cannot be null."); mMedia2DataSource = m2ds; public @NonNull Builder setDataSource(@NonNull DataSourceCallback dscb) { Media2Utils.checkArgument(dscb != null, "data source cannot be null."); mDataSourceCallback = dscb; return this; } } Loading media/java/android/media/Media2DataSource.java→media/java/android/media/DataSourceCallback.java +3 −3 Original line number Diff line number Diff line Loading @@ -27,12 +27,12 @@ import java.io.IOException; * * <p class="note">Methods of this interface may be called on multiple different * threads. There will be a thread synchronization point between each call to ensure that * modifications to the state of your Media2DataSource are visible to future calls. This means * modifications to the state of your DataSourceCallback are visible to future calls. This means * you don't need to do your own synchronization unless you're modifying the * Media2DataSource from another thread while it's being used by the framework.</p> * DataSourceCallback from another thread while it's being used by the framework.</p> * */ public abstract class Media2DataSource implements Closeable { public abstract class DataSourceCallback implements Closeable { /** * Called to request data from the given position. * Loading media/java/android/media/MediaPlayer2.java +4 −4 Original line number Diff line number Diff line Loading @@ -805,7 +805,7 @@ public class MediaPlayer2 implements AutoCloseable CallbackDataSourceDesc cbDSD = (CallbackDataSourceDesc) dsd; handleDataSource(isCurrent, srcId, cbDSD.getMedia2DataSource(), cbDSD.getDataSourceCallback(), cbDSD.getStartPosition(), cbDSD.getEndPosition()); } else if (dsd instanceof FileDataSourceDesc) { Loading Loading @@ -1007,15 +1007,15 @@ public class MediaPlayer2 implements AutoCloseable /** * @throws IllegalStateException if it is called in an invalid state * @throws IllegalArgumentException if dataSource is not a valid Media2DataSource * @throws IllegalArgumentException if dataSource is not a valid DataSourceCallback */ private void handleDataSource(boolean isCurrent, long srcId, Media2DataSource dataSource, private void handleDataSource(boolean isCurrent, long srcId, DataSourceCallback dataSource, long startPos, long endPos) { nativeHandleDataSourceCallback(isCurrent, srcId, dataSource, startPos, endPos); } private native void nativeHandleDataSourceCallback( boolean isCurrent, long srcId, Media2DataSource dataSource, boolean isCurrent, long srcId, DataSourceCallback dataSource, long startPos, long endPos); // return true if there is a next data source, false otherwise. Loading media/jni/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ cc_library_shared { name: "libmedia2_jni", srcs: [ "android_media_Media2DataSource.cpp", "android_media_DataSourceCallback.cpp", "android_media_MediaMetricsJNI.cpp", "android_media_MediaPlayer2.cpp", "android_media_SyncParams.cpp", Loading media/jni/android_media_Media2DataSource.cpp→media/jni/android_media_DataSourceCallback.cpp +18 −18 Original line number Diff line number Diff line Loading @@ -15,10 +15,10 @@ */ //#define LOG_NDEBUG 0 #define LOG_TAG "JMedia2DataSource-JNI" #define LOG_TAG "JDataSourceCallback-JNI" #include <utils/Log.h> #include "android_media_Media2DataSource.h" #include "android_media_DataSourceCallback.h" #include "log/log.h" #include "jni.h" Loading @@ -33,14 +33,14 @@ namespace android { static const size_t kBufferSize = 64 * 1024; JMedia2DataSource::JMedia2DataSource(JNIEnv* env, jobject source) JDataSourceCallback::JDataSourceCallback(JNIEnv* env, jobject source) : mJavaObjStatus(OK), mSizeIsCached(false), mCachedSize(0) { mMedia2DataSourceObj = env->NewGlobalRef(source); CHECK(mMedia2DataSourceObj != NULL); mDataSourceCallbackObj = env->NewGlobalRef(source); CHECK(mDataSourceCallbackObj != NULL); ScopedLocalRef<jclass> media2DataSourceClass(env, env->GetObjectClass(mMedia2DataSourceObj)); ScopedLocalRef<jclass> media2DataSourceClass(env, env->GetObjectClass(mDataSourceCallbackObj)); CHECK(media2DataSourceClass.get() != NULL); mReadAtMethod = env->GetMethodID(media2DataSourceClass.get(), "readAt", "(J[BII)I"); Loading @@ -55,17 +55,17 @@ JMedia2DataSource::JMedia2DataSource(JNIEnv* env, jobject source) CHECK(mByteArrayObj != NULL); } JMedia2DataSource::~JMedia2DataSource() { JDataSourceCallback::~JDataSourceCallback() { JNIEnv* env = JavaVMHelper::getJNIEnv(); env->DeleteGlobalRef(mMedia2DataSourceObj); env->DeleteGlobalRef(mDataSourceCallbackObj); env->DeleteGlobalRef(mByteArrayObj); } status_t JMedia2DataSource::initCheck() const { status_t JDataSourceCallback::initCheck() const { return OK; } ssize_t JMedia2DataSource::readAt(off64_t offset, void *data, size_t size) { ssize_t JDataSourceCallback::readAt(off64_t offset, void *data, size_t size) { Mutex::Autolock lock(mLock); if (mJavaObjStatus != OK) { Loading @@ -76,7 +76,7 @@ ssize_t JMedia2DataSource::readAt(off64_t offset, void *data, size_t size) { } JNIEnv* env = JavaVMHelper::getJNIEnv(); jint numread = env->CallIntMethod(mMedia2DataSourceObj, mReadAtMethod, jint numread = env->CallIntMethod(mDataSourceCallbackObj, mReadAtMethod, (jlong)offset, mByteArrayObj, (jint)0, (jint)size); if (env->ExceptionCheck()) { ALOGW("An exception occurred in readAt()"); Loading Loading @@ -106,7 +106,7 @@ ssize_t JMedia2DataSource::readAt(off64_t offset, void *data, size_t size) { return numread; } status_t JMedia2DataSource::getSize(off64_t* size) { status_t JDataSourceCallback::getSize(off64_t* size) { Mutex::Autolock lock(mLock); if (mJavaObjStatus != OK) { Loading @@ -118,7 +118,7 @@ status_t JMedia2DataSource::getSize(off64_t* size) { } JNIEnv* env = JavaVMHelper::getJNIEnv(); *size = env->CallLongMethod(mMedia2DataSourceObj, mGetSizeMethod); *size = env->CallLongMethod(mDataSourceCallbackObj, mGetSizeMethod); if (env->ExceptionCheck()) { ALOGW("An exception occurred in getSize()"); jniLogException(env, ANDROID_LOG_WARN, LOG_TAG); Loading @@ -139,20 +139,20 @@ status_t JMedia2DataSource::getSize(off64_t* size) { return OK; } void JMedia2DataSource::close() { void JDataSourceCallback::close() { Mutex::Autolock lock(mLock); JNIEnv* env = JavaVMHelper::getJNIEnv(); env->CallVoidMethod(mMedia2DataSourceObj, mCloseMethod); env->CallVoidMethod(mDataSourceCallbackObj, mCloseMethod); // The closed state is effectively the same as an error state. mJavaObjStatus = UNKNOWN_ERROR; } String8 JMedia2DataSource::toString() { return String8::format("JMedia2DataSource(pid %d, uid %d)", getpid(), getuid()); String8 JDataSourceCallback::toString() { return String8::format("JDataSourceCallback(pid %d, uid %d)", getpid(), getuid()); } String8 JMedia2DataSource::getMIMEType() const { String8 JDataSourceCallback::getMIMEType() const { return String8("application/octet-stream"); } Loading Loading
media/java/android/media/CallbackDataSourceDesc.java +14 −14 Original line number Diff line number Diff line Loading @@ -31,18 +31,18 @@ import android.annotation.NonNull; * */ public class CallbackDataSourceDesc extends DataSourceDesc { private Media2DataSource mMedia2DataSource; private DataSourceCallback mDataSourceCallback; private CallbackDataSourceDesc() { } /** * Return the Media2DataSource of this data source. * Return the DataSourceCallback of this data source. * It's meaningful only when {@code getType} returns {@link #TYPE_CALLBACK}. * @return the Media2DataSource of this data source * @return the DataSourceCallback of this data source */ public Media2DataSource getMedia2DataSource() { return mMedia2DataSource; public DataSourceCallback getDataSourceCallback() { return mDataSourceCallback; } /** Loading @@ -60,7 +60,7 @@ public class CallbackDataSourceDesc extends DataSourceDesc { * </pre> */ public static class Builder extends BuilderBase<Builder> { private Media2DataSource mMedia2DataSource; private DataSourceCallback mDataSourceCallback; /** * Constructs a new Builder with the defaults. Loading @@ -79,7 +79,7 @@ public class CallbackDataSourceDesc extends DataSourceDesc { if (dsd == null) { return; // use default } mMedia2DataSource = dsd.mMedia2DataSource; mDataSourceCallback = dsd.mDataSourceCallback; } /** Loading @@ -92,21 +92,21 @@ public class CallbackDataSourceDesc extends DataSourceDesc { public @NonNull CallbackDataSourceDesc build() { CallbackDataSourceDesc dsd = new CallbackDataSourceDesc(); super.build(dsd); dsd.mMedia2DataSource = mMedia2DataSource; dsd.mDataSourceCallback = mDataSourceCallback; return dsd; } /** * Sets the data source (Media2DataSource) to use. * Sets the data source (DataSourceCallback) to use. * * @param m2ds the Media2DataSource for the media to play * @param dscb the DataSourceCallback for the media to play * @return the same Builder instance. * @throws NullPointerException if m2ds is null. * @throws NullPointerException if dscb is null. */ public @NonNull Builder setDataSource(@NonNull Media2DataSource m2ds) { Media2Utils.checkArgument(m2ds != null, "data source cannot be null."); mMedia2DataSource = m2ds; public @NonNull Builder setDataSource(@NonNull DataSourceCallback dscb) { Media2Utils.checkArgument(dscb != null, "data source cannot be null."); mDataSourceCallback = dscb; return this; } } Loading
media/java/android/media/Media2DataSource.java→media/java/android/media/DataSourceCallback.java +3 −3 Original line number Diff line number Diff line Loading @@ -27,12 +27,12 @@ import java.io.IOException; * * <p class="note">Methods of this interface may be called on multiple different * threads. There will be a thread synchronization point between each call to ensure that * modifications to the state of your Media2DataSource are visible to future calls. This means * modifications to the state of your DataSourceCallback are visible to future calls. This means * you don't need to do your own synchronization unless you're modifying the * Media2DataSource from another thread while it's being used by the framework.</p> * DataSourceCallback from another thread while it's being used by the framework.</p> * */ public abstract class Media2DataSource implements Closeable { public abstract class DataSourceCallback implements Closeable { /** * Called to request data from the given position. * Loading
media/java/android/media/MediaPlayer2.java +4 −4 Original line number Diff line number Diff line Loading @@ -805,7 +805,7 @@ public class MediaPlayer2 implements AutoCloseable CallbackDataSourceDesc cbDSD = (CallbackDataSourceDesc) dsd; handleDataSource(isCurrent, srcId, cbDSD.getMedia2DataSource(), cbDSD.getDataSourceCallback(), cbDSD.getStartPosition(), cbDSD.getEndPosition()); } else if (dsd instanceof FileDataSourceDesc) { Loading Loading @@ -1007,15 +1007,15 @@ public class MediaPlayer2 implements AutoCloseable /** * @throws IllegalStateException if it is called in an invalid state * @throws IllegalArgumentException if dataSource is not a valid Media2DataSource * @throws IllegalArgumentException if dataSource is not a valid DataSourceCallback */ private void handleDataSource(boolean isCurrent, long srcId, Media2DataSource dataSource, private void handleDataSource(boolean isCurrent, long srcId, DataSourceCallback dataSource, long startPos, long endPos) { nativeHandleDataSourceCallback(isCurrent, srcId, dataSource, startPos, endPos); } private native void nativeHandleDataSourceCallback( boolean isCurrent, long srcId, Media2DataSource dataSource, boolean isCurrent, long srcId, DataSourceCallback dataSource, long startPos, long endPos); // return true if there is a next data source, false otherwise. Loading
media/jni/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ cc_library_shared { name: "libmedia2_jni", srcs: [ "android_media_Media2DataSource.cpp", "android_media_DataSourceCallback.cpp", "android_media_MediaMetricsJNI.cpp", "android_media_MediaPlayer2.cpp", "android_media_SyncParams.cpp", Loading
media/jni/android_media_Media2DataSource.cpp→media/jni/android_media_DataSourceCallback.cpp +18 −18 Original line number Diff line number Diff line Loading @@ -15,10 +15,10 @@ */ //#define LOG_NDEBUG 0 #define LOG_TAG "JMedia2DataSource-JNI" #define LOG_TAG "JDataSourceCallback-JNI" #include <utils/Log.h> #include "android_media_Media2DataSource.h" #include "android_media_DataSourceCallback.h" #include "log/log.h" #include "jni.h" Loading @@ -33,14 +33,14 @@ namespace android { static const size_t kBufferSize = 64 * 1024; JMedia2DataSource::JMedia2DataSource(JNIEnv* env, jobject source) JDataSourceCallback::JDataSourceCallback(JNIEnv* env, jobject source) : mJavaObjStatus(OK), mSizeIsCached(false), mCachedSize(0) { mMedia2DataSourceObj = env->NewGlobalRef(source); CHECK(mMedia2DataSourceObj != NULL); mDataSourceCallbackObj = env->NewGlobalRef(source); CHECK(mDataSourceCallbackObj != NULL); ScopedLocalRef<jclass> media2DataSourceClass(env, env->GetObjectClass(mMedia2DataSourceObj)); ScopedLocalRef<jclass> media2DataSourceClass(env, env->GetObjectClass(mDataSourceCallbackObj)); CHECK(media2DataSourceClass.get() != NULL); mReadAtMethod = env->GetMethodID(media2DataSourceClass.get(), "readAt", "(J[BII)I"); Loading @@ -55,17 +55,17 @@ JMedia2DataSource::JMedia2DataSource(JNIEnv* env, jobject source) CHECK(mByteArrayObj != NULL); } JMedia2DataSource::~JMedia2DataSource() { JDataSourceCallback::~JDataSourceCallback() { JNIEnv* env = JavaVMHelper::getJNIEnv(); env->DeleteGlobalRef(mMedia2DataSourceObj); env->DeleteGlobalRef(mDataSourceCallbackObj); env->DeleteGlobalRef(mByteArrayObj); } status_t JMedia2DataSource::initCheck() const { status_t JDataSourceCallback::initCheck() const { return OK; } ssize_t JMedia2DataSource::readAt(off64_t offset, void *data, size_t size) { ssize_t JDataSourceCallback::readAt(off64_t offset, void *data, size_t size) { Mutex::Autolock lock(mLock); if (mJavaObjStatus != OK) { Loading @@ -76,7 +76,7 @@ ssize_t JMedia2DataSource::readAt(off64_t offset, void *data, size_t size) { } JNIEnv* env = JavaVMHelper::getJNIEnv(); jint numread = env->CallIntMethod(mMedia2DataSourceObj, mReadAtMethod, jint numread = env->CallIntMethod(mDataSourceCallbackObj, mReadAtMethod, (jlong)offset, mByteArrayObj, (jint)0, (jint)size); if (env->ExceptionCheck()) { ALOGW("An exception occurred in readAt()"); Loading Loading @@ -106,7 +106,7 @@ ssize_t JMedia2DataSource::readAt(off64_t offset, void *data, size_t size) { return numread; } status_t JMedia2DataSource::getSize(off64_t* size) { status_t JDataSourceCallback::getSize(off64_t* size) { Mutex::Autolock lock(mLock); if (mJavaObjStatus != OK) { Loading @@ -118,7 +118,7 @@ status_t JMedia2DataSource::getSize(off64_t* size) { } JNIEnv* env = JavaVMHelper::getJNIEnv(); *size = env->CallLongMethod(mMedia2DataSourceObj, mGetSizeMethod); *size = env->CallLongMethod(mDataSourceCallbackObj, mGetSizeMethod); if (env->ExceptionCheck()) { ALOGW("An exception occurred in getSize()"); jniLogException(env, ANDROID_LOG_WARN, LOG_TAG); Loading @@ -139,20 +139,20 @@ status_t JMedia2DataSource::getSize(off64_t* size) { return OK; } void JMedia2DataSource::close() { void JDataSourceCallback::close() { Mutex::Autolock lock(mLock); JNIEnv* env = JavaVMHelper::getJNIEnv(); env->CallVoidMethod(mMedia2DataSourceObj, mCloseMethod); env->CallVoidMethod(mDataSourceCallbackObj, mCloseMethod); // The closed state is effectively the same as an error state. mJavaObjStatus = UNKNOWN_ERROR; } String8 JMedia2DataSource::toString() { return String8::format("JMedia2DataSource(pid %d, uid %d)", getpid(), getuid()); String8 JDataSourceCallback::toString() { return String8::format("JDataSourceCallback(pid %d, uid %d)", getpid(), getuid()); } String8 JMedia2DataSource::getMIMEType() const { String8 JDataSourceCallback::getMIMEType() const { return String8("application/octet-stream"); } Loading