Search in sources :

Example 6 with IDanmakus

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());
}
Also used : BaseDanmakuParser(master.flame.danmaku.danmaku.parser.BaseDanmakuParser) HttpConnection(org.jsoup.helper.HttpConnection) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus) Danmakus(master.flame.danmaku.danmaku.model.android.Danmakus) IOException(java.io.IOException) DataFormatException(java.util.zip.DataFormatException) Subscriber(rx.Subscriber) ByteArrayInputStream(java.io.ByteArrayInputStream) ILoader(master.flame.danmaku.danmaku.loader.ILoader) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus) IllegalDataException(master.flame.danmaku.danmaku.loader.IllegalDataException)

Example 7 with IDanmakus

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);
        }
    }
}
Also used : IDanmakuIterator(master.flame.danmaku.danmaku.model.IDanmakuIterator) LinePath(master.flame.danmaku.danmaku.model.SpecialDanmaku.LinePath) SpecialDanmaku(master.flame.danmaku.danmaku.model.SpecialDanmaku) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 8 with IDanmakus

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;
}
Also used : Canvas(android.graphics.Canvas) RenderingState(master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 9 with IDanmakus

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;
}
Also used : BaseDanmaku(master.flame.danmaku.danmaku.model.BaseDanmaku) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus) Danmakus(master.flame.danmaku.danmaku.model.android.Danmakus) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 10 with IDanmakus

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;
}
Also used : BaseDanmaku(master.flame.danmaku.danmaku.model.BaseDanmaku) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Aggregations

IDanmakus (master.flame.danmaku.danmaku.model.IDanmakus)13 BaseDanmaku (master.flame.danmaku.danmaku.model.BaseDanmaku)8 Danmakus (master.flame.danmaku.danmaku.model.android.Danmakus)3 Canvas (android.graphics.Canvas)2 MediaPlayer (android.media.MediaPlayer)2 VideoView (android.widget.VideoView)2 HashMap (java.util.HashMap)2 IDanmakuView (master.flame.danmaku.controller.IDanmakuView)2 DanmakuTimer (master.flame.danmaku.danmaku.model.DanmakuTimer)2 SpecialDanmaku (master.flame.danmaku.danmaku.model.SpecialDanmaku)2 RenderingState (master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState)2 Bitmap (android.graphics.Bitmap)1 Paint (android.graphics.Paint)1 TextPaint (android.text.TextPaint)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 DataFormatException (java.util.zip.DataFormatException)1 ILoader (master.flame.danmaku.danmaku.loader.ILoader)1 IllegalDataException (master.flame.danmaku.danmaku.loader.IllegalDataException)1