HardwareVideoEncoderFactory.smali
.class public Lorg/webrtc/ali/HardwareVideoEncoderFactory;
.super Ljava/lang/Object;
.source "HardwareVideoEncoderFactory.java"
# interfaces
.implements Lorg/webrtc/ali/VideoEncoderFactory;
# static fields
.field private static final H264_CONSTRAINED_BASELINE_3_1:Ljava/lang/String; = "42001f"
.field private static final H264_CONSTRAINED_HIGH_3_1:Ljava/lang/String; = "640c1f"
.field private static final H264_FMTP_LEVEL_ASYMMETRY_ALLOWED:Ljava/lang/String; = "level-asymmetry-allowed"
.field private static final H264_FMTP_PACKETIZATION_MODE:Ljava/lang/String; = "packetization-mode"
.field private static final H264_FMTP_PROFILE_LEVEL_ID:Ljava/lang/String; = "profile-level-id"
.field private static final H264_HW_EXCEPTION_MODELS:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Ljava/lang/String;",
">;"
}
.end annotation
.end field
.field private static final H264_LEVEL_3_1:Ljava/lang/String; = "1f"
.field private static final H264_PROFILE_CONSTRAINED_BASELINE:Ljava/lang/String; = "4200"
.field private static final H264_PROFILE_CONSTRAINED_HIGH:Ljava/lang/String; = "640c"
.field private static final QCOM_VP8_KEY_FRAME_INTERVAL_ANDROID_L_MS:I = 0x3a98
.field private static final QCOM_VP8_KEY_FRAME_INTERVAL_ANDROID_M_MS:I = 0x4e20
.field private static final QCOM_VP8_KEY_FRAME_INTERVAL_ANDROID_N_MS:I = 0x3a98
.field private static final TAG:Ljava/lang/String; = "HardwareVideoEncoderFactory"
# instance fields
.field private final enableH264HighProfile:Z
.field private final enableIntelVp8Encoder:Z
# direct methods
.method static constructor <clinit>()V
.registers 3
.line 41
const-string v0, "SAMSUNG-SGH-I337"
const-string v1, "Nexus 7"
const-string v2, "Nexus 4"
filled-new-array {v0, v1, v2}, [Ljava/lang/String;
move-result-object v0
.line 42
invoke-static {v0}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
move-result-object v0
sput-object v0, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->H264_HW_EXCEPTION_MODELS:Ljava/util/List;
.line 41
return-void
.end method
.method public constructor <init>(ZZ)V
.registers 3
.param p1, "enableIntelVp8Encoder" # Z
.param p2, "enableH264HighProfile" # Z
.line 61
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 62
iput-boolean p1, p0, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->enableIntelVp8Encoder:Z
.line 63
iput-boolean p2, p0, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->enableH264HighProfile:Z
.line 64
return-void
.end method
.method private createBitrateAdjuster(Lorg/webrtc/ali/VideoCodecType;Ljava/lang/String;)Lorg/webrtc/ali/BitrateAdjuster;
.registers 4
.param p1, "type" # Lorg/webrtc/ali/VideoCodecType;
.param p2, "codecName" # Ljava/lang/String;
.line 210
const-string v0, "OMX.Exynos."
invoke-virtual {p2, v0}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_18
.line 211
sget-object v0, Lorg/webrtc/ali/VideoCodecType;->VP8:Lorg/webrtc/ali/VideoCodecType;
if-ne p1, v0, :cond_12
.line 213
new-instance v0, Lorg/webrtc/ali/DynamicBitrateAdjuster;
invoke-direct {v0}, Lorg/webrtc/ali/DynamicBitrateAdjuster;-><init>()V
return-object v0
.line 216
:cond_12
new-instance v0, Lorg/webrtc/ali/FramerateBitrateAdjuster;
invoke-direct {v0}, Lorg/webrtc/ali/FramerateBitrateAdjuster;-><init>()V
return-object v0
.line 220
:cond_18
new-instance v0, Lorg/webrtc/ali/BaseBitrateAdjuster;
invoke-direct {v0}, Lorg/webrtc/ali/BaseBitrateAdjuster;-><init>()V
return-object v0
.end method
.method private findCodecForType(Lorg/webrtc/ali/VideoCodecType;)Landroid/media/MediaCodecInfo;
.registers 7
.param p1, "type" # Lorg/webrtc/ali/VideoCodecType;
.line 105
const/4 v0, 0x0
.local v0, "i":I
:goto_1
invoke-static {}, Landroid/media/MediaCodecList;->getCodecCount()I
move-result v1
if-ge v0, v1, :cond_29
.line 106
const/4 v1, 0x0
.line 108
.local v1, "info":Landroid/media/MediaCodecInfo;
:try_start_8
invoke-static {v0}, Landroid/media/MediaCodecList;->getCodecInfoAt(I)Landroid/media/MediaCodecInfo;
move-result-object v2
:try_end_c
.catch Ljava/lang/IllegalArgumentException; {:try_start_8 .. :try_end_c} :catch_e
move-object v1, v2
.line 111
goto :goto_16
.line 109
:catch_e
move-exception v2
.line 110
.local v2, "e":Ljava/lang/IllegalArgumentException;
const-string v3, "HardwareVideoEncoderFactory"
const-string v4, "Cannot retrieve encoder codec info"
invoke-static {v3, v4, v2}, Lorg/webrtc/ali/Logging;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
.line 113
.end local v2 # "e":Ljava/lang/IllegalArgumentException;
:goto_16
if-eqz v1, :cond_26
invoke-virtual {v1}, Landroid/media/MediaCodecInfo;->isEncoder()Z
move-result v2
if-nez v2, :cond_1f
.line 114
goto :goto_26
.line 117
:cond_1f
invoke-direct {p0, v1, p1}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->isSupportedCodec(Landroid/media/MediaCodecInfo;Lorg/webrtc/ali/VideoCodecType;)Z
move-result v2
if-eqz v2, :cond_26
.line 118
return-object v1
.line 105
.end local v1 # "info":Landroid/media/MediaCodecInfo;
:cond_26
:goto_26
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 121
.end local v0 # "i":I
:cond_29
const/4 v0, 0x0
return-object v0
.end method
.method private getCodecProperties(Lorg/webrtc/ali/VideoCodecType;Z)Ljava/util/Map;
.registers 6
.param p1, "type" # Lorg/webrtc/ali/VideoCodecType;
.param p2, "highProfile" # Z
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lorg/webrtc/ali/VideoCodecType;",
"Z)",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;"
}
.end annotation
.line 228
sget-object v0, Lorg/webrtc/ali/HardwareVideoEncoderFactory$1;->$SwitchMap$org$webrtc$ali$VideoCodecType:[I
invoke-virtual {p1}, Lorg/webrtc/ali/VideoCodecType;->ordinal()I
move-result v1
aget v0, v0, v1
const/4 v1, 0x1
if-eq v0, v1, :cond_46
const/4 v1, 0x2
if-eq v0, v1, :cond_46
const/4 v1, 0x3
if-ne v0, v1, :cond_2f
.line 233
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
.line 234
.local v0, "properties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
const-string v1, "1"
const-string v2, "level-asymmetry-allowed"
invoke-interface {v0, v2, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 235
const-string v2, "packetization-mode"
invoke-interface {v0, v2, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 236
if-eqz p2, :cond_27
const-string v1, "640c1f"
goto :goto_29
:cond_27
const-string v1, "42001f"
:goto_29
const-string v2, "profile-level-id"
invoke-interface {v0, v2, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 238
return-object v0
.line 240
.end local v0 # "properties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
:cond_2f
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Unsupported codec: "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 231
:cond_46
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
return-object v0
.end method
.method private getForcedKeyFrameIntervalMs(Lorg/webrtc/ali/VideoCodecType;Ljava/lang/String;)I
.registers 6
.param p1, "type" # Lorg/webrtc/ali/VideoCodecType;
.param p2, "codecName" # Ljava/lang/String;
.line 195
sget-object v0, Lorg/webrtc/ali/VideoCodecType;->VP8:Lorg/webrtc/ali/VideoCodecType;
if-ne p1, v0, :cond_2a
const-string v0, "OMX.qcom."
invoke-virtual {p2, v0}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_2a
.line 196
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x15
const/16 v2, 0x3a98
if-eq v0, v1, :cond_29
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x16
if-ne v0, v1, :cond_1b
goto :goto_29
.line 199
:cond_1b
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v1, 0x17
if-ne v0, v1, :cond_24
.line 200
const/16 v0, 0x4e20
return v0
.line 201
:cond_24
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
if-le v0, v1, :cond_2a
.line 202
return v2
.line 198
:cond_29
:goto_29
return v2
.line 206
:cond_2a
const/4 v0, 0x0
return v0
.end method
.method private getKeyFrameIntervalSec(Lorg/webrtc/ali/VideoCodecType;)I
.registers 5
.param p1, "type" # Lorg/webrtc/ali/VideoCodecType;
.line 184
sget-object v0, Lorg/webrtc/ali/HardwareVideoEncoderFactory$1;->$SwitchMap$org$webrtc$ali$VideoCodecType:[I
invoke-virtual {p1}, Lorg/webrtc/ali/VideoCodecType;->ordinal()I
move-result v1
aget v0, v0, v1
const/4 v1, 0x1
if-eq v0, v1, :cond_2b
const/4 v1, 0x2
if-eq v0, v1, :cond_2b
const/4 v1, 0x3
if-ne v0, v1, :cond_14
.line 189
const/16 v0, 0x14
return v0
.line 191
:cond_14
new-instance v0, Ljava/lang/IllegalArgumentException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Unsupported VideoCodecType "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V
throw v0
.line 187
:cond_2b
const/16 v0, 0x64
return v0
.end method
.method private isH264HighProfileSupported(Landroid/media/MediaCodecInfo;)Z
.registers 4
.param p1, "info" # Landroid/media/MediaCodecInfo;
.line 224
iget-boolean v0, p0, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->enableH264HighProfile:Z
if-eqz v0, :cond_12
invoke-virtual {p1}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
move-result-object v0
const-string v1, "OMX.qcom."
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v0
if-eqz v0, :cond_12
const/4 v0, 0x1
goto :goto_13
:cond_12
const/4 v0, 0x0
:goto_13
return v0
.end method
.method private isHardwareSupportedInCurrentSdk(Landroid/media/MediaCodecInfo;Lorg/webrtc/ali/VideoCodecType;)Z
.registers 5
.param p1, "info" # Landroid/media/MediaCodecInfo;
.param p2, "type" # Lorg/webrtc/ali/VideoCodecType;
.line 141
sget-object v0, Lorg/webrtc/ali/HardwareVideoEncoderFactory$1;->$SwitchMap$org$webrtc$ali$VideoCodecType:[I
invoke-virtual {p2}, Lorg/webrtc/ali/VideoCodecType;->ordinal()I
move-result v1
aget v0, v0, v1
const/4 v1, 0x1
if-eq v0, v1, :cond_1d
const/4 v1, 0x2
if-eq v0, v1, :cond_18
const/4 v1, 0x3
if-eq v0, v1, :cond_13
.line 149
const/4 v0, 0x0
return v0
.line 147
:cond_13
invoke-direct {p0, p1}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->isHardwareSupportedInCurrentSdkH264(Landroid/media/MediaCodecInfo;)Z
move-result v0
return v0
.line 145
:cond_18
invoke-direct {p0, p1}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->isHardwareSupportedInCurrentSdkVp9(Landroid/media/MediaCodecInfo;)Z
move-result v0
return v0
.line 143
:cond_1d
invoke-direct {p0, p1}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->isHardwareSupportedInCurrentSdkVp8(Landroid/media/MediaCodecInfo;)Z
move-result v0
return v0
.end method
.method private isHardwareSupportedInCurrentSdkH264(Landroid/media/MediaCodecInfo;)Z
.registers 6
.param p1, "info" # Landroid/media/MediaCodecInfo;
.line 172
sget-object v0, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->H264_HW_EXCEPTION_MODELS:Ljava/util/List;
sget-object v1, Landroid/os/Build;->MODEL:Ljava/lang/String;
invoke-interface {v0, v1}, Ljava/util/List;->contains(Ljava/lang/Object;)Z
move-result v0
const/4 v1, 0x0
if-eqz v0, :cond_c
.line 173
return v1
.line 175
:cond_c
invoke-virtual {p1}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
move-result-object v0
.line 177
.local v0, "name":Ljava/lang/String;
const-string v2, "OMX.qcom."
invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_1e
sget v2, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x13
if-ge v2, v3, :cond_2c
.line 179
:cond_1e
const-string v2, "OMX.Exynos."
invoke-virtual {v0, v2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v2
if-eqz v2, :cond_2d
sget v2, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v3, 0x15
if-lt v2, v3, :cond_2d
:cond_2c
const/4 v1, 0x1
.line 177
:cond_2d
return v1
.end method
.method private isHardwareSupportedInCurrentSdkVp8(Landroid/media/MediaCodecInfo;)Z
.registers 5
.param p1, "info" # Landroid/media/MediaCodecInfo;
.line 153
invoke-virtual {p1}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
move-result-object v0
.line 155
.local v0, "name":Ljava/lang/String;
const-string v1, "OMX.qcom."
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v1
if-eqz v1, :cond_12
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x13
if-ge v1, v2, :cond_32
.line 157
:cond_12
const-string v1, "OMX.Exynos."
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v1
if-eqz v1, :cond_20
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x17
if-ge v1, v2, :cond_32
.line 159
:cond_20
const-string v1, "OMX.Intel."
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v1
if-eqz v1, :cond_34
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x15
if-lt v1, v2, :cond_34
iget-boolean v1, p0, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->enableIntelVp8Encoder:Z
if-eqz v1, :cond_34
:cond_32
const/4 v1, 0x1
goto :goto_35
:cond_34
const/4 v1, 0x0
.line 155
:goto_35
return v1
.end method
.method private isHardwareSupportedInCurrentSdkVp9(Landroid/media/MediaCodecInfo;)Z
.registers 5
.param p1, "info" # Landroid/media/MediaCodecInfo;
.line 164
invoke-virtual {p1}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
move-result-object v0
.line 165
.local v0, "name":Ljava/lang/String;
const-string v1, "OMX.qcom."
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v1
if-nez v1, :cond_14
const-string v1, "OMX.Exynos."
invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v1
if-eqz v1, :cond_1c
:cond_14
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x18
if-lt v1, v2, :cond_1c
const/4 v1, 0x1
goto :goto_1d
:cond_1c
const/4 v1, 0x0
:goto_1d
return v1
.end method
.method private isSupportedCodec(Landroid/media/MediaCodecInfo;Lorg/webrtc/ali/VideoCodecType;)Z
.registers 6
.param p1, "info" # Landroid/media/MediaCodecInfo;
.param p2, "type" # Lorg/webrtc/ali/VideoCodecType;
.line 126
invoke-static {p1, p2}, Lorg/webrtc/ali/MediaCodecUtils;->codecSupportsType(Landroid/media/MediaCodecInfo;Lorg/webrtc/ali/VideoCodecType;)Z
move-result v0
const/4 v1, 0x0
if-nez v0, :cond_8
.line 127
return v1
.line 130
:cond_8
sget-object v0, Lorg/webrtc/ali/MediaCodecUtils;->ENCODER_COLOR_FORMATS:[I
.line 131
invoke-virtual {p2}, Lorg/webrtc/ali/VideoCodecType;->mimeType()Ljava/lang/String;
move-result-object v2
invoke-virtual {p1, v2}, Landroid/media/MediaCodecInfo;->getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;
move-result-object v2
.line 130
invoke-static {v0, v2}, Lorg/webrtc/ali/MediaCodecUtils;->selectColorFormat([ILandroid/media/MediaCodecInfo$CodecCapabilities;)Ljava/lang/Integer;
move-result-object v0
if-nez v0, :cond_19
.line 133
return v1
.line 135
:cond_19
invoke-direct {p0, p1, p2}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->isHardwareSupportedInCurrentSdk(Landroid/media/MediaCodecInfo;Lorg/webrtc/ali/VideoCodecType;)Z
move-result v0
return v0
.end method
# virtual methods
.method public createEncoder(Lorg/webrtc/ali/VideoCodecInfo;)Lorg/webrtc/ali/VideoEncoder;
.registers 15
.param p1, "input" # Lorg/webrtc/ali/VideoCodecInfo;
.line 68
iget-object v0, p1, Lorg/webrtc/ali/VideoCodecInfo;->name:Ljava/lang/String;
invoke-static {v0}, Lorg/webrtc/ali/VideoCodecType;->valueOf(Ljava/lang/String;)Lorg/webrtc/ali/VideoCodecType;
move-result-object v0
.line 69
.local v0, "type":Lorg/webrtc/ali/VideoCodecType;
invoke-direct {p0, v0}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->findCodecForType(Lorg/webrtc/ali/VideoCodecType;)Landroid/media/MediaCodecInfo;
move-result-object v8
.line 71
.local v8, "info":Landroid/media/MediaCodecInfo;
if-nez v8, :cond_e
.line 72
const/4 v1, 0x0
return-object v1
.line 75
:cond_e
invoke-virtual {v8}, Landroid/media/MediaCodecInfo;->getName()Ljava/lang/String;
move-result-object v9
.line 76
.local v9, "codecName":Ljava/lang/String;
invoke-virtual {v0}, Lorg/webrtc/ali/VideoCodecType;->mimeType()Ljava/lang/String;
move-result-object v10
.line 77
.local v10, "mime":Ljava/lang/String;
sget-object v1, Lorg/webrtc/ali/MediaCodecUtils;->ENCODER_COLOR_FORMATS:[I
.line 78
invoke-virtual {v8, v10}, Landroid/media/MediaCodecInfo;->getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;
move-result-object v2
.line 77
invoke-static {v1, v2}, Lorg/webrtc/ali/MediaCodecUtils;->selectColorFormat([ILandroid/media/MediaCodecInfo$CodecCapabilities;)Ljava/lang/Integer;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I
move-result v11
.line 80
.local v11, "colorFormat":I
new-instance v12, Lorg/webrtc/ali/HardwareVideoEncoder;
invoke-direct {p0, v0}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->getKeyFrameIntervalSec(Lorg/webrtc/ali/VideoCodecType;)I
move-result v5
.line 81
invoke-direct {p0, v0, v9}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->getForcedKeyFrameIntervalMs(Lorg/webrtc/ali/VideoCodecType;Ljava/lang/String;)I
move-result v6
invoke-direct {p0, v0, v9}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->createBitrateAdjuster(Lorg/webrtc/ali/VideoCodecType;Ljava/lang/String;)Lorg/webrtc/ali/BitrateAdjuster;
move-result-object v7
move-object v1, v12
move-object v2, v9
move-object v3, v0
move v4, v11
invoke-direct/range {v1 .. v7}, Lorg/webrtc/ali/HardwareVideoEncoder;-><init>(Ljava/lang/String;Lorg/webrtc/ali/VideoCodecType;IIILorg/webrtc/ali/BitrateAdjuster;)V
.line 80
return-object v12
.end method
.method public getSupportedCodecs()[Lorg/webrtc/ali/VideoCodecInfo;
.registers 12
.line 86
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 90
.local v0, "supportedCodecInfos":Ljava/util/List;, "Ljava/util/List<Lorg/webrtc/ali/VideoCodecInfo;>;"
const/4 v1, 0x3
new-array v2, v1, [Lorg/webrtc/ali/VideoCodecType;
sget-object v3, Lorg/webrtc/ali/VideoCodecType;->VP8:Lorg/webrtc/ali/VideoCodecType;
const/4 v4, 0x0
aput-object v3, v2, v4
sget-object v3, Lorg/webrtc/ali/VideoCodecType;->VP9:Lorg/webrtc/ali/VideoCodecType;
const/4 v5, 0x1
aput-object v3, v2, v5
sget-object v3, Lorg/webrtc/ali/VideoCodecType;->H264:Lorg/webrtc/ali/VideoCodecType;
const/4 v6, 0x2
aput-object v3, v2, v6
const/4 v3, 0x0
:goto_18
if-ge v3, v1, :cond_4b
aget-object v6, v2, v3
.line 91
.local v6, "type":Lorg/webrtc/ali/VideoCodecType;
invoke-direct {p0, v6}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->findCodecForType(Lorg/webrtc/ali/VideoCodecType;)Landroid/media/MediaCodecInfo;
move-result-object v7
.line 92
.local v7, "codec":Landroid/media/MediaCodecInfo;
if-eqz v7, :cond_48
.line 93
invoke-virtual {v6}, Lorg/webrtc/ali/VideoCodecType;->name()Ljava/lang/String;
move-result-object v8
.line 94
.local v8, "name":Ljava/lang/String;
sget-object v9, Lorg/webrtc/ali/VideoCodecType;->H264:Lorg/webrtc/ali/VideoCodecType;
if-ne v6, v9, :cond_3c
invoke-direct {p0, v7}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->isH264HighProfileSupported(Landroid/media/MediaCodecInfo;)Z
move-result v9
if-eqz v9, :cond_3c
.line 95
new-instance v9, Lorg/webrtc/ali/VideoCodecInfo;
invoke-direct {p0, v6, v5}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->getCodecProperties(Lorg/webrtc/ali/VideoCodecType;Z)Ljava/util/Map;
move-result-object v10
invoke-direct {v9, v4, v8, v10}, Lorg/webrtc/ali/VideoCodecInfo;-><init>(ILjava/lang/String;Ljava/util/Map;)V
invoke-interface {v0, v9}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 98
:cond_3c
new-instance v9, Lorg/webrtc/ali/VideoCodecInfo;
invoke-direct {p0, v6, v4}, Lorg/webrtc/ali/HardwareVideoEncoderFactory;->getCodecProperties(Lorg/webrtc/ali/VideoCodecType;Z)Ljava/util/Map;
move-result-object v10
invoke-direct {v9, v4, v8, v10}, Lorg/webrtc/ali/VideoCodecInfo;-><init>(ILjava/lang/String;Ljava/util/Map;)V
invoke-interface {v0, v9}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 90
.end local v6 # "type":Lorg/webrtc/ali/VideoCodecType;
.end local v7 # "codec":Landroid/media/MediaCodecInfo;
.end local v8 # "name":Ljava/lang/String;
:cond_48
add-int/lit8 v3, v3, 0x1
goto :goto_18
.line 101
:cond_4b
invoke-interface {v0}, Ljava/util/List;->size()I
move-result v1
new-array v1, v1, [Lorg/webrtc/ali/VideoCodecInfo;
invoke-interface {v0, v1}, Ljava/util/List;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
move-result-object v1
check-cast v1, [Lorg/webrtc/ali/VideoCodecInfo;
return-object v1
.end method