From 1bf6ce56d3c698db873e7b91a19a0f408fc74a64 Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Fri, 10 Feb 2012 22:48:44 +0100 Subject: [PATCH] Imported Upstream version 0.4.5+svn3462~dfsg0 --- applications/mp4box/filedump.c | 18 +- applications/mp4box/fileimport.c | 2 + applications/mp4box/main.c | 1 + applications/mp4client/main.c | 95 +- applications/osmo4_android/.classpath | 11 - applications/osmo4_android/.project | 33 - .../de.loskutov.anyedit.AnyEditTools.prefs | 16 - .../osmo4_android/AndroidManifest.xml | 52 - applications/osmo4_android/Osmo4_keystore | Bin 1244 -> 0 bytes applications/osmo4_android/build.properties | 4 - applications/osmo4_android/build.xml | 104 - applications/osmo4_android/default.properties | 11 - applications/osmo4_android/jni/README.txt | 2 - applications/osmo4_android/jni/wrapper.cpp | 916 ------- applications/osmo4_android/jni/wrapper.h | 228 -- applications/osmo4_android/jni/wrapper_jni.c | 192 -- .../osmo4_android/res/drawable-hdpi/icon.png | Bin 9339 -> 0 bytes .../osmo4_android/res/drawable-ldpi/icon.png | Bin 3105 -> 0 bytes .../osmo4_android/res/drawable-mdpi/icon.png | Bin 4070 -> 0 bytes .../osmo4_android/res/layout/about_dialog.xml | 24 - .../res/layout/auth_requested.xml | 38 - .../osmo4_android/res/layout/file_view.xml | 9 - .../osmo4_android/res/menu/main_menu.xml | 23 - .../osmo4_android/res/values/strings.xml | 58 - .../src/com/gpac/Osmo4/BitmapView.java | 93 - .../src/com/gpac/Osmo4/GPACInstance.java | 368 --- .../com/gpac/Osmo4/GPACInstanceInterface.java | 64 - .../src/com/gpac/Osmo4/GpacCallback.java | 286 -- .../src/com/gpac/Osmo4/GpacConfig.java | 170 -- .../src/com/gpac/Osmo4/Osmo4.java | 943 ------- .../com/gpac/Osmo4/Osmo4GLSurfaceView.java | 204 -- .../src/com/gpac/Osmo4/Osmo4Renderer.java | 97 - .../gpac/Osmo4/extra/FileArrayAdapter.java | 76 - .../gpac/Osmo4/extra/FileChooserActivity.java | 97 - .../src/com/gpac/Osmo4/extra/FileEntry.java | 61 - .../src/com/gpac/Osmo4/logs/GpacLogger.java | 157 -- applications/osmo4_ios/Resources/icon.png | Bin 7682 -> 0 bytes applications/osmo4_ios/Resources/osmo.icns | Bin 147235 -> 0 bytes applications/osmo4_ios/extract.c | 702 ----- applications/osmo4_ios/main.c | 2145 --------------- applications/osmo4_ios/osmo4ios-Info.plist | 24 - applications/osmo4_sym/aif/osmo4_icon.bmp | Bin 5862 -> 0 bytes .../osmo4_sym/aif/osmo4_icon_mask.bmp | Bin 414 -> 0 bytes applications/osmo4_sym/aif/osmo4_menu.bmp | Bin 3766 -> 0 bytes .../osmo4_sym/aif/osmo4_menu_mask.bmp | Bin 294 -> 0 bytes applications/osmo4_sym/aif/osmo4aif.rss | 14 - applications/osmo4_sym/osmo4.cpp | 82 - applications/osmo4_sym/osmo4.h | 38 - applications/osmo4_sym/osmo4_ui.cpp | 604 ----- applications/osmo4_sym/osmo4_ui.h | 181 -- applications/osmo4_sym/osmo4_view.cpp | 569 ---- applications/osmo4_sym/osmo4_view.h | 166 -- applications/osmo4_sym/playlist.cpp | 527 ---- applications/osmo4_sym/playlist.h | 110 - applications/osmo4_sym/res/osmo4.rss | 19 - applications/osmo4_sym/res/osmo4.svg | 35 - applications/osmo4_sym/res/osmo4_caption.rss | 21 - applications/osmo4_sym/res/osmo4_gen.rss | 59 - applications/osmo4_sym/res/osmo4_reg.rss | 31 - applications/osmo4_w32/AddressBar.cpp | 182 -- applications/osmo4_w32/AddressBar.h | 90 - applications/osmo4_w32/FileProps.cpp | 712 ----- applications/osmo4_w32/FileProps.h | 70 - applications/osmo4_w32/MainFrm.cpp | 1520 ----------- applications/osmo4_w32/MainFrm.h | 223 -- applications/osmo4_w32/OpenUrl.cpp | 98 - applications/osmo4_w32/OpenUrl.h | 49 - applications/osmo4_w32/Options.cpp | 1989 -------------- applications/osmo4_w32/Options.h | 624 ----- applications/osmo4_w32/Osmo4.cpp | 916 ------- applications/osmo4_w32/Osmo4.h | 115 - applications/osmo4_w32/Osmo4.rc | 872 ------ applications/osmo4_w32/Playlist.cpp | 941 ------- applications/osmo4_w32/Playlist.h | 120 - applications/osmo4_w32/Sliders.cpp | 139 - applications/osmo4_w32/Sliders.h | 54 - applications/osmo4_w32/StdAfx.cpp | 8 - applications/osmo4_w32/StdAfx.h | 30 - applications/osmo4_w32/res/Osmo4.rc2 | 13 - applications/osmo4_w32/res/error.ico | Bin 766 -> 0 bytes applications/osmo4_w32/res/maintool.bmp | Bin 1438 -> 0 bytes applications/osmo4_w32/res/message.ico | Bin 766 -> 0 bytes applications/osmo4_w32/res/osmo4.ico | Bin 15086 -> 0 bytes applications/osmo4_w32/res/pause.ico | Bin 1078 -> 0 bytes applications/osmo4_w32/res/play.ico | Bin 1078 -> 0 bytes applications/osmo4_w32/res/playlist.bmp | Bin 958 -> 0 bytes applications/osmo4_w32/res/stop.ico | Bin 1078 -> 0 bytes applications/osmo4_w32/resource.h | 322 --- applications/osmo4_wce/MainFrm.cpp | 642 ----- applications/osmo4_wce/MainFrm.h | 151 -- applications/osmo4_wce/OpenDlg.cpp | 92 - applications/osmo4_wce/OpenDlg.h | 47 - applications/osmo4_wce/Options.cpp | 1230 --------- applications/osmo4_wce/Options.h | 388 --- applications/osmo4_wce/Osmo4.cpp | 636 ----- applications/osmo4_wce/Osmo4.h | 111 - applications/osmo4_wce/Osmo4.rc | 756 ------ applications/osmo4_wce/ProgressBar.cpp | 133 - applications/osmo4_wce/ProgressBar.h | 53 - applications/osmo4_wce/Resource.h | 170 -- applications/osmo4_wce/StdAfx.cpp | 6 - applications/osmo4_wce/StdAfx.h | 39 - applications/osmo4_wce/newres.h | 28 - applications/osmo4_wce/res/Cmdbar.bmp | Bin 886 -> 0 bytes applications/osmo4_wce/res/Osmo4.ico | Bin 1078 -> 0 bytes applications/osmo4_wce/res/Osmo4.rc2 | 13 - applications/osmo4_wx/Darwin.Info.plist | 32 - .../osmo4_wx/Darwin.InfoPlist.strings | Bin 456 -> 0 bytes applications/osmo4_wx/Darwin.Osmo.icns | Bin 38570 -> 0 bytes applications/osmo4_wx/Makefile | 94 - applications/osmo4_wx/Playlist.cpp | 826 ------ applications/osmo4_wx/Playlist.h | 134 - applications/osmo4_wx/fileprops.cpp | 608 ----- applications/osmo4_wx/fileprops.h | 83 - applications/osmo4_wx/menubtn.cpp | 863 ------ applications/osmo4_wx/menubtn.h | 314 --- applications/osmo4_wx/osmo4.ico | Bin 15086 -> 0 bytes applications/osmo4_wx/osmo4.xpm | 301 --- applications/osmo4_wx/playlist.xpm | 158 -- applications/osmo4_wx/resource.h | 16 - applications/osmo4_wx/toolbar.xpm | 254 -- applications/osmo4_wx/wxGPACControl.cpp | 1031 -------- applications/osmo4_wx/wxGPACControl.h | 137 - applications/osmo4_wx/wxOsmo4.cpp | 2352 ----------------- applications/osmo4_wx/wxOsmo4.h | 390 --- applications/osmo4_wx/wxOsmo4.rc | 72 - applications/osmophone/Osmo4.ico | Bin 1078 -> 0 bytes applications/osmophone/main.cpp | 1474 ----------- applications/osmophone/newres.h | 41 - applications/osmophone/openfile.cpp | 405 --- applications/osmophone/osmophone.rc | 423 --- applications/osmophone/resource.h | 169 -- doc/configuration.html | 6 +- doc/man/mp4box.1 | 3 + include/gpac/internal/terminal_dev.h | 2 +- modules/Makefile | 2 +- modules/aac_in/aac_in.c | 2 +- modules/dx_hw/dx_2d.c | 182 +- modules/osd/Makefile | 57 + modules/osd/osd.c | 300 +++ src/compositor/compositor.c | 13 +- src/compositor/compositor_2d.c | 6 + src/compositor/mpeg4_grouping_2d.c | 4 - src/compositor/mpeg4_timesensor.c | 6 +- src/export.cpp | 1 + src/media_tools/mpd.c | 10 + src/odf/descriptors.c | 27 +- src/scene_manager/loader_bt.c | 4 +- src/scenegraph/vrml_smjs.c | 4 +- src/terminal/media_manager.c | 2 + src/terminal/network_service.c | 13 +- src/terminal/object_manager.c | 4 +- src/terminal/scene.c | 4 + src/terminal/terminal.c | 77 +- src/utils/module.c | 47 +- src/utils/module_wrap.h | 1 + src/utils/os_module.c | 4 + 157 files changed, 667 insertions(+), 33653 deletions(-) delete mode 100644 applications/osmo4_android/.classpath delete mode 100644 applications/osmo4_android/.project delete mode 100644 applications/osmo4_android/.settings/de.loskutov.anyedit.AnyEditTools.prefs delete mode 100644 applications/osmo4_android/AndroidManifest.xml delete mode 100644 applications/osmo4_android/Osmo4_keystore delete mode 100644 applications/osmo4_android/build.properties delete mode 100644 applications/osmo4_android/build.xml delete mode 100644 applications/osmo4_android/default.properties delete mode 100644 applications/osmo4_android/jni/README.txt delete mode 100644 applications/osmo4_android/jni/wrapper.cpp delete mode 100644 applications/osmo4_android/jni/wrapper.h delete mode 100644 applications/osmo4_android/jni/wrapper_jni.c delete mode 100644 applications/osmo4_android/res/drawable-hdpi/icon.png delete mode 100644 applications/osmo4_android/res/drawable-ldpi/icon.png delete mode 100644 applications/osmo4_android/res/drawable-mdpi/icon.png delete mode 100644 applications/osmo4_android/res/layout/about_dialog.xml delete mode 100644 applications/osmo4_android/res/layout/auth_requested.xml delete mode 100644 applications/osmo4_android/res/layout/file_view.xml delete mode 100644 applications/osmo4_android/res/menu/main_menu.xml delete mode 100644 applications/osmo4_android/res/values/strings.xml delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/BitmapView.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/GPACInstance.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/GPACInstanceInterface.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/GpacCallback.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/GpacConfig.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/Osmo4.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/Osmo4GLSurfaceView.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/Osmo4Renderer.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/extra/FileArrayAdapter.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/extra/FileChooserActivity.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/extra/FileEntry.java delete mode 100644 applications/osmo4_android/src/com/gpac/Osmo4/logs/GpacLogger.java delete mode 100644 applications/osmo4_ios/Resources/icon.png delete mode 100644 applications/osmo4_ios/Resources/osmo.icns delete mode 100644 applications/osmo4_ios/extract.c delete mode 100644 applications/osmo4_ios/main.c delete mode 100644 applications/osmo4_ios/osmo4ios-Info.plist delete mode 100644 applications/osmo4_sym/aif/osmo4_icon.bmp delete mode 100644 applications/osmo4_sym/aif/osmo4_icon_mask.bmp delete mode 100644 applications/osmo4_sym/aif/osmo4_menu.bmp delete mode 100644 applications/osmo4_sym/aif/osmo4_menu_mask.bmp delete mode 100644 applications/osmo4_sym/aif/osmo4aif.rss delete mode 100644 applications/osmo4_sym/osmo4.cpp delete mode 100644 applications/osmo4_sym/osmo4.h delete mode 100644 applications/osmo4_sym/osmo4_ui.cpp delete mode 100644 applications/osmo4_sym/osmo4_ui.h delete mode 100644 applications/osmo4_sym/osmo4_view.cpp delete mode 100644 applications/osmo4_sym/osmo4_view.h delete mode 100644 applications/osmo4_sym/playlist.cpp delete mode 100644 applications/osmo4_sym/playlist.h delete mode 100644 applications/osmo4_sym/res/osmo4.rss delete mode 100644 applications/osmo4_sym/res/osmo4.svg delete mode 100644 applications/osmo4_sym/res/osmo4_caption.rss delete mode 100644 applications/osmo4_sym/res/osmo4_gen.rss delete mode 100644 applications/osmo4_sym/res/osmo4_reg.rss delete mode 100644 applications/osmo4_w32/AddressBar.cpp delete mode 100644 applications/osmo4_w32/AddressBar.h delete mode 100644 applications/osmo4_w32/FileProps.cpp delete mode 100644 applications/osmo4_w32/FileProps.h delete mode 100644 applications/osmo4_w32/MainFrm.cpp delete mode 100644 applications/osmo4_w32/MainFrm.h delete mode 100644 applications/osmo4_w32/OpenUrl.cpp delete mode 100644 applications/osmo4_w32/OpenUrl.h delete mode 100644 applications/osmo4_w32/Options.cpp delete mode 100644 applications/osmo4_w32/Options.h delete mode 100644 applications/osmo4_w32/Osmo4.cpp delete mode 100644 applications/osmo4_w32/Osmo4.h delete mode 100644 applications/osmo4_w32/Osmo4.rc delete mode 100644 applications/osmo4_w32/Playlist.cpp delete mode 100644 applications/osmo4_w32/Playlist.h delete mode 100644 applications/osmo4_w32/Sliders.cpp delete mode 100644 applications/osmo4_w32/Sliders.h delete mode 100644 applications/osmo4_w32/StdAfx.cpp delete mode 100644 applications/osmo4_w32/StdAfx.h delete mode 100644 applications/osmo4_w32/res/Osmo4.rc2 delete mode 100644 applications/osmo4_w32/res/error.ico delete mode 100644 applications/osmo4_w32/res/maintool.bmp delete mode 100644 applications/osmo4_w32/res/message.ico delete mode 100644 applications/osmo4_w32/res/osmo4.ico delete mode 100644 applications/osmo4_w32/res/pause.ico delete mode 100644 applications/osmo4_w32/res/play.ico delete mode 100644 applications/osmo4_w32/res/playlist.bmp delete mode 100644 applications/osmo4_w32/res/stop.ico delete mode 100644 applications/osmo4_w32/resource.h delete mode 100644 applications/osmo4_wce/MainFrm.cpp delete mode 100644 applications/osmo4_wce/MainFrm.h delete mode 100644 applications/osmo4_wce/OpenDlg.cpp delete mode 100644 applications/osmo4_wce/OpenDlg.h delete mode 100644 applications/osmo4_wce/Options.cpp delete mode 100644 applications/osmo4_wce/Options.h delete mode 100644 applications/osmo4_wce/Osmo4.cpp delete mode 100644 applications/osmo4_wce/Osmo4.h delete mode 100644 applications/osmo4_wce/Osmo4.rc delete mode 100644 applications/osmo4_wce/ProgressBar.cpp delete mode 100644 applications/osmo4_wce/ProgressBar.h delete mode 100644 applications/osmo4_wce/Resource.h delete mode 100644 applications/osmo4_wce/StdAfx.cpp delete mode 100644 applications/osmo4_wce/StdAfx.h delete mode 100644 applications/osmo4_wce/newres.h delete mode 100644 applications/osmo4_wce/res/Cmdbar.bmp delete mode 100644 applications/osmo4_wce/res/Osmo4.ico delete mode 100644 applications/osmo4_wce/res/Osmo4.rc2 delete mode 100644 applications/osmo4_wx/Darwin.Info.plist delete mode 100644 applications/osmo4_wx/Darwin.InfoPlist.strings delete mode 100644 applications/osmo4_wx/Darwin.Osmo.icns delete mode 100644 applications/osmo4_wx/Makefile delete mode 100644 applications/osmo4_wx/Playlist.cpp delete mode 100644 applications/osmo4_wx/Playlist.h delete mode 100644 applications/osmo4_wx/fileprops.cpp delete mode 100644 applications/osmo4_wx/fileprops.h delete mode 100644 applications/osmo4_wx/menubtn.cpp delete mode 100644 applications/osmo4_wx/menubtn.h delete mode 100644 applications/osmo4_wx/osmo4.ico delete mode 100644 applications/osmo4_wx/osmo4.xpm delete mode 100644 applications/osmo4_wx/playlist.xpm delete mode 100644 applications/osmo4_wx/resource.h delete mode 100644 applications/osmo4_wx/toolbar.xpm delete mode 100644 applications/osmo4_wx/wxGPACControl.cpp delete mode 100644 applications/osmo4_wx/wxGPACControl.h delete mode 100644 applications/osmo4_wx/wxOsmo4.cpp delete mode 100644 applications/osmo4_wx/wxOsmo4.h delete mode 100644 applications/osmo4_wx/wxOsmo4.rc delete mode 100644 applications/osmophone/Osmo4.ico delete mode 100644 applications/osmophone/main.cpp delete mode 100644 applications/osmophone/newres.h delete mode 100644 applications/osmophone/openfile.cpp delete mode 100644 applications/osmophone/osmophone.rc delete mode 100644 applications/osmophone/resource.h create mode 100644 modules/osd/Makefile create mode 100644 modules/osd/osd.c 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 d504ce3a3b841d837af7cdc1d64933ba94508537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1244 zcmezO_TO6u1_mY|W&~q_{Nmhvlla8El%o91lpoIQC?`7OTMSBdIn06TOv2kg$ zF|sgfF$ppYAGCj!gXr%ld*T~Q(Dvuj47Po3O>9#(4{cW9Vrl0)j zTc=O`I;TEs?`*?Qk@+pQYNd_aWSdQLYbX3lZ8@^BY`qlcCeJt-_qO#6_n7jh9G%j- z-QO6(f!}uF09x)=gZF34=yeZ zwm2!Y@yO)U#_LvZGnR4*I-~f*#AQz>Po%o|obB1`9{vluC^P5Zzk;Xt_ut9op2{^> z_)hrigpwfp@~g5^DnzBS} z_B=tB8?TpiGqx;V7r5_;OsGPetWuomw}^9goi`u0$VKh9x6=$`(PVRqDGB?$*--jt z%p}RhDoTfs%DQWx-8XU1wwJ6Pii~P;o_W`?RccY&mxWRhmQHwZW;I zHA2tSz!I3G&l@x`o(5u*1QTsxg?p@I3L+1z%0hx*vnwh*vZt`$gt+deOF$t%WLx(yY7Cxu}vcR#^j)9f>}a; zjx4)ZbzklI-w<8bAF~xVoUxhC^+aKR!vZrGiR&FPlY@-hJg+?TUC;YOZqI+MrWZ$< zio-WI>YR`K8&JjTcicg~V#Dmiyrr9hwS*3OyPin0+vHQ9x{=X;F7ut|6K2jV{?Nf9 z(spcSBoi|u10%BYfC0q}bXU6Wt@NBd1s!VNHf<=$)jO_x!`6D`=kSX?Li1lwNN;c8 zKYCYt-vhlMnRTD9*Y1)(zy8tJB(vMU4lQB)J*CxumWcnpIWJeVug`gOME2t9l|RHR zJdQa!FJ2vg>0s1OhfhWCm-W0}zs>rZC(D)Jt63Ga;vX`fd?e1i_~*u*?81TCeGg9j YUG(SytCLJ{mQPQ8h1A?T$8RkH04{ - - - - - - - - - - - - - - - - - - - - - - - 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 3f988c171da4efbca50470c576d8aae36bb9b1b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9339 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 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 a7bbccd4c8ed88d887446cacac19c5e84a20b9c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3105 zcmV++4BqpJP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_000ZLNklcy_QRXeVW0(`g$yHX#oH{{*7-aqkHz$N`^7p zkxErKMKOl4F`pocs%4sKi{nPq9Ctn=if45}c*70`kKWhb{vQ5R=&u0#3_u+Kbpg~p{{109?EoDE=pbY19URxUNmUR0;JWK7vN4}uzy7l; zw56;J_rCKER>kA&FHH0EVsG!Gfn;)e5r8}Z1Yj7Tet?YvFadA?6aX3kF8~q15P%N> zyw7nM^Lif=!r|}T{pOpOK9eeYZn*^j@ZI_IrDm6_=>W$WZ;h+)4nRLs6uOt=Xc1#} zInPsp!$Elt2L&7sDiQ>`kuh2U&?ACCuQNtH0R0xALjY})q&FT8h2{dlV~ND4!#q}4 z2ml}=G^^_KhXK2Ld}X3faM6kb=RWId|^d1OV)4Y61X6Hg8tGRbKwx15PLP0dyRo zZGzCbDIPEXSeWKDYXAU`PMLDkvm9si0CWD22*uQ^2s;a6004rCn z%quJ`ycCHD#^u~>{Ekq9LciTko~8yg$(S8g}P^8o)?Rkik@BvC&=M*;ews{Zuh zq9WP+wmU0H~^}y0f^rnBws`O`STG zrca-KV$Pg7IZmhZDxbSW%R9v2Gv zL{SFzjpxbaF>~h3EJ!#nFYoWWyStydc=6(|Q>oPKj*gB!wr#)A($ey9I2^wD)TvV( z09=3l^;g7bXlMWc4Cd!Q(#seE093>H+`m^=<^ce{SyCcxm!$n?0cr!RA1liJpENxH z5Rb=K;3?(W{> zcDoA$fdE%fP=H7zg5u(0Or1Iv#l^*lMx)5j&vyxeaBEvzTYGhNb;;qwhp&jYZQC}a zENf7AI^P!oxQOITUtbgexMWwCK)SB+08+M{866z#pX|JHLNpphI2=YW7=+*Nr$8V;q9}&j+S-0zR#q0B9P{qG??x&X zvvf%s1ptXLK~+^R0C2e;4=+iQn*p#G1Ml%%v8;CQ-i^-A&H`Q6H_Eci6h(oms!UN7 zD2f7EmLW+Jc%FwW%TQGnZnvAcTrTA1=8_-?)4RL7?_0chF<+Ohc>s#8yAEP*E+YUu z5wi_L0st-rAOlzcz!Aah@4u=gxpe8${X~=_NfJqt#2gL>c%BDi3`B%XCIem9k;!Dh z7=s`Pa5|k#mSyI2I$_)PSI(R{6K!p6orswk90Zq6g8{G^BTf_z0N@5~+th7)&>EM{ zrD?v&FgteaP?E{youVj05Cm`>2ae;w7=vxw6EM22!!Qh(rU@bfV+=gcLli|2k(V)6 zH#u(d<(C;hFu(vHO=PB0sfz%>AreWaMX@V&Ik_Z9Ds@Fq@W2BPBuvxv@H`KW<5;#> zT9$=OCWCZ34PDofN~MrWr6!=V1(oAC;&~ne0|Rvc(A?aNt@ZT?_V+v7ra8p~kOXvI z)6N3`_ijmvF~sxl4g&B1oS4acZu_iR;!l?>0RR*f6clIShzLY90h3iH3zJnTolZ|c z5fNjI!Rd5H0buRgwOHTM0>SHz=jeL=7=TfZ8y-@WcL9Jq^wd+C0k`}09*)b%0Nkdz zKusonfBo#U007IfKt!-@8@6r3G|dTR48xe1u8%@xG8ver3CpsGh^}gv<=)=E(TLCw zVA$a}y|JyW2ji_U-YqLTdYeYVl@bKR`0h|Y5Xxh$+M+X2r+uGXR77YIS0)P+zxxfFxC+E!z0l?~2 zt4;wJHcb*i zJw1+Rbp4kFp-}s1GWoZ*ZHoXVmi*+r%6>iqO@?7GNfdW?ef6um_Kb`~{U3h#^mNPe zeE^_cmJbj4{SO`)7|6VE?%ZXdE82C^t)4?Z|D-7pFV0ldlc{pTZ*HH~M_ zzCW2^0%*gA4cOe=Z1`u*`rpjZ&@Dm3aK!**lF3Efz`)e1^77^*$z(D;HdbSqCd&d% zR%enzr0Y6k4#$~Laq-u-^zT3HH#^~Jm``s~s{!Ucg30C=0{(cy9(>Wsx6+l~QkSQ`v^8PD4F! 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 883b9dc7332c18b1c8c0b428e6cd4c74171b0147..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4070 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 YCmgQXxMub0=l}o!07*qoM6N<$f>(sn=l}o! 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 @@ - - - - - - - - - - - - - - -