SoftwareVideoDecoder.smali
.class public Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Lcom/tencent/liteav/videoconsumer/decoder/aw;
# annotations
.annotation runtime Lcom/tencent/liteav/base/annotations/JNINamespace;
value = "liteav::video"
.end annotation
# static fields
.field private static final TAG:Ljava/lang/String; = "SoftwareVideoDecoder"
# instance fields
.field private final mIsUseHevc:Z
.field private mListener:Lcom/tencent/liteav/videoconsumer/decoder/ax;
.field private mNativeVideoDecoderWrapper:J
.field private mPixelFramePool:Lcom/tencent/liteav/videobase/frame/i;
.field private final mReporter:Lcom/tencent/liteav/videobase/videobase/IVideoReporter;
# direct methods
.method public constructor <init>(Lcom/tencent/liteav/videobase/videobase/IVideoReporter;Z)V
.registers 5
.line 39
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const-wide/16 v0, 0x0
.line 32
iput-wide v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
.line 40
iput-object p1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mReporter:Lcom/tencent/liteav/videobase/videobase/IVideoReporter;
.line 41
iput-boolean p2, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mIsUseHevc:Z
return-void
.end method
.method private getByteBufferFromPixelFrame(Lcom/tencent/liteav/videobase/frame/PixelFrame;)Ljava/nio/ByteBuffer;
.registers 2
.line 201
invoke-virtual {p1}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->getBuffer()Ljava/nio/ByteBuffer;
move-result-object p1
return-object p1
.end method
.method private handleDecoderError(Lcom/tencent/liteav/videobase/videobase/h$c;Ljava/lang/String;)V
.registers 4
.line 150
iget-object v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mReporter:Lcom/tencent/liteav/videobase/videobase/IVideoReporter;
invoke-interface {v0, p1, p2}, Lcom/tencent/liteav/videobase/videobase/IVideoReporter;->notifyWarning(Lcom/tencent/liteav/videobase/videobase/h$c;Ljava/lang/String;)V
.line 151
iget-object p1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mListener:Lcom/tencent/liteav/videoconsumer/decoder/ax;
if-eqz p1, :cond_c
.line 152
invoke-virtual {p1}, Lcom/tencent/liteav/videoconsumer/decoder/ax;->i()V
:cond_c
return-void
.end method
.method private static native nativeAbandonDecodingFrames(J)V
.end method
.method private static native nativeCreate(Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;)J
.end method
.method private static native nativeDecodeFrame(JLcom/tencent/liteav/videobase/common/EncodedVideoFrame;Ljava/nio/ByteBuffer;IIIJJ)I
.end method
.method private static native nativeDestroy(J)V
.end method
.method public static native nativeIsSoftwareHevcDecoderSupport()Z
.end method
.method private static native nativeStart(JZ)I
.end method
.method private static native nativeStop(J)I
.end method
.method private obtainPixelFrame(IIIIJII)Lcom/tencent/liteav/videobase/frame/PixelFrame;
.registers 12
.line 179
invoke-static {p1}, Lcom/tencent/liteav/videobase/base/GLConstants$PixelFormatType;->a(I)Lcom/tencent/liteav/videobase/base/GLConstants$PixelFormatType;
move-result-object v0
const/4 v1, 0x0
const-string v2, "SoftwareVideoDecoder"
if-nez v0, :cond_26
.line 181
sget-object p2, Lcom/tencent/liteav/videobase/videobase/h$c;->o:Lcom/tencent/liteav/videobase/videobase/h$c;
invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object p3
const-string p4, "unknown format:"
invoke-virtual {p4, p3}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object p3
invoke-direct {p0, p2, p3}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->handleDecoderError(Lcom/tencent/liteav/videobase/videobase/h$c;Ljava/lang/String;)V
.line 183
invoke-static {p1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object p1
const-string p2, "obtainPixelFrame formatType: "
invoke-virtual {p2, p1}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object p1
invoke-static {v2, p1}, Lcom/tencent/liteav/base/util/LiteavLog;->e(Ljava/lang/String;Ljava/lang/String;)V
return-object v1
.line 186
:cond_26
iget-object p1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mPixelFramePool:Lcom/tencent/liteav/videobase/frame/i;
if-nez p1, :cond_30
const-string p1, "obtainPixelFrame mPixelFramePool is null."
.line 187
invoke-static {v2, p1}, Lcom/tencent/liteav/base/util/LiteavLog;->i(Ljava/lang/String;Ljava/lang/String;)V
return-object v1
.line 190
:cond_30
sget-object v1, Lcom/tencent/liteav/videobase/base/GLConstants$PixelBufferType;->a:Lcom/tencent/liteav/videobase/base/GLConstants$PixelBufferType;
.line 191
invoke-virtual {p1, p2, p3, v1, v0}, Lcom/tencent/liteav/videobase/frame/i;->a(IILcom/tencent/liteav/videobase/base/GLConstants$PixelBufferType;Lcom/tencent/liteav/videobase/base/GLConstants$PixelFormatType;)Lcom/tencent/liteav/videobase/frame/PixelFrame;
move-result-object p1
.line 192
invoke-static {p4}, Lcom/tencent/liteav/videobase/utils/Rotation;->a(I)Lcom/tencent/liteav/videobase/utils/Rotation;
move-result-object p2
invoke-virtual {p1, p2}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->setRotation(Lcom/tencent/liteav/videobase/utils/Rotation;)V
.line 193
invoke-virtual {p1, p5, p6}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->setTimestamp(J)V
.line 194
invoke-static {p8}, Lcom/tencent/liteav/videobase/base/GLConstants$ColorRange;->a(I)Lcom/tencent/liteav/videobase/base/GLConstants$ColorRange;
move-result-object p2
invoke-virtual {p1, p2}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->setColorRange(Lcom/tencent/liteav/videobase/base/GLConstants$ColorRange;)V
.line 195
invoke-static {p7}, Lcom/tencent/liteav/videobase/base/GLConstants$ColorSpace;->a(I)Lcom/tencent/liteav/videobase/base/GLConstants$ColorSpace;
move-result-object p2
invoke-virtual {p1, p2}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->setColorSpace(Lcom/tencent/liteav/videobase/base/GLConstants$ColorSpace;)V
return-object p1
.end method
.method private onDecodedFrame(Lcom/tencent/liteav/videobase/frame/PixelFrame;J)V
.registers 7
const-wide/16 v0, 0x0
cmp-long v0, p2, v0
if-eqz v0, :cond_2a
.line 159
sget-object v0, Lcom/tencent/liteav/videobase/videobase/h$c;->n:Lcom/tencent/liteav/videobase/videobase/h$c;
invoke-static {p2, p3}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
move-result-object v1
const-string v2, "VideoDecode: decode error, errCode:"
invoke-virtual {v2, v1}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-direct {p0, v0, v1}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->handleDecoderError(Lcom/tencent/liteav/videobase/videobase/h$c;Ljava/lang/String;)V
.line 161
invoke-static {p2, p3}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
move-result-object p2
const-string p3, "decode failed."
invoke-virtual {p3, p2}, Ljava/lang/String;->concat(Ljava/lang/String;)Ljava/lang/String;
move-result-object p2
const-string p3, "SoftwareVideoDecoder"
invoke-static {p3, p2}, Lcom/tencent/liteav/base/util/LiteavLog;->e(Ljava/lang/String;Ljava/lang/String;)V
if-eqz p1, :cond_29
.line 163
invoke-virtual {p1}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->release()V
:cond_29
return-void
:cond_2a
if-eqz p1, :cond_3a
.line 168
iget-object p2, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mListener:Lcom/tencent/liteav/videoconsumer/decoder/ax;
if-eqz p2, :cond_37
.line 169
invoke-virtual {p1}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->getTimestamp()J
move-result-wide v0
invoke-virtual {p2, p1, v0, v1}, Lcom/tencent/liteav/videoconsumer/decoder/ax;->a(Lcom/tencent/liteav/videobase/frame/PixelFrame;J)V
.line 171
:cond_37
invoke-virtual {p1}, Lcom/tencent/liteav/videobase/frame/PixelFrame;->release()V
:cond_3a
return-void
.end method
# virtual methods
.method public abandonDecodingFrames()V
.registers 5
.line 129
iget-wide v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
const-wide/16 v2, 0x0
cmp-long v2, v0, v2
if-nez v2, :cond_10
const-string v0, "SoftwareVideoDecoder"
const-string v1, "decoder has already stopped"
.line 130
invoke-static {v0, v1}, Lcom/tencent/liteav/base/util/LiteavLog;->w(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 134
:cond_10
invoke-static {v0, v1}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->nativeAbandonDecodingFrames(J)V
.line 136
iget-object v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mListener:Lcom/tencent/liteav/videoconsumer/decoder/ax;
if-eqz v0, :cond_1a
.line 137
invoke-virtual {v0}, Lcom/tencent/liteav/videoconsumer/decoder/ax;->j()V
:cond_1a
return-void
.end method
.method public decode(Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;)Z
.registers 16
const/4 v0, 0x0
if-nez p1, :cond_4
return v0
.line 96
:cond_4
iget-boolean v1, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->isEosFrame:Z
const/4 v2, 0x1
if-eqz v1, :cond_11
iget-object v1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mListener:Lcom/tencent/liteav/videoconsumer/decoder/ax;
if-eqz v1, :cond_11
.line 97
invoke-virtual {v1}, Lcom/tencent/liteav/videoconsumer/decoder/ax;->k()V
return v2
.line 101
:cond_11
iget-object v1, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->data:Ljava/nio/ByteBuffer;
if-eqz v1, :cond_38
iget-object v1, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->data:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->remaining()I
move-result v1
if-nez v1, :cond_1e
goto :goto_38
.line 105
:cond_1e
iget-wide v3, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
iget-object v6, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->data:Ljava/nio/ByteBuffer;
iget-object v0, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->nalType:Lcom/tencent/liteav/videobase/common/a;
.line 1034
iget v7, v0, Lcom/tencent/liteav/videobase/common/a;->mValue:I
.line 105
iget-object v0, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->codecType:Lcom/tencent/liteav/videobase/common/CodecType;
.line 2025
iget v8, v0, Lcom/tencent/liteav/videobase/common/CodecType;->mValue:I
.line 106
iget v9, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->rotation:I
iget-wide v10, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->pts:J
iget-wide v12, p1, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->dts:J
move-object v5, p1
.line 105
invoke-static/range {v3 .. v13}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->nativeDecodeFrame(JLcom/tencent/liteav/videobase/common/EncodedVideoFrame;Ljava/nio/ByteBuffer;IIIJJ)I
.line 107
invoke-virtual {p1}, Lcom/tencent/liteav/videobase/common/EncodedVideoFrame;->release()V
return v2
:cond_38
:goto_38
return v0
.end method
.method public getDecoderType()Lcom/tencent/liteav/videoconsumer/decoder/aw$a;
.registers 2
.line 143
sget-object v0, Lcom/tencent/liteav/videoconsumer/decoder/aw$a;->a:Lcom/tencent/liteav/videoconsumer/decoder/aw$a;
return-object v0
.end method
.method public initialize()V
.registers 1
return-void
.end method
.method public setScene(Lcom/tencent/liteav/videoconsumer/decoder/VideoDecoderDef$ConsumerScene;)V
.registers 2
return-void
.end method
.method public setServerConfig(Lcom/tencent/liteav/videoconsumer/consumer/VideoConsumerServerConfig;)V
.registers 2
return-void
.end method
.method public start(Ljava/lang/Object;Lcom/tencent/liteav/videoconsumer/decoder/ax;)V
.registers 7
.line 59
iget-wide v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
const-wide/16 v2, 0x0
cmp-long p1, v0, v2
const-string v0, "SoftwareVideoDecoder"
if-eqz p1, :cond_10
const-string p1, "decoder is already started!"
.line 60
invoke-static {v0, p1}, Lcom/tencent/liteav/base/util/LiteavLog;->w(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 63
:cond_10
new-instance p1, Lcom/tencent/liteav/videobase/frame/i;
invoke-direct {p1}, Lcom/tencent/liteav/videobase/frame/i;-><init>()V
iput-object p1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mPixelFramePool:Lcom/tencent/liteav/videobase/frame/i;
.line 64
iput-object p2, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mListener:Lcom/tencent/liteav/videoconsumer/decoder/ax;
.line 65
invoke-static {p0}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->nativeCreate(Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;)J
move-result-wide p1
iput-wide p1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
cmp-long v1, p1, v2
if-nez v1, :cond_30
.line 67
sget-object p1, Lcom/tencent/liteav/videobase/videobase/h$c;->l:Lcom/tencent/liteav/videobase/videobase/h$c;
const-string p2, "VideoDecode: out of memory, Start decoder failed"
invoke-direct {p0, p1, p2}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->handleDecoderError(Lcom/tencent/liteav/videobase/videobase/h$c;Ljava/lang/String;)V
const-string p1, "create native instance failed."
.line 69
invoke-static {v0, p1}, Lcom/tencent/liteav/base/util/LiteavLog;->e(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 73
:cond_30
iget-boolean v1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mIsUseHevc:Z
invoke-static {p1, p2, v1}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->nativeStart(JZ)I
move-result p1
if-eqz p1, :cond_45
.line 74
sget-object p1, Lcom/tencent/liteav/videobase/videobase/h$c;->m:Lcom/tencent/liteav/videobase/videobase/h$c;
const-string p2, "VideoDecode: Start decoder failed"
invoke-direct {p0, p1, p2}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->handleDecoderError(Lcom/tencent/liteav/videobase/videobase/h$c;Ljava/lang/String;)V
const-string p1, "Start software decoder failed."
.line 76
invoke-static {v0, p1}, Lcom/tencent/liteav/base/util/LiteavLog;->e(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 80
:cond_45
iget-object p1, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mReporter:Lcom/tencent/liteav/videobase/videobase/IVideoReporter;
sget-object p2, Lcom/tencent/liteav/videobase/videobase/h$b;->F:Lcom/tencent/liteav/videobase/videobase/h$b;
const/4 v1, 0x0
const-string v2, "Start decoder success"
invoke-interface {p1, p2, v1, v2}, Lcom/tencent/liteav/videobase/videobase/IVideoReporter;->notifyEvent(Lcom/tencent/liteav/videobase/videobase/h$b;Ljava/lang/Object;Ljava/lang/String;)V
const-string p1, "decoder Start success."
.line 82
invoke-static {v0, p1}, Lcom/tencent/liteav/base/util/LiteavLog;->i(Ljava/lang/String;Ljava/lang/String;)V
return-void
.end method
.method public stop()V
.registers 7
.line 115
iget-wide v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
const-wide/16 v2, 0x0
cmp-long v0, v0, v2
const-string v1, "SoftwareVideoDecoder"
if-nez v0, :cond_10
const-string v0, "decoder has already stopped"
.line 116
invoke-static {v1, v0}, Lcom/tencent/liteav/base/util/LiteavLog;->w(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 119
:cond_10
iget-object v0, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mPixelFramePool:Lcom/tencent/liteav/videobase/frame/i;
if-eqz v0, :cond_17
.line 120
invoke-virtual {v0}, Lcom/tencent/liteav/videobase/frame/i;->b()V
.line 122
:cond_17
iget-wide v4, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
invoke-static {v4, v5}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->nativeStop(J)I
.line 123
iget-wide v4, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
invoke-static {v4, v5}, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->nativeDestroy(J)V
.line 124
iput-wide v2, p0, Lcom/tencent/liteav/videoconsumer/decoder/SoftwareVideoDecoder;->mNativeVideoDecoderWrapper:J
const-string v0, "decoder stop."
.line 125
invoke-static {v1, v0}, Lcom/tencent/liteav/base/util/LiteavLog;->i(Ljava/lang/String;Ljava/lang/String;)V
return-void
.end method
.method public uninitialize()V
.registers 1
return-void
.end method