mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-04-28 12:17:57 +03:00
implement MediaMetadataRetriever on top of MediaPlayer
also add MediaPlayer.getDuration() and MediaPlayer.getCurrentPosition()
This commit is contained in:
parent
49fa854c93
commit
7985381b60
5 changed files with 80 additions and 0 deletions
|
@ -39,6 +39,22 @@ JNIEXPORT void JNICALL Java_android_media_MediaPlayer_native_1setOnCompletionLis
|
||||||
JNIEXPORT void JNICALL Java_android_media_MediaPlayer_native_1start
|
JNIEXPORT void JNICALL Java_android_media_MediaPlayer_native_1start
|
||||||
(JNIEnv *, jclass, jlong);
|
(JNIEnv *, jclass, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: android_media_MediaPlayer
|
||||||
|
* Method: native_getDuration
|
||||||
|
* Signature: (J)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_android_media_MediaPlayer_native_1getDuration
|
||||||
|
(JNIEnv *, jclass, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: android_media_MediaPlayer
|
||||||
|
* Method: native_getCurrentPosition
|
||||||
|
* Signature: (J)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_android_media_MediaPlayer_native_1getCurrentPosition
|
||||||
|
(JNIEnv *, jclass, jlong);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -56,3 +56,19 @@ JNIEXPORT void JNICALL Java_android_media_MediaPlayer_native_1start(JNIEnv *env,
|
||||||
gtk_media_stream_set_volume(media_stream, 1.0);
|
gtk_media_stream_set_volume(media_stream, 1.0);
|
||||||
gtk_media_stream_play(media_stream);
|
gtk_media_stream_play(media_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_android_media_MediaPlayer_native_1getDuration(JNIEnv *env, jclass this, jlong media_stream_ptr)
|
||||||
|
{
|
||||||
|
GtkMediaStream *media_stream = _PTR(media_stream_ptr);
|
||||||
|
|
||||||
|
// convert from microseconds to milliseconds
|
||||||
|
return gtk_media_stream_get_duration(media_stream) / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_android_media_MediaPlayer_native_1getCurrentPosition(JNIEnv *env, jclass this, jlong media_stream_ptr)
|
||||||
|
{
|
||||||
|
GtkMediaStream *media_stream = _PTR(media_stream_ptr);
|
||||||
|
|
||||||
|
// convert from microseconds to milliseconds
|
||||||
|
return gtk_media_stream_get_timestamp(media_stream) / 1000;
|
||||||
|
}
|
||||||
|
|
37
src/api-impl/android/media/MediaMetadataRetriever.java
Normal file
37
src/api-impl/android/media/MediaMetadataRetriever.java
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
package android.media;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
|
public class MediaMetadataRetriever {
|
||||||
|
|
||||||
|
private MediaPlayer mediaPlayer;
|
||||||
|
|
||||||
|
public void release() {
|
||||||
|
if (mediaPlayer != null)
|
||||||
|
mediaPlayer.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataSource(Context context, Uri uri) {
|
||||||
|
mediaPlayer = new MediaPlayer();
|
||||||
|
mediaPlayer.setDataSource(uri.getPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataSource(String path) {
|
||||||
|
mediaPlayer = new MediaPlayer();
|
||||||
|
mediaPlayer.setDataSource(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getEmbeddedPicture() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String extractMetadata(int key) {
|
||||||
|
switch (key) {
|
||||||
|
case 9/*METADATA_KEY_DURATION*/:
|
||||||
|
return String.valueOf(mediaPlayer.getDuration());
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -68,8 +68,18 @@ public class MediaPlayer {
|
||||||
|
|
||||||
public void setVolume(float leftVolume, float rightVolume) {}
|
public void setVolume(float leftVolume, float rightVolume) {}
|
||||||
|
|
||||||
|
public int getDuration() {
|
||||||
|
return native_getDuration(gtk_media_stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCurrentPosition() {
|
||||||
|
return native_getCurrentPosition(gtk_media_stream);
|
||||||
|
}
|
||||||
|
|
||||||
public static native void native_prepare(long gtk_media_stream);
|
public static native void native_prepare(long gtk_media_stream);
|
||||||
public native long native_setDataSource(String path);
|
public native long native_setDataSource(String path);
|
||||||
public static native void native_setOnCompletionListener(long gtk_media_stream, MediaPlayer.OnCompletionListener listener);
|
public static native void native_setOnCompletionListener(long gtk_media_stream, MediaPlayer.OnCompletionListener listener);
|
||||||
public static native void native_start(long gtk_media_stream);
|
public static native void native_start(long gtk_media_stream);
|
||||||
|
public static native int native_getDuration(long gtk_media_stream);
|
||||||
|
public static native int native_getCurrentPosition(long gtk_media_stream);
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,6 +279,7 @@ srcs = [
|
||||||
'android/media/MediaDescription.java',
|
'android/media/MediaDescription.java',
|
||||||
'android/media/MediaFormat.java',
|
'android/media/MediaFormat.java',
|
||||||
'android/media/MediaMetadata.java',
|
'android/media/MediaMetadata.java',
|
||||||
|
'android/media/MediaMetadataRetriever.java',
|
||||||
'android/media/MediaPlayer.java',
|
'android/media/MediaPlayer.java',
|
||||||
'android/media/MediaRouter.java',
|
'android/media/MediaRouter.java',
|
||||||
'android/media/Ringtone.java',
|
'android/media/Ringtone.java',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue