MediaProjectionSource.smali

.class public Lio/agora/rtc2/extensions/MediaProjectionSource;
.super Ljava/lang/Object;
.source "MediaProjectionSource.java"

# interfaces
.implements Lio/agora/base/internal/video/VideoSink;
.implements Lio/agora/rtc2/extensions/MediaProjectionMgr$AudioFrameListener;
.implements Lio/agora/rtc2/extensions/MediaProjectionMgr$RequestListener;
.implements Lio/agora/rtc2/extensions/MediaProjectionMgr$ConfigurationChangedListener;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;,
        Lio/agora/rtc2/extensions/MediaProjectionSource$MediaProjectionSourceError;,
        Lio/agora/rtc2/extensions/MediaProjectionSource$DefaultCaptureFactory;,
        Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;,
        Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;,
        Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;
    }
.end annotation


# static fields
.field private static final TAG:Ljava/lang/String; = "MediaProjectionSource"

.field private static injectedFactory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;


# instance fields
.field private audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

.field private audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

.field private final callback:Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

.field private final checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

.field private final factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

.field mediaProjectManager:Lio/agora/rtc2/extensions/MediaProjectionMgr;

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

.field private requestedMediaProjection:Landroid/media/projection/MediaProjection;

.field private screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

.field private screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;


# direct methods
.method static constructor <clinit>()V
    .registers 0

    return-void
.end method

.method public constructor <init>(J)V
    .registers 3

    .line 90
    invoke-static {p1, p2}, Lio/agora/rtc2/extensions/MediaProjectionSource;->createCallback(J)Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

    move-result-object p1

    invoke-direct {p0, p1}, Lio/agora/rtc2/extensions/MediaProjectionSource;-><init>(Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;)V

    return-void
.end method

.method public constructor <init>(Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;)V
    .registers 3

    .line 132
    invoke-static {}, Lio/agora/rtc2/extensions/MediaProjectionSource;->createDefaultCaptureFactory()Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    move-result-object v0

    invoke-direct {p0, p1, v0}, Lio/agora/rtc2/extensions/MediaProjectionSource;-><init>(Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;)V

    return-void
.end method

.method public constructor <init>(Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;)V
    .registers 5

    .line 136
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 27
    new-instance v0, Ljava/lang/Object;

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

    iput-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    const-string v0, "MediaProjectionSource"

    const-string v1, "constructor()"

    .line 137
    invoke-static {v0, v1}, Lio/agora/rtc2/extensions/MediaProjectionSource;->logD(Ljava/lang/String;Ljava/lang/String;)V

    .line 138
    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->callback:Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

    .line 139
    sget-object p1, Lio/agora/rtc2/extensions/MediaProjectionSource;->injectedFactory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    if-eqz p1, :cond_1a

    .line 141
    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    goto :goto_1c

    .line 143
    :cond_1a
    iput-object p2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    .line 145
    :goto_1c
    new-instance p1, Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-direct {p1}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;-><init>()V

    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    return-void
.end method

.method static synthetic access$000(JI)V
    .registers 3

    .line 19
    invoke-static {p0, p1, p2}, Lio/agora/rtc2/extensions/MediaProjectionSource;->nativeOnError(JI)V

    return-void
.end method

.method static synthetic access$100(JIIIJZLio/agora/base/internal/video/EglBase$Context;IZ[F)V
    .registers 12

    .line 19
    invoke-static/range {p0 .. p11}, Lio/agora/rtc2/extensions/MediaProjectionSource;->nativeOnFrameCaptured(JIIIJZLio/agora/base/internal/video/EglBase$Context;IZ[F)V

    return-void
.end method

.method static synthetic access$200(JIILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;IIJ)V
    .registers 13

    .line 19
    invoke-static/range {p0 .. p12}, Lio/agora/rtc2/extensions/MediaProjectionSource;->nativeOnI420FrameAvailable(JIILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;IIJ)V

    return-void
.end method

.method static synthetic access$300(JLjava/nio/ByteBuffer;)V
    .registers 3

    .line 19
    invoke-static {p0, p1, p2}, Lio/agora/rtc2/extensions/MediaProjectionSource;->nativeOnCacheBufferReady(JLjava/nio/ByteBuffer;)V

    return-void
.end method

.method static synthetic access$400(JI)V
    .registers 3

    .line 19
    invoke-static {p0, p1, p2}, Lio/agora/rtc2/extensions/MediaProjectionSource;->nativeOnDataIsRecorded(JI)V

    return-void
.end method

.method static createCallback(J)Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;
    .registers 3

    .line 370
    new-instance v0, Lio/agora/rtc2/extensions/MediaProjectionSource$1;

    invoke-direct {v0, p0, p1}, Lio/agora/rtc2/extensions/MediaProjectionSource$1;-><init>(J)V

    return-object v0
.end method

.method static createDefaultCaptureFactory()Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;
    .registers 1

    .line 128
    new-instance v0, Lio/agora/rtc2/extensions/MediaProjectionSource$DefaultCaptureFactory;

    invoke-direct {v0}, Lio/agora/rtc2/extensions/MediaProjectionSource$DefaultCaptureFactory;-><init>()V

    return-object v0
.end method

.method private getMediaProjectManager()Lio/agora/rtc2/extensions/MediaProjectionMgr;
    .registers 3

    .line 151
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 152
    :try_start_3
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->mediaProjectManager:Lio/agora/rtc2/extensions/MediaProjectionMgr;

    if-nez v1, :cond_e

    .line 153
    new-instance v1, Lio/agora/rtc2/extensions/MediaProjectionMgr;

    invoke-direct {v1, p0, p0}, Lio/agora/rtc2/extensions/MediaProjectionMgr;-><init>(Lio/agora/rtc2/extensions/MediaProjectionMgr$RequestListener;Lio/agora/rtc2/extensions/MediaProjectionMgr$ConfigurationChangedListener;)V

    iput-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->mediaProjectManager:Lio/agora/rtc2/extensions/MediaProjectionMgr;

    .line 155
    :cond_e
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->mediaProjectManager:Lio/agora/rtc2/extensions/MediaProjectionMgr;

    monitor-exit v0

    return-object v1

    :catchall_12
    move-exception v1

    .line 156
    monitor-exit v0
    :try_end_14
    .catchall {:try_start_3 .. :try_end_14} :catchall_12

    throw v1
.end method

.method static logD(Ljava/lang/String;Ljava/lang/String;)V
    .registers 2

    .line 446
    invoke-static {p0, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    return-void
.end method

.method static logE(Ljava/lang/String;Ljava/lang/String;)V
    .registers 2

    .line 456
    invoke-static {p0, p1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

    return-void
.end method

.method static logW(Ljava/lang/String;Ljava/lang/String;)V
    .registers 2

    .line 451
    invoke-static {p0, p1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I

    return-void
.end method

.method private static native nativeOnCacheBufferReady(JLjava/nio/ByteBuffer;)V
.end method

.method private static native nativeOnDataIsRecorded(JI)V
.end method

.method private static native nativeOnError(JI)V
.end method

.method private static native nativeOnFrameCaptured(JIIIJZLio/agora/base/internal/video/EglBase$Context;IZ[F)V
.end method

.method private static native nativeOnI420FrameAvailable(JIILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;ILjava/nio/ByteBuffer;IIJ)V
.end method

.method public static setInjectedFactory(Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;)V
    .registers 1

    .line 84
    sput-object p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->injectedFactory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    return-void
.end method


# virtual methods
.method changeScreenCaptureFormat(II)V
    .registers 5

    .line 252
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-virtual {v0}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;->checkIsOnValidThread()V

    if-lez p1, :cond_19

    if-gtz p2, :cond_a

    goto :goto_19

    .line 256
    :cond_a
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 257
    :try_start_d
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    if-eqz v1, :cond_14

    .line 258
    invoke-interface {v1, p1, p2}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->changeCaptureFormatAsync(II)V

    .line 260
    :cond_14
    monitor-exit v0

    return-void

    :catchall_16
    move-exception p1

    monitor-exit v0
    :try_end_18
    .catchall {:try_start_d .. :try_end_18} :catchall_16

    throw p1

    :cond_19
    :goto_19
    return-void
.end method

.method changeScreenCaptureFrameRate(I)V
    .registers 4

    .line 242
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-virtual {v0}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;->checkIsOnValidThread()V

    .line 243
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 244
    :try_start_8
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    if-eqz v1, :cond_f

    .line 245
    invoke-interface {v1, p1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->changeCaptureFrameRate(I)V

    .line 247
    :cond_f
    monitor-exit v0

    return-void

    :catchall_11
    move-exception p1

    monitor-exit v0
    :try_end_13
    .catchall {:try_start_8 .. :try_end_13} :catchall_11

    throw p1
.end method

.method public getAudioCapture()Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;
    .registers 2

    .line 197
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    return-object v0
.end method

.method public getAudioCaptureParameters()Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;
    .registers 2

    .line 191
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    return-object v0
.end method

.method public getRequestedMediaProjection()Landroid/media/projection/MediaProjection;
    .registers 2

    .line 185
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    return-object v0
.end method

.method public getScreeenCaptureParameters()Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;
    .registers 2

    .line 203
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    return-object v0
.end method

.method public getScreenCapture()Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;
    .registers 2

    .line 209
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    return-object v0
.end method

.method public onCacheBufferReady(Ljava/nio/ByteBuffer;)V
    .registers 3

    .line 421
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->callback:Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

    invoke-interface {v0, p1}, Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;->onCacheBufferReady(Ljava/nio/ByteBuffer;)V

    return-void
.end method

.method public onConfigurationChanged(Landroid/content/res/Configuration;)V
    .registers 4

    const-string v0, "MediaProjectionSource"

    const-string v1, "onConfigurationChanged()"

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

    .line 350
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 351
    :try_start_a
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    if-eqz v1, :cond_11

    .line 352
    invoke-interface {v1, p1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->changeConfigurationAsync(Landroid/content/res/Configuration;)V

    .line 354
    :cond_11
    monitor-exit v0

    return-void

    :catchall_13
    move-exception p1

    monitor-exit v0
    :try_end_15
    .catchall {:try_start_a .. :try_end_15} :catchall_13

    throw p1
.end method

.method public onDataIsRecorded(I)V
    .registers 3

    .line 427
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->callback:Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

    invoke-interface {v0, p1}, Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;->onDataIsRecorded(I)V

    return-void
.end method

.method public onFrame(Lio/agora/base/VideoFrame;)V
    .registers 3

    .line 415
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->callback:Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

    invoke-interface {v0, p1}, Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;->onFrame(Lio/agora/base/VideoFrame;)V

    return-void
.end method

.method public onProjectionResult(Landroid/media/projection/MediaProjection;)V
    .registers 12

    const-string v0, "MediaProjectionSource"

    const-string v1, "onRequestSuccess()"

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

    .line 321
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    if-nez p1, :cond_1b

    :try_start_c
    const-string p1, "MediaProjectionSource"

    const-string v1, "Failed to get media projection, user denied"

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

    .line 324
    iget-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->callback:Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;

    const/4 v1, 0x0

    invoke-interface {p1, v1}, Lio/agora/rtc2/extensions/MediaProjectionSource$Callback;->onError(I)V

    .line 325
    monitor-exit v0

    return-void

    .line 327
    :cond_1b
    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    .line 328
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    if-eqz v1, :cond_42

    .line 329
    iget-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    iget v3, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->width:I

    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget v4, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->height:I

    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget v5, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->frameRate:I

    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget-boolean v6, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->frameCopy:Z

    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget-boolean v7, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->smoothCapture:Z

    move-object v8, p1

    move-object v9, p0

    invoke-interface/range {v2 .. v9}, Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;->createScreenCapture(IIIZZLandroid/media/projection/MediaProjection;Lio/agora/base/internal/video/VideoSink;)Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    move-result-object v1

    iput-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    if-eqz v1, :cond_42

    .line 334
    invoke-interface {v1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->startCaptureMaybeAsync()Z

    .line 337
    :cond_42
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    if-eqz v1, :cond_5c

    .line 338
    iget-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    iget v3, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;->channels:I

    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    iget v4, v1, Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;->sampleRate:I

    const/4 v6, 0x0

    move-object v5, p1

    move-object v7, p0

    invoke-interface/range {v2 .. v7}, Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;->createAudioCapture(IILandroid/media/projection/MediaProjection;Lio/agora/rtc2/extensions/MediaProjectionMgr$AudioRecordErrorCallback;Lio/agora/rtc2/extensions/MediaProjectionMgr$AudioFrameListener;)Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    move-result-object p1

    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    if-eqz p1, :cond_5c

    .line 341
    invoke-interface {p1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;->startRecording()Z

    .line 344
    :cond_5c
    monitor-exit v0

    return-void

    :catchall_5e
    move-exception p1

    monitor-exit v0
    :try_end_60
    .catchall {:try_start_c .. :try_end_60} :catchall_5e

    throw p1
.end method

.method releaseMediaProjectionManager()V
    .registers 7

    .line 160
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 161
    :try_start_3
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    if-nez v1, :cond_4b

    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    if-eqz v1, :cond_c

    goto :goto_4b

    .line 164
    :cond_c
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;
    :try_end_e
    .catchall {:try_start_3 .. :try_end_e} :catchall_4d

    const/4 v2, 0x0

    if-eqz v1, :cond_40

    .line 166
    :try_start_11
    sget v1, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v3, 0x15

    if-lt v1, v3, :cond_1c

    .line 167
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    invoke-virtual {v1}, Landroid/media/projection/MediaProjection;->stop()V
    :try_end_1c
    .catch Ljava/lang/Exception; {:try_start_11 .. :try_end_1c} :catch_21
    .catchall {:try_start_11 .. :try_end_1c} :catchall_1f

    .line 172
    :cond_1c
    :goto_1c
    :try_start_1c
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;
    :try_end_1e
    .catchall {:try_start_1c .. :try_end_1e} :catchall_4d

    goto :goto_40

    :catchall_1f
    move-exception v1

    goto :goto_3d

    :catch_21
    move-exception v1

    :try_start_22
    const-string v3, "MediaProjectionSource"

    .line 170
    new-instance v4, Ljava/lang/StringBuilder;

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

    const-string v5, "Exception when stopCaptureAndBlockUntilStopped: "

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

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

    move-result-object v1

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

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

    move-result-object v1

    invoke-static {v3, v1}, Lio/agora/base/internal/Logging;->w(Ljava/lang/String;Ljava/lang/String;)V
    :try_end_3c
    .catchall {:try_start_22 .. :try_end_3c} :catchall_1f

    goto :goto_1c

    .line 172
    :goto_3d
    :try_start_3d
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    throw v1

    .line 175
    :cond_40
    :goto_40
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->mediaProjectManager:Lio/agora/rtc2/extensions/MediaProjectionMgr;

    if-eqz v1, :cond_49

    .line 176
    invoke-virtual {v1}, Lio/agora/rtc2/extensions/MediaProjectionMgr;->dispose()V

    .line 177
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->mediaProjectManager:Lio/agora/rtc2/extensions/MediaProjectionMgr;

    .line 179
    :cond_49
    monitor-exit v0

    return-void

    .line 162
    :cond_4b
    :goto_4b
    monitor-exit v0

    return-void

    :catchall_4d
    move-exception v1

    .line 179
    monitor-exit v0
    :try_end_4f
    .catchall {:try_start_3d .. :try_end_4f} :catchall_4d

    throw v1
.end method

.method startAudioCapture(Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;)Z
    .registers 9

    const-string v0, "MediaProjectionSource"

    const-string v1, "startAudioCapture()"

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

    .line 281
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-virtual {v0}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;->checkIsOnValidThread()V

    const/4 v0, 0x0

    if-nez p1, :cond_17

    const-string p1, "MediaProjectionSource"

    const-string v1, "invalid parameter for audio capture"

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

    return v0

    .line 286
    :cond_17
    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    .line 287
    iget-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    invoke-interface {p1}, Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;->isAudioCaptureSupported()Z

    move-result p1

    if-nez p1, :cond_22

    return v0

    .line 290
    :cond_22
    iget-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter p1

    .line 291
    :try_start_25
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    if-eqz v0, :cond_43

    .line 292
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    iget v2, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;->channels:I

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    iget v3, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;->sampleRate:I

    iget-object v4, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    const/4 v5, 0x0

    move-object v6, p0

    invoke-interface/range {v1 .. v6}, Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;->createAudioCapture(IILandroid/media/projection/MediaProjection;Lio/agora/rtc2/extensions/MediaProjectionMgr$AudioRecordErrorCallback;Lio/agora/rtc2/extensions/MediaProjectionMgr$AudioFrameListener;)Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    move-result-object v0

    iput-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    if-eqz v0, :cond_4a

    .line 295
    invoke-interface {v0}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;->startRecording()Z

    goto :goto_4a

    .line 298
    :cond_43
    invoke-direct {p0}, Lio/agora/rtc2/extensions/MediaProjectionSource;->getMediaProjectManager()Lio/agora/rtc2/extensions/MediaProjectionMgr;

    move-result-object v0

    invoke-virtual {v0}, Lio/agora/rtc2/extensions/MediaProjectionMgr;->requestPermission()V

    .line 300
    :cond_4a
    :goto_4a
    monitor-exit p1

    const/4 p1, 0x1

    return p1

    :catchall_4d
    move-exception v0

    monitor-exit p1
    :try_end_4f
    .catchall {:try_start_25 .. :try_end_4f} :catchall_4d

    throw v0
.end method

.method startVideoCapture(Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;)Z
    .registers 11

    .line 214
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-virtual {v0}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;->checkIsOnValidThread()V

    const-string v0, "MediaProjectionSource"

    const-string v1, "startVideoCapture()"

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

    const/4 v0, 0x0

    if-nez p1, :cond_17

    const-string p1, "MediaProjectionSource"

    const-string v1, "invalid parameter for video capture"

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

    return v0

    .line 220
    :cond_17
    iput-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    .line 221
    iget-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    invoke-interface {p1}, Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;->isScreenCaptureSupported()Z

    move-result p1

    if-nez p1, :cond_22

    return v0

    .line 224
    :cond_22
    iget-object p1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter p1

    .line 225
    :try_start_25
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    if-eqz v0, :cond_4e

    .line 226
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->factory:Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget v2, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->width:I

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget v3, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->height:I

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget v4, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->frameRate:I

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget-boolean v5, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->frameCopy:Z

    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    iget-boolean v6, v0, Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;->smoothCapture:Z

    iget-object v7, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->requestedMediaProjection:Landroid/media/projection/MediaProjection;

    move-object v8, p0

    invoke-interface/range {v1 .. v8}, Lio/agora/rtc2/extensions/MediaProjectionSource$CaptureFactory;->createScreenCapture(IIIZZLandroid/media/projection/MediaProjection;Lio/agora/base/internal/video/VideoSink;)Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    move-result-object v0

    iput-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    if-eqz v0, :cond_55

    .line 231
    invoke-interface {v0}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->startCaptureMaybeAsync()Z

    goto :goto_55

    .line 234
    :cond_4e
    invoke-direct {p0}, Lio/agora/rtc2/extensions/MediaProjectionSource;->getMediaProjectManager()Lio/agora/rtc2/extensions/MediaProjectionMgr;

    move-result-object v0

    invoke-virtual {v0}, Lio/agora/rtc2/extensions/MediaProjectionMgr;->requestPermission()V

    .line 236
    :cond_55
    :goto_55
    monitor-exit p1

    const/4 p1, 0x1

    return p1

    :catchall_58
    move-exception v0

    monitor-exit p1
    :try_end_5a
    .catchall {:try_start_25 .. :try_end_5a} :catchall_58

    throw v0
.end method

.method stopAudioCapture()V
    .registers 4

    const-string v0, "MediaProjectionSource"

    const-string v1, "stopAudioCapture()"

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

    .line 307
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-virtual {v0}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;->checkIsOnValidThread()V

    .line 308
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 309
    :try_start_f
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    const/4 v2, 0x0

    if-eqz v1, :cond_19

    .line 310
    invoke-interface {v1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;->stopRecording()V

    .line 311
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IAudioCapture;

    .line 313
    :cond_19
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->audioCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$AudioCaptureParameters;

    .line 314
    invoke-virtual {p0}, Lio/agora/rtc2/extensions/MediaProjectionSource;->releaseMediaProjectionManager()V

    .line 315
    monitor-exit v0

    return-void

    :catchall_20
    move-exception v1

    monitor-exit v0
    :try_end_22
    .catchall {:try_start_f .. :try_end_22} :catchall_20

    throw v1
.end method

.method stopVideoCapture()V
    .registers 4

    const-string v0, "MediaProjectionSource"

    const-string v1, "stopVideoCapture()"

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

    .line 266
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->checker:Lio/agora/base/internal/ThreadUtils$ThreadChecker;

    invoke-virtual {v0}, Lio/agora/base/internal/ThreadUtils$ThreadChecker;->checkIsOnValidThread()V

    .line 267
    iget-object v0, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->objectLock:Ljava/lang/Object;

    monitor-enter v0

    .line 268
    :try_start_f
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    const/4 v2, 0x0

    if-eqz v1, :cond_1e

    .line 269
    invoke-interface {v1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->stopCaptureAndBlockUntilStopped()V

    .line 270
    iget-object v1, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    invoke-interface {v1}, Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;->dispose()V

    .line 271
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screenCapture:Lio/agora/rtc2/extensions/MediaProjectionMgr$IScreenCapture;

    .line 273
    :cond_1e
    iput-object v2, p0, Lio/agora/rtc2/extensions/MediaProjectionSource;->screeenCaptureParameters:Lio/agora/rtc2/extensions/MediaProjectionSource$ScreenCaptureParameters;

    .line 274
    invoke-virtual {p0}, Lio/agora/rtc2/extensions/MediaProjectionSource;->releaseMediaProjectionManager()V

    .line 275
    monitor-exit v0

    return-void

    :catchall_25
    move-exception v1

    monitor-exit v0
    :try_end_27
    .catchall {:try_start_f .. :try_end_27} :catchall_25

    throw v1
.end method