Merge pull request #306 from licaiguo/add-android-pull-clean

Add android Support
This commit is contained in:
Ethan Hugg 2014-02-19 09:59:25 -08:00
commit 0a73155bdd
34 changed files with 780 additions and 35 deletions

View File

@ -1,4 +1,4 @@
UNAME=$(shell uname | tr A-Z a-z | tr -d \\-[:digit:].)
OS=$(shell uname | tr A-Z a-z | tr -d \\-[:digit:].)
ARCH=$(shell uname -m)
LIBPREFIX=lib
LIBSUFFIX=a
@ -8,18 +8,10 @@ AR_OPTS=cr $@
LINK_LIB=-l$(1)
CFLAGS_OPT=-O3
CFLAGS_DEBUG=-g
CFLAGS_M32=-m32
CFLAGS_M64=-m64
BUILDTYPE=Release
V=Yes
PREFIX=/usr/local
ifeq (, $(ENABLE64BIT))
ifeq ($(ARCH), x86_64)
ENABLE64BIT=Yes
endif
endif
ifeq (,$(wildcard ./gtest))
HAVE_GTEST=No
else
@ -40,25 +32,11 @@ CFLAGS += -fsanitize=address
LDFLAGS += -fsanitize=address
endif
ifeq ($(ENABLE64BIT), Yes)
CFLAGS += $(CFLAGS_M64)
LDFLAGS += $(CFLAGS_M64)
ASMFLAGS_PLATFORM = -DUNIX64
else
CFLAGS += $(CFLAGS_M32)
LDFLAGS += $(CFLAGS_M32)
ASMFLAGS_PLATFORM = -DX86_32
endif
include build/platform-$(OS).mk
include build/platform-$(UNAME).mk
ifeq ($(USE_ASM),Yes)
CFLAGS += -DX86_ASM
endif
CFLAGS += -DNO_DYNAMIC_VP
LDFLAGS +=
ASMFLAGS += $(ASMFLAGS_PLATFORM) -DNO_DYNAMIC_VP
#### No user-serviceable parts below this line
@ -129,16 +107,26 @@ include codec/common/targets.mk
include codec/decoder/targets.mk
include codec/encoder/targets.mk
include codec/processing/targets.mk
ifneq (android, $(OS))
include codec/console/dec/targets.mk
include codec/console/enc/targets.mk
endif
libraries: $(LIBPREFIX)wels.$(LIBSUFFIX)
LIBRARIES += $(LIBPREFIX)wels.$(LIBSUFFIX)
libraries: $(LIBPREFIX)wels.$(LIBSUFFIX) $(LIBPREFIX)wels.$(SHAREDLIBSUFFIX)
LIBRARIES += $(LIBPREFIX)wels.$(LIBSUFFIX) $(LIBPREFIX)wels.$(SHAREDLIBSUFFIX)
$(LIBPREFIX)wels.$(LIBSUFFIX): $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
$(QUIET)rm -f $@
$(QUIET_AR)$(AR) $(AR_OPTS) $+
$(LIBPREFIX)wels.$(SHAREDLIBSUFFIX): $(ENCODER_OBJS) $(DECODER_OBJS) $(PROCESSING_OBJS) $(COMMON_OBJS)
rm -f $@
@echo
@echo $+
@echo
$(CXX) -shared $(LDFLAGS) -o $@ $+
install: $(LIBPREFIX)wels.$(LIBSUFFIX)
mkdir -p $(PREFIX)/lib
mkdir -p $(PREFIX)/include/wels

View File

@ -38,7 +38,7 @@ OS Support
- Windows 64-bit and 32-bit
- Mac OS X 64-bit and 32-bit
- Linux 64-bit and 32-bit
- Android 32-bit (initial release does not include this target, will follow soon)
- Android 32-bit
- iOS 64-bit and 32-bit (not supported yet, may be added in the future)
Processor Support
@ -51,6 +51,17 @@ Building the Library
--------------------
NASM needed to be installed for assembly code: workable version 2.07 or above, nasm can downloaded from http://www.nasm.us/
For Android Builds
------------------
To build for android platform, You need to install android sdk and ndk. You also need to export <ANDROID_SDK>/tools to PATH. On Linux, this can be done by
'export PATH=<ANDROID_SDK>/tools:$PATH'
The codec and demo can be built by
'make OS=android NDKROOT=<ANDROID_NDK>'
You can also set ARCH, APILEVEL, GCCVERSION according to your device and NDK version.
ARCH specifies the architecture of android device. Currently only arm and x86 are supported, the default is arm.
APILEVEL specifies android api level, the api level can be 12-19, the default is 19.
GCCVERSION specifies which gcc in NDK is used, the default is 4.8.
For Windows Builds
------------------
@ -67,7 +78,7 @@ You will also need to set your INCLUDE and LIB paths to point to your VS and SDK
export INCLUDE="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include;C:\Program Files (x86)\Windows Kits\8.0\Include\um;C:\Program Files (x86)\Windows Kits\8.0\Include\shared"
export LIB="C:\Program Files (x86)\Windows Kits\8.0\Lib\Win8\um\x86;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib"
Then add 'UNAME=msvc' to the make line of the 'For All Platforms' instructions.
Then add 'OS=msvc' to the make line of the 'For All Platforms' instructions.
For All Platforms
-------------------

35
build/platform-android.mk Normal file
View File

@ -0,0 +1,35 @@
USE_ASM = No
ARCH = arm
SHAREDLIBSUFFIX = so
GCCVERSION = 4.8
APILEVEL = 19
HOSTOS = $(shell uname | tr A-Z a-z | tr -d \\-[:digit:].)
HOSTARCH = $(shell uname -m)
ifeq ($(ARCH), arm)
GCCPATHPREFIX = arm-linux-androideabi
GCCPREFIX = arm-linux-androideabi
CFLAGS += -march=armv7-a -mfloat-abi=softfp
ifeq (Yes, $(HAVE_NEON))
CFLAGS += -mfpu=neon
endif
LDFLAGS += -march=armv7-a -Wl,--fix-cortex-a8
APP_ABI = armeabi-v7a
else
GCCPATHPREFIX = x86
GCCPREFIX = i686-linux-android
APP_ABI = x86
endif
SYSROOT = $(NDKROOT)/platforms/android-$(APILEVEL)/arch-$(ARCH)
CXX = $(NDKROOT)/toolchains/$(GCCPATHPREFIX)-$(GCCVERSION)/prebuilt/$(HOSTOS)-$(HOSTARCH)/bin/$(GCCPREFIX)-g++
CFLAGS += -DLINUX -fpic --sysroot=$(SYSROOT) -fno-rtti -fno-exceptions
LDFLAGS += --sysroot=$(SYSROOT) -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,-soname,libwels.so
binaries : decdemo encdemo
decdemo: libraries
sh -c 'cd ./codec/build/android/dec/jni; $(NDKROOT)/ndk-build -B APP_ABI=$(APP_ABI); cd ..; android update project -p . ; ant debug; cd ../../../..'
encdemo: libraries
sh -c 'cd ./codec/build/android/enc/jni; $(NDKROOT)/ndk-build -B APP_ABI=$(APP_ABI); cd ..; android update project -p . ; ant debug; cd ../../../..'

View File

@ -1,5 +1,6 @@
include build/platform-x86-common.mk
ASM = nasm
SHAREDLIBSUFFIX = dylib
CFLAGS += -Wno-deprecated-declarations -Werror -fPIC -DMACOS -DMT_ENABLED -MMD -MP
LDFLAGS += -lpthread
ASMFLAGS += --prefix _ -DNOPREFIX

View File

@ -1,4 +1,6 @@
include build/platform-x86-common.mk
ASM = nasm
SHAREDLIBSUFFIX = so
CFLAGS += -fPIC -DMT_ENABLED
LDFLAGS += -lpthread
ASMFLAGS += -DNOPREFIX

View File

@ -1,4 +1,6 @@
include build/platform-x86-common.mk
ASM = nasm
SHAREDLIBSUFFIX = so
CFLAGS += -Werror -fPIC -DLINUX -DMT_ENABLED -MMD -MP
LDFLAGS += -lpthread
ASMFLAGS += -DNOPREFIX

View File

@ -1,4 +1,6 @@
include build/platform-x86-common.mk
ASM = nasm
SHAREDLIBSUFFIX = dll
CFLAGS += -DMT_ENABLED -MMD -MP
LDFLAGS +=
ifeq ($(ENABLE64BIT), Yes)

View File

@ -0,0 +1,20 @@
CFLAGS_M32=-m32
CFLAGS_M64=-m64
ifeq (, $(ENABLE64BIT))
ifeq ($(ARCH), x86_64)
ENABLE64BIT=Yes
endif
endif
ifeq ($(ENABLE64BIT), Yes)
CFLAGS += $(CFLAGS_M64)
LDFLAGS += $(CFLAGS_M64)
ASMFLAGS_PLATFORM = -DUNIX64
else
CFLAGS += $(CFLAGS_M32)
LDFLAGS += $(CFLAGS_M32)
ASMFLAGS_PLATFORM = -DX86_32
endif
ifeq ($(USE_ASM),Yes)
CFLAGS += -DX86_ASM
endif
ASMFLAGS += $(ASMFLAGS_PLATFORM) -DNO_DYNAMIC_VP

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wels.dec"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".WelsDecTest"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -0,0 +1,14 @@
## yongzxu: refine mk files for android platform
#To fix the bug that Intel NDK can't creat directory
$(shell mkdir -p $(TARGET_OBJS)/cpufeatures)
$(shell mkdir -p $(TARGET_OBJS)/welsdecdemo)
LOCAL_PATH := $(call my-dir)
MY_LOCAL_PATH := $(LOCAL_PATH)
# Step3
#Generate the libwelsdecdemo.so file
include $(LOCAL_PATH)/welsdecdemo.mk
LOCAL_PATH := $(MY_LOCAL_PATH)

View File

@ -0,0 +1,21 @@
# debug/release, default is release
ifeq ($(OPTIM_debug),true)
APP_OPTIM := debug
else
APP_OPTIM := release
endif
# x86/armeabi-v7a/armeabi, default is armeabi-v7a
ifeq ($(ABI_x86),true)
APP_ABI := x86
else
ifeq ($(ABI_armeabi),true)
APP_ABI := armeabi
else
APP_ABI := armeabi-v7a
endif
endif
APP_STL := stlport_shared
#APP_STL := gnustl_shared
APP_PLATFORM := android-12

View File

@ -0,0 +1,24 @@
#include <string.h>
#include <stdlib.h>
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "welsdec"
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
extern int DecMain (int argc, char* argv[]);
extern "C"
JNIEXPORT void JNICALL Java_com_wels_dec_WelsDecTest_DoDecoderTest
(JNIEnv* env, jobject thiz, jstring jsFileNameIn, jstring jsFileNameOut) {
/**************** Add the native codes/API *****************/
char* argv[3];
int argc = 3;
argv[0] = (char*) ("decConsole.exe");
argv[1] = (char*) ((*env).GetStringUTFChars (jsFileNameIn, NULL));
argv[2] = (char*) ((*env).GetStringUTFChars (jsFileNameOut, NULL));
LOGI ("Start to run JNI module!+++");
DecMain (argc, argv);
LOGI ("End to run JNI module!+++");
}

View File

@ -0,0 +1,56 @@
# Generate the libwelsdecdemo.so file
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
#LOCAL_MODULE := stlport
#LOCAL_SRC_FILES := $(NDK_ROOT)/sources/cxx-stl/stlport/libs/$(TARGET_ARCH_ABI)/libstlport_static.a
#LOCAL_EXPORT_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/stlport/stlport
#include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := wels
LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../../../libwels.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
#
# Module Settings
#
LOCAL_MODULE := welsdecdemo
#
# Source Files
#
CODEC_PATH := ../../../../
CONSOLE_DEC_PATH := ../../../../console/dec
LOCAL_SRC_FILES := \
$(CONSOLE_DEC_PATH)/src/h264dec.cpp \
$(CONSOLE_DEC_PATH)/src/read_config.cpp \
$(CONSOLE_DEC_PATH)/src/d3d9_utils.cpp \
$(CODEC_PATH)/common/logging.cpp \
myjni.cpp
#
# Header Includes
#
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../../../api/svc \
$(LOCAL_PATH)/../../../../console/dec/inc \
$(LOCAL_PATH)/../../../../common
#
# Compile Flags and Link Libraries
#
LOCAL_CFLAGS := -O3 -DANDROID_NDK
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_ARM_MODE := arm
endif
#LOCAL_STATIC_LIBRARIES += stlport
LOCAL_LDLIBS := -llog
#LOCAL_LDLIBS += -L../../../ -lwels
LOCAL_SHARED_LIBRARIES := wels
include $(BUILD_SHARED_LIBRARY)

View File

@ -0,0 +1,40 @@
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

View File

@ -0,0 +1,14 @@
# 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 edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-12

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">"
<Button
android:id="@+id/cfg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load bitstreams" />
<Button
android:id="@+id/buttonSW"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">WelsDecoderTest</string>
</resources>

View File

@ -0,0 +1,117 @@
package com.wels.dec;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import java.io.*;
import java.util.Vector;
public class WelsDecTest extends Activity {
/** Called when the activity is first created. */
private OnClickListener OnClickEvent;
private Button mBtnLoad, mBtnStartSW;
final String mStreamPath = "/sdcard/wels-seq/";
Vector<String> mStreamFiles = new Vector<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
System.out.println("Here we go ...");
Log.i(TAG, "sdcard path:" + Environment.getExternalStorageDirectory().getAbsolutePath());
setContentView(R.layout.main);
mBtnLoad = (Button)findViewById(R.id.cfg);
mBtnStartSW = (Button)findViewById(R.id.buttonSW);
OnClickEvent = new OnClickListener()
{
public void onClick(View v)
{
switch(v.getId())
{
case R.id.cfg:
{
String cfgFile = mStreamPath + "BitStreams.txt";
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(cfgFile));
String text;
while((text = bufferedReader.readLine()) != null) {
mStreamFiles.add(mStreamPath + text);
Log.i(TAG, mStreamPath + text);
}
bufferedReader.close();
} catch(IOException e) {
Log.e("WELS_DEC", e.getMessage());
}
}
break;
case R.id.buttonSW:
{
System.out.println("decode sequence number = " + mStreamFiles.size());
Log.i("WSE_DEC","after click");
try {
for (int k=0; k < mStreamFiles.size(); k++) {
String inFile = mStreamFiles.get(k);
String outFile = mStreamFiles.get(k) + ".yuv";
Log.i(TAG, "input file:" + inFile+ " output file:" + outFile);
DoDecoderTest(inFile, outFile);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
mStreamFiles.clear();
tv.setText( "Decoder is completed!" );
}
break;
}
}
};
mBtnLoad.setOnClickListener(OnClickEvent);
mBtnStartSW.setOnClickListener(OnClickEvent);
System.out.println("Done!");
}
@Override
public void onStart()
{
Log.i("WSE_DEC","welsdecdemo onStart");
super.onStart();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
default:
return super.onKeyDown(keyCode, event);
}
}
public native void DoDecoderTest(String infilename, String outfilename);
private static final String TAG = "welsdec";
static {
try {
System.loadLibrary("wels");
System.loadLibrary("stlport_shared");
System.loadLibrary("welsdecdemo");
Log.v(TAG, "Load libwelsdec successful");
}
catch(Exception e) {
Log.e(TAG, "Failed to load welsdec"+e.getMessage());
}
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wels.enc"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".WelsEncTest"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -0,0 +1,14 @@
## yongzxu: refine mk files for android platform
#To fix the bug that Intel NDK can't creat directory
$(shell mkdir -p $(TARGET_OBJS)/cpufeatures)
$(shell mkdir -p $(TARGET_OBJS)/welsdecdemo)
LOCAL_PATH := $(call my-dir)
MY_LOCAL_PATH := $(LOCAL_PATH)
# Step3
#Generate the libwelsdecdemo.so file
include $(LOCAL_PATH)/welsencdemo.mk
LOCAL_PATH := $(MY_LOCAL_PATH)

View File

@ -0,0 +1,21 @@
# debug/release, default is release
ifeq ($(OPTIM_debug),true)
APP_OPTIM := debug
else
APP_OPTIM := release
endif
# x86/armeabi-v7a/armeabi, default is armeabi-v7a
ifeq ($(ABI_x86),true)
APP_ABI := x86
else
ifeq ($(ABI_armeabi),true)
APP_ABI := armeabi
else
APP_ABI := armeabi-v7a
endif
endif
APP_STL := stlport_shared
#APP_STL := gnustl_shared
APP_PLATFORM := android-12

View File

@ -0,0 +1,24 @@
#include <string.h>
#include <stdlib.h>
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "welsdec"
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
extern int EncMain (int argc, char* argv[]);
extern "C"
JNIEXPORT void JNICALL Java_com_wels_enc_WelsEncTest_DoEncoderTest
(JNIEnv* env, jobject thiz, jstring jsFileNameIn) {
/**************** Add the native codes/API *****************/
char* argv[2];
int argc = 2;
argv[0] = (char*) ("decConsole.exe");
argv[1] = (char*) ((*env).GetStringUTFChars (jsFileNameIn, NULL));
LOGI ("Start to run JNI module!+++");
EncMain (argc, argv);
LOGI ("End to run JNI module!+++");
}

View File

@ -0,0 +1,59 @@
# Generate the libwelsdecdemo.so file
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
#LOCAL_MODULE := stlport
#LOCAL_SRC_FILES := $(NDK_ROOT)/sources/cxx-stl/stlport/libs/$(TARGET_ARCH_ABI)/libstlport_static.a
#LOCAL_EXPORT_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/stlport/stlport
#include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := wels
LOCAL_SRC_FILES := $(LOCAL_PATH)/../../../../../libwels.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
#
# Module Settings
#
LOCAL_MODULE := welsencdemo
#
# Source Files
#
CODEC_PATH := ../../../../
CONSOLE_ENC_PATH := ../../../../console/enc
LOCAL_SRC_FILES := \
$(CONSOLE_ENC_PATH)/src/welsenc.cpp \
$(CONSOLE_ENC_PATH)/src/read_config.cpp \
$(CODEC_PATH)/common/logging.cpp \
myjni.cpp
#
# Header Includes
#
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../../../api/svc \
$(LOCAL_PATH)/../../../../console/enc/inc \
$(LOCAL_PATH)/../../../../encoder/core/inc \
$(LOCAL_PATH)/../../../../common
#
# Compile Flags and Link Libraries
#
LOCAL_CFLAGS := -O3 -DANDROID_NDK
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_ARM_MODE := arm
endif
#LOCAL_STATIC_LIBRARIES += stlport
LOCAL_LDLIBS := -llog
#LOCAL_LDLIBS += -L../../../ -lwels
LOCAL_SHARED_LIBRARIES := wels
include $(BUILD_SHARED_LIBRARY)

View File

@ -0,0 +1,40 @@
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

View File

@ -0,0 +1,14 @@
# 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 edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-12

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">"
<Button
android:id="@+id/cfg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Load bitstreams" />
<Button
android:id="@+id/buttonSW"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">WelsEncoderTest</string>
</resources>

View File

@ -0,0 +1,118 @@
package com.wels.enc;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import java.io.*;
import java.util.Vector;
public class WelsEncTest extends Activity {
/** Called when the activity is first created. */
private OnClickListener OnClickEvent;
private Button mBtnLoad, mBtnStartSW;
final String mStreamPath = "/sdcard/wels-seq/";
Vector<String> mCfgFiles = new Vector<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView tv = new TextView(this);
System.out.println("Here we go ...");
Log.i(TAG, "sdcard path:" + Environment.getExternalStorageDirectory().getAbsolutePath());
setContentView(R.layout.main);
mBtnLoad = (Button)findViewById(R.id.cfg);
mBtnStartSW = (Button)findViewById(R.id.buttonSW);
OnClickEvent = new OnClickListener()
{
public void onClick(View v)
{
switch(v.getId())
{
case R.id.cfg:
{
String cfgFile = mStreamPath + "cfgs.txt";
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(cfgFile));
String text;
while((text = bufferedReader.readLine()) != null) {
mCfgFiles.add(mStreamPath + text);
Log.i(TAG, mStreamPath + text);
}
bufferedReader.close();
} catch(IOException e) {
Log.e(TAG, e.getMessage());
}
}
break;
case R.id.buttonSW:
{
System.out.println("decode sequence number = " + mCfgFiles.size());
Log.i(TAG,"after click");
try {
for (int k=0; k < mCfgFiles.size(); k++) {
String cfgFile = mCfgFiles.get(k);
DoEncoderTest(cfgFile);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
mCfgFiles.clear();
tv.setText( "Decoder is completed!" );
}
break;
}
}
};
mBtnLoad.setOnClickListener(OnClickEvent);
mBtnStartSW.setOnClickListener(OnClickEvent);
System.out.println("Done!");
}
@Override
public void onStart()
{
Log.i(TAG,"welsdecdemo onStart");
super.onStart();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
return true;
default:
return super.onKeyDown(keyCode, event);
}
}
public native void DoEncoderTest(String cfgFileName);
private static final String TAG = "welsenc";
static {
try {
System.loadLibrary("wels");
System.loadLibrary("stlport_shared");
System.loadLibrary("welsencdemo");
Log.v(TAG, "Load libwelsencdemo.so successful");
}
catch(Exception e) {
Log.e(TAG, "Failed to load welsdec"+e.getMessage());
}
}
}

View File

@ -40,7 +40,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#if defined (ANDROID_NDK)
#include <android/log.h>
#endif
#include "codec_def.h"
#include "codec_app_def.h"
#include "codec_api.h"
@ -52,7 +54,12 @@
using namespace std;
#if defined(ANDROID_NDK)
#define LOG_TAG "welsdec"
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define printf LOGI
#define fprintf(a, ...) LOGI(__VA_ARGS__)
#endif
//using namespace WelsDec;
//#define STICK_STREAM_SIZE // For Demo interfaces test with track file of integrated frames
@ -292,8 +299,11 @@ label_exit:
}
}
#if defined(ANDROID_NDK)
int32_t DecMain(int32_t iArgC, char* pArgV[]) {
#else
int32_t main (int32_t iArgC, char* pArgV[]) {
#endif
ISVCDecoder* pDecoder = NULL;
SDecodingParam sDecParam = {0};

View File

@ -35,14 +35,20 @@
#include <assert.h>
#include <signal.h>
#include <stdarg.h>
#if defined (ANDROID_NDK)
#include <android/log.h>
#endif
#ifdef ONLY_ENC_FRAMES_NUM
#undef ONLY_ENC_FRAMES_NUM
#endif//ONLY_ENC_FRAMES_NUM
#define ONLY_ENC_FRAMES_NUM INT_MAX // 2, INT_MAX // type the num you try to encode here, 2, 10, etc
#if defined (ANDROID_NDK)
#define LOG_TAG "welsenc"
#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define printf(...) LOGI(__VA_ARGS__)
#define fprintf(a, ...) LOGI(__VA_ARGS__)
#endif
//#define STICK_STREAM_SIZE
#include "measure_time.h"
@ -1217,7 +1223,11 @@ void DestroySVCEncHandle (ISVCEncoder* pEncoder) {
/****************************************************************************
* main:
****************************************************************************/
#if defined(ANDROID_NDK)
int EncMain(int argc, char **argv)
#else
int main (int argc, char** argv)
#endif
{
ISVCEncoder* pSVCEncoder = NULL;
int iRet = 0;