H265TrackImpl.smali
.class public Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;
.super Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack;
.source "H265TrackImpl.java"
# interfaces
.implements Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitTypes;
# instance fields
.field pps:Ljava/util/ArrayList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayList<",
"Ljava/nio/ByteBuffer;",
">;"
}
.end annotation
.end field
.field samples:Ljava/util/ArrayList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayList<",
"Lcom/googlecode/mp4parser/authoring/Sample;",
">;"
}
.end annotation
.end field
.field sps:Ljava/util/ArrayList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayList<",
"Ljava/nio/ByteBuffer;",
">;"
}
.end annotation
.end field
.field stsd:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.field vps:Ljava/util/ArrayList;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/ArrayList<",
"Ljava/nio/ByteBuffer;",
">;"
}
.end annotation
.end field
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(Lcom/googlecode/mp4parser/DataSource;)V
.registers 13
.param p1, "dataSource" # Lcom/googlecode/mp4parser/DataSource;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 44
invoke-direct {p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack;-><init>(Lcom/googlecode/mp4parser/DataSource;)V
.line 36
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->sps:Ljava/util/ArrayList;
.line 37
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->pps:Ljava/util/ArrayList;
.line 38
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->vps:Ljava/util/ArrayList;
.line 39
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->samples:Ljava/util/ArrayList;
.line 45
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 46
.local v0, "nals":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Ljava/nio/ByteBuffer;>;"
new-instance v1, Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;
invoke-direct {v1, p1}, Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;-><init>(Lcom/googlecode/mp4parser/DataSource;)V
.line 48
.local v1, "la":Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;
const/4 v2, 0x1
new-array v3, v2, [Z
.line 49
.local v3, "vclNalUnitSeenInAU":[Z
new-array v4, v2, [Z
const/4 v5, 0x0
aput-boolean v2, v4, v5
.line 52
.local v4, "isIdr":[Z
nop
:goto_32
invoke-virtual {p0, v1}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->findNextNal(Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;)Ljava/nio/ByteBuffer;
move-result-object v6
move-object v7, v6
.local v7, "nal":Ljava/nio/ByteBuffer;
if-nez v6, :cond_5a
.line 142
invoke-direct {p0}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->createSampleDescriptionBox()Lcom/coremedia/iso/boxes/SampleDescriptionBox;
move-result-object v2
iput-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->stsd:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.line 143
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->samples:Ljava/util/ArrayList;
invoke-virtual {v2}, Ljava/util/ArrayList;->size()I
move-result v2
new-array v2, v2, [J
iput-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->decodingTimes:[J
.line 144
invoke-virtual {p0}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->getTrackMetaData()Lcom/googlecode/mp4parser/authoring/TrackMetaData;
move-result-object v2
const-wide/16 v5, 0x19
invoke-virtual {v2, v5, v6}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setTimescale(J)V
.line 145
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->decodingTimes:[J
const-wide/16 v5, 0x1
invoke-static {v2, v5, v6}, Ljava/util/Arrays;->fill([JJ)V
.line 146
return-void
.line 54
:cond_5a
invoke-virtual {p0, v7}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->getNalUnitHeader(Ljava/nio/ByteBuffer;)Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;
move-result-object v6
.line 56
.local v6, "unitHeader":Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;
aget-boolean v8, v3, v5
const/4 v9, 0x2
if-eqz v8, :cond_7e
.line 58
invoke-virtual {p0, v6}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->isVcl(Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;)Z
move-result v8
if-eqz v8, :cond_75
.line 59
invoke-virtual {v7, v9}, Ljava/nio/ByteBuffer;->get(I)B
move-result v8
and-int/lit8 v8, v8, -0x80
if-eqz v8, :cond_7e
.line 60
invoke-virtual {p0, v0, v3, v4}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->wrapUp(Ljava/util/List;[Z[Z)V
.line 62
goto :goto_7e
.line 63
:cond_75
iget v8, v6, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
packed-switch v8, :pswitch_data_12c
:pswitch_7a
goto :goto_7e
.line 84
:pswitch_7b
invoke-virtual {p0, v0, v3, v4}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->wrapUp(Ljava/util/List;[Z[Z)V
.line 86
:cond_7e
:goto_7e
nop
.line 90
iget v8, v6, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
const/16 v10, 0x27
if-eq v8, v10, :cond_da
packed-switch v8, :pswitch_data_160
goto :goto_e8
.line 92
:pswitch_89
invoke-virtual {v7, v9}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 93
iget-object v8, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->pps:Ljava/util/ArrayList;
invoke-virtual {v7}, Ljava/nio/ByteBuffer;->slice()Ljava/nio/ByteBuffer;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 94
sget-object v8, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v9, "Stored PPS"
invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 95
goto :goto_e8
.line 102
:pswitch_9d
invoke-virtual {v7, v9}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 103
iget-object v8, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->sps:Ljava/util/ArrayList;
invoke-virtual {v7}, Ljava/nio/ByteBuffer;->slice()Ljava/nio/ByteBuffer;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 104
invoke-virtual {v7, v2}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 105
new-instance v8, Lcom/googlecode/mp4parser/authoring/tracks/h265/SequenceParameterSetRbsp;
new-instance v9, Lcom/googlecode/mp4parser/util/ByteBufferByteChannel;
invoke-virtual {v7}, Ljava/nio/ByteBuffer;->slice()Ljava/nio/ByteBuffer;
move-result-object v10
invoke-direct {v9, v10}, Lcom/googlecode/mp4parser/util/ByteBufferByteChannel;-><init>(Ljava/nio/ByteBuffer;)V
invoke-static {v9}, Ljava/nio/channels/Channels;->newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;
move-result-object v9
invoke-direct {v8, v9}, Lcom/googlecode/mp4parser/authoring/tracks/h265/SequenceParameterSetRbsp;-><init>(Ljava/io/InputStream;)V
.line 106
sget-object v8, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v9, "Stored SPS"
invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 107
goto :goto_e8
.line 97
:pswitch_c6
invoke-virtual {v7, v9}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 98
iget-object v8, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->vps:Ljava/util/ArrayList;
invoke-virtual {v7}, Ljava/nio/ByteBuffer;->slice()Ljava/nio/ByteBuffer;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 99
sget-object v8, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v9, "Stored VPS"
invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 100
goto :goto_e8
.line 109
:cond_da
new-instance v8, Lcom/googlecode/mp4parser/authoring/tracks/h265/SEIMessage;
new-instance v9, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitReaderBuffer;
invoke-virtual {v7}, Ljava/nio/ByteBuffer;->slice()Ljava/nio/ByteBuffer;
move-result-object v10
invoke-direct {v9, v10}, Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitReaderBuffer;-><init>(Ljava/nio/ByteBuffer;)V
invoke-direct {v8, v9}, Lcom/googlecode/mp4parser/authoring/tracks/h265/SEIMessage;-><init>(Lcom/googlecode/mp4parser/boxes/mp4/objectdescriptors/BitReaderBuffer;)V
.line 111
:goto_e8
nop
.line 114
iget v8, v6, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
packed-switch v8, :pswitch_data_16a
.line 125
sget-object v8, Ljava/lang/System;->err:Ljava/io/PrintStream;
new-instance v9, Ljava/lang/StringBuilder;
const-string v10, "Adding "
invoke-direct {v9, v10}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget v10, v6, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
invoke-virtual {v9, v10}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v9}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v9
invoke-virtual {v8, v9}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 126
invoke-virtual {v0, v7}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_108
.line 123
:pswitch_107
nop
.line 128
:goto_108
invoke-virtual {p0, v6}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->isVcl(Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;)Z
move-result v8
if-eqz v8, :cond_120
.line 129
iget v8, v6, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
const/16 v9, 0x13
if-eq v8, v9, :cond_11b
const/16 v9, 0x14
if-eq v8, v9, :cond_11b
.line 135
aput-boolean v5, v4, v5
goto :goto_120
.line 132
:cond_11b
aget-boolean v8, v4, v5
and-int/2addr v8, v2
aput-boolean v8, v4, v5
.line 139
:cond_120
:goto_120
aget-boolean v8, v3, v5
invoke-virtual {p0, v6}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->isVcl(Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;)Z
move-result v9
or-int/2addr v8, v9
aput-boolean v8, v3, v5
goto/16 :goto_32
nop
:pswitch_data_12c
.packed-switch 0x20
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7a
:pswitch_7b
:pswitch_7a
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7a
:pswitch_7a
:pswitch_7a
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
:pswitch_7b
.end packed-switch
:pswitch_data_160
.packed-switch 0x20
:pswitch_c6
:pswitch_9d
:pswitch_89
.end packed-switch
:pswitch_data_16a
.packed-switch 0x20
:pswitch_107
:pswitch_107
:pswitch_107
:pswitch_107
:pswitch_107
:pswitch_107
:pswitch_107
.end packed-switch
.end method
.method private createSampleDescriptionBox()Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.registers 11
.line 150
new-instance v0, Lcom/coremedia/iso/boxes/SampleDescriptionBox;
invoke-direct {v0}, Lcom/coremedia/iso/boxes/SampleDescriptionBox;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->stsd:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.line 151
new-instance v0, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;
const-string v1, "hvc1"
invoke-direct {v0, v1}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;-><init>(Ljava/lang/String;)V
.line 152
.local v0, "visualSampleEntry":Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;
const/4 v1, 0x1
invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setDataReferenceIndex(I)V
.line 153
const/16 v2, 0x18
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setDepth(I)V
.line 154
invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setFrameCount(I)V
.line 155
const-wide/high16 v2, 0x4052000000000000L # 72.0
invoke-virtual {v0, v2, v3}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setHorizresolution(D)V
.line 156
invoke-virtual {v0, v2, v3}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setVertresolution(D)V
.line 157
const/16 v2, 0x280
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setWidth(I)V
.line 158
const/16 v2, 0x1e0
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setHeight(I)V
.line 159
const-string v2, "HEVC Coding"
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setCompressorname(Ljava/lang/String;)V
.line 161
new-instance v2, Lcom/mp4parser/iso14496/part15/HevcConfigurationBox;
invoke-direct {v2}, Lcom/mp4parser/iso14496/part15/HevcConfigurationBox;-><init>()V
.line 163
.local v2, "hevcConfigurationBox":Lcom/mp4parser/iso14496/part15/HevcConfigurationBox;
new-instance v3, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
invoke-direct {v3}, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;-><init>()V
.line 164
.local v3, "spsArray":Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
iput-boolean v1, v3, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->array_completeness:Z
.line 165
const/16 v4, 0x21
iput v4, v3, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nal_unit_type:I
.line 166
new-instance v4, Ljava/util/ArrayList;
invoke-direct {v4}, Ljava/util/ArrayList;-><init>()V
iput-object v4, v3, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nalUnits:Ljava/util/List;
.line 167
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->sps:Ljava/util/ArrayList;
invoke-virtual {v4}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
move-result-object v4
:goto_4e
invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z
move-result v5
if-nez v5, :cond_d0
.line 171
new-instance v4, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
invoke-direct {v4}, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;-><init>()V
move-object v5, v4
.line 172
.local v5, "ppsArray":Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
iput-boolean v1, v5, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->array_completeness:Z
.line 173
const/16 v6, 0x22
iput v6, v5, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nal_unit_type:I
.line 174
new-instance v4, Ljava/util/ArrayList;
invoke-direct {v4}, Ljava/util/ArrayList;-><init>()V
iput-object v4, v5, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nalUnits:Ljava/util/List;
.line 175
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->pps:Ljava/util/ArrayList;
invoke-virtual {v4}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
move-result-object v7
:goto_6d
invoke-interface {v7}, Ljava/util/Iterator;->hasNext()Z
move-result v4
if-nez v4, :cond_c0
.line 179
new-instance v4, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
invoke-direct {v4}, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;-><init>()V
.line 180
.local v4, "vpsArray":Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
iput-boolean v1, v4, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->array_completeness:Z
.line 181
iput v6, v4, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nal_unit_type:I
.line 182
new-instance v6, Ljava/util/ArrayList;
invoke-direct {v6}, Ljava/util/ArrayList;-><init>()V
iput-object v6, v4, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nalUnits:Ljava/util/List;
.line 183
iget-object v6, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->vps:Ljava/util/ArrayList;
invoke-virtual {v6}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
move-result-object v8
:goto_89
invoke-interface {v8}, Ljava/util/Iterator;->hasNext()Z
move-result v6
if-nez v6, :cond_b0
.line 187
invoke-virtual {v2}, Lcom/mp4parser/iso14496/part15/HevcConfigurationBox;->getArrays()Ljava/util/List;
move-result-object v6
const/4 v7, 0x3
new-array v7, v7, [Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
const/4 v8, 0x0
aput-object v3, v7, v8
aput-object v4, v7, v1
const/4 v1, 0x2
aput-object v5, v7, v1
invoke-static {v7}, Ljava/util/Arrays;->asList([Ljava/lang/Object;)Ljava/util/List;
move-result-object v1
invoke-interface {v6, v1}, Ljava/util/List;->addAll(Ljava/util/Collection;)Z
.line 189
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->addBox(Lcom/coremedia/iso/boxes/Box;)V
.line 190
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->stsd:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
invoke-virtual {v1, v0}, Lcom/coremedia/iso/boxes/SampleDescriptionBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V
.line 192
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->stsd:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
return-object v1
.line 183
:cond_b0
invoke-interface {v8}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v6
check-cast v6, Ljava/nio/ByteBuffer;
.line 184
.local v6, "vp":Ljava/nio/ByteBuffer;
iget-object v7, v4, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nalUnits:Ljava/util/List;
invoke-static {v6}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->toArray(Ljava/nio/ByteBuffer;)[B
move-result-object v9
invoke-interface {v7, v9}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_89
.line 175
.end local v4 # "vpsArray":Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
.end local v6 # "vp":Ljava/nio/ByteBuffer;
:cond_c0
invoke-interface {v7}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v4
check-cast v4, Ljava/nio/ByteBuffer;
.line 176
.local v4, "pp":Ljava/nio/ByteBuffer;
iget-object v8, v5, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nalUnits:Ljava/util/List;
invoke-static {v4}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->toArray(Ljava/nio/ByteBuffer;)[B
move-result-object v9
invoke-interface {v8, v9}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_6d
.line 167
.end local v4 # "pp":Ljava/nio/ByteBuffer;
.end local v5 # "ppsArray":Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;
:cond_d0
invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v5
check-cast v5, Ljava/nio/ByteBuffer;
.line 168
.local v5, "sp":Ljava/nio/ByteBuffer;
iget-object v6, v3, Lcom/mp4parser/iso14496/part15/HevcDecoderConfigurationRecord$Array;->nalUnits:Ljava/util/List;
invoke-static {v5}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->toArray(Ljava/nio/ByteBuffer;)[B
move-result-object v7
invoke-interface {v6, v7}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto/16 :goto_4e
.end method
.method public static main([Ljava/lang/String;)V
.registers 7
.param p0, "args" # [Ljava/lang/String;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 244
new-instance v0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;
new-instance v1, Lcom/googlecode/mp4parser/FileDataSourceImpl;
const-string v2, "c:\\content\\test-UHD-HEVC_01_FMV_Med_track1.hvc"
invoke-direct {v1, v2}, Lcom/googlecode/mp4parser/FileDataSourceImpl;-><init>(Ljava/lang/String;)V
invoke-direct {v0, v1}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;-><init>(Lcom/googlecode/mp4parser/DataSource;)V
.line 245
.local v0, "track":Lcom/googlecode/mp4parser/authoring/Track;
new-instance v1, Lcom/googlecode/mp4parser/authoring/Movie;
invoke-direct {v1}, Lcom/googlecode/mp4parser/authoring/Movie;-><init>()V
.line 246
.local v1, "movie":Lcom/googlecode/mp4parser/authoring/Movie;
invoke-virtual {v1, v0}, Lcom/googlecode/mp4parser/authoring/Movie;->addTrack(Lcom/googlecode/mp4parser/authoring/Track;)V
.line 247
new-instance v2, Lcom/googlecode/mp4parser/authoring/builder/DefaultMp4Builder;
invoke-direct {v2}, Lcom/googlecode/mp4parser/authoring/builder/DefaultMp4Builder;-><init>()V
.line 248
.local v2, "mp4Builder":Lcom/googlecode/mp4parser/authoring/builder/DefaultMp4Builder;
invoke-virtual {v2, v1}, Lcom/googlecode/mp4parser/authoring/builder/DefaultMp4Builder;->build(Lcom/googlecode/mp4parser/authoring/Movie;)Lcom/coremedia/iso/boxes/Container;
move-result-object v3
.line 249
.local v3, "c":Lcom/coremedia/iso/boxes/Container;
new-instance v4, Ljava/io/FileOutputStream;
const-string v5, "output.mp4"
invoke-direct {v4, v5}, Ljava/io/FileOutputStream;-><init>(Ljava/lang/String;)V
invoke-virtual {v4}, Ljava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;
move-result-object v4
invoke-interface {v3, v4}, Lcom/coremedia/iso/boxes/Container;->writeContainer(Ljava/nio/channels/WritableByteChannel;)V
.line 251
return-void
.end method
# virtual methods
.method public getHandler()Ljava/lang/String;
.registers 2
.line 217
const-string/jumbo v0, "vide"
return-object v0
.end method
.method public getNalUnitHeader(Ljava/nio/ByteBuffer;)Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;
.registers 5
.param p1, "nal" # Ljava/nio/ByteBuffer;
.line 230
const/4 v0, 0x0
invoke-virtual {p1, v0}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;
.line 231
invoke-static {p1}, Lcom/coremedia/iso/IsoTypeReader;->readUInt16(Ljava/nio/ByteBuffer;)I
move-result v0
.line 234
.local v0, "nal_unit_header":I
new-instance v1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;
invoke-direct {v1}, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;-><init>()V
.line 235
.local v1, "nalUnitHeader":Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;
const v2, 0x8000
and-int/2addr v2, v0
shr-int/lit8 v2, v2, 0xf
iput v2, v1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->forbiddenZeroFlag:I
.line 236
and-int/lit16 v2, v0, 0x7e00
shr-int/lit8 v2, v2, 0x9
iput v2, v1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
.line 237
and-int/lit16 v2, v0, 0x1f8
shr-int/lit8 v2, v2, 0x3
iput v2, v1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nuhLayerId:I
.line 238
and-int/lit8 v2, v0, 0x7
iput v2, v1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nuhTemporalIdPlusOne:I
.line 239
return-object v1
.end method
.method public getSampleDescriptionBox()Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.registers 2
.line 212
const/4 v0, 0x0
return-object v0
.end method
.method public getSamples()Ljava/util/List;
.registers 2
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Ljava/util/List<",
"Lcom/googlecode/mp4parser/authoring/Sample;",
">;"
}
.end annotation
.line 221
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->samples:Ljava/util/ArrayList;
return-object v0
.end method
.method isVcl(Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;)Z
.registers 4
.param p1, "nalUnitHeader" # Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;
.line 226
iget v0, p1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
if-ltz v0, :cond_c
iget v0, p1, Lcom/googlecode/mp4parser/authoring/tracks/h265/NalUnitHeader;->nalUnitType:I
const/16 v1, 0x1f
if-gt v0, v1, :cond_c
const/4 v0, 0x1
return v0
:cond_c
const/4 v0, 0x0
return v0
.end method
.method public wrapUp(Ljava/util/List;[Z[Z)V
.registers 7
.param p2, "vclNalUnitSeenInAU" # [Z
.param p3, "isIdr" # [Z
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Ljava/nio/ByteBuffer;",
">;[Z[Z)V"
}
.end annotation
.line 198
.local p1, "nals":Ljava/util/List;, "Ljava/util/List<Ljava/nio/ByteBuffer;>;"
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->samples:Ljava/util/ArrayList;
invoke-virtual {p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/h265/H265TrackImpl;->createSampleObject(Ljava/util/List;)Lcom/googlecode/mp4parser/authoring/Sample;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 199
sget-object v0, Ljava/lang/System;->err:Ljava/io/PrintStream;
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "Create AU from "
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-interface {p1}, Ljava/util/List;->size()I
move-result v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v2, " NALs"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->print(Ljava/lang/String;)V
.line 200
const/4 v0, 0x0
aget-boolean v1, p3, v0
if-eqz v1, :cond_32
.line 201
sget-object v1, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v2, " IDR"
invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 202
goto :goto_37
.line 203
:cond_32
sget-object v1, Ljava/lang/System;->err:Ljava/io/PrintStream;
invoke-virtual {v1}, Ljava/io/PrintStream;->println()V
.line 205
:goto_37
aput-boolean v0, p2, v0
.line 206
const/4 v1, 0x1
aput-boolean v1, p3, v0
.line 207
invoke-interface {p1}, Ljava/util/List;->clear()V
.line 208
return-void
.end method