Merge pull request #306 from licaiguo/add-android-pull-clean
Add android Support
This commit is contained in:
commit
0a73155bdd
40
Makefile
40
Makefile
@ -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
|
||||
|
15
README.md
15
README.md
@ -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
35
build/platform-android.mk
Normal 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 ../../../..'
|
@ -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
|
||||
|
@ -1,4 +1,6 @@
|
||||
include build/platform-x86-common.mk
|
||||
ASM = nasm
|
||||
SHAREDLIBSUFFIX = so
|
||||
CFLAGS += -fPIC -DMT_ENABLED
|
||||
LDFLAGS += -lpthread
|
||||
ASMFLAGS += -DNOPREFIX
|
||||
|
@ -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
|
||||
|
@ -1,4 +1,6 @@
|
||||
include build/platform-x86-common.mk
|
||||
ASM = nasm
|
||||
SHAREDLIBSUFFIX = dll
|
||||
CFLAGS += -DMT_ENABLED -MMD -MP
|
||||
LDFLAGS +=
|
||||
ifeq ($(ENABLE64BIT), Yes)
|
||||
|
20
build/platform-x86-common.mk
Normal file
20
build/platform-x86-common.mk
Normal 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
|
19
codec/build/android/dec/AndroidManifest.xml
Normal file
19
codec/build/android/dec/AndroidManifest.xml
Normal 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>
|
14
codec/build/android/dec/jni/Android.mk
Normal file
14
codec/build/android/dec/jni/Android.mk
Normal 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)
|
||||
|
21
codec/build/android/dec/jni/Application.mk
Normal file
21
codec/build/android/dec/jni/Application.mk
Normal 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
|
24
codec/build/android/dec/jni/myjni.cpp
Normal file
24
codec/build/android/dec/jni/myjni.cpp
Normal 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!+++");
|
||||
}
|
||||
|
||||
|
56
codec/build/android/dec/jni/welsdecdemo.mk
Normal file
56
codec/build/android/dec/jni/welsdecdemo.mk
Normal 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)
|
40
codec/build/android/dec/proguard.cfg
Normal file
40
codec/build/android/dec/proguard.cfg
Normal 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 *;
|
||||
}
|
14
codec/build/android/dec/project.properties
Normal file
14
codec/build/android/dec/project.properties
Normal 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
|
BIN
codec/build/android/dec/res/drawable-hdpi/icon.png
Normal file
BIN
codec/build/android/dec/res/drawable-hdpi/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
BIN
codec/build/android/dec/res/drawable-ldpi/icon.png
Normal file
BIN
codec/build/android/dec/res/drawable-ldpi/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
21
codec/build/android/dec/res/layout/main.xml
Normal file
21
codec/build/android/dec/res/layout/main.xml
Normal 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>
|
4
codec/build/android/dec/res/values/strings.xml
Normal file
4
codec/build/android/dec/res/values/strings.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">WelsDecoderTest</string>
|
||||
</resources>
|
117
codec/build/android/dec/src/com/wels/dec/WelsDecTest.java
Normal file
117
codec/build/android/dec/src/com/wels/dec/WelsDecTest.java
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
19
codec/build/android/enc/AndroidManifest.xml
Normal file
19
codec/build/android/enc/AndroidManifest.xml
Normal 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>
|
14
codec/build/android/enc/jni/Android.mk
Normal file
14
codec/build/android/enc/jni/Android.mk
Normal 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)
|
||||
|
21
codec/build/android/enc/jni/Application.mk
Normal file
21
codec/build/android/enc/jni/Application.mk
Normal 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
|
24
codec/build/android/enc/jni/myjni.cpp
Normal file
24
codec/build/android/enc/jni/myjni.cpp
Normal 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!+++");
|
||||
|
||||
}
|
||||
|
||||
|
59
codec/build/android/enc/jni/welsencdemo.mk
Normal file
59
codec/build/android/enc/jni/welsencdemo.mk
Normal 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)
|
40
codec/build/android/enc/proguard.cfg
Normal file
40
codec/build/android/enc/proguard.cfg
Normal 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 *;
|
||||
}
|
14
codec/build/android/enc/project.properties
Normal file
14
codec/build/android/enc/project.properties
Normal 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
|
BIN
codec/build/android/enc/res/drawable-hdpi/icon.png
Normal file
BIN
codec/build/android/enc/res/drawable-hdpi/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.0 KiB |
BIN
codec/build/android/enc/res/drawable-ldpi/icon.png
Normal file
BIN
codec/build/android/enc/res/drawable-ldpi/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
21
codec/build/android/enc/res/layout/main.xml
Normal file
21
codec/build/android/enc/res/layout/main.xml
Normal 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>
|
4
codec/build/android/enc/res/values/strings.xml
Normal file
4
codec/build/android/enc/res/values/strings.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">WelsEncoderTest</string>
|
||||
</resources>
|
118
codec/build/android/enc/src/com/wels/enc/WelsEncTest.java
Normal file
118
codec/build/android/enc/src/com/wels/enc/WelsEncTest.java
Normal 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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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};
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user