From: Alessio Treglia Date: Fri, 10 Feb 2012 21:48:44 +0000 (+0100) Subject: Imported Upstream version 0.4.5+svn3462~dfsg0 X-Git-Tag: archive/raspbian/1.0.1+dfsg1-4+rpi1~1^2~15^2~25 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1bf6ce56d3c698db873e7b91a19a0f408fc74a64;p=gpac.git Imported Upstream version 0.4.5+svn3462~dfsg0 --- diff --git a/applications/mp4box/filedump.c b/applications/mp4box/filedump.c index 2d39a3d..0a17d6a 100644 --- a/applications/mp4box/filedump.c +++ b/applications/mp4box/filedump.c @@ -2139,7 +2139,8 @@ static void on_m2ts_dump_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) break; case GF_M2TS_EVT_PMT_FOUND: prog = (GF_M2TS_Program*)par; - if (prog->number != dumper->prog_number) break; + if (gf_list_count(ts->programs)>1 && prog->number!=dumper->prog_number) + break; if (index_info->start_indexing) { if (!index_info->first_pmt_position_valid) { index_info->first_pmt_position_valid = 1; @@ -2172,7 +2173,8 @@ static void on_m2ts_dump_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) break; case GF_M2TS_EVT_PMT_UPDATE: prog = (GF_M2TS_Program*)par; - if (prog->number != dumper->prog_number) break; + if (gf_list_count(ts->programs)>1 && prog->number!=dumper->prog_number) + break; fprintf(stdout, "Program list updated - %d streams\n", gf_list_count( ((GF_M2TS_Program*)par)->streams) ); if (index_info->start_indexing) { if (!index_info->first_pmt_position_valid) { @@ -2187,7 +2189,8 @@ static void on_m2ts_dump_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) break; case GF_M2TS_EVT_PMT_REPEAT: prog = (GF_M2TS_Program*)par; - if (prog->number != dumper->prog_number) break; + if (gf_list_count(ts->programs)>1 && prog->number!=dumper->prog_number) + break; if (index_info->start_indexing) { if (!index_info->first_pmt_position_valid) { index_info->first_pmt_position_valid = 1; @@ -2221,12 +2224,14 @@ static void on_m2ts_dump_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) break; case GF_M2TS_EVT_PES_TIMING: pck = par; - if (pck->stream->program->number != dumper->prog_number) break; + if (gf_list_count(ts->programs)>1 && pck->stream->program->number != dumper->prog_number) + break; break; case GF_M2TS_EVT_PES_PCK: pck = par; - if (pck->stream->program->number != dumper->prog_number) break; + if (gf_list_count(ts->programs)>1 && pck->stream->program->number != dumper->prog_number) + break; if (dumper->has_seen_pat) { if (dumper->timestamps_info_file) { GF_M2TS_PES *pes = pck->stream; @@ -2286,7 +2291,8 @@ static void on_m2ts_dump_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *par) break; case GF_M2TS_EVT_PES_PCR: pck = par; - if (pck->stream->program->number != dumper->prog_number) break; + if (gf_list_count(ts->programs)>1 && pck->stream->program->number != dumper->prog_number) + break; if (dumper->timestamps_info_file) { fprintf(dumper->timestamps_info_file, "%u\t%d\t%f\t\t\t\t%d\n", pck->stream->program->last_pcr_value_pck_number, pck->stream->pid, pck->PTS / (300*90000.0), (pck->flags & GF_M2TS_PES_PCK_DISCONTINUITY ? 1 : 0)); } diff --git a/applications/mp4box/fileimport.c b/applications/mp4box/fileimport.c index 4c8f456..b45d922 100644 --- a/applications/mp4box/fileimport.c +++ b/applications/mp4box/fileimport.c @@ -1319,6 +1319,8 @@ GF_Err cat_isomedia_file(GF_ISOFile *dest, char *fileName, u32 import_flags, Dou if (e) goto err_exit; gf_isom_clone_pl_indications(orig, dest); new_track = 1; + /*remove cloned edit list, as it will be rewritten after import*/ + gf_isom_remove_edit_segments(dest, dst_tk); } else { nb_edits = gf_isom_get_edit_segment_count(orig, i+1); } diff --git a/applications/mp4box/main.c b/applications/mp4box/main.c index b096daf..a0b0cc3 100644 --- a/applications/mp4box/main.c +++ b/applications/mp4box/main.c @@ -252,6 +252,7 @@ void PrintGeneralUsage() " Ignored if segments are stored in the output file.\n" " -daisy-chain Uses daisy-chain SIDX instead of hierarchical. Ignored if frags/sidx is 0.\n" " -dash-ctx FILE Stores/restore DASH timing from FILE.\n" + " -dash-ts-prog N program_number to be considered in case of an MPTS input file.\n" "\n"); } diff --git a/applications/mp4client/main.c b/applications/mp4client/main.c index 5861508..5de99c2 100644 --- a/applications/mp4client/main.c +++ b/applications/mp4client/main.c @@ -1135,7 +1135,7 @@ int main (int argc, char **argv) if (logfile) fclose(logfile); return 1; } - fprintf(stdout, "Modules Loaded (%d found in %s)\n", i, str); + fprintf(stdout, "Modules Found (%d in dir %s)\n", i, str); user.config = cfg_file; user.EventProc = GPAC_EventProc; @@ -1148,6 +1148,7 @@ int main (int argc, char **argv) if (threading_flags & (GF_TERM_NO_DECODER_THREAD|GF_TERM_NO_COMPOSITOR_THREAD) ) term_step = 1; fprintf(stdout, "Loading GPAC Terminal\n"); + i = gf_sys_clock(); term = gf_term_new(&user); if (!term) { fprintf(stdout, "\nInit error - check you have at least one video out and one rasterizer...\nFound modules:\n"); @@ -1158,7 +1159,7 @@ int main (int argc, char **argv) if (logfile) fclose(logfile); return 1; } - fprintf(stdout, "Terminal Loaded\n"); + fprintf(stdout, "Terminal Loaded in %d ms\n", gf_sys_clock()-i); if (dump_mode) { // gf_term_set_option(term, GF_OPT_VISIBLE, 0); @@ -1697,13 +1698,14 @@ force_input: } } + i = gf_sys_clock(); gf_term_disconnect(term); if (rti_file) UpdateRTInfo("Disconnected\n"); fprintf(stdout, "Deleting terminal... "); if (playlist) fclose(playlist); gf_term_del(term); - fprintf(stdout, "OK\n"); + fprintf(stdout, "done (in %d ms)\n", gf_sys_clock() - i); fprintf(stdout, "GPAC cleanup ...\n"); gf_modules_del(user.modules); @@ -1816,7 +1818,6 @@ void ViewOD(GF_Terminal *term, u32 OD_ID, u32 number) GF_MediaInfo odi; u32 i, j, count, d_enum,id; GF_Err e; - char code[5]; NetStatCommand com; GF_ObjectManager *odm, *root_odm = gf_term_get_root_object(term); if (!root_odm) return; @@ -1925,64 +1926,42 @@ void ViewOD(GF_Terminal *term, u32 OD_ID, u32 number) if (esd->dependsOnESID) fprintf(stdout, "\tDepends on Stream ID %d for decoding\n", esd->dependsOnESID); switch (esd->decoderConfig->streamType) { - case GF_STREAM_OD: fprintf(stdout, "\tOD Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - case GF_STREAM_OCR: fprintf(stdout, "\tOCR Stream\n"); break; - case GF_STREAM_SCENE: fprintf(stdout, "\tScene Description Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; + case GF_STREAM_OD: + fprintf(stdout, "\tOD Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + case GF_STREAM_OCR: + fprintf(stdout, "\tOCR Stream\n"); + break; + case GF_STREAM_SCENE: + fprintf(stdout, "\tScene Description Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; case GF_STREAM_VISUAL: - fprintf(stdout, "\tVisual Stream - media type: "); - switch (esd->decoderConfig->objectTypeIndication) { - case GPAC_OTI_VIDEO_MPEG4_PART2: fprintf(stdout, "MPEG-4\n"); break; - case GPAC_OTI_VIDEO_MPEG2_SIMPLE: fprintf(stdout, "MPEG-2 Simple Profile\n"); break; - case GPAC_OTI_VIDEO_MPEG2_MAIN: fprintf(stdout, "MPEG-2 Main Profile\n"); break; - case GPAC_OTI_VIDEO_MPEG2_SNR: fprintf(stdout, "MPEG-2 SNR Profile\n"); break; - case GPAC_OTI_VIDEO_MPEG2_SPATIAL: fprintf(stdout, "MPEG-2 Spatial Profile\n"); break; - case GPAC_OTI_VIDEO_MPEG2_HIGH: fprintf(stdout, "MPEG-2 High Profile\n"); break; - case GPAC_OTI_VIDEO_MPEG2_422: fprintf(stdout, "MPEG-2 422 Profile\n"); break; - case GPAC_OTI_VIDEO_MPEG1: fprintf(stdout, "MPEG-1\n"); break; - case GPAC_OTI_IMAGE_JPEG: fprintf(stdout, "JPEG\n"); break; - case GPAC_OTI_IMAGE_PNG: fprintf(stdout, "PNG\n"); break; - case GPAC_OTI_IMAGE_JPEG_2000: fprintf(stdout, "JPEG2000\n"); break; - - case GPAC_OTI_MEDIA_GENERIC: - memcpy(code, esd->decoderConfig->decoderSpecificInfo->data, 4); - code[4] = 0; - fprintf(stdout, "GPAC Intern (%s)\n", code); - break; - default: - fprintf(stdout, "Private Type (0x%x)\n", esd->decoderConfig->objectTypeIndication); - break; - } + fprintf(stdout, "\tVisual Stream - media type: %s", gf_esd_get_textual_description(esd)); break; - case GF_STREAM_AUDIO: - fprintf(stdout, "\tAudio Stream - media type: "); - switch (esd->decoderConfig->objectTypeIndication) { - case GPAC_OTI_AUDIO_AAC_MPEG4: fprintf(stdout, "MPEG-4\n"); break; - case GPAC_OTI_AUDIO_AAC_MPEG2_MP: fprintf(stdout, "MPEG-2 AAC Main Profile\n"); break; - case GPAC_OTI_AUDIO_AAC_MPEG2_LCP: fprintf(stdout, "MPEG-2 AAC LowComplexity Profile\n"); break; - case GPAC_OTI_AUDIO_AAC_MPEG2_SSRP: fprintf(stdout, "MPEG-2 AAC Scalable Sampling Rate Profile\n"); break; - case GPAC_OTI_AUDIO_MPEG2_PART3: fprintf(stdout, "MPEG-2 Audio\n"); break; - case GPAC_OTI_AUDIO_MPEG1: fprintf(stdout, "MPEG-1 Audio\n"); break; - case GPAC_OTI_AUDIO_EVRC_VOICE: fprintf(stdout, "EVRC Audio\n"); break; - case GPAC_OTI_AUDIO_SMV_VOICE: fprintf(stdout, "SMV Audio\n"); break; - case GPAC_OTI_AUDIO_13K_VOICE: fprintf(stdout, "QCELP Audio\n"); break; - case GPAC_OTI_MEDIA_GENERIC: - memcpy(code, esd->decoderConfig->decoderSpecificInfo->data, 4); - code[4] = 0; - fprintf(stdout, "GPAC Intern (%s)\n", code); - break; - default: - fprintf(stdout, "Private Type (0x%x)\n", esd->decoderConfig->objectTypeIndication); - break; - } + fprintf(stdout, "\tAudio Stream - media type: %s", gf_esd_get_textual_description(esd)); + break; + case GF_STREAM_MPEG7: + fprintf(stdout, "\tMPEG-7 Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + case GF_STREAM_IPMP: + fprintf(stdout, "\tIPMP Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + case GF_STREAM_OCI: + fprintf(stdout, "\tOCI Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + case GF_STREAM_MPEGJ: + fprintf(stdout, "\tMPEGJ Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + case GF_STREAM_INTERACT: + fprintf(stdout, "\tUser Interaction Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + case GF_STREAM_TEXT: + fprintf(stdout, "\tStreaming Text Stream - version %d\n", esd->decoderConfig->objectTypeIndication); + break; + default: + fprintf(stdout, "\tUnknown Stream\n"); break; - case GF_STREAM_MPEG7: fprintf(stdout, "\tMPEG-7 Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - case GF_STREAM_IPMP: fprintf(stdout, "\tIPMP Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - case GF_STREAM_OCI: fprintf(stdout, "\tOCI Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - case GF_STREAM_MPEGJ: fprintf(stdout, "\tMPEGJ Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - case GF_STREAM_INTERACT: fprintf(stdout, "\tUser Interaction Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - case GF_STREAM_TEXT: fprintf(stdout, "\tStreaming Text Stream - version %d\n", esd->decoderConfig->objectTypeIndication); break; - default: fprintf(stdout, "Unknown Stream\r\n"); break; } fprintf(stdout, "\tBuffer Size %d\n\tAverage Bitrate %d bps\n\tMaximum Bitrate %d bps\n", esd->decoderConfig->bufferSizeDB, esd->decoderConfig->avgBitrate, esd->decoderConfig->maxBitrate); diff --git a/applications/osmo4_android/.classpath b/applications/osmo4_android/.classpath deleted file mode 100644 index 2ae0f23..0000000 --- a/applications/osmo4_android/.classpath +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/applications/osmo4_android/.project b/applications/osmo4_android/.project deleted file mode 100644 index 2bb783b..0000000 --- a/applications/osmo4_android/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - Osmo4 - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/applications/osmo4_android/.settings/de.loskutov.anyedit.AnyEditTools.prefs b/applications/osmo4_android/.settings/de.loskutov.anyedit.AnyEditTools.prefs deleted file mode 100644 index c2330bf..0000000 --- a/applications/osmo4_android/.settings/de.loskutov.anyedit.AnyEditTools.prefs +++ /dev/null @@ -1,16 +0,0 @@ -#Fri Oct 08 13:52:16 CEST 2010 -activeContentFilterList=*.makefile,makefile,*.Makefile,Makefile,Makefile.*,*.mk,MANIFEST.MF -addNewLine=true -convertActionOnSaave=AnyEdit.CnvrtTabToSpaces -eclipse.preferences.version=1 -inActiveContentFilterList= -javaTabWidthForJava=true -org.eclipse.jdt.ui.editor.tab.width=2 -projectPropsEnabled=false -removeTrailingSpaces=true -replaceAllSpaces=false -replaceAllTabs=false -saveAndAddLine=false -saveAndConvert=false -saveAndTrim=true -useModulo4Tabs=false diff --git a/applications/osmo4_android/AndroidManifest.xml b/applications/osmo4_android/AndroidManifest.xml deleted file mode 100644 index 44cb2a8..0000000 --- a/applications/osmo4_android/AndroidManifest.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/applications/osmo4_android/Osmo4_keystore b/applications/osmo4_android/Osmo4_keystore deleted file mode 100644 index d504ce3..0000000 Binary files a/applications/osmo4_android/Osmo4_keystore and /dev/null differ diff --git a/applications/osmo4_android/build.properties b/applications/osmo4_android/build.properties deleted file mode 100644 index b392a8a..0000000 --- a/applications/osmo4_android/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -key.store=Osmo4_keystore -key.alias=Osmo4_androidkey -key.store.password=SkSlJ404 -key.alias.password=android \ No newline at end of file diff --git a/applications/osmo4_android/build.xml b/applications/osmo4_android/build.xml deleted file mode 100644 index e65e2d8..0000000 --- a/applications/osmo4_android/build.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - Android Ant Build. Available targets: - help: Displays this help. - clean: Removes output files created by other targets. - compile: Compiles project's .java files into .class files. - debug: Builds the application and signs it with a debug key. - release: Builds the application. The generated apk file must be - signed before it is published. - install: Installs/reinstalls the debug package onto a running - emulator or device. - If the application was previously installed, the - signatures must match. - uninstall: Uninstalls the application from a running emulator or - device. - - - - - - - - - - - - diff --git a/applications/osmo4_android/default.properties b/applications/osmo4_android/default.properties deleted file mode 100644 index 9d79b12..0000000 --- a/applications/osmo4_android/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-4 diff --git a/applications/osmo4_android/jni/README.txt b/applications/osmo4_android/jni/README.txt deleted file mode 100644 index 05c508f..0000000 --- a/applications/osmo4_android/jni/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -To build Android version, Please execute the script : -../../../build/android/jni/gpac_build_android diff --git a/applications/osmo4_android/jni/wrapper.cpp b/applications/osmo4_android/jni/wrapper.cpp deleted file mode 100644 index 93b0394..0000000 --- a/applications/osmo4_android/jni/wrapper.cpp +++ /dev/null @@ -1,916 +0,0 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include - -#include -#include -#include -#include -#include -#include - -#include "wrapper.h" -#include "wrapper_jni.c" - -#include -#include - -#define TAG "GPAC_WRAPPER" - -#define LOGV(X, Y) __android_log_print(ANDROID_LOG_VERBOSE, TAG, X, Y) -#define LOGD(X, Y) __android_log_print(ANDROID_LOG_DEBUG, TAG, X, Y) -#define LOGE(X, Y) __android_log_print(ANDROID_LOG_ERROR, TAG, X, Y) -#define LOGW(X, Y) __android_log_print(ANDROID_LOG_WARN, TAG, X, Y) -#define LOGI(X, Y) __android_log_print(ANDROID_LOG_INFO, TAG, X, Y) -#include - -static JavaVM* javaVM = NULL; - -static pthread_key_t jni_thread_env_key = 0; - -/** - * This method is called when a pthread is destroyed, so we can delete the JNI env - */ -static void jni_destroy_env_func(void * env) { - LOGI("Destroying a thread with attached data, env=%p.\n", env); - JavaEnvTh * jniEnv = (JavaEnvTh *) env; - if (jniEnv){ - /*jniEnv->env->DeleteLocalRef(&jniEnv->cbk_displayMessage); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_onProgress); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_showKeyboard); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_setCaption); - jniEnv->env->DeleteLocalRef(&jniEnv->cbk_onLog);*/ - memset(jniEnv, 0, sizeof(JavaEnvTh)); - gf_free(jniEnv); - } - pthread_setspecific(jni_thread_env_key, NULL); - if (javaVM) - javaVM->DetachCurrentThread(); -} - -static int jniRegisterNativeMethods(JNIEnv* env, const char* className, - const JNINativeMethod* gMethods, int numMethods) -{ - jclass clazz; - clazz = env->FindClass(className); - if (clazz == NULL) { - LOGE("Native registration unable to find class '%s'\n", className); - return -1; - } - if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { - LOGE("RegisterNatives failed for '%s'\n", className); - return -1; - } - return 0; -} - -static JNINativeMethod sMethods[] = { - /* name, signature, funcPtr */ - - {"createInstance", - "(Lcom/gpac/Osmo4/GpacCallback;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J", - (void*)&Java_com_gpac_Osmo4_GPACInstance_createInstance}, - {"gpacdisconnect", - "()V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpacdisconnect}, - {"gpacrender", - "()V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpacrender}, - {"gpacresize", - "(II)V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpacresize}, - {"gpacfree", - "()V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpacfree}, - {"gpaceventkeypress", - "(IIIII)V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventkeypress}, - {"gpaceventmousedown", - "(FF)V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventmousedown}, - {"gpaceventmouseup", - "(FF)V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventmouseup}, - {"gpaceventmousemove", - "(FF)V", - (void*)Java_com_gpac_Osmo4_GPACInstance_gpaceventmousemove}, - {"setGpacPreference", - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", - (void*)Java_com_gpac_Osmo4_GPACInstance_setGpacPreference}, - NULL -}; - - -jint JNI_OnUnLoad(JavaVM* vm, void* reserved){ - LOGI("Deleting library, vm=%p...\n", vm); - if (pthread_key_delete(jni_thread_env_key)){ - LOGW("Failed to delete key jni_thread_env_key jni_thread_env_key=%p\n", jni_thread_env_key); - } - javaVM = NULL; - jni_thread_env_key = NULL; -} - -//--------------------------------------------------------------------------------------------------- -jint JNI_OnLoad(JavaVM* vm, void* reserved){ - const char * className = "com/gpac/Osmo4/GPACInstance"; - JNIEnv * env; - if (!vm) - return -1; - if (vm->GetEnv((void**)(&env), JNI_VERSION_1_2) != JNI_OK) - return -1; - javaVM = vm; - LOGI("Registering %s natives\n", className); - if (jniRegisterNativeMethods(env, className, sMethods, 9) < 0){ - LOGE("Failed to register native methods for %s !\n", className); - return -1; - } - LOGI("Registering natives DONE, now registering pthread_keys with destructor=%p\n", &jni_destroy_env_func); - int ret = pthread_key_create(&jni_thread_env_key, &jni_destroy_env_func); - if (ret){ - LOGE("Failed to register jni_thread_env_key jni_thread_env_key=%p\n", jni_thread_env_key); - } - return JNI_VERSION_1_2; -} - -//--------------------------------------------------------------------------------------------------- -//CNativeWrapper -//------------------------------- - -CNativeWrapper::CNativeWrapper(){ - do_log = 1; - m_term = NULL; - m_mx = NULL; -#ifndef GPAC_GUI_ONLY - memset(&m_user, 0, sizeof(GF_User)); - memset(&m_rti, 0, sizeof(GF_SystemRTInfo)); -#endif -} -//------------------------------- -CNativeWrapper::~CNativeWrapper(){ - debug_log("~CNativeWrapper()"); - JavaEnvTh * env = getEnv(); - if (env && env->cbk_obj) - env->env->DeleteGlobalRef(env->cbk_obj); - Shutdown(); - debug_log("~CNativeWrapper() : DONE\n"); -} -//------------------------------- -void CNativeWrapper::debug_log(const char* msg){ - LOGV("%s", msg); -} -//------------------------------- -void CNativeWrapper::Shutdown() -{ - debug_log("shutdown"); - if (m_term) - gf_term_disconnect(m_term); - if (m_mx) - gf_mx_del(m_mx); - m_mx = NULL; -#ifndef GPAC_GUI_ONLY - if (m_term) { - GF_Terminal *t = m_term; - m_term = NULL; - gf_term_del(t); - } - if (m_user.config) { - gf_cfg_del(m_user.config); - m_user.config = NULL; - } - if (m_user.modules) { - gf_modules_del(m_user.modules); - m_user.modules = NULL; - } -#endif - m_term = NULL; - debug_log("shutdown end"); -} - -void CNativeWrapper::setJavaEnv(JavaEnvTh * envToSet, JNIEnv *env, jobject callback){ - assert( envToSet ); - jclass localRef = env->GetObjectClass(callback); - envToSet->env = env; - envToSet->javaThreadId = gf_th_id(); - envToSet->cbk_obj = callback; - envToSet->cbk_displayMessage = - env->GetMethodID(localRef, "displayMessage", "(Ljava/lang/String;Ljava/lang/String;I)V"); - envToSet->cbk_onProgress = - env->GetMethodID(localRef, "onProgress", "(Ljava/lang/String;II)V"); - envToSet->cbk_onLog = - env->GetMethodID(localRef, "onLog", "(IILjava/lang/String;)V"); - envToSet->cbk_setCaption = - env->GetMethodID(localRef, "setCaption", "(Ljava/lang/String;)V"); - envToSet->cbk_showKeyboard = - env->GetMethodID(localRef, "showKeyboard", "(Z)V"); - env->DeleteLocalRef(localRef); -} - -static u32 beforeThreadExits(void * param){ - LOGI("Before Thread exist, detach the JavaVM from Thread for thread %p...\n", gf_th_current()); - if (javaVM) - javaVM->DetachCurrentThread(); -} - -JavaEnvTh * CNativeWrapper::getEnv(){ - JNIEnv *env; - JavaEnvTh * javaEnv; - if (!javaVM){ - debug_log("************* No JVM Found ************"); - return NULL; - } - javaEnv = (JavaEnvTh*) pthread_getspecific( jni_thread_env_key ); - if (javaEnv) - return javaEnv; - javaEnv = (JavaEnvTh *) gf_malloc(sizeof(JavaEnvTh)); - if (!javaEnv) - return NULL; - memset(javaEnv, 0, sizeof(JavaEnvTh)); - javaVM->AttachCurrentThread(&env, NULL); - if (!env){ - LOGE("Attaching to thread did faild for thread id=%d", gf_th_id()); - gf_free(javaEnv); - return NULL; - } - LOGI("Rebuilding methods for thread %d", gf_th_id()); - setJavaEnv(javaEnv, env, mainJavaEnv.cbk_obj); - if (pthread_setspecific(jni_thread_env_key, javaEnv)){ - LOGE("Failed to set specific thread data to jni_thread_env_key for thread=%d. No ENV available !", gf_th_id()); - gf_free(javaEnv); - return NULL; - } - GF_Thread * t; - LOGI("Getting current Thread %d...", gf_th_id()); - t = gf_th_current(); - LOGI("Getting current Thread DONE = %p, now registering before exit...", t); - - if (GF_OK != gf_register_before_exit_function(gf_th_current(), &beforeThreadExits)){ - LOGE("Failed to register exit function for thread %p, no javaEnv for current thread.", gf_th_current()); - //javaVM->DetachCurrentThread(); - gf_free(javaEnv); - javaEnv = NULL; - } - LOGI("Registering DONE for %d", gf_th_id()); - return javaEnv; -} - - -//------------------------------- -int CNativeWrapper::MessageBox(const char* msg, const char* title, GF_Err status){ - LOGV("MessageBox start %s", msg); - JavaEnvTh * env = getEnv(); - if (!env || !env->cbk_displayMessage) - return 0; - env->env->PushLocalFrame(2); - jstring tit = env->env->NewStringUTF(title?title:"null"); - jstring mes = env->env->NewStringUTF(msg?msg:"null"); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_displayMessage, mes, tit, status); - env->env->PopLocalFrame(NULL); - LOGV("MessageBox done %s", msg); - return 1; -} -//------------------------------- -void CNativeWrapper::DisplayRTI(){ -#ifndef GPAC_GUI_ONLY - // display some system informations ? -#endif -} -//------------------------------- -int CNativeWrapper::Quit(int code){ - - Shutdown(); - // send shutdown request to java - return code; -} - -#include - -//------------------------------- -void CNativeWrapper::on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list){ - char szMsg[4096]; - const char * tag; - char unknTag[32]; - int debug; - // We do not want to be flood by mutexes - if (ll == GF_LOG_DEBUG && lm == GF_LOG_MUTEX) - return; - switch (ll){ - case GF_LOG_DEBUG: - debug = ANDROID_LOG_DEBUG; - break; - case GF_LOG_INFO: - debug = ANDROID_LOG_INFO; - break; - case GF_LOG_WARNING: - debug = ANDROID_LOG_WARN; - break; - case GF_LOG_ERROR: - debug = ANDROID_LOG_ERROR; - break; - default: - debug = ANDROID_LOG_INFO; - } - vsnprintf(szMsg, 4096, fmt, list); - CNativeWrapper * self = (CNativeWrapper *) cbk; - if (!self) - goto displayInAndroidlogs; - - { - JavaEnvTh *env = self->getEnv(); - jstring msg; - if (!env || !env->cbk_onLog) - goto displayInAndroidlogs; - env->env->PushLocalFrame(1); - msg = env->env->NewStringUTF(szMsg); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_onLog, debug, lm, msg); - env->env->PopLocalFrame(NULL); - return; - } -displayInAndroidlogs: - { - /* When no callback is properly set, we use direct logging */ - switch( lm){ - case GF_LOG_CORE: - tag="GF_LOG_CORE"; - break; - case GF_LOG_CODING: - tag="GF_LOG_CODING"; - break; - case GF_LOG_CONTAINER: - tag="GF_LOG_CONTAINER"; - break; - case GF_LOG_NETWORK: - tag="GF_LOG_NETWORK"; - break; - case GF_LOG_RTP: - tag="GF_LOG_RTP"; - break; - case GF_LOG_AUTHOR: - tag="GF_LOG_AUTHOR"; - break; - case GF_LOG_SYNC: - tag="GF_LOG_SYNC"; - break; - case GF_LOG_CODEC: - tag="GF_LOG_CODEC"; - break; - case GF_LOG_PARSER: - tag="GF_LOG_PARSER"; - break; - case GF_LOG_MEDIA: - tag="GF_LOG_MEDIA"; - break; - case GF_LOG_SCENE: - tag="GF_LOG_SCENE"; - break; - case GF_LOG_SCRIPT: - tag="GF_LOG_SCRIPT"; - break; - case GF_LOG_INTERACT: - tag="GF_LOG_INTERACT"; - break; - case GF_LOG_COMPOSE: - tag="GF_LOG_COMPOSE"; - break; - case GF_LOG_CACHE: - tag="GF_LOG_CACHE"; - break; - case GF_LOG_MMIO: - tag="GF_LOG_MMIO"; - break; - case GF_LOG_RTI: - tag="GF_LOG_RTI"; - break; - case GF_LOG_SMIL: - tag="GF_LOG_SMIL"; - break; - case GF_LOG_MEMORY: - tag="GF_LOG_MEMORY"; - break; - case GF_LOG_AUDIO: - tag="GF_LOG_AUDIO"; - break; - case GF_LOG_MODULE: - tag="GF_LOG_MODULE"; - break; - case GF_LOG_MUTEX: - tag="GF_LOG_MUTEX"; - break; - default: - snprintf(unknTag, 32, "GPAC_UNKNOWN[%d]", lm); - tag = unknTag; - } - __android_log_print(debug, tag, szMsg); - } -} -//------------------------------- -Bool CNativeWrapper::GPAC_EventProc(void *cbk, GF_Event *evt){ - if (cbk) - { - CNativeWrapper* ptr = (CNativeWrapper*)cbk; - char msg[4096]; - msg[0] = 0; - LOGD("GPAC_EventProc() Message=%d", evt->type); - switch (evt->type){ - case GF_EVENT_CLICK: - case GF_EVENT_MOUSEUP: - case GF_EVENT_MOUSEDOWN: - case GF_EVENT_MOUSEOVER: - case GF_EVENT_MOUSEOUT: - case GF_EVENT_MOUSEMOVE: - case GF_EVENT_MOUSEWHEEL: - case GF_EVENT_KEYUP: - case GF_EVENT_KEYDOWN: - case GF_EVENT_LONGKEYPRESS: - case GF_EVENT_TEXTINPUT: - /* We ignore all these events */ - break; - case GF_EVENT_MEDIA_BEGIN_SESSION_SETUP: - case GF_EVENT_MEDIA_END_SESSION_SETUP: - case GF_EVENT_MEDIA_DATA_REQUEST: - case GF_EVENT_MEDIA_PLAYABLE: - case GF_EVENT_MEDIA_NOT_PLAYABLE: - case GF_EVENT_MEDIA_DATA_PROGRESS: - case GF_EVENT_MEDIA_END_OF_DATA: - case GF_EVENT_MEDIA_STOP: - case GF_EVENT_MEDIA_ERROR: - LOGD("GPAC_EventProc() Media Event detected = [index=%d]", evt->type - GF_EVENT_MEDIA_BEGIN_SESSION_SETUP); - break; - case GF_EVENT_MESSAGE: - { - ptr->debug_log("GPAC_EventProc start"); - if ( evt->message.message ) - { - strcat(msg, evt->message.message); - strcat(msg, ": "); - } - strcat(msg, gf_error_to_string(evt->message.error)); - - ptr->debug_log(msg); - ptr->MessageBox(msg, evt->message.service ? evt->message.service : "GF_EVENT_MESSAGE", evt->message.error); - ptr->debug_log("GPAC_EventProc end"); - }; - break; - case GF_EVENT_CONNECT: - if (evt->connect.is_connected) - ptr->MessageBox("Connected", "Connected to scene", GF_OK); - else - ptr->MessageBox("Disconnected", "Disconnected from scene.", GF_OK); - break; - case GF_EVENT_PROGRESS: - { - const char * szTitle;; - if (evt->progress.progress_type==0) - szTitle = "Buffering"; - else if (evt->progress.progress_type==1) - szTitle = "Downloading..."; - else if (evt->progress.progress_type==2) - szTitle = "Import "; - else - szTitle = "Unknown Progress Event"; - ptr->Osmo4_progress_cbk(ptr, szTitle, evt->progress.done, evt->progress.total); - gf_set_progress(szTitle, evt->progress.done, evt->progress.total); - } - break; - case GF_EVENT_TEXT_EDITING_START: - case GF_EVENT_TEXT_EDITING_END: - { - JavaEnvTh * env = ptr->getEnv(); - if (!env || !env->cbk_showKeyboard) - return 0; - LOGI("Needs to display/hide the Virtual Keyboard (%d)", evt->type); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_showKeyboard, GF_EVENT_TEXT_EDITING_START == evt->type); - LOGV("Done showing virtual keyboard (%d)", evt->type); - } - break; - case GF_EVENT_EOS: - LOGI("EOS Reached (%d)", evt->type); - break; - case GF_EVENT_DISCONNECT: - /* FIXME : not sure about this behaviour */ - if (ptr) - ptr->disconnect(); - break; - case GF_EVENT_NAVIGATE: - ptr->navigate( evt); - break; - default: - LOGI("Unknown Message %d", evt->type); - } - } - return 0; -} - -void CNativeWrapper::navigate( GF_Event* evt) -{ - if (gf_term_is_supported_url(m_term, evt->navigate.to_url, 1, 1)) - { - gf_term_navigate_to(m_term, evt->navigate.to_url); - } -} - -void CNativeWrapper::progress_cbk(const char *title, u64 done, u64 total){ - JavaEnvTh *env = getEnv(); - if (!env || !env->cbk_onProgress) - return; - debug_log("Osmo4_progress_cbk start"); - env->env->PushLocalFrame(1); - jstring js = env->env->NewStringUTF(title); - env->env->CallVoidMethod(env->cbk_obj, env->cbk_onProgress, js, done, total); - env->env->PopLocalFrame(NULL); - debug_log("Osmo4_progress_cbk end"); -} - - -//------------------------------- -void CNativeWrapper::Osmo4_progress_cbk(const void *usr, const char *title, u64 done, u64 total){ - if (!usr) - return; - CNativeWrapper * self = (CNativeWrapper *) usr; - self->progress_cbk(title, done, total); -} -//------------------------------- -void CNativeWrapper::SetupLogs(){ - const char *opt; - debug_log("SetupLogs()"); - - gf_mx_p(m_mx); - - u32 ll = gf_log_parse_level( gf_cfg_get_key(m_user.config, "General", "LogLevel") ); - gf_log_set_level(ll); - u32 lt = gf_log_parse_tools( gf_cfg_get_key(m_user.config, "General", "LogTools") ); - gf_log_set_tools(lt); - - gf_log_set_callback(this, on_gpac_log); - gf_mx_v(m_mx); - - GF_LOG(GF_LOG_INFO, GF_LOG_CORE, ("Osmo4 logs initialized\n")); - /* Test for JNI invocations, should work properly - int k; - for (k = 0 ; k < 512; k++){ - GF_LOG(GF_LOG_INFO, GF_LOG_CORE, ("Message %d\n", k)); - }*/ -} -//------------------------------- -// dir should end with / -int CNativeWrapper::init(JNIEnv * env, void * bitmap, jobject * callback, int width, int height, const char * cfg_dir, const char * modules_dir, const char * cache_dir, const char * font_dir, const char * urlToLoad){ - LOGI("Initializing GPAC with URL=%s...", urlToLoad); - strcpy(m_cfg_dir, cfg_dir); - strcpy(m_modules_dir, modules_dir); - strcpy(m_cache_dir, cache_dir); - strcpy(m_font_dir, font_dir); - - char m_cfg_filename[GF_MAX_PATH]; - strcpy(m_cfg_filename, m_cfg_dir); - strcat(m_cfg_filename, "GPAC.cfg"); - - int m_Width = width; - int m_Height = height; - - int first_launch = 0; - const char *opt; - - m_window = env; - m_session = bitmap; - setJavaEnv(&mainJavaEnv, env, env->NewGlobalRef(*callback)); - if (pthread_setspecific( jni_thread_env_key, &mainJavaEnv)){ - LOGE("Failed to set specific thread data to jni_thread_env_key=%p for main thread !", jni_thread_env_key); - } - - m_mx = gf_mx_new("Osmo4"); - - //load config file - LOGI("Loading User Config %s...", "GPAC.cfg"); - m_user.config = gf_cfg_force_new(cfg_dir, "GPAC.cfg"); - SetupLogs(); - gf_set_progress_callback(this, Osmo4_progress_cbk); - - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - if (!opt) { - FILE * fstart; - char msg[256]; - LOGI("First launch, initializing new Config %s...", "GPAC.cfg"); - /*hardcode module directory*/ - gf_cfg_set_key(m_user.config, "Downloader", "CleanCache", "yes"); - /*startup file*/ - snprintf(msg, 256, "%sgui/gui.bt", cfg_dir); - fstart = fopen(msg, "r"); - if (fstart){ - fclose(fstart); - gf_cfg_set_key(m_user.config, "General", "StartupFile", msg); - } else { - gf_cfg_set_key(m_user.config, "General", "#StartupFile", msg); - } - gf_cfg_set_key(m_user.config, "GUI", "UnhideControlPlayer", "1"); - /*setup UDP traffic autodetect*/ - gf_cfg_set_key(m_user.config, "Network", "AutoReconfigUDP", "yes"); - gf_cfg_set_key(m_user.config, "Network", "UDPTimeout", "10000"); - gf_cfg_set_key(m_user.config, "Network", "BufferLength", "3000"); - gf_cfg_set_key(m_user.config, "Compositor", "TextureTextMode", "Default"); - //gf_cfg_set_key(m_user.config, "Compositor", "FrameRate", "30"); - gf_cfg_set_key(m_user.config, "Audio", "ForceConfig", "no"); - gf_cfg_set_key(m_user.config, "Audio", "NumBuffers", "1"); - gf_cfg_set_key(m_user.config, "FontEngine", "FontReader", "ft_font"); - } - /* All of this has to be done for every instance */ - gf_cfg_set_key(m_user.config, "General", "ModulesDirectory", modules_dir ? modules_dir : GPAC_MODULES_DIR); - gf_cfg_set_key(m_user.config, "General", "CacheDirectory", cache_dir ? cache_dir : GPAC_CACHE_DIR); - gf_cfg_set_key(m_user.config, "General", "LastWorkingDir", cfg_dir); - gf_cfg_set_key(m_user.config, "FontEngine", "FontDirectory", GPAC_FONT_DIR); - gf_cfg_set_key(m_user.config, "Video", "DriverName", "Android Video Output"); - gf_cfg_set_key(m_user.config, "Audio", "DriverName", "Android Audio Output"); - - opt = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); - LOGI("loading modules in directory %s...", opt); - m_user.modules = gf_modules_new(opt, m_user.config); - if (!m_user.modules || !gf_modules_get_count(m_user.modules)) { - LOGE("No modules found in directory %s !", opt); - if (m_user.modules) - gf_modules_del(m_user.modules); - gf_cfg_del(m_user.config); - m_user.config = NULL; - return Quit(KErrGeneral); - } - - /*we don't thread the visual compositor to be able to minimize the app and still have audio running*/ - m_user.init_flags = GF_TERM_NO_COMPOSITOR_THREAD | GF_TERM_NO_REGULATION; - //m_user.init_flags |= GF_TERM_NO_AUDIO; - m_user.opaque = this; - - m_user.os_window_handler = m_window; - m_user.os_display = m_session; - m_user.EventProc = GPAC_EventProc; - if (!javaVM){ - LOGE("NO JAVA VM FOUND, m_user=%p !!!!\n", &m_user); - return Quit(KErrGeneral); - } - - LOGD("Loading GPAC terminal, m_user=%p...", &m_user); - m_term = gf_term_new(&m_user); - if (!m_term) { - LOGE("Cannot load GPAC Terminal with m_user=%p", m_user); - MessageBox("Cannot load GPAC terminal", "Fatal Error", GF_SERVICE_ERROR); - gf_modules_del(m_user.modules); - m_user.modules = NULL; - gf_cfg_del(m_user.config); - m_user.config = NULL; - return Quit(KErrGeneral); - } - - //setAudioEnvironment(javaVM); - - LOGD("Setting term size m_user=%p...", &m_user); - gf_term_set_size(m_term, m_Width, m_Height); - - opt = gf_cfg_get_key(m_user.config, "General", "StartupFile"); - LOGD("File loaded at startup=%s.", opt); - - if (!urlToLoad) - urlToLoad = opt; - if (urlToLoad){ - LOGI("Connecting to %s...", urlToLoad); - gf_term_connect(m_term, urlToLoad); - } - debug_log("init end"); - LOGD("Saving config file %s...\n", m_cfg_filename); - gf_cfg_save(m_user.config); - LOGI("Initialization complete, config file saved as %s.\n", m_cfg_filename); - - return 0; -} -//------------------------------- -int CNativeWrapper::connect(const char *url){ - if (m_term){ - debug_log("Starting to connect ..."); - gf_term_connect_from_time(m_term, url, 0, false); - debug_log("connected ..."); - } -} - -void CNativeWrapper::setGpacPreference( const char * category, const char * name, const char * value) -{ - if (m_user.config){ - gf_cfg_set_key(m_user.config, category, name, value); - gf_cfg_save(m_user.config); - } -} - -//----------------------------------------------------- -void CNativeWrapper::disconnect(){ - if (m_term){ - debug_log("disconnecting"); - gf_term_disconnect(m_term); - debug_log("disconnected ..."); - } -} -//----------------------------------------------------- -void CNativeWrapper::step(void * env, void * bitmap){ - m_window = env; - m_session = bitmap; - //debug_log("Step ..."); - if (!m_term){ - debug_log("step(): No m_term found."); - return; - } else - if (!m_term->compositor) - debug_log("step(): No compositor found."); - else if (!m_term->compositor->video_out) - debug_log("step(): No video_out found"); - else if (!m_term->compositor->video_out->Setup) - debug_log("step(): No video_out->Setup found"); - else { - //debug_log("step(): gf_term_process_step : start()"); - m_term->compositor->frame_draw_type = GF_SC_DRAW_FRAME; - gf_term_process_step(m_term); - //debug_log("step(): gf_term_process_step : end()"); - } -} - -//----------------------------------------------------- -void CNativeWrapper::setAudioEnvironment(JavaVM* javaVM){ - if (!m_term){ - debug_log("setAudioEnvironment(): no m_term found."); - return; - } - debug_log("setAudioEnvironment start"); - m_term->compositor->audio_renderer->audio_out->Setup(m_term->compositor->audio_renderer->audio_out, javaVM, 0, 0); - debug_log("setAudioEnvironment end"); -} -//----------------------------------------------------- -void CNativeWrapper::resize(int w, int h){ - if (!m_term) - return; - debug_log("resize start"); - gf_term_set_size(m_term, w, h); - debug_log("resize end"); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseDown(float x, float y){ - if (!m_term) - return; - debug_log("onMouseDown start"); - //char msg[100]; - //sprintf(msg, "onMousedown x=%f, y=%f", x, y ); - //debug_log(msg); - - GF_Event evt; - evt.type = GF_EVENT_MOUSEDOWN; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); - debug_log("onMouseDown end"); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseUp(float x, float y){ - if (!m_term) - return; - debug_log("onMouseUp start"); - //char msg[100]; - //sprintf(msg, "onMouseUp x=%f, y=%f", x, y ); - //debug_log(msg); - - GF_Event evt; - evt.type = GF_EVENT_MOUSEUP; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); - debug_log("onMouseUp end"); -} -//----------------------------------------------------- -void CNativeWrapper::onMouseMove(float x, float y){ - if (!m_term) - return; - GF_Event evt; - evt.type = GF_EVENT_MOUSEMOVE; - evt.mouse.button = GF_MOUSE_LEFT; - evt.mouse.x = x; - evt.mouse.y = y; - - int ret = gf_term_user_event(m_term, &evt); -} -//----------------------------------------------------- -void CNativeWrapper::onKeyPress(int keycode, int rawkeycode, int up, int flag, int unicode){ - if (!m_term) - return; - debug_log("onKeyPress start"); - GF_Event evt; - memset(&evt, 0, sizeof(GF_Event)); - if (up == 0) evt.type = GF_EVENT_KEYUP; - else evt.type = GF_EVENT_KEYDOWN; - - evt.key.flags = 0; - evt.key.hw_code = rawkeycode; - - translate_key(keycode, &evt.key); - //evt.key.key_code = GF_KEY_A; - int ret = gf_term_user_event(m_term, &evt); - - if (evt.type == GF_EVENT_KEYUP && unicode){ - memset(&evt, 0, sizeof(GF_Event)); - evt.type = GF_EVENT_TEXTINPUT; - evt.character.unicode_char = unicode; - ret = gf_term_user_event(m_term, &evt); - } -} -//----------------------------------------------------- -void CNativeWrapper::translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt){ - evt->flags = 0; - switch (keycode) { - case ANDROID_KEYCODE_BACK: evt->key_code = GF_KEY_BACKSPACE; break; - case ANDROID_KEYCODE_TAB: evt->key_code = GF_KEY_TAB; break; - case ANDROID_KEYCODE_CLEAR: evt->key_code = GF_KEY_CLEAR; break; - case ANDROID_KEYCODE_ENTER: evt->key_code = GF_KEY_ENTER; break; - case ANDROID_KEYCODE_SHIFT_LEFT: evt->key_code = GF_KEY_SHIFT; break; - case ANDROID_KEYCODE_SHIFT_RIGHT: evt->key_code = GF_KEY_SHIFT; break; - case ANDROID_KEYCODE_ALT_LEFT: evt->key_code = GF_KEY_ALT; break; - case ANDROID_KEYCODE_ALT_RIGHT: evt->key_code = GF_KEY_ALT; break; - case ANDROID_KEYCODE_SPACE: evt->key_code = GF_KEY_SPACE; break; - case ANDROID_KEYCODE_HOME: evt->key_code = GF_KEY_HOME; break; - case ANDROID_KEYCODE_DPAD_LEFT: evt->key_code = GF_KEY_LEFT; break; - case ANDROID_KEYCODE_DPAD_UP: evt->key_code = GF_KEY_UP; break; - case ANDROID_KEYCODE_DPAD_RIGHT: evt->key_code = GF_KEY_RIGHT; break; - case ANDROID_KEYCODE_DPAD_DOWN: evt->key_code = GF_KEY_DOWN; break; - case ANDROID_KEYCODE_DEL: evt->key_code = GF_KEY_DEL; break; - case ANDROID_KEYCODE_0: - evt->key_code = GF_KEY_0; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_1: - evt->key_code = GF_KEY_1; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_2: - evt->key_code = GF_KEY_2; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_3: - evt->key_code = GF_KEY_3; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_4: - evt->key_code = GF_KEY_4; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_5: - evt->key_code = GF_KEY_5; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_6: - evt->key_code = GF_KEY_6; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_7: - evt->key_code = GF_KEY_7; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_8: - evt->key_code = GF_KEY_8; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - case ANDROID_KEYCODE_9: - evt->key_code = GF_KEY_9; - evt->flags = GF_KEY_EXT_NUMPAD; - break; - /*thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) */ - /* VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) */ - default: - if ((keycode>=ANDROID_KEYCODE_A) && (keycode<=ANDROID_KEYCODE_Z)){ - evt->key_code = GF_KEY_A + keycode - ANDROID_KEYCODE_A; - } else { - evt->key_code = GF_KEY_UNIDENTIFIED; - } - break; - } - evt->hw_code = evt->key_code; -} - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- diff --git a/applications/osmo4_android/jni/wrapper.h b/applications/osmo4_android/jni/wrapper.h deleted file mode 100644 index 1cd231d..0000000 --- a/applications/osmo4_android/jni/wrapper.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * GPAC - Multimedia Framework C SDK - * - * Copyright (c) ENST 2009- - * Authors: Jean Le Feuvre - * All rights reserved - * - * Created by NGO Van Luyen, Ivica ARSOV / ARTEMIS / Telecom SudParis /Institut TELECOM on Oct, 2010 - * - * This file is part of GPAC / Wrapper - * - * GPAC is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GPAC is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -#include - -#include -#include -#include -#include - -//#define MAX_PATH 255 - -#define KErrGeneral 1 -//#define GPAC_CFG_DIR "/data/osmo/" -#define GPAC_CFG_DIR m_cfg_dir -//#define GPAC_MODULES_DIR "/data/osmo/modules/" -#define GPAC_MODULES_DIR m_modules_dir -//#define GPAC_MODULES_PATH "/data/osmo/modules/" -#define GPAC_MODULES_PATH m_modules_dir -//#define GPAC_CACHE_DIR "/data/osmo/cache/" -#define GPAC_CACHE_DIR m_cache_dir -//#define GPAC_LOG_FILE "/data/osmo/gpac_logs.txt" -#define GPAC_LOG_FILE m_log_filename -//#define GPAC_FONT_DIR "/system/fonts/" -#define GPAC_FONT_DIR m_font_dir - -#define DEBUG_MODE 1 -//#define DEBUG_FILE "/data/osmo/osmo_debug.txt" -#define DEBUG_FILE m_debug_filename - -// keyboard code -#define ANDROID_KEYCODE int -#define ANDROID_KEYCODE_0 7 -#define ANDROID_KEYCODE_1 8 -#define ANDROID_KEYCODE_2 9 -#define ANDROID_KEYCODE_3 10 -#define ANDROID_KEYCODE_4 11 -#define ANDROID_KEYCODE_5 12 -#define ANDROID_KEYCODE_6 13 -#define ANDROID_KEYCODE_7 14 -#define ANDROID_KEYCODE_8 15 -#define ANDROID_KEYCODE_9 16 -#define ANDROID_KEYCODE_A 29 -#define ANDROID_KEYCODE_B 30 -#define ANDROID_KEYCODE_C 31 -#define ANDROID_KEYCODE_D 32 -#define ANDROID_KEYCODE_E 33 -#define ANDROID_KEYCODE_F 34 -#define ANDROID_KEYCODE_G 35 -#define ANDROID_KEYCODE_H 36 -#define ANDROID_KEYCODE_I 37 -#define ANDROID_KEYCODE_J 38 -#define ANDROID_KEYCODE_K 39 -#define ANDROID_KEYCODE_L 40 -#define ANDROID_KEYCODE_M 41 -#define ANDROID_KEYCODE_N 42 -#define ANDROID_KEYCODE_O 43 -#define ANDROID_KEYCODE_P 44 -#define ANDROID_KEYCODE_Q 45 -#define ANDROID_KEYCODE_R 46 -#define ANDROID_KEYCODE_S 47 -#define ANDROID_KEYCODE_T 48 -#define ANDROID_KEYCODE_U 49 -#define ANDROID_KEYCODE_V 50 -#define ANDROID_KEYCODE_W 51 -#define ANDROID_KEYCODE_X 52 -#define ANDROID_KEYCODE_Y 53 -#define ANDROID_KEYCODE_Z 54 -#define ANDROID_KEYCODE_ALT_LEFT 57 -#define ANDROID_KEYCODE_ALT_RIGHT 58 -#define ANDROID_KEYCODE_AT 77 -#define ANDROID_KEYCODE_BACK 4 -#define ANDROID_KEYCODE_BACKSLASH 73 -#define ANDROID_KEYCODE_CALL 5 -#define ANDROID_KEYCODE_CAMERA 27 -#define ANDROID_KEYCODE_CLEAR 28 -#define ANDROID_KEYCODE_COMMA 55 -#define ANDROID_KEYCODE_DEL 67 -#define ANDROID_KEYCODE_DPAD_CENTER 23 -#define ANDROID_KEYCODE_DPAD_DOWN 20 -#define ANDROID_KEYCODE_DPAD_LEFT 21 -#define ANDROID_KEYCODE_DPAD_RIGHT 22 -#define ANDROID_KEYCODE_DPAD_UP 19 -#define ANDROID_KEYCODE_ENDCALL 6 -#define ANDROID_KEYCODE_ENTER 66 -#define ANDROID_KEYCODE_ENVELOPE 65 -#define ANDROID_KEYCODE_EQUALS 70 -#define ANDROID_KEYCODE_EXPLORER 64 -#define ANDROID_KEYCODE_FOCUS 80 -#define ANDROID_KEYCODE_GRAVE 68 -#define ANDROID_KEYCODE_HEADSETHOOK 79 -#define ANDROID_KEYCODE_HOME 3 -#define ANDROID_KEYCODE_LEFT_BRACKET 71 -#define ANDROID_KEYCODE_MEDIA_FAST_FORWARD 90 -#define ANDROID_KEYCODE_MEDIA_NEXT 87 -#define ANDROID_KEYCODE_MEDIA_PLAY_PAUSE 85 -#define ANDROID_KEYCODE_MEDIA_PREVIOUS 88 -#define ANDROID_KEYCODE_MEDIA_REWIND 89 -#define ANDROID_KEYCODE_MEDIA_STOP 86 -#define ANDROID_KEYCODE_MENU 82 -#define ANDROID_KEYCODE_MINUS 69 -#define ANDROID_KEYCODE_MUTE 91 -#define ANDROID_KEYCODE_NUM 78 -#define ANDROID_KEYCODE_PLUS 81 -#define ANDROID_KEYCODE_POWER 26 -#define ANDROID_KEYCODE_RIGHT_BRACKET 72 -#define ANDROID_KEYCODE_SEARCH 84 -#define ANDROID_KEYCODE_SEMICOLON 74 -#define ANDROID_KEYCODE_SHIFT_LEFT 59 -#define ANDROID_KEYCODE_SHIFT_RIGHT 60 -#define ANDROID_KEYCODE_SLASH 76 -#define ANDROID_KEYCODE_SOFT_LEFT 1 -#define ANDROID_KEYCODE_SOFT_RIGHT 2 -#define ANDROID_KEYCODE_SPACE 62 -#define ANDROID_KEYCODE_STAR 17 -#define ANDROID_KEYCODE_SYM 63 -#define ANDROID_KEYCODE_TAB 61 - -#define ANDROID_KEYCODE_UNKWON -1 - -#include - -typedef struct _JavaEnvTh { - JNIEnv * env; - u32 javaThreadId; - jobject cbk_obj; - jmethodID cbk_displayMessage; - jmethodID cbk_onProgress; - jmethodID cbk_showKeyboard; - jmethodID cbk_setCaption; - jmethodID cbk_onLog; -} JavaEnvTh; - - -//--------------------------------------------------------------------------------------------------- -//--------------------------------------------------------------------------------------------------- -class CNativeWrapper{ - - private: - void* m_window; - void* m_session; - - GF_User *GetUser() { return &m_user; } - GF_Terminal *m_term; - - /* - * Callback management - */ - JavaEnvTh mainJavaEnv; - - GF_Mutex *m_mx; - GF_User m_user; - GF_SystemRTInfo m_rti; - - int do_log; - private: - char m_cfg_dir[GF_MAX_PATH]; - char m_modules_dir[GF_MAX_PATH]; - char m_cache_dir[GF_MAX_PATH]; - char m_font_dir[GF_MAX_PATH]; - void setJavaEnv(JavaEnvTh * envToSet, JNIEnv *env, jobject callback); - private: - void SetupLogs(); - void Shutdown(); - void DisplayRTI(); - protected: - JavaEnvTh * getEnv(); - - public: - CNativeWrapper(); - ~CNativeWrapper(); - int init(JNIEnv * env, void * bitmap, jobject * callback, int width, int height, const char * cfg_dir, const char * modules_dir, const char * cache_dir, const char * font_dir, const char * urlToLoad); - - int connect(const char *url); - void disconnect(); - void step(void * env, void * bitmap); - void resize(int w, int h); - void setAudioEnvironment(JavaVM* javaVM); - - void onMouseDown(float x, float y); - void onMouseUp(float x, float y); - void onMouseMove(float x, float y); - void onKeyPress(int keycode, int rawkeycode, int up, int flag, int unicode); - void translate_key(ANDROID_KEYCODE keycode, GF_EventKey *evt); - void navigate( GF_Event* evt); - void setGpacPreference( const char * category, const char * name, const char * value); - public: - int MessageBox(const char* msg, const char* title, GF_Err status); - int Quit(int code); - GF_Config *create_default_config(char *file_path, char *file_name); - - static void on_gpac_log(void *cbk, u32 ll, u32 lm, const char *fmt, va_list list); - static Bool GPAC_EventProc(void *cbk, GF_Event *evt); - void progress_cbk(const char *title, u64 done, u64 total); - static void Osmo4_progress_cbk(const void *usr, const char *title, u64 done, u64 total); - - private: -#ifdef DEBUG_MODE - FILE *debug_f; -#endif - void debug_log(const char* msg); - -}; - diff --git a/applications/osmo4_android/jni/wrapper_jni.c b/applications/osmo4_android/jni/wrapper_jni.c deleted file mode 100644 index e9bcd0b..0000000 --- a/applications/osmo4_android/jni/wrapper_jni.c +++ /dev/null @@ -1,192 +0,0 @@ -//#include "wrapper_jni.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define jniTAG "WRAPPER_JNI" - -#define jniLOGV(X) __android_log_print(ANDROID_LOG_VERBOSE, jniTAG, X) -#define jniLOGI(X) __android_log_print(ANDROID_LOG_INFO, jniTAG, X) -#define jniLOGE(X) __android_log_print(ANDROID_LOG_ERROR, jniTAG, X) - -#define CAST_HANDLE(wr) jclass c = env->GetObjectClass(obj);\ - if (!c) return;\ - jfieldID fid = env->GetFieldID(c, "handle", "J");\ - if (!fid){\ - __android_log_print(ANDROID_LOG_ERROR, jniTAG, "No Field ID, ERROR");\ - return;\ - }\ - jlong h = env->GetLongField(obj, fid);\ - CNativeWrapper* wr = (CNativeWrapper*) h; -// __android_log_print(ANDROID_LOG_VERBOSE, jniTAG, "Handle = %p", wr); - -/* - * Class: com_gpac_Osmo4_GPACInstance - * Method: createInstance - * Signature: (Lcom/gpac/Osmo4/GpacCallback;IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I - */ -JNIEXPORT jlong JNICALL Java_com_gpac_Osmo4_GPACInstance_createInstance(JNIEnv * env, jclass obj, jobject callback, jint width, jint height, jstring cfg_dir, jstring modules_dir, jstring cache_dir, jstring font_dir, jstring url_to_open) -{ - jboolean isCopy; - const char * s1 = env->GetStringUTFChars(cfg_dir, &isCopy); - const char * s2 = env->GetStringUTFChars(modules_dir, &isCopy); - const char * s3 = env->GetStringUTFChars(cache_dir, &isCopy); - const char * s4 = env->GetStringUTFChars(font_dir, &isCopy); - const char * s5 = NULL; - if (url_to_open) - s5 = env->GetStringUTFChars(url_to_open, &isCopy); - else - s5 = NULL; - CNativeWrapper * gpac_obj = new CNativeWrapper(); - if (gpac_obj){ - int w = width; - int h = height; - jniLOGI("Calling gpac_obj->init()..."); - if (gpac_obj->init(env, NULL, &callback, - w, h, - s1, s2, s3, s4, s5)){ - jniLOGE("FAILED to init(), return code not 0"); - delete gpac_obj; - gpac_obj = NULL; - } - } else { - jniLOGE("FAILED to create new CNativeWrapper() : not enough memory ?"); - } - - env->ReleaseStringUTFChars(cfg_dir, s1); - env->ReleaseStringUTFChars(modules_dir, s2); - env->ReleaseStringUTFChars(cache_dir, s3); - env->ReleaseStringUTFChars(font_dir, s4); - if (s5) - env->ReleaseStringUTFChars(font_dir, s5); - __android_log_print(ANDROID_LOG_VERBOSE, jniTAG, "Returned Handle = %p", gpac_obj); - return (jlong) gpac_obj; -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacconnect(JNIEnv * env, jobject obj, jstring fileName) -{ - CAST_HANDLE(wr); - jniLOGV("connect::start"); - if (!wr){ - jniLOGV("connect::end : aborted"); - return; - } - jboolean isCopy; - const char * cFileName = env->GetStringUTFChars(fileName, &isCopy); - - wr->connect(cFileName); - - env->ReleaseStringUTFChars(fileName, cFileName); - jniLOGV("connect::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacdisconnect(JNIEnv * env, jobject obj){ - CAST_HANDLE(wr); - jniLOGV("disconnect::start"); - if (wr) - wr->disconnect(); - jniLOGV("disconnect::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacfree(JNIEnv * env, jobject obj) -{ - CAST_HANDLE(wr); - jniLOGV("free::start"); - if (wr) - delete wr; - jniLOGV("free::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacrender (JNIEnv * env, jobject obj) -{ - CAST_HANDLE(wr); - //jniLOGV("render::start"); - if (wr) - wr->step(env, NULL); - //jniLOGV("render::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpacresize (JNIEnv * env, jobject obj, jint width, jint height) -{ - CAST_HANDLE(wr); - jniLOGV("resize::start"); - if (wr) - wr->resize(width, height); - jniLOGV("resize::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventmousedown(JNIEnv * env, jobject obj, jfloat x, jfloat y){ - CAST_HANDLE(wr); - jniLOGV("mouseDown::start"); - if (wr) - wr->onMouseDown(x, y); - jniLOGV("mouseDown::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventmouseup(JNIEnv * env, jobject obj, jfloat x, jfloat y){ - CAST_HANDLE(wr); - jniLOGV("mouseUp::start"); - if (wr) - wr->onMouseUp(x, y); - jniLOGV("mouseUp::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventmousemove(JNIEnv * env, jobject obj, jfloat x, jfloat y){ - CAST_HANDLE(wr); - jniLOGV("mouseMouv::start"); - if (wr) - wr->onMouseMove(x, y); - jniLOGV("mouseMouv::end"); -} -//----------------------------------- -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_gpaceventkeypress(JNIEnv * env, jobject obj, jint keycode, jint rawkeycode, jint up, jint flag, jint unicode){ - CAST_HANDLE(wr); - jniLOGV("keypress::start"); - if (wr) - wr->onKeyPress(keycode, rawkeycode, up, flag, unicode); - jniLOGV("keypress::end"); -} -/* -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_getdpi(JNIEnv * env, jobject obj, jint keycode,jfloat x, jfloat y){ - CAST_HANDLE(wr); - jniLOGV("get DPI::start"); - jclass cls = (*env)->GetObjectClass(env, obj); - jmethodID mid = (*env)->GetStaticMethodID(env, cls, "getdpi", "(FF)V"); - if (mid == 0) - return; - (*env)->CallStaticIntMethod(env, cls, mid, x,y); - jniLOGV("get DPI::end"); -} -*/ - -/* - * Class: com_gpac_Osmo4_GPACInstance - * Method: setGpacPreference - * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V - */ -JNIEXPORT void JNICALL Java_com_gpac_Osmo4_GPACInstance_setGpacPreference - (JNIEnv * env, jobject obj, jstring category, jstring name, jstring value){ - CAST_HANDLE(wr); - jboolean isCopy; - const char * scat = env->GetStringUTFChars(category, &isCopy); - const char * sname = env->GetStringUTFChars(name, &isCopy); - const char * svalue; - if (value) - svalue = env->GetStringUTFChars(value, &isCopy); - else - svalue = NULL; - if (wr) - wr->setGpacPreference(scat, sname, svalue); - env->ReleaseStringUTFChars(category, scat); - env->ReleaseStringUTFChars(name, sname); - if (value) - env->ReleaseStringUTFChars(value, svalue); - } -//----------------------------------- - -#ifdef __cplusplus -} -#endif diff --git a/applications/osmo4_android/res/drawable-hdpi/icon.png b/applications/osmo4_android/res/drawable-hdpi/icon.png deleted file mode 100644 index 3f988c1..0000000 Binary files a/applications/osmo4_android/res/drawable-hdpi/icon.png and /dev/null differ diff --git a/applications/osmo4_android/res/drawable-ldpi/icon.png b/applications/osmo4_android/res/drawable-ldpi/icon.png deleted file mode 100644 index a7bbccd..0000000 Binary files a/applications/osmo4_android/res/drawable-ldpi/icon.png and /dev/null differ diff --git a/applications/osmo4_android/res/drawable-mdpi/icon.png b/applications/osmo4_android/res/drawable-mdpi/icon.png deleted file mode 100644 index 883b9dc..0000000 Binary files a/applications/osmo4_android/res/drawable-mdpi/icon.png and /dev/null differ diff --git a/applications/osmo4_android/res/layout/about_dialog.xml b/applications/osmo4_android/res/layout/about_dialog.xml deleted file mode 100644 index ad3ff7f..0000000 --- a/applications/osmo4_android/res/layout/about_dialog.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - diff --git a/applications/osmo4_android/res/layout/auth_requested.xml b/applications/osmo4_android/res/layout/auth_requested.xml deleted file mode 100644 index 6b12f81..0000000 --- a/applications/osmo4_android/res/layout/auth_requested.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - -