Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfb9fb14 authored by Andreas Huber's avatar Andreas Huber
Browse files

Refactor MediaScanner. Some steps on the way towards being able to build the tree without OpenCore.

parent d345c6ac
Loading
Loading
Loading
Loading
+27 −20
Original line number Diff line number Diff line
@@ -28,33 +28,40 @@ namespace android {
class MediaScannerClient;
class StringArray;

class MediaScanner 
{
public:
struct MediaScanner {
    MediaScanner();
    ~MediaScanner();
    virtual ~MediaScanner();

    virtual status_t processFile(
            const char *path, const char *mimeType,
            MediaScannerClient &client) = 0;

    typedef bool (*ExceptionCheck)(void* env);
    virtual status_t processDirectory(
            const char *path, const char *extensions,
            MediaScannerClient &client,
            ExceptionCheck exceptionCheck, void *exceptionEnv);

    status_t processFile(const char *path, const char *mimeType, MediaScannerClient& client);
    status_t processDirectory(const char *path, const char* extensions, 
            MediaScannerClient& client, ExceptionCheck exceptionCheck, void* exceptionEnv);
    void setLocale(const char *locale);

    // extracts album art as a block of data
    char* extractAlbumArt(int fd);
    virtual char *extractAlbumArt(int fd) = 0;

    static void uninitializeForThread();
protected:
    const char *locale() const;

private:
    status_t doProcessDirectory(char *path, int pathRemaining, const char* extensions, 
            MediaScannerClient& client, ExceptionCheck exceptionCheck, void* exceptionEnv);
    void initializeForThread();
    
    // current locale (like "ja_JP"), created/destroyed with strdup()/free()
    char *mLocale;
};

    status_t doProcessDirectory(
            char *path, int pathRemaining, const char *extensions,
            MediaScannerClient &client, ExceptionCheck exceptionCheck,
            void *exceptionEnv);

    MediaScanner(const MediaScanner &);
    MediaScanner &operator=(const MediaScanner &);
};

class MediaScannerClient
{
+12 −5
Original line number Diff line number Diff line
ifneq ($(BUILD_WITHOUT_PV),true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

@@ -7,12 +6,9 @@ LOCAL_SRC_FILES:= \
    android_media_MediaRecorder.cpp \
    android_media_MediaScanner.cpp \
    android_media_MediaMetadataRetriever.cpp \
    android_media_AmrInputStream.cpp \
    android_media_ResampleInputStream.cpp

LOCAL_SHARED_LIBRARIES := \
    libopencore_player \
    libomx_amrenc_sharedlibrary \
    libandroid_runtime \
    libnativehelper \
    libutils \
@@ -21,11 +17,23 @@ LOCAL_SHARED_LIBRARIES := \
    libskia \
    libui

ifneq ($(BUILD_WITHOUT_PV),true)
LOCAL_SRC_FILES += \
    android_media_AmrInputStream.cpp

LOCAL_SHARED_LIBRARIES += \
    libopencore_player          \
    libomx_amrenc_sharedlibrary
else
    LOCAL_CFLAGS += -DNO_OPENCORE
endif

LOCAL_STATIC_LIBRARIES :=

LOCAL_C_INCLUDES += \
    external/tremor/Tremor \
    frameworks/base/core/jni \
    frameworks/base/media/libmedia \
    $(PV_INCLUDES) \
    $(JNI_H_INCLUDE) \
    $(call include-path-for, corecg graphics)
@@ -40,4 +48,3 @@ include $(BUILD_SHARED_LIBRARY)

# build libsoundpool.so
include $(LOCAL_PATH)/soundpool/Android.mk
endif
+7 −2
Original line number Diff line number Diff line
@@ -648,12 +648,15 @@ static int register_android_media_MediaPlayer(JNIEnv *env)
                "android/media/MediaPlayer", gMethods, NELEM(gMethods));
}

extern int register_android_media_MediaMetadataRetriever(JNIEnv *env);
extern int register_android_media_MediaRecorder(JNIEnv *env);
extern int register_android_media_MediaScanner(JNIEnv *env);
extern int register_android_media_MediaMetadataRetriever(JNIEnv *env);
extern int register_android_media_AmrInputStream(JNIEnv *env);
extern int register_android_media_ResampleInputStream(JNIEnv *env);

#ifndef NO_OPENCORE
extern int register_android_media_AmrInputStream(JNIEnv *env);
#endif

jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
    JNIEnv* env = NULL;
@@ -685,10 +688,12 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved)
        goto bail;
    }

#ifndef NO_OPENCORE
    if (register_android_media_AmrInputStream(env) < 0) {
        LOGE("ERROR: AmrInputStream native registration failed\n");
        goto bail;
    }
#endif

    if (register_android_media_ResampleInputStream(env) < 0) {
        LOGE("ERROR: ResampleInputStream native registration failed\n");
+11 −1
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@
#include "JNIHelp.h"
#include "android_runtime/AndroidRuntime.h"

#ifndef NO_OPENCORE
#include "pvmediascanner.h"
#else
#include "StagefrightMediaScanner.h"
#endif

// ----------------------------------------------------------------------------

@@ -281,7 +286,12 @@ android_media_MediaScanner_native_init(JNIEnv *env)
static void
android_media_MediaScanner_native_setup(JNIEnv *env, jobject thiz)
{
    MediaScanner *mp = new MediaScanner();
#ifndef NO_OPENCORE
    MediaScanner *mp = new PVMediaScanner();
#else
    MediaScanner *mp = new StagefrightMediaScanner();
#endif

    if (mp == NULL) {
        jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
        return;
+12 −3
Original line number Diff line number Diff line
@@ -21,10 +21,18 @@ LOCAL_SRC_FILES:= \
    ToneGenerator.cpp \
    JetPlayer.cpp \
    IOMX.cpp \
 	IAudioPolicyService.cpp
    IAudioPolicyService.cpp \
    MediaScanner.cpp \
    MediaScannerClient.cpp \
    autodetect.cpp

ifneq ($(BUILD_WITHOUT_PV),true)
else
LOCAL_SRC_FILES += StagefrightMediaScanner.cpp
endif

LOCAL_SHARED_LIBRARIES := \
	libui libcutils libutils libbinder libsonivox
	libui libcutils libutils libbinder libsonivox libicuuc

LOCAL_MODULE:= libmedia

@@ -41,7 +49,8 @@ LOCAL_C_INCLUDES := \
    $(call include-path-for, graphics corecg) \
        $(TOP)/external/opencore/extern_libs_v2/khronos/openmax/include \
        external/speex/include \
        external/speex/libspeex
        external/speex/libspeex \
        external/icu4c/common

LOCAL_STATIC_LIBRARIES := libspeex

Loading