DynamicBitrateAdjuster.smali
.class Lorg/webrtc/ali/DynamicBitrateAdjuster;
.super Lorg/webrtc/ali/BaseBitrateAdjuster;
.source "DynamicBitrateAdjuster.java"
# static fields
.field private static final BITRATE_ADJUSTMENT_MAX_SCALE:D = 4.0
.field private static final BITRATE_ADJUSTMENT_SEC:D = 3.0
.field private static final BITRATE_ADJUSTMENT_STEPS:I
.field private static final BITS_PER_BYTE:D = 8.0
# instance fields
.field private bitrateAdjustmentScaleExp:I
.field private deviationBytes:D
.field private timeSinceLastAdjustmentMs:D
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x157b
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->BITRATE_ADJUSTMENT_STEPS:I
return-void
.end method
.method constructor <init>()V
.registers 3
.line 18
invoke-direct {p0}, Lorg/webrtc/ali/BaseBitrateAdjuster;-><init>()V
.line 29
const-wide/16 v0, 0x0
iput-wide v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
.line 30
iput-wide v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->timeSinceLastAdjustmentMs:D
.line 31
const/4 v0, 0x0
iput v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
return-void
.end method
# virtual methods
.method public getAdjustedBitrateBps()I
.registers 7
.line 91
iget v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetBitrateBps:I
int-to-double v0, v0
iget v2, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
int-to-double v2, v2
const-wide/high16 v4, 0x4034000000000000L # 20.0
invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v2, v4
.line 92
const-wide/high16 v4, 0x4010000000000000L # 4.0
invoke-static {v4, v5, v2, v3}, Ljava/lang/Math;->pow(DD)D
move-result-wide v2
invoke-static {v0, v1}, Ljava/lang/Double;->isNaN(D)Z
mul-double v0, v0, v2
double-to-int v0, v0
.line 91
return v0
.end method
.method public reportEncodedFrame(I)V
.registers 15
.param p1, "size" # I
.line 44
iget v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetFps:I
if-nez v0, :cond_5
.line 45
return-void
.line 49
:cond_5
iget v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetBitrateBps:I
int-to-double v0, v0
const-wide/high16 v2, 0x4020000000000000L # 8.0
invoke-static {v0, v1}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v0, v2
iget v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetFps:I
int-to-double v4, v4
invoke-static {v4, v5}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v0, v4
.line 50
.local v0, "expectedBytesPerFrame":D
iget-wide v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
int-to-double v6, p1
invoke-static {v6, v7}, Ljava/lang/Double;->isNaN(D)Z
sub-double/2addr v6, v0
add-double/2addr v4, v6
iput-wide v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
.line 51
iget-wide v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->timeSinceLastAdjustmentMs:D
const-wide v6, 0x408f400000000000L # 1000.0
iget v8, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetFps:I
int-to-double v8, v8
invoke-static {v8, v9}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v6, v8
add-double/2addr v4, v6
iput-wide v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->timeSinceLastAdjustmentMs:D
.line 55
iget v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetBitrateBps:I
int-to-double v4, v4
invoke-static {v4, v5}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v4, v2
.line 59
.local v4, "deviationThresholdBytes":D
const-wide/high16 v2, 0x4008000000000000L # 3.0
mul-double v2, v2, v4
.line 60
.local v2, "deviationCap":D
iget-wide v6, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
invoke-static {v6, v7, v2, v3}, Ljava/lang/Math;->min(DD)D
move-result-wide v6
iput-wide v6, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
.line 61
neg-double v8, v2
invoke-static {v6, v7, v8, v9}, Ljava/lang/Math;->max(DD)D
move-result-wide v6
iput-wide v6, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
.line 65
iget-wide v8, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->timeSinceLastAdjustmentMs:D
const-wide v10, 0x40a7700000000000L # 3000.0
cmpg-double v12, v8, v10
if-gtz v12, :cond_56
.line 66
return-void
.line 69
:cond_56
const-wide/high16 v8, 0x3fe0000000000000L # 0.5
cmpl-double v10, v6, v4
if-lez v10, :cond_6f
.line 71
div-double/2addr v6, v4
add-double/2addr v6, v8
double-to-int v6, v6
.line 72
.local v6, "bitrateAdjustmentInc":I
iget v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
sub-int/2addr v7, v6
iput v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
.line 75
const/16 v8, -0x14
invoke-static {v7, v8}, Ljava/lang/Math;->max(II)I
move-result v7
iput v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
.line 76
iput-wide v4, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
.end local v6 # "bitrateAdjustmentInc":I
goto :goto_89
.line 77
:cond_6f
neg-double v10, v4
cmpg-double v12, v6, v10
if-gez v12, :cond_89
.line 79
neg-double v6, v6
div-double/2addr v6, v4
add-double/2addr v6, v8
double-to-int v6, v6
.line 80
.restart local v6 # "bitrateAdjustmentInc":I
iget v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
add-int/2addr v7, v6
iput v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
.line 83
const/16 v8, 0x14
invoke-static {v7, v8}, Ljava/lang/Math;->min(II)I
move-result v7
iput v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->bitrateAdjustmentScaleExp:I
.line 84
neg-double v7, v4
iput-wide v7, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
goto :goto_8a
.line 77
.end local v6 # "bitrateAdjustmentInc":I
:cond_89
:goto_89
nop
.line 86
:goto_8a
const-wide/16 v6, 0x0
iput-wide v6, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->timeSinceLastAdjustmentMs:D
.line 87
return-void
.end method
.method public setTargets(II)V
.registers 7
.param p1, "targetBitrateBps" # I
.param p2, "targetFps" # I
.line 35
iget v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetBitrateBps:I
if-lez v0, :cond_19
iget v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetBitrateBps:I
if-ge p1, v0, :cond_19
.line 37
iget-wide v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
int-to-double v2, p1
invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z
mul-double v0, v0, v2
iget v2, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->targetBitrateBps:I
int-to-double v2, v2
invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z
div-double/2addr v0, v2
iput-wide v0, p0, Lorg/webrtc/ali/DynamicBitrateAdjuster;->deviationBytes:D
.line 39
:cond_19
invoke-super {p0, p1, p2}, Lorg/webrtc/ali/BaseBitrateAdjuster;->setTargets(II)V
.line 40
return-void
.end method