EglRenderer$HandlerWithFrameSyncControl.smali

.class Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;
.super Landroid/os/Handler;
.source "EglRenderer.java"

# interfaces
.implements Landroid/view/Choreographer$FrameCallback;


# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Lio/agora/base/internal/video/EglRenderer;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0xa
    name = "HandlerWithFrameSyncControl"
.end annotation


# static fields
.field private static final MSG_SEND_CHOREOGRAPHER_QUIT_SIGNAL:I = 0x0

.field private static final MSG_SEND_DROP_FRAME:I = 0x1

.field private static final MSG_SEND_RENDER_FRAME_SIGNAL:I = 0x2

.field private static final QUEUE_BUFFER:I = 0x3


# instance fields
.field private final exceptionCallback:Ljava/lang/Runnable;

.field private isPreviousFrameDrawn:Z

.field private lastPersionStats:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

.field private mLastFrameTimeNanos:J

.field private final queueLock:Ljava/lang/Object;

.field private final renderFrames:Ljava/util/Queue;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/Queue<",
            "Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;",
            ">;"
        }
    .end annotation
.end field

.field private weakRenderer:Ljava/lang/ref/WeakReference;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/lang/ref/WeakReference<",
            "Lio/agora/base/internal/video/EglRenderer;",
            ">;"
        }
    .end annotation
.end field


# direct methods
.method public constructor <init>(Landroid/os/Looper;Ljava/lang/Runnable;Lio/agora/base/internal/video/EglRenderer;)V
    .registers 6

    .line 1196
    invoke-direct {p0, p1}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V

    .line 1188
    new-instance p1, Ljava/lang/Object;

    invoke-direct {p1}, Ljava/lang/Object;-><init>()V

    iput-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->queueLock:Ljava/lang/Object;

    const-wide/16 v0, 0x0

    .line 1190
    iput-wide v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->mLastFrameTimeNanos:J

    .line 1191
    sget-object p1, Lio/agora/base/internal/video/EglRenderer$VsyncStats;->NORMAL:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    iput-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->lastPersionStats:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    .line 1197
    iput-object p2, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->exceptionCallback:Ljava/lang/Runnable;

    .line 1198
    new-instance p1, Ljava/util/LinkedList;

    invoke-direct {p1}, Ljava/util/LinkedList;-><init>()V

    iput-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    .line 1199
    new-instance p1, Ljava/lang/ref/WeakReference;

    invoke-direct {p1, p3}, Ljava/lang/ref/WeakReference;-><init>(Ljava/lang/Object;)V

    iput-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->weakRenderer:Ljava/lang/ref/WeakReference;

    .line 1200
    iput-wide v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->mLastFrameTimeNanos:J

    const/4 p1, 0x0

    .line 1201
    iput-boolean p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->isPreviousFrameDrawn:Z

    return-void
.end method

.method private doRenderFrame(J)V
    .registers 15

    .line 1310
    iget-object v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->weakRenderer:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lio/agora/base/internal/video/EglRenderer;

    if-nez v0, :cond_12

    const-string p1, "EglRenderer"

    const-string p2, "handleMessage: weak is null"

    .line 1312
    invoke-static {p1, p2}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    return-void

    .line 1315
    :cond_12
    # getter for: Lio/agora/base/internal/video/EglRenderer;->frameIntervalNanos:J
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$1700(Lio/agora/base/internal/video/EglRenderer;)J

    move-result-wide v1

    const-wide/16 v3, 0x0

    cmp-long v1, v1, v3

    if-nez v1, :cond_1d

    return-void

    .line 1318
    :cond_1d
    iget-wide v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->mLastFrameTimeNanos:J

    cmp-long v1, v1, v3

    if-nez v1, :cond_25

    .line 1319
    iput-wide p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->mLastFrameTimeNanos:J

    .line 1321
    :cond_25
    iget-wide v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->mLastFrameTimeNanos:J

    sub-long v10, p1, v1

    .line 1326
    iput-wide p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->mLastFrameTimeNanos:J

    .line 1329
    # getter for: Lio/agora/base/internal/video/EglRenderer;->frameIntervalNanos:J
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$1700(Lio/agora/base/internal/video/EglRenderer;)J

    move-result-wide v1

    # getter for: Lio/agora/base/internal/video/EglRenderer;->frameIntervalNanos:J
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$1700(Lio/agora/base/internal/video/EglRenderer;)J

    move-result-wide v5

    const-wide/16 v7, 0x2

    div-long/2addr v5, v7

    add-long/2addr v1, v5

    cmp-long v1, v10, v1

    if-ltz v1, :cond_46

    .line 1330
    # getter for: Lio/agora/base/internal/video/EglRenderer;->frameIntervalNanos:J
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$1700(Lio/agora/base/internal/video/EglRenderer;)J

    move-result-wide v1

    div-long v3, v10, v1

    .line 1331
    sget-object v1, Lio/agora/base/internal/video/EglRenderer$VsyncStats;->DELAY:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    iput-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->lastPersionStats:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    goto :goto_4a

    .line 1333
    :cond_46
    sget-object v1, Lio/agora/base/internal/video/EglRenderer$VsyncStats;->NORMAL:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    iput-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->lastPersionStats:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    :goto_4a
    move-wide v8, v3

    .line 1335
    # getter for: Lio/agora/base/internal/video/EglRenderer;->statisticsInfo:Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$200(Lio/agora/base/internal/video/EglRenderer;)Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;

    move-result-object v5

    iget-object v6, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->lastPersionStats:Lio/agora/base/internal/video/EglRenderer$VsyncStats;

    iget-boolean v7, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->isPreviousFrameDrawn:Z

    # invokes: Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;->updateEveryVsyncStatistics(Lio/agora/base/internal/video/EglRenderer$VsyncStats;ZJJ)V
    invoke-static/range {v5 .. v11}, Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;->access$2500(Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;Lio/agora/base/internal/video/EglRenderer$VsyncStats;ZJJ)V

    const/4 v1, 0x0

    .line 1337
    iput-boolean v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->isPreviousFrameDrawn:Z

    .line 1339
    iget-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->queueLock:Ljava/lang/Object;

    monitor-enter v1

    .line 1340
    :try_start_5c
    iget-object v2, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {v2}, Ljava/util/Queue;->poll()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;

    .line 1341
    monitor-exit v1
    :try_end_65
    .catchall {:try_start_5c .. :try_end_65} :catchall_6f

    if-nez v2, :cond_68

    goto :goto_6e

    :cond_68
    const/4 v1, 0x1

    .line 1347
    iput-boolean v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->isPreviousFrameDrawn:Z

    .line 1348
    # invokes: Lio/agora/base/internal/video/EglRenderer;->renderFrameOnRenderThread(Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;J)V
    invoke-static {v0, v2, p1, p2}, Lio/agora/base/internal/video/EglRenderer;->access$2600(Lio/agora/base/internal/video/EglRenderer;Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;J)V

    :goto_6e
    return-void

    :catchall_6f
    move-exception p1

    .line 1341
    :try_start_70
    monitor-exit v1
    :try_end_71
    .catchall {:try_start_70 .. :try_end_71} :catchall_6f

    throw p1
.end method

.method private stopChoreographer()V
    .registers 4

    .line 1300
    iget-object v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->queueLock:Ljava/lang/Object;

    monitor-enter v0

    .line 1301
    :try_start_3
    iget-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {v1}, Ljava/util/Queue;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_9
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v2

    if-eqz v2, :cond_1b

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;

    .line 1302
    iget-object v2, v2, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;->frame:Lio/agora/base/VideoFrame;

    invoke-virtual {v2}, Lio/agora/base/VideoFrame;->release()V

    goto :goto_9

    .line 1304
    :cond_1b
    iget-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {v1}, Ljava/util/Queue;->clear()V

    .line 1305
    invoke-static {}, Landroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;

    move-result-object v1

    invoke-virtual {v1, p0}, Landroid/view/Choreographer;->removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V

    .line 1306
    monitor-exit v0

    return-void

    :catchall_29
    move-exception v1

    monitor-exit v0
    :try_end_2b
    .catchall {:try_start_3 .. :try_end_2b} :catchall_29

    throw v1
.end method


# virtual methods
.method public dispatchMessage(Landroid/os/Message;)V
    .registers 4

    .line 1207
    :try_start_0
    invoke-super {p0, p1}, Landroid/os/Handler;->dispatchMessage(Landroid/os/Message;)V
    :try_end_3
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_3} :catch_4

    goto :goto_11

    :catch_4
    move-exception p1

    const-string v0, "EglRenderer"

    const-string v1, "Exception on EglRenderer thread"

    .line 1209
    invoke-static {v0, v1, p1}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V

    .line 1210
    iget-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->exceptionCallback:Ljava/lang/Runnable;

    invoke-interface {p1}, Ljava/lang/Runnable;->run()V

    :goto_11
    return-void
.end method

.method public doFrame(J)V
    .registers 6

    .line 1354
    iget-object v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->weakRenderer:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lio/agora/base/internal/video/EglRenderer;

    const-string v1, "EglRenderer"

    if-nez v0, :cond_12

    const-string p1, "doFrame: weak is null"

    .line 1356
    invoke-static {v1, p1}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    return-void

    .line 1359
    :cond_12
    # getter for: Lio/agora/base/internal/video/EglRenderer;->isVsyncCallbackStared:Z
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$2300(Lio/agora/base/internal/video/EglRenderer;)Z

    move-result v2

    if-nez v2, :cond_1d

    const-string v2, "Choreographer real start"

    .line 1360
    invoke-static {v1, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    :cond_1d
    const/4 v1, 0x1

    .line 1362
    # setter for: Lio/agora/base/internal/video/EglRenderer;->isVsyncCallbackStared:Z
    invoke-static {v0, v1}, Lio/agora/base/internal/video/EglRenderer;->access$2302(Lio/agora/base/internal/video/EglRenderer;Z)Z

    const/4 v0, 0x2

    .line 1363
    new-instance v1, Ljava/lang/Long;

    invoke-direct {v1, p1, p2}, Ljava/lang/Long;-><init>(J)V

    invoke-virtual {p0, v0, v1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message;

    move-result-object p1

    invoke-virtual {p0, p1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->sendMessage(Landroid/os/Message;)Z

    .line 1364
    invoke-static {}, Landroid/view/Choreographer;->getInstance()Landroid/view/Choreographer;

    move-result-object p1

    invoke-virtual {p1, p0}, Landroid/view/Choreographer;->postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V

    return-void
.end method

.method public handleMessage(Landroid/os/Message;)V
    .registers 6

    .line 1266
    iget-object v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->weakRenderer:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lio/agora/base/internal/video/EglRenderer;

    const-string v1, "EglRenderer"

    if-nez v0, :cond_12

    const-string p1, "handleMessage: weak is null"

    .line 1268
    invoke-static {v1, p1}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    return-void

    .line 1271
    :cond_12
    iget v2, p1, Landroid/os/Message;->what:I

    if-eqz v2, :cond_5f

    const/4 v3, 0x1

    if-eq v2, v3, :cond_4e

    const/4 v0, 0x2

    if-eq v2, v0, :cond_3a

    .line 1291
    :try_start_1c
    invoke-super {p0, p1}, Landroid/os/Handler;->handleMessage(Landroid/os/Message;)V
    :try_end_1f
    .catch Ljava/lang/Exception; {:try_start_1c .. :try_end_1f} :catch_20

    goto :goto_62

    :catch_20
    move-exception p1

    .line 1293
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "setRepeatingRequest failed, error message : "

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p1}, Ljava/lang/Exception;->getMessage()Ljava/lang/String;

    move-result-object p1

    invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object p1

    invoke-static {v1, p1}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_62

    .line 1280
    :cond_3a
    invoke-static {}, Ljava/lang/System;->nanoTime()J

    move-result-wide v0

    .line 1281
    iget-object v2, p1, Landroid/os/Message;->obj:Ljava/lang/Object;

    if-eqz v2, :cond_4a

    .line 1282
    iget-object p1, p1, Landroid/os/Message;->obj:Ljava/lang/Object;

    check-cast p1, Ljava/lang/Long;

    invoke-virtual {p1}, Ljava/lang/Long;->longValue()J

    move-result-wide v0

    .line 1284
    :cond_4a
    invoke-direct {p0, v0, v1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->doRenderFrame(J)V

    goto :goto_62

    .line 1274
    :cond_4e
    iget-object p1, v0, Lio/agora/base/internal/video/EglRenderer;->rendererEvents:Lio/agora/base/internal/video/RendererCommon$RendererEvents;

    if-eqz p1, :cond_57

    .line 1275
    iget-object p1, v0, Lio/agora/base/internal/video/EglRenderer;->rendererEvents:Lio/agora/base/internal/video/RendererCommon$RendererEvents;

    invoke-interface {p1}, Lio/agora/base/internal/video/RendererCommon$RendererEvents;->onFrameDropped()V

    .line 1277
    :cond_57
    # getter for: Lio/agora/base/internal/video/EglRenderer;->statisticsInfo:Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$200(Lio/agora/base/internal/video/EglRenderer;)Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;

    move-result-object p1

    # invokes: Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;->updateFramesDropped()V
    invoke-static {p1}, Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;->access$2400(Lio/agora/base/internal/video/EglRenderer$StatisticsInfo;)V

    goto :goto_62

    .line 1287
    :cond_5f
    invoke-direct {p0}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->stopChoreographer()V

    :goto_62
    return-void
.end method

.method public sendFrameToRenderThread(JLio/agora/base/VideoFrame;)V
    .registers 7

    .line 1232
    iget-object v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->queueLock:Ljava/lang/Object;

    monitor-enter v0

    .line 1233
    :try_start_3
    invoke-virtual {p3}, Lio/agora/base/VideoFrame;->retain()V

    .line 1234
    iget-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {v1}, Ljava/util/Queue;->size()I

    move-result v1

    const/4 v2, 0x3

    if-lt v1, v2, :cond_26

    .line 1241
    iget-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {v1}, Ljava/util/Queue;->poll()Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;

    if-eqz v1, :cond_1e

    .line 1243
    iget-object v1, v1, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;->frame:Lio/agora/base/VideoFrame;

    invoke-virtual {v1}, Lio/agora/base/VideoFrame;->release()V

    :cond_1e
    const/4 v1, 0x1

    .line 1245
    invoke-virtual {p0, v1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->obtainMessage(I)Landroid/os/Message;

    move-result-object v1

    invoke-virtual {p0, v1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->sendMessage(Landroid/os/Message;)Z

    .line 1247
    :cond_26
    new-instance v1, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;

    invoke-direct {v1, p3, p1, p2}, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;-><init>(Lio/agora/base/VideoFrame;J)V

    .line 1248
    iget-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {p1, v1}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z

    move-result p1

    if-nez p1, :cond_3a

    const-string p1, "EglRenderer"

    const-string p2, "offer error "

    .line 1249
    invoke-static {p1, p2}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 1251
    :cond_3a
    iget-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->weakRenderer:Ljava/lang/ref/WeakReference;

    invoke-virtual {p1}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object p1

    check-cast p1, Lio/agora/base/internal/video/EglRenderer;

    if-eqz p1, :cond_52

    .line 1252
    # getter for: Lio/agora/base/internal/video/EglRenderer;->isVsyncCallbackStared:Z
    invoke-static {p1}, Lio/agora/base/internal/video/EglRenderer;->access$2300(Lio/agora/base/internal/video/EglRenderer;)Z

    move-result p1

    if-nez p1, :cond_52

    const/4 p1, 0x2

    .line 1253
    invoke-virtual {p0, p1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->obtainMessage(I)Landroid/os/Message;

    move-result-object p1

    invoke-virtual {p0, p1}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->sendMessage(Landroid/os/Message;)Z

    .line 1261
    :cond_52
    monitor-exit v0

    return-void

    :catchall_54
    move-exception p1

    monitor-exit v0
    :try_end_56
    .catchall {:try_start_3 .. :try_end_56} :catchall_54

    throw p1
.end method

.method public sendLastFrameToRenderThread(J)V
    .registers 6

    .line 1219
    iget-object v0, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->weakRenderer:Ljava/lang/ref/WeakReference;

    invoke-virtual {v0}, Ljava/lang/ref/WeakReference;->get()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lio/agora/base/internal/video/EglRenderer;

    .line 1220
    iget-object v1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->queueLock:Ljava/lang/Object;

    monitor-enter v1

    .line 1221
    :try_start_b
    # getter for: Lio/agora/base/internal/video/EglRenderer;->ENABLE_LAST_FRAME:Z
    invoke-static {}, Lio/agora/base/internal/video/EglRenderer;->access$2100()Z

    move-result v2

    if-eqz v2, :cond_2b

    if-eqz v0, :cond_2b

    .line 1222
    new-instance v2, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;

    .line 1223
    # getter for: Lio/agora/base/internal/video/EglRenderer;->lastFrame:Lio/agora/base/VideoFrame;
    invoke-static {v0}, Lio/agora/base/internal/video/EglRenderer;->access$2200(Lio/agora/base/internal/video/EglRenderer;)Lio/agora/base/VideoFrame;

    move-result-object v0

    invoke-direct {v2, v0, p1, p2}, Lio/agora/base/internal/video/EglRenderer$VideoFrameInternal;-><init>(Lio/agora/base/VideoFrame;J)V

    .line 1224
    iget-object p1, p0, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->renderFrames:Ljava/util/Queue;

    invoke-interface {p1, v2}, Ljava/util/Queue;->add(Ljava/lang/Object;)Z

    move-result p1

    if-nez p1, :cond_2b

    const-string p1, "EglRenderer"

    const-string p2, "sendLastFrameToRenderThread offer error "

    .line 1225
    invoke-static {p1, p2}, Lio/agora/base/internal/Logging;->e(Ljava/lang/String;Ljava/lang/String;)V

    .line 1228
    :cond_2b
    monitor-exit v1

    return-void

    :catchall_2d
    move-exception p1

    monitor-exit v1
    :try_end_2f
    .catchall {:try_start_b .. :try_end_2f} :catchall_2d

    throw p1
.end method

.method public sendStopChoreographer()V
    .registers 2

    const/4 v0, 0x0

    .line 1215
    invoke-virtual {p0, v0}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->obtainMessage(I)Landroid/os/Message;

    move-result-object v0

    invoke-virtual {p0, v0}, Lio/agora/base/internal/video/EglRenderer$HandlerWithFrameSyncControl;->sendMessage(Landroid/os/Message;)Z

    return-void
.end method