H264Reader$SampleReader.smali
.class final Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;
.super Ljava/lang/Object;
.source "H264Reader.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lcom/google/android/exoplayer2/extractor/ts/H264Reader;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x1a
name = "SampleReader"
.end annotation
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
}
.end annotation
# static fields
.field private static final DEFAULT_BUFFER_SIZE:I
.field private static final NAL_UNIT_TYPE_AUD:I
.field private static final NAL_UNIT_TYPE_IDR:I
.field private static final NAL_UNIT_TYPE_NON_IDR:I
.field private static final NAL_UNIT_TYPE_PARTITION_A:I
# instance fields
.field private final allowNonIdrKeyframes:Z
.field private final bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
.field private buffer:[B
.field private bufferLength:I
.field private final detectAccessUnits:Z
.field private isFilling:Z
.field private nalUnitStartPosition:J
.field private nalUnitTimeUs:J
.field private nalUnitType:I
.field private final output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.field private final pps:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;",
">;"
}
.end annotation
.end field
.field private previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.field private readingSample:Z
.field private sampleIsKeyframe:Z
.field private samplePosition:J
.field private sampleTimeUs:J
.field private sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.field private final sps:Landroid/util/SparseArray;
.annotation system Ldalvik/annotation/Signature;
value = {
"Landroid/util/SparseArray<",
"Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;",
">;"
}
.end annotation
.end field
# direct methods
.method static constructor <clinit>()V
.registers 1
const v0, 0x15ef
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->DEFAULT_BUFFER_SIZE:I
const v0, 0x1566
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->NAL_UNIT_TYPE_AUD:I
const v0, 0x156a
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->NAL_UNIT_TYPE_IDR:I
const v0, 0x156e
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->NAL_UNIT_TYPE_NON_IDR:I
const v0, 0x156d
invoke-static {v0}, Lnp/NPFog;->d(I)I
move-result v0
sput v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->NAL_UNIT_TYPE_PARTITION_A:I
return-void
.end method
.method public constructor <init>(Lcom/google/android/exoplayer2/extractor/TrackOutput;ZZ)V
.registers 7
.param p1, "output" # Lcom/google/android/exoplayer2/extractor/TrackOutput;
.param p2, "allowNonIdrKeyframes" # Z
.param p3, "detectAccessUnits" # Z
.line 275
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 276
iput-object p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
.line 277
iput-boolean p2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->allowNonIdrKeyframes:Z
.line 278
iput-boolean p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
.line 279
new-instance v0, Landroid/util/SparseArray;
invoke-direct {v0}, Landroid/util/SparseArray;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sps:Landroid/util/SparseArray;
.line 280
new-instance v0, Landroid/util/SparseArray;
invoke-direct {v0}, Landroid/util/SparseArray;-><init>()V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
.line 281
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
const/4 v1, 0x0
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;-><init>(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$1;)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 282
new-instance v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-direct {v0, v1}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;-><init>(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$1;)V
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 283
const/16 v0, 0x80
new-array v0, v0, [B
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
.line 284
new-instance v1, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
const/4 v2, 0x0
invoke-direct {v1, v0, v2, v2}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;-><init>([BII)V
iput-object v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
.line 285
invoke-virtual {p0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->reset()V
.line 286
return-void
.end method
.method private outputSample(I)V
.registers 10
.param p1, "offset" # I
.line 468
iget-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
.line 469
.local v3, "flags":I
iget-wide v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
iget-wide v4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->samplePosition:J
sub-long/2addr v0, v4
long-to-int v7, v0
.line 470
.local v7, "size":I
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->output:Lcom/google/android/exoplayer2/extractor/TrackOutput;
iget-wide v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleTimeUs:J
const/4 v6, 0x0
move v4, v7
move v5, p1
invoke-interface/range {v0 .. v6}, Lcom/google/android/exoplayer2/extractor/TrackOutput;->sampleMetadata(JIIILcom/google/android/exoplayer2/extractor/TrackOutput$CryptoData;)V
.line 471
return-void
.end method
# virtual methods
.method public appendToNalUnit([BII)V
.registers 38
.param p1, "data" # [B
.param p2, "offset" # I
.param p3, "limit" # I
.line 332
move-object/from16 v0, p0
move/from16 v1, p2
iget-boolean v2, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
if-nez v2, :cond_9
.line 333
return-void
.line 335
:cond_9
sub-int v2, p3, v1
.line 336
.local v2, "readLength":I
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
array-length v4, v3
iget v5, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
add-int v6, v5, v2
const/4 v7, 0x2
if-ge v4, v6, :cond_1e
.line 337
add-int/2addr v5, v2
mul-int/lit8 v5, v5, 0x2
invoke-static {v3, v5}, Ljava/util/Arrays;->copyOf([BI)[B
move-result-object v3
iput-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
.line 339
:cond_1e
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
iget v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
move-object/from16 v5, p1
invoke-static {v5, v1, v3, v4, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V
.line 340
iget v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
add-int/2addr v3, v2
iput v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
.line 342
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->buffer:[B
const/4 v8, 0x0
invoke-virtual {v4, v6, v8, v3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->reset([BII)V
.line 343
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
const/16 v4, 0x8
invoke-virtual {v3, v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v3
if-nez v3, :cond_3f
.line 344
return-void
.line 346
:cond_3f
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v3}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBit()V
.line 347
iget-object v3, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v3, v7}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v3
.line 348
.local v3, "nalRefIdc":I
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
const/4 v6, 0x5
invoke-virtual {v4, v6}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBits(I)V
.line 352
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v4
if-nez v4, :cond_59
.line 353
return-void
.line 355
:cond_59
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
.line 356
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v4
if-nez v4, :cond_67
.line 357
return-void
.line 359
:cond_67
iget-object v4, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v4}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
move-result v4
.line 360
.local v4, "sliceType":I
iget-boolean v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
if-nez v9, :cond_79
.line 362
iput-boolean v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 363
iget-object v6, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-virtual {v6, v4}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->setSliceType(I)V
.line 364
return-void
.line 366
:cond_79
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v9}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v9
if-nez v9, :cond_82
.line 367
return-void
.line 369
:cond_82
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v9}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
move-result v15
.line 370
.local v15, "picParameterSetId":I
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
invoke-virtual {v9, v15}, Landroid/util/SparseArray;->indexOfKey(I)I
move-result v9
if-gez v9, :cond_93
.line 372
iput-boolean v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 373
return-void
.line 375
:cond_93
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
invoke-virtual {v9, v15}, Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
move-result-object v9
move-object v14, v9
check-cast v14, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
.line 376
.local v14, "ppsData":Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sps:Landroid/util/SparseArray;
iget v10, v14, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->seqParameterSetId:I
invoke-virtual {v9, v10}, Landroid/util/SparseArray;->get(I)Ljava/lang/Object;
move-result-object v9
move-object v13, v9
check-cast v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
.line 377
.local v13, "spsData":Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
iget-boolean v9, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->separateColorPlaneFlag:Z
if-eqz v9, :cond_b9
.line 378
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v9, v7}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v9
if-nez v9, :cond_b4
.line 379
return-void
.line 381
:cond_b4
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v9, v7}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->skipBits(I)V
.line 383
:cond_b9
iget-object v7, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v9, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->frameNumLength:I
invoke-virtual {v7, v9}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v7
if-nez v7, :cond_c4
.line 384
return-void
.line 386
:cond_c4
const/4 v7, 0x0
.line 387
.local v7, "fieldPicFlag":Z
const/4 v9, 0x0
.line 388
.local v9, "bottomFieldFlagPresent":Z
const/4 v10, 0x0
.line 389
.local v10, "bottomFieldFlag":Z
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v12, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->frameNumLength:I
invoke-virtual {v11, v12}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v24
.line 390
.local v24, "frameNum":I
iget-boolean v11, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->frameMbsOnlyFlag:Z
const/4 v12, 0x1
if-nez v11, :cond_ff
.line 391
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v11, v12}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v11
if-nez v11, :cond_dd
.line 392
return-void
.line 394
:cond_dd
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v11}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBit()Z
move-result v7
.line 395
if-eqz v7, :cond_fa
.line 396
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v11, v12}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v11
if-nez v11, :cond_ee
.line 397
return-void
.line 399
:cond_ee
iget-object v11, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v11}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBit()Z
move-result v10
.line 400
const/4 v9, 0x1
move/from16 v25, v9
move/from16 v26, v10
goto :goto_103
.line 395
:cond_fa
move/from16 v25, v9
move/from16 v26, v10
goto :goto_103
.line 390
:cond_ff
move/from16 v25, v9
move/from16 v26, v10
.line 403
.end local v9 # "bottomFieldFlagPresent":Z
.end local v10 # "bottomFieldFlag":Z
.local v25, "bottomFieldFlagPresent":Z
.local v26, "bottomFieldFlag":Z
:goto_103
iget v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
if-ne v9, v6, :cond_109
const/4 v6, 0x1
goto :goto_10a
:cond_109
const/4 v6, 0x0
.line 404
.local v6, "idrPicFlag":Z
:goto_10a
const/4 v9, 0x0
.line 405
.local v9, "idrPicId":I
if-eqz v6, :cond_11f
.line 406
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v10}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v10
if-nez v10, :cond_116
.line 407
return-void
.line 409
:cond_116
iget-object v10, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v10}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readUnsignedExpGolombCodedInt()I
move-result v9
move/from16 v27, v9
goto :goto_121
.line 405
:cond_11f
move/from16 v27, v9
.line 411
.end local v9 # "idrPicId":I
.local v27, "idrPicId":I
:goto_121
const/4 v9, 0x0
.line 412
.local v9, "picOrderCntLsb":I
const/4 v10, 0x0
.line 413
.local v10, "deltaPicOrderCntBottom":I
const/4 v11, 0x0
.line 414
.local v11, "deltaPicOrderCnt0":I
const/16 v16, 0x0
.line 415
.local v16, "deltaPicOrderCnt1":I
iget v8, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCountType:I
if-nez v8, :cond_15a
.line 416
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v12, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCntLsbLength:I
invoke-virtual {v8, v12}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadBits(I)Z
move-result v8
if-nez v8, :cond_135
.line 417
return-void
.line 419
:cond_135
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
iget v12, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCntLsbLength:I
invoke-virtual {v8, v12}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readBits(I)I
move-result v9
.line 420
iget-boolean v8, v14, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->bottomFieldPicOrderInFramePresentFlag:Z
if-eqz v8, :cond_18e
if-nez v7, :cond_18e
.line 421
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v8
if-nez v8, :cond_14c
.line 422
return-void
.line 424
:cond_14c
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readSignedExpGolombCodedInt()I
move-result v10
move v8, v9
move/from16 v28, v10
move/from16 v29, v11
move/from16 v30, v16
goto :goto_195
.line 426
:cond_15a
iget v8, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->picOrderCountType:I
if-ne v8, v12, :cond_18e
iget-boolean v8, v13, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->deltaPicOrderAlwaysZeroFlag:Z
if-nez v8, :cond_18e
.line 428
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v8
if-nez v8, :cond_16b
.line 429
return-void
.line 431
:cond_16b
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readSignedExpGolombCodedInt()I
move-result v11
.line 432
iget-boolean v8, v14, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->bottomFieldPicOrderInFramePresentFlag:Z
if-eqz v8, :cond_18e
if-nez v7, :cond_18e
.line 433
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->canReadExpGolombCodedNum()Z
move-result v8
if-nez v8, :cond_180
.line 434
return-void
.line 436
:cond_180
iget-object v8, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bitArray:Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;
invoke-virtual {v8}, Lcom/google/android/exoplayer2/util/ParsableNalUnitBitArray;->readSignedExpGolombCodedInt()I
move-result v16
move v8, v9
move/from16 v28, v10
move/from16 v29, v11
move/from16 v30, v16
goto :goto_195
.line 439
:cond_18e
move v8, v9
move/from16 v28, v10
move/from16 v29, v11
move/from16 v30, v16
.end local v9 # "picOrderCntLsb":I
.end local v10 # "deltaPicOrderCntBottom":I
.end local v11 # "deltaPicOrderCnt0":I
.end local v16 # "deltaPicOrderCnt1":I
.local v8, "picOrderCntLsb":I
.local v28, "deltaPicOrderCntBottom":I
.local v29, "deltaPicOrderCnt0":I
.local v30, "deltaPicOrderCnt1":I
:goto_195
iget-object v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
move-object v10, v13
move v11, v3
move v12, v4
move-object/from16 v31, v13
.end local v13 # "spsData":Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
.local v31, "spsData":Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
move/from16 v13, v24
move-object/from16 v32, v14
.end local v14 # "ppsData":Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
.local v32, "ppsData":Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
move v14, v15
move/from16 v33, v15
.end local v15 # "picParameterSetId":I
.local v33, "picParameterSetId":I
move v15, v7
move/from16 v16, v25
move/from16 v17, v26
move/from16 v18, v6
move/from16 v19, v27
move/from16 v20, v8
move/from16 v21, v28
move/from16 v22, v29
move/from16 v23, v30
invoke-virtual/range {v9 .. v23}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->setAll(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;IIIIZZZZIIIII)V
.line 442
const/4 v9, 0x0
iput-boolean v9, v0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 443
return-void
.end method
.method public endNalUnit(JIZZ)Z
.registers 12
.param p1, "position" # J
.param p3, "offset" # I
.param p4, "hasOutputFormat" # Z
.param p5, "randomAccessIndicator" # Z
.line 447
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
const/4 v1, 0x0
const/4 v2, 0x1
const/16 v3, 0x9
if-eq v0, v3, :cond_16
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
if-eqz v0, :cond_32
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
iget-object v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 448
# invokes: Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isFirstVclNalUnitOfPicture(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;)Z
invoke-static {v0, v3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->access$100(Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;)Z
move-result v0
if-eqz v0, :cond_32
.line 450
:cond_16
if-eqz p4, :cond_26
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->readingSample:Z
if-eqz v0, :cond_26
.line 451
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
sub-long v3, p1, v3
long-to-int v0, v3
.line 452
.local v0, "nalUnitLength":I
add-int v3, p3, v0
invoke-direct {p0, v3}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->outputSample(I)V
.line 454
.end local v0 # "nalUnitLength":I
:cond_26
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->samplePosition:J
.line 455
iget-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitTimeUs:J
iput-wide v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleTimeUs:J
.line 456
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
.line 457
iput-boolean v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->readingSample:Z
.line 459
:cond_32
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->allowNonIdrKeyframes:Z
if-eqz v0, :cond_3d
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 460
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->isISlice()Z
move-result v0
goto :goto_3e
:cond_3d
move v0, p5
.line 461
.local v0, "treatIFrameAsKeyframe":Z
:goto_3e
iget-boolean v3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
iget v4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
const/4 v5, 0x5
if-eq v4, v5, :cond_49
if-eqz v0, :cond_4a
if-ne v4, v2, :cond_4a
:cond_49
const/4 v1, 0x1
:cond_4a
or-int/2addr v1, v3
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sampleIsKeyframe:Z
.line 464
return v1
.end method
.method public needsSpsPps()Z
.registers 2
.line 289
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
return v0
.end method
.method public putPps(Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;)V
.registers 4
.param p1, "ppsData" # Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;
.line 297
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->pps:Landroid/util/SparseArray;
iget v1, p1, Lcom/google/android/exoplayer2/util/NalUnitUtil$PpsData;->picParameterSetId:I
invoke-virtual {v0, v1, p1}, Landroid/util/SparseArray;->append(ILjava/lang/Object;)V
.line 298
return-void
.end method
.method public putSps(Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;)V
.registers 4
.param p1, "spsData" # Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;
.line 293
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sps:Landroid/util/SparseArray;
iget v1, p1, Lcom/google/android/exoplayer2/util/NalUnitUtil$SpsData;->seqParameterSetId:I
invoke-virtual {v0, v1, p1}, Landroid/util/SparseArray;->append(ILjava/lang/Object;)V
.line 294
return-void
.end method
.method public reset()V
.registers 2
.line 301
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 302
iput-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->readingSample:Z
.line 303
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->clear()V
.line 304
return-void
.end method
.method public startNalUnit(JIJ)V
.registers 9
.param p1, "position" # J
.param p3, "type" # I
.param p4, "pesTimeUs" # J
.line 307
iput p3, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
.line 308
iput-wide p4, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitTimeUs:J
.line 309
iput-wide p1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitStartPosition:J
.line 310
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->allowNonIdrKeyframes:Z
const/4 v1, 0x1
if-eqz v0, :cond_d
if-eq p3, v1, :cond_1b
:cond_d
iget-boolean v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->detectAccessUnits:Z
if-eqz v0, :cond_2b
iget v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->nalUnitType:I
const/4 v2, 0x5
if-eq v0, v2, :cond_1b
if-eq v0, v1, :cond_1b
const/4 v2, 0x2
if-ne v0, v2, :cond_2b
.line 315
:cond_1b
iget-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 316
.local v0, "newSliceHeader":Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
iget-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
iput-object v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->previousSliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 317
iput-object v0, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->sliceHeader:Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
.line 318
invoke-virtual {v0}, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;->clear()V
.line 319
const/4 v2, 0x0
iput v2, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->bufferLength:I
.line 320
iput-boolean v1, p0, Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader;->isFilling:Z
.line 322
.end local v0 # "newSliceHeader":Lcom/google/android/exoplayer2/extractor/ts/H264Reader$SampleReader$SliceHeaderData;
:cond_2b
return-void
.end method