use of master.flame.danmaku.danmaku.model.IDanmakus in project bilibili-android-client by HotBitmapGG.
the class BiliDanmukuDownloadUtil method downloadXML.
public static Observable<BaseDanmakuParser> downloadXML(final String uri) {
return Observable.create(new Observable.OnSubscribe<BaseDanmakuParser>() {
@Override
public void call(final Subscriber<? super BaseDanmakuParser> subscriber) {
if (TextUtils.isEmpty(uri)) {
subscriber.onNext(new BaseDanmakuParser() {
@Override
protected IDanmakus parse() {
return new Danmakus();
}
});
}
ILoader loader = null;
try {
HttpConnection.Response rsp = (HttpConnection.Response) Jsoup.connect(uri).timeout(20000).execute();
InputStream stream = new ByteArrayInputStream(BiliDanmukuCompressionTools.decompressXML(rsp.bodyAsBytes()));
loader = DanmakuLoaderFactory.create(DanmakuLoaderFactory.TAG_BILI);
loader.load(stream);
} catch (IOException | DataFormatException | IllegalDataException e) {
e.printStackTrace();
}
BaseDanmakuParser parser = new BiliDanmukuParser();
assert loader != null;
IDataSource<?> dataSource = loader.getDataSource();
parser.load(dataSource);
subscriber.onNext(parser);
}
}).subscribeOn(Schedulers.io());
}
use of master.flame.danmaku.danmaku.model.IDanmakus in project ABPlayer by winkstu.
the class DanmakuFactory method updateSpecialDanmakusDate.
private static void updateSpecialDanmakusDate(float scaleX, float scaleY) {
IDanmakus list = sSpecialDanmakus;
IDanmakuIterator it = list.iterator();
while (it.hasNext()) {
SpecialDanmaku speicalDanmaku = (SpecialDanmaku) it.next();
fillTranslationData(speicalDanmaku, speicalDanmaku.beginX, speicalDanmaku.beginY, speicalDanmaku.endX, speicalDanmaku.endY, speicalDanmaku.translationDuration, speicalDanmaku.translationStartDelay, scaleX, scaleY);
LinePath[] linePaths = speicalDanmaku.linePaths;
if (linePaths != null && linePaths.length > 0) {
int length = linePaths.length;
float[][] points = new float[length + 1][2];
for (int j = 0; j < length; j++) {
points[j] = linePaths[j].getBeginPoint();
points[j + 1] = linePaths[j].getEndPoint();
}
fillLinePathData(speicalDanmaku, points, scaleX, scaleY);
}
}
}
use of master.flame.danmaku.danmaku.model.IDanmakus in project DanmakuFlameMaster by Bilibili.
the class DrawTask method drawDanmakus.
protected RenderingState drawDanmakus(AbsDisplayer disp, DanmakuTimer timer) {
if (clearRetainerFlag) {
mRenderer.clearRetainer();
clearRetainerFlag = false;
}
if (danmakuList != null) {
Canvas canvas = (Canvas) disp.getExtraData();
DrawHelper.clearCanvas(canvas);
if (mIsHidden) {
return mRenderingState;
}
RenderingState renderingState = mRenderingState;
// prepare screenDanmakus
long beginMills = timer.currMillisecond - mContext.mDanmakuFactory.MAX_DANMAKU_DURATION - 100;
long endMills = timer.currMillisecond + mContext.mDanmakuFactory.MAX_DANMAKU_DURATION;
IDanmakus screenDanmakus = danmakus;
if (mLastBeginMills > beginMills || timer.currMillisecond > mLastEndMills) {
screenDanmakus = danmakuList.sub(beginMills, endMills);
if (screenDanmakus != null) {
danmakus = screenDanmakus;
}
mLastBeginMills = beginMills;
mLastEndMills = endMills;
} else {
beginMills = mLastBeginMills;
endMills = mLastEndMills;
}
// prepare runningDanmakus to draw (in sync-mode)
IDanmakus runningDanmakus = mRunningDanmakus;
beginTracing(renderingState, runningDanmakus, screenDanmakus);
if (runningDanmakus != null && !runningDanmakus.isEmpty()) {
mRenderingState.isRunningDanmakus = true;
mRenderer.draw(disp, runningDanmakus, 0, mRenderingState);
}
// draw screenDanmakus
mRenderingState.isRunningDanmakus = false;
if (screenDanmakus != null && !screenDanmakus.isEmpty()) {
mRenderer.draw(mDisp, screenDanmakus, mStartRenderTime, renderingState);
endTracing(renderingState);
if (renderingState.nothingRendered) {
if (mLastDanmaku != null && mLastDanmaku.isTimeOut()) {
mLastDanmaku = null;
if (mTaskListener != null) {
mTaskListener.onDanmakusDrawingFinished();
}
}
if (renderingState.beginTime == RenderingState.UNKNOWN_TIME) {
renderingState.beginTime = beginMills;
}
if (renderingState.endTime == RenderingState.UNKNOWN_TIME) {
renderingState.endTime = endMills;
}
}
return renderingState;
} else {
renderingState.nothingRendered = true;
renderingState.beginTime = beginMills;
renderingState.endTime = endMills;
return renderingState;
}
}
return null;
}
use of master.flame.danmaku.danmaku.model.IDanmakus in project DanmakuFlameMaster by Bilibili.
the class DrawTask method getVisibleDanmakusOnTime.
@Override
public IDanmakus getVisibleDanmakusOnTime(long time) {
long beginMills = time - mContext.mDanmakuFactory.MAX_DANMAKU_DURATION - 100;
long endMills = time + mContext.mDanmakuFactory.MAX_DANMAKU_DURATION;
IDanmakus subDanmakus = danmakuList.subnew(beginMills, endMills);
final IDanmakus visibleDanmakus = new Danmakus();
if (null != subDanmakus && !subDanmakus.isEmpty()) {
subDanmakus.forEachSync(new IDanmakus.DefaultConsumer<BaseDanmaku>() {
@Override
public int accept(BaseDanmaku danmaku) {
if (danmaku.isShown() && !danmaku.isOutside()) {
visibleDanmakus.addItem(danmaku);
}
return ACTION_CONTINUE;
}
});
}
return visibleDanmakus;
}
use of master.flame.danmaku.danmaku.model.IDanmakus in project DanmakuFlameMaster by Bilibili.
the class DrawTask method requestSync.
@Override
public void requestSync(long fromTimeMills, long toTimeMills, final long offsetMills) {
// obtain the running-danmakus which was drawn on screen
IDanmakus runningDanmakus = mRenderingState.obtainRunningDanmakus();
mRunningDanmakus = runningDanmakus;
// set offset time for each running-danmakus
runningDanmakus.forEachSync(new IDanmakus.DefaultConsumer<BaseDanmaku>() {
@Override
public int accept(BaseDanmaku danmaku) {
if (danmaku.isOutside()) {
return ACTION_REMOVE;
}
danmaku.setTimeOffset(offsetMills + danmaku.timeOffset);
danmaku.isOffset = true;
return ACTION_CONTINUE;
}
});
mStartRenderTime = toTimeMills;
}
Aggregations