Clean bilibili code

pull/142/head
FongMi 3 years ago
parent 1ab13e0b1f
commit 99d89fd25d
  1. 6
      danmaku/src/main/java/master/flame/danmaku/controller/DrawTask.java
  2. 19
      danmaku/src/main/java/master/flame/danmaku/danmaku/model/android/Danmakus.java
  3. 12
      danmaku/src/main/java/master/flame/danmaku/danmaku/parser/BaseDanmakuParser.java
  4. 131
      danmaku/src/main/java/tv/cjump/jni/DeviceUtils.java
  5. 107
      danmaku/src/main/java/tv/cjump/jni/NativeBitmapFactory.java

@ -281,11 +281,7 @@ public class DrawTask implements IDrawTask {
}
protected void loadDanmakus(BaseDanmakuParser parser) {
danmakuList = parser.setConfig(mContext).setDisplay(mDisp).setTimer(mTimer).setListener(danmaku -> {
if (mTaskListener != null) {
mTaskListener.onDanmakuAdd(danmaku);
}
}).getDanmakus();
danmakuList = parser.setConfig(mContext).setDisplay(mDisp).setTimer(mTimer).getDanmakus();
mContext.mGlobalFlagValues.resetAll();
if (danmakuList != null) {
mLastDanmaku = danmakuList.last();

@ -30,22 +30,14 @@ import master.flame.danmaku.danmaku.model.IDanmakus;
public class Danmakus implements IDanmakus {
public Collection<BaseDanmaku> items;
private final AtomicInteger mSize = new AtomicInteger(0);
private Collection<BaseDanmaku> items;
private Danmakus subItems;
private BaseDanmaku startItem, endItem;
private BaseDanmaku endSubItem;
private BaseDanmaku startSubItem;
private volatile AtomicInteger mSize = new AtomicInteger(0);
private int mSortType = ST_BY_TIME;
private BaseComparator mComparator;
private boolean mDuplicateMergingEnabled;
private Object mLockObject = new Object();
@ -154,7 +146,6 @@ public class Danmakus implements IDanmakus {
if (endSubItem == null) {
endSubItem = createItem("end");
}
startSubItem.setTime(startTime);
endSubItem.setTime(endTime);
return ((SortedSet<BaseDanmaku>) items).subSet(startSubItem, endSubItem);
@ -163,10 +154,8 @@ public class Danmakus implements IDanmakus {
@Override
public IDanmakus subnew(long startTime, long endTime) {
Collection<BaseDanmaku> subset = subset(startTime, endTime);
if (subset == null || subset.isEmpty()) {
return null;
}
LinkedList<BaseDanmaku> newSet = new LinkedList<BaseDanmaku>(subset);
if (subset == null || subset.isEmpty()) return null;
LinkedList<BaseDanmaku> newSet = new LinkedList<>(subset);
return new Danmakus(newSet);
}

@ -16,7 +16,6 @@
package master.flame.danmaku.danmaku.parser;
import master.flame.danmaku.danmaku.model.BaseDanmaku;
import master.flame.danmaku.danmaku.model.DanmakuTimer;
import master.flame.danmaku.danmaku.model.IDanmakus;
import master.flame.danmaku.danmaku.model.IDisplay;
@ -31,7 +30,6 @@ public abstract class BaseDanmakuParser {
protected float mScaledDensity;
protected IDisplay mDisp;
protected DanmakuContext mContext;
protected Listener mListener;
private IDanmakus mDanmakus;
public IDisplay getDisplay() {
@ -49,15 +47,9 @@ public abstract class BaseDanmakuParser {
return this;
}
public BaseDanmakuParser setListener(Listener listener) {
mListener = listener;
return this;
}
/**
* decide the speed of scroll-danmakus
*
* @return
*/
protected float getViewportSizeFactor() {
return 1 / (mDispDensity - 0.6f);
@ -89,8 +81,4 @@ public abstract class BaseDanmakuParser {
mContext = config;
return this;
}
public interface Listener {
void onDanmakuAdd(BaseDanmaku danmaku);
}
}

@ -1,149 +1,22 @@
package tv.cjump.jni;
import android.os.Build;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.Field;
public class DeviceUtils {
public static final String ABI_X86 = "x86";
public static final String ABI_MIPS = "mips";
// see include/uapi/linux/elf-em.h
private static final int EM_ARM = 40;
private static final int EM_386 = 3;
private static final int EM_MIPS = 8;
private static final int EM_AARCH64 = 183;
private static ARCH sArch = ARCH.Unknown;
// /system/lib/libc.so
// XXX: need a runtime check
public static synchronized ARCH getMyCpuArch() {
byte[] data = new byte[20];
File libc = new File(Environment.getRootDirectory(), "lib/libc.so");
if (libc.canRead()) {
RandomAccessFile fp = null;
try {
fp = new RandomAccessFile(libc, "r");
fp.readFully(data);
int machine = (data[19] << 8) | data[18];
switch (machine) {
case EM_ARM:
sArch = ARCH.ARM;
break;
case EM_386:
sArch = ARCH.X86;
break;
case EM_MIPS:
sArch = ARCH.MIPS;
break;
case EM_AARCH64:
sArch = ARCH.ARM64;
break;
default:
Log.e("NativeBitmapFactory", "libc.so is unknown arch: " + Integer.toHexString(machine));
break;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fp != null) {
try {
fp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return sArch;
}
public static String get_CPU_ABI() {
return Build.CPU_ABI;
}
public static String get_CPU_ABI2() {
try {
Field field = Build.class.getDeclaredField("CPU_ABI2");
if (field == null)
return null;
Object fieldValue = field.get(null);
if (!(fieldValue instanceof String)) {
return null;
}
return (String) fieldValue;
} catch (Exception e) {
}
return null;
}
public static boolean supportABI(String requestAbi) {
String abi = get_CPU_ABI();
if (!TextUtils.isEmpty(abi) && abi.equalsIgnoreCase(requestAbi))
return true;
String abi2 = get_CPU_ABI2();
return !TextUtils.isEmpty(abi2) && abi.equalsIgnoreCase(requestAbi);
}
public static boolean supportX86() {
return supportABI(ABI_X86);
}
public static boolean supportMips() {
return supportABI(ABI_MIPS);
}
public static boolean isARMSimulatedByX86() {
ARCH arch = getMyCpuArch();
return !supportX86() && ARCH.X86.equals(arch);
}
public static boolean isMiBox2Device() {
String manufacturer = Build.MANUFACTURER;
String productName = Build.PRODUCT;
return manufacturer.equalsIgnoreCase("Xiaomi")
&& productName.equalsIgnoreCase("dredd");
return manufacturer.equalsIgnoreCase("Xiaomi") && productName.equalsIgnoreCase("dredd");
}
public static boolean isMagicBoxDevice() {
String manufacturer = Build.MANUFACTURER;
String productName = Build.PRODUCT;
return manufacturer.equalsIgnoreCase("MagicBox")
&& productName.equalsIgnoreCase("MagicBox");
return manufacturer.equalsIgnoreCase("MagicBox") && productName.equalsIgnoreCase("MagicBox");
}
public static boolean isProblemBoxDevice() {
return isMiBox2Device() || isMagicBoxDevice();
}
public static boolean isRealARMArch() {
ARCH arch = getMyCpuArch();
return (supportABI("armeabi-v7a") || supportABI("armeabi")) && ARCH.ARM.equals(arch);
}
public static boolean isRealX86Arch() {
ARCH arch = getMyCpuArch();
return supportABI(ABI_X86) || ARCH.X86.equals(arch);
}
public static enum ARCH {
Unknown, ARM, X86, MIPS, ARM64,
}
}

@ -1,11 +1,11 @@
package tv.cjump.jni;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.util.Log;
import java.lang.reflect.Field;
@ -15,70 +15,29 @@ public class NativeBitmapFactory {
static Field nativeIntField = null;
static boolean nativeLibLoaded = false;
static boolean notLoadAgain = false;
public static boolean isInNativeAlloc() {
return android.os.Build.VERSION.SDK_INT < 11 || (nativeLibLoaded && nativeIntField != null);
}
public static void loadLibs() {
if (notLoadAgain) {
return;
}
if (!(DeviceUtils.isRealARMArch() || DeviceUtils.isRealX86Arch())) {
notLoadAgain = true;
nativeLibLoaded = false;
return;
}
if (nativeLibLoaded) {
return;
}
try {
if (android.os.Build.VERSION.SDK_INT >= 11 && android.os.Build.VERSION.SDK_INT < 23) {
System.loadLibrary("ndkbitmap");
nativeLibLoaded = true;
} else {
notLoadAgain = true;
nativeLibLoaded = false;
}
} catch (Exception e) {
e.printStackTrace();
notLoadAgain = true;
nativeLibLoaded = false;
} catch (Error e) {
e.printStackTrace();
notLoadAgain = true;
System.loadLibrary("ndkbitmap");
nativeLibLoaded = true;
boolean libInit = init();
if (!libInit) {
release();
nativeLibLoaded = false;
}
if (nativeLibLoaded) {
boolean libInit = init();
if (!libInit) {
} else {
initField();
boolean confirm = testLib();
if (!confirm) {
release();
notLoadAgain = true;
nativeLibLoaded = false;
} else {
initField();
boolean confirm = testLib();
if (!confirm) {
// 测试so文件函数是否调用失败
release();
notLoadAgain = true;
nativeLibLoaded = false;
}
}
}
Log.e("NativeBitmapFactory", "loaded" + nativeLibLoaded);
}
public static synchronized void releaseLibs() {
boolean loaded = nativeLibLoaded;
nativeIntField = null;
nativeLibLoaded = false;
if (loaded) {
release();
}
// Log.e("NativeBitmapFactory", "released");
if (loaded) release();
}
static void initField() {
@ -91,28 +50,24 @@ public class NativeBitmapFactory {
}
}
@SuppressLint("NewApi")
private static boolean testLib() {
if (nativeIntField == null) {
return false;
}
if (nativeIntField == null) return false;
Bitmap bitmap = null;
Canvas canvas = null;
Canvas canvas;
try {
bitmap = createNativeBitmap(2, 2, Bitmap.Config.ARGB_8888, true);
boolean result = (bitmap != null && bitmap.getWidth() == 2 && bitmap.getHeight() == 2);
if (result) {
if (android.os.Build.VERSION.SDK_INT >= 17 && !bitmap.isPremultiplied()) {
if (Build.VERSION.SDK_INT >= 17 && !bitmap.isPremultiplied()) {
bitmap.setPremultiplied(true);
}
canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setTextSize(20f);
canvas.drawRect(0f, 0f, (float) bitmap.getWidth(), (float) bitmap.getHeight(),
paint);
canvas.drawRect(0f, 0f, (float) bitmap.getWidth(), (float) bitmap.getHeight(), paint);
canvas.drawText("TestLib", 0, 0, paint);
if (android.os.Build.VERSION.SDK_INT >= 17) {
if (Build.VERSION.SDK_INT >= 17) {
result = bitmap.isPremultiplied();
}
}
@ -125,23 +80,18 @@ public class NativeBitmapFactory {
} finally {
if (bitmap != null) {
bitmap.recycle();
bitmap = null;
}
}
}
public static int getNativeConfig(Bitmap.Config config) {
try {
if (nativeIntField == null) {
return 0;
}
if (nativeIntField == null) return 0;
return nativeIntField.getInt(config);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
return 0;
}
return 0;
}
public static Bitmap createBitmap(int width, int height, Bitmap.Config config) {
@ -153,31 +103,20 @@ public class NativeBitmapFactory {
}
public static synchronized Bitmap createBitmap(int width, int height, Bitmap.Config config, boolean hasAlpha) {
if (!nativeLibLoaded || nativeIntField == null) {
// Log.e("NativeBitmapFactory", "ndk bitmap create failed");
return Bitmap.createBitmap(width, height, config);
}
if (!nativeLibLoaded || nativeIntField == null) return Bitmap.createBitmap(width, height, config);
return createNativeBitmap(width, height, config, hasAlpha);
}
private static Bitmap createNativeBitmap(int width, int height, Config config, boolean hasAlpha) {
int nativeConfig = getNativeConfig(config);
// Log.e("NativeBitmapFactory", "nativeConfig:" + nativeConfig);
// Log.e("NativeBitmapFactory", "create bitmap:" + bitmap);
return android.os.Build.VERSION.SDK_INT == 19 ? createBitmap19(width, height,
nativeConfig, hasAlpha) : createBitmap(width, height, nativeConfig, hasAlpha);
return Build.VERSION.SDK_INT == 19 ? createBitmap19(width, height, nativeConfig, hasAlpha) : createBitmap(width, height, nativeConfig, hasAlpha);
}
// ///////////native methods//////////
private static native boolean init();
private static native boolean release();
private static native Bitmap createBitmap(int width, int height, int nativeConfig,
boolean hasAlpha);
private static native Bitmap createBitmap19(int width, int height, int nativeConfig,
boolean hasAlpha);
private static native Bitmap createBitmap(int width, int height, int nativeConfig, boolean hasAlpha);
private static native Bitmap createBitmap19(int width, int height, int nativeConfig, boolean hasAlpha);
}

Loading…
Cancel
Save