Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

switch to external cpu_features #3314

Open
wants to merge 26 commits into
base: openh264v2.1.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
98fa678
Fix symbol hiding for x86 asm.
disigma Jun 27, 2019
db9e698
Merge pull request #3242 from ycqian/v2.1.0
huili2 Mar 4, 2020
d26d80c
Using and operation when detecting Loongson mmi instructions
XiWeiGu Mar 4, 2020
f15f79f
Merge pull request #3246 from gxw-loongson/master
GuangweiWang Mar 22, 2020
7067d2d
Merge pull request #3252 from ycqian/v2.1.0
GuangweiWang Mar 24, 2020
4a51b79
Update version number in meson.build
mcatanzaro Apr 7, 2020
d644364
Bump ABI to version 6
mcatanzaro Apr 7, 2020
6a6cb82
codec/encoder: fix multi refs encoding support for FFmpeg
fulinjie Apr 10, 2020
8e90a27
codec/encoder: loose the reference check
fulinjie Apr 10, 2020
79a1c1e
Merge pull request #3266 from fulinjie/pr-multi_refs_encode
huili2 Apr 20, 2020
fd92219
Fix test references after pull request #3266
mstorsjo Apr 20, 2020
74c8ed1
Merge pull request #3144 from disigma/master
GuangweiWang Apr 22, 2020
a547371
Merge pull request #3272 from mstorsjo/fix-test-refs
huili2 Apr 22, 2020
aed0b5e
fix sha mismatch error due to travis failure and turn of TemporalLaye…
huili2 Apr 23, 2020
37facb7
Merge pull request #3275 from huili2/fix_sha_error
GuangweiWang Apr 24, 2020
418d1b2
Merge pull request #3263 from mcatanzaro/patch-1
sijchen Apr 24, 2020
febf616
Merge pull request #3265 from mcatanzaro/mcatanzaro/abi6
sijchen Apr 24, 2020
2e876b6
encoder_ext: modify the verbosity level for QP changing
fulinjie Apr 28, 2020
a4f7554
Merge pull request #3278 from fulinjie/pr-log_level
huili2 Apr 30, 2020
3d3aacd
with recent NDK the demo Java should load c++_shared
alexcohn May 13, 2020
fd4ae14
add the Google library
alexcohn May 13, 2020
8afe268
fix the build for Android NDK r20 (also r21)
alexcohn Apr 5, 2020
a2fb3e2
use the external library
alexcohn May 13, 2020
08be642
Merge remote-tracking branch 'upstream/openh264v2.1.0' into feature/c…
alexcohn Jul 15, 2020
4398da6
fix the Android section of README
alexcohn Jul 15, 2020
2a55cc3
reduce duplication in Android mk files for dec and enc demos
alexcohn Jul 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "cpu_features"]
path = cpu_features
url = https://github.com/google/cpu_features.git
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ CCASFLAGS=$(CFLAGS)
STATIC_LDFLAGS=-lstdc++
STRIP ?= strip

SHAREDLIB_MAJORVERSION=5
SHAREDLIB_MAJORVERSION=6
FULL_VERSION := 2.1.0

ifeq (,$(wildcard $(SRC_PATH)gmp-api))
Expand Down Expand Up @@ -374,7 +374,7 @@ endif
endif
endif

-include $(OBJS:.$(OBJ)=.d)
-include $(filter %.d, $(OBJS:.$(OBJ)=.d))

OBJDIRS = $(sort $(dir $(OBJS)))

Expand Down
14 changes: 6 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,23 +58,21 @@ To build the arm assembly for Windows Phone, gas-preprocessor is required. It ca

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
To build for android platform, You need to install android sdk and ndk.

export PATH=**ANDROID_SDK**/tools:$PATH
The codec demo apps can be built by

The codec and demo can be built by
make OS=android ANDROID_HOME=**ANDROID_SDK** NDKROOT=**ANDROID_NDK** TARGET=**ANDROID_TARGET**

make OS=android NDKROOT=**ANDROID_NDK** TARGET=**ANDROID_TARGET**

Valid `**ANDROID_TARGET**` can be found in `**ANDROID_SDK**/platforms`, such as `android-12`.
Valid `**ANDROID_TARGET**` can be found in `**ANDROID_SDK**/platforms`, such as `android-21`.
You can also set `ARCH`, `NDKLEVEL` according to your device and NDK version.
`ARCH` specifies the architecture of android device. Currently `arm`, `arm64`, `x86` and `x86_64` are supported, the default is `arm`. (`mips` and `mips64` can also be used, but there's no specific optimization for those architectures.)
`NDKLEVEL` specifies android api level, the default is 12. Available possibilities can be found in `**ANDROID_NDK**/platforms`, such as `android-21` (strip away the `android-` prefix).
`ARCH` specifies the architecture of android device. Currently `arm`, `arm64`, `x86` and `x86_64` are supported, the default is `arm`. (`mips` and `mips64` can also be used, but there's no specific optimization for those architectures.)

By default these commands build for the `armeabi-v7a` ABI. To build for the other android
ABIs, add `ARCH=arm64`, `ARCH=x86`, `ARCH=x86_64`, `ARCH=mips` or `ARCH=mips64`.
To build for the older `armeabi` ABI (which has armv5te as baseline), add `APP_ABI=armeabi` (`ARCH=arm` is implicit).
To build for 64-bit ABI, such as `arm64`, explicitly set `NDKLEVEL` to 21 or higher.
To build fir 32 or 64-bit `mips`, you need NDK r16 or earlier.

For iOS Builds
--------------
Expand Down
17 changes: 10 additions & 7 deletions build/platform-android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,15 @@ clean_Android:
endif

COMMON_INCLUDES += -I$(NDKROOT)/sources/android/cpufeatures
COMMON_OBJS += $(COMMON_SRCDIR)/src/cpu-features.$(OBJ)
COMMON_OBJS += ./libndk_compat.so

COMMON_CFLAGS += \
-Dandroid_getCpuIdArm=wels_getCpuIdArm -Dandroid_setCpuArm=wels_setCpuArm \
-Dandroid_getCpuCount=wels_getCpuCount -Dandroid_getCpuFamily=wels_getCpuFamily \
-Dandroid_getCpuFeatures=wels_getCpuFeatures -Dandroid_setCpu=wels_setCpu \
.PHONY: ./libndk_compat.so
./libndk_compat.so: ./cpu_features/android-$(APP_ABI)/ndk_compat/libndk_compat.so
cp $< $@

codec/common/src/cpu-features.$(OBJ): $(NDKROOT)/sources/android/cpufeatures/cpu-features.c
$(QUIET_CC)$(CC) $(CFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c $(CXX_O) $<
./cpu_features/android-$(APP_ABI)/ndk_compat/libndk_compat.so:
cmake -B./cpu_features/android-$(APP_ABI) -H./cpu_features -DANDROID_ABI=$(APP_ABI) -DANDROID_PLATFORM=$(TARGET) -DCMAKE_TOOLCHAIN_FILE=$(NDKROOT)/build/cmake/android.toolchain.cmake -DBUILD_SHARED_LIBS=ON
$(MAKE) -C ./cpu_features/android-$(APP_ABI)/ndk_compat ndk_compat

clean_Android:
-$(MAKE) -C ./cpu_features/android-$(APP_ABI)/ndk_compat clean
3 changes: 2 additions & 1 deletion codec/build/android/dec/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
build
/build/
/gen/
4 changes: 0 additions & 4 deletions codec/build/android/dec/jni/Android.mk
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@

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)

27 changes: 7 additions & 20 deletions codec/build/android/dec/jni/welsdecdemo.mk
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
# Generate the libwelsdecdemo.so file
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := wels
LOCAL_SRC_FILES := ../../../../../libopenh264.so
ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES)))
include $(PREBUILT_SHARED_LIBRARY)
endif



include $(CLEAR_VARS)

#
Expand All @@ -20,9 +11,9 @@ LOCAL_MODULE := welsdecdemo
#
# Source Files
#
CODEC_PATH := ../../../../
CONSOLE_DEC_PATH := ../../../../console/dec
CONSOLE_COMMON_PATH := ../../../../console/common
CODEC_PATH := ../../../..
CONSOLE_DEC_PATH := $(CODEC_PATH)/console/dec
CONSOLE_COMMON_PATH := $(CODEC_PATH)/console/common
LOCAL_SRC_FILES := \
$(CONSOLE_DEC_PATH)/src/h264dec.cpp \
$(CONSOLE_COMMON_PATH)/src/read_config.cpp \
Expand All @@ -32,16 +23,12 @@ LOCAL_SRC_FILES := \
# Header Includes
#
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../../../api/svc \
$(LOCAL_PATH)/../../../../console/dec/inc \
$(LOCAL_PATH)/../../../../console/common/inc \
$(LOCAL_PATH)/../../../../common/inc
#
# Compile Flags and Link Libraries
#
LOCAL_CFLAGS := -DANDROID_NDK
$(LOCAL_PATH)/$(CONSOLE_DEC_PATH)/inc \
$(LOCAL_PATH)/$(CONSOLE_COMMON_PATH)/inc

LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := wels

include $(BUILD_SHARED_LIBRARY)

include $(LOCAL_PATH)/../../wels.mk
3 changes: 2 additions & 1 deletion codec/build/android/enc/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
build
/build/
/gen/
6 changes: 1 addition & 5 deletions codec/build/android/enc/jni/Android.mk
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@

LOCAL_PATH := $(call my-dir)
MY_LOCAL_PATH := $(LOCAL_PATH)

# Step3
#Generate the libwelsdecdemo.so file
#Generate the libwelsencdemo.so file
include $(LOCAL_PATH)/welsencdemo.mk
LOCAL_PATH := $(MY_LOCAL_PATH)

33 changes: 9 additions & 24 deletions codec/build/android/enc/jni/welsencdemo.mk
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
# Generate the libwelsencdemo.so file
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := wels
LOCAL_SRC_FILES := ../../../../../libopenh264.so
ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES)))
include $(PREBUILT_SHARED_LIBRARY)
endif



include $(CLEAR_VARS)

#
Expand All @@ -20,9 +11,9 @@ LOCAL_MODULE := welsencdemo
#
# Source Files
#
CODEC_PATH := ../../../../
CONSOLE_ENC_PATH := ../../../../console/enc
CONSOLE_COMMON_PATH := ../../../../console/common
CODEC_PATH := ../../../..
CONSOLE_ENC_PATH := $(CODEC_PATH)/console/enc
CONSOLE_COMMON_PATH := $(CODEC_PATH)/console/common
LOCAL_SRC_FILES := \
$(CONSOLE_ENC_PATH)/src/welsenc.cpp \
$(CONSOLE_COMMON_PATH)/src/read_config.cpp \
Expand All @@ -32,20 +23,14 @@ LOCAL_SRC_FILES := \
# Header Includes
#
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../../../api/svc \
$(LOCAL_PATH)/../../../../console/enc/inc \
$(LOCAL_PATH)/../../../../console/common/inc \
$(LOCAL_PATH)/../../../../encoder/core/inc \
$(LOCAL_PATH)/../../../../processing/interface \
$(LOCAL_PATH)/../../../../common/inc


#
# Compile Flags and Link Libraries
#
LOCAL_CFLAGS := -DANDROID_NDK
$(LOCAL_PATH)/$(CONSOLE_ENC_PATH)/inc \
$(LOCAL_PATH)/$(CODEC_PATH)/console/common/inc \
$(LOCAL_PATH)/$(CODEC_PATH)/encoder/core/inc \
$(LOCAL_PATH)/$(CODEC_PATH)/processing/interface \

LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := wels

include $(BUILD_SHARED_LIBRARY)

include $(LOCAL_PATH)/../../wels.mk
22 changes: 22 additions & 0 deletions codec/build/android/wels.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# a common .mk that includes libopenh264.so in Android project
LOCAL_PATH := $(call my-dir)/../../..

include $(CLEAR_VARS)
LOCAL_MODULE := wels
LOCAL_SRC_FILES := libopenh264.so
LOCAL_EXPORT_SHARED_LIBRARIES := cpu-features
LOCAL_EXPORT_CFLAGS := -DANDROID_NDK
LOCAL_EXPORT_C_INCLUDES := \
$(LOCAL_PATH)/codec/api/svc \
$(LOCAL_PATH)/codec/common/inc

ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES)))
include $(PREBUILT_SHARED_LIBRARY)
endif

include $(CLEAR_VARS)
LOCAL_MODULE := cpu-features
LOCAL_SRC_FILES := cpu_features/android-$(APP_ABI)/ndk_compat/libndk_compat.so
ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES)))
include $(PREBUILT_SHARED_LIBRARY)
endif
2 changes: 1 addition & 1 deletion codec/common/src/cpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ static uint32_t get_cpu_flags_from_cpuinfo(void)
}
while (fgets(buf, sizeof(buf), fp)) {
if(!strncmp(buf, "ASEs implemented", strlen("ASEs implemented"))) {
if (strstr(buf, "loongson-mmi") || strstr(buf, "loongson-ext")) {
if (strstr(buf, "loongson-mmi") && strstr(buf, "loongson-ext")) {
flags |= WELS_CPU_MMI;
}
if (strstr(buf, "msa")) {
Expand Down
15 changes: 10 additions & 5 deletions codec/common/x86/asm_inc.asm
Original file line number Diff line number Diff line change
Expand Up @@ -485,15 +485,20 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits ; Mark the stack as non-
%endmacro

%macro WELS_EXTERN 1
%ifndef WELS_PRIVATE_EXTERN
%define WELS_PRIVATE_EXTERN
%endif
ALIGN 16, nop
%ifdef PREFIX
global _%1 WELS_PRIVATE_EXTERN
%ifdef WELS_PRIVATE_EXTERN
global _%1: WELS_PRIVATE_EXTERN
%else
global _%1
%endif
%define %1 _%1
%else
global %1 WELS_PRIVATE_EXTERN
%ifdef WELS_PRIVATE_EXTERN
global %1: WELS_PRIVATE_EXTERN
%else
global %1
%endif
%endif
%1:
%endmacro
Expand Down
2 changes: 1 addition & 1 deletion codec/encoder/core/inc/param_svc.h
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ typedef struct TagWelsSvcCodingParam: SEncParamExt {
uiIntraPeriod = ((uiIntraPeriod + uiGopSize - 1) / uiGopSize) * uiGopSize;

if (((pCodingParam.iNumRefFrame != AUTO_REF_PIC_COUNT)
&& ((pCodingParam.iNumRefFrame > MAX_REF_PIC_COUNT) || (pCodingParam.iNumRefFrame < MIN_REF_PIC_COUNT)))
&& !((pCodingParam.iNumRefFrame > MAX_REF_PIC_COUNT) || (pCodingParam.iNumRefFrame < MIN_REF_PIC_COUNT)))
|| ((iNumRefFrame != AUTO_REF_PIC_COUNT) && (pCodingParam.iNumRefFrame == AUTO_REF_PIC_COUNT))) {
iNumRefFrame = pCodingParam.iNumRefFrame;
}
Expand Down
2 changes: 1 addition & 1 deletion codec/encoder/core/src/au_set.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ static int32_t WelsCheckNumRefSetting (SLogContext* pLogCtx, SWelsSvcCodingParam

int32_t WelsCheckRefFrameLimitationNumRefFirst (SLogContext* pLogCtx, SWelsSvcCodingParam* pParam) {

if (WelsCheckNumRefSetting (pLogCtx, pParam, true)) {
if (WelsCheckNumRefSetting (pLogCtx, pParam, false)) {
// we take num-ref as the honored setting but it conflicts with temporal and LTR
return ENC_RETURN_UNSUPPORTED_PARA;
}
Expand Down
4 changes: 2 additions & 2 deletions codec/encoder/core/src/encoder_ext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,12 +374,12 @@ int32_t ParamValidation (SLogContext* pLogCtx, SWelsSvcCodingParam* pCfg) {
pCfg->bEnableFrameSkip);
if ((pCfg->iMaxQp <= 0) || (pCfg->iMinQp <= 0)) {
if (pCfg->iUsageType == SCREEN_CONTENT_REAL_TIME) {
WelsLog (pLogCtx, WELS_LOG_WARNING, "Change QP Range from(%d,%d) to (%d,%d)", pCfg->iMinQp, pCfg->iMaxQp, MIN_SCREEN_QP,
WelsLog (pLogCtx, WELS_LOG_INFO, "Change QP Range from(%d,%d) to (%d,%d)", pCfg->iMinQp, pCfg->iMaxQp, MIN_SCREEN_QP,
MAX_SCREEN_QP);
pCfg->iMinQp = MIN_SCREEN_QP;
pCfg->iMaxQp = MAX_SCREEN_QP;
} else {
WelsLog (pLogCtx, WELS_LOG_WARNING, "Change QP Range from(%d,%d) to (%d,%d)", pCfg->iMinQp, pCfg->iMaxQp,
WelsLog (pLogCtx, WELS_LOG_INFO, "Change QP Range from(%d,%d) to (%d,%d)", pCfg->iMinQp, pCfg->iMaxQp,
GOM_MIN_QP_MODE, MAX_LOW_BR_QP);
pCfg->iMinQp = GOM_MIN_QP_MODE;
pCfg->iMaxQp = MAX_LOW_BR_QP;
Expand Down
1 change: 0 additions & 1 deletion codec/encoder/core/src/ref_list_mgr_svc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,6 @@ bool WelsBuildRefList (sWelsEncCtx* pCtx, const int32_t iPOC, int32_t iBestLtrRe
WelsLog (& (pCtx->sLogCtx), WELS_LOG_DETAIL,
"WelsBuildRefList pCtx->uiTemporalId = %d,pRef->iFrameNum = %d,pRef->uiTemporalId = %d",
pCtx->uiTemporalId, pRef->iFrameNum, pRef->uiTemporalId);
break;
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion codec/encoder/core/src/svc_encode_slice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ void WelsSliceHeaderExtInit (sWelsEncCtx* pEncCtx, SDqLayer* pCurLayer, SSlice*
if (P_SLICE == pEncCtx->eSliceType) {
pCurSliceHeader->uiNumRefIdxL0Active = 1;
if (pCurSliceHeader->uiRefCount > 0 &&
pCurSliceHeader->uiRefCount < pCurLayer->sLayerInfo.pSpsP->iNumRefFrames) {
pCurSliceHeader->uiRefCount <= pCurLayer->sLayerInfo.pSpsP->iNumRefFrames) {
pCurSliceHeader->bNumRefIdxActiveOverrideFlag = true;
pCurSliceHeader->uiNumRefIdxL0Active = pCurSliceHeader->uiRefCount;
}
Expand Down
1 change: 1 addition & 0 deletions cpu_features
Submodule cpu_features added at 339bfd
4 changes: 2 additions & 2 deletions meson.build
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
project('openh264', ['c', 'cpp'],
version : '2.0.0',
version : '2.1.0',
meson_version : '>= 0.47',
default_options : [ 'warning_level=1',
'buildtype=debugoptimized' ])

major_version = '5'
major_version = '6'

cpp = meson.get_compiler('cpp')

Expand Down
6 changes: 3 additions & 3 deletions test/api/decode_api_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -781,9 +781,9 @@ const uint32_t kiFrameNum = 100; //DO NOT CHANGE!
const char* const pHashStr[][2] = { //DO NOT CHANGE!
// Allow for different output depending on whether averaging is done
// vertically or horizontally first when downsampling.
{ "caaaa3352ab8614e3a35836f5d7c9a528294e953", "326cc236e9ba5277aedc5cf0865dd4cbd2f89fe0" },
{ "2dc97661e94515d9947a344127062f82814afc2a", "72f36bb33d190979be88077c6166a09767dd2992" },
{ "106ec96a90412aabea5c0cfa6bfc654a0b5db33e", "998c2947bccf140bde1e43e29376614038eb7c71" }
{ "d5fb6d72f8cc0ea4b037e883598c162fd32b475d", "0fc7e06d0d766ac911730da2aa9e953bc858a161" },
{ "17203f07486e895aef7c1bf94133fd731caba572", "1d47de674c9c44d8292ee00fa053a42bb9383614" },
{ "86bf890aef2abe24abe40ebe3d9ec76a25ddebe7", "43eaac708413c109ca120c5d570176f1c9b4036c" }
};

class DecodeParseAPI : public ::testing::TestWithParam<EncodeDecodeFileParamBase>, public EncodeDecodeTestBase {
Expand Down
4 changes: 2 additions & 2 deletions test/api/decode_encode_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ TEST_P (DecodeEncodeTest, CompareOutput) {
}
}
static const DecodeEncodeFileParam kFileParamArray[] = {
{"res/test_vd_1d.264", "f25b59215ffd34b1c6509d821a7392eb2247a107", 320, 192, 12.0f},
{"res/test_vd_rc.264", "345d376f395225a4121285c3c4fca145c9fd5fbd", 320, 192, 12.0f},
{"res/test_vd_1d.264", "2c8026e883bed044fb3528c6f1fb7e15f617390c", 320, 192, 12.0f},
{"res/test_vd_rc.264", "b70f84c4c0d74e24565aedc053394bf3c877939a", 320, 192, 12.0f},
};


Expand Down
Loading