H264TrackImpl.smali
.class public Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;
.super Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack;
.source "H264TrackImpl.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;,
Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;,
Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader;
}
.end annotation
# static fields
.field private static final LOG:Ljava/util/logging/Logger;
# instance fields
.field currentPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
.field currentSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
.field private determineFrameRate:Z
.field firstPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
.field firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
.field frameNrInGop:I
.field private frametick:I
.field private height:I
.field private lang:Ljava/lang/String;
.field pictureParameterRangeMap:Lcom/googlecode/mp4parser/util/RangeStartMap;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/googlecode/mp4parser/util/RangeStartMap<",
"Ljava/lang/Integer;",
"[B>;"
}
.end annotation
.end field
.field ppsIdToPps:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/Integer;",
"Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;",
">;"
}
.end annotation
.end field
.field ppsIdToPpsBytes:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/Integer;",
"[B>;"
}
.end annotation
.end field
.field sampleDescriptionBox:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.field private samples:Ljava/util/List;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/List<",
"Lcom/googlecode/mp4parser/authoring/Sample;",
">;"
}
.end annotation
.end field
.field private seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
.field seqParameterRangeMap:Lcom/googlecode/mp4parser/util/RangeStartMap;
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/googlecode/mp4parser/util/RangeStartMap<",
"Ljava/lang/Integer;",
"[B>;"
}
.end annotation
.end field
.field spsIdToSps:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/Integer;",
"Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;",
">;"
}
.end annotation
.end field
.field spsIdToSpsBytes:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/Integer;",
"[B>;"
}
.end annotation
.end field
.field private timescale:J
.field private width:I
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 27
const-class v0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;
invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v0
invoke-static {v0}, Ljava/util/logging/Logger;->getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;
move-result-object v0
sput-object v0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->LOG:Ljava/util/logging/Logger;
return-void
.end method
.method public constructor <init>(Lcom/googlecode/mp4parser/DataSource;)V
.registers 3
.param p1, "dataSource" # Lcom/googlecode/mp4parser/DataSource;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 100
const-string v0, "eng"
invoke-direct {p0, p1, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;-><init>(Lcom/googlecode/mp4parser/DataSource;Ljava/lang/String;)V
.line 101
return-void
.end method
.method public constructor <init>(Lcom/googlecode/mp4parser/DataSource;Ljava/lang/String;)V
.registers 9
.param p1, "dataSource" # Lcom/googlecode/mp4parser/DataSource;
.param p2, "lang" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 96
const-wide/16 v3, -0x1
const/4 v5, -0x1
move-object v0, p0
move-object v1, p1
move-object v2, p2
invoke-direct/range {v0 .. v5}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;-><init>(Lcom/googlecode/mp4parser/DataSource;Ljava/lang/String;JI)V
.line 97
return-void
.end method
.method public constructor <init>(Lcom/googlecode/mp4parser/DataSource;Ljava/lang/String;JI)V
.registers 10
.param p1, "dataSource" # Lcom/googlecode/mp4parser/DataSource;
.param p2, "lang" # Ljava/lang/String;
.param p3, "timescale" # J
.param p5, "frametick" # I
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 82
invoke-direct {p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack;-><init>(Lcom/googlecode/mp4parser/DataSource;)V
.line 29
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSpsBytes:Ljava/util/Map;
.line 30
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSps:Ljava/util/Map;
.line 31
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPpsBytes:Ljava/util/Map;
.line 32
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPps:Ljava/util/Map;
.line 39
const/4 v0, 0x0
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
.line 40
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
.line 42
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->currentSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
.line 43
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->currentPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
.line 45
new-instance v0, Lcom/googlecode/mp4parser/util/RangeStartMap;
invoke-direct {v0}, Lcom/googlecode/mp4parser/util/RangeStartMap;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seqParameterRangeMap:Lcom/googlecode/mp4parser/util/RangeStartMap;
.line 46
new-instance v0, Lcom/googlecode/mp4parser/util/RangeStartMap;
invoke-direct {v0}, Lcom/googlecode/mp4parser/util/RangeStartMap;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->pictureParameterRangeMap:Lcom/googlecode/mp4parser/util/RangeStartMap;
.line 55
const/4 v0, 0x0
iput v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frameNrInGop:I
.line 56
const/4 v1, 0x1
iput-boolean v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->determineFrameRate:Z
.line 57
const-string v1, "eng"
iput-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->lang:Ljava/lang/String;
.line 83
iput-object p2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->lang:Ljava/lang/String;
.line 84
iput-wide p3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
.line 85
iput p5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
.line 86
const-wide/16 v1, 0x0
cmp-long v3, p3, v1
if-lez v3, :cond_50
if-lez p5, :cond_50
.line 87
iput-boolean v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->determineFrameRate:Z
.line 90
:cond_50
new-instance v0, Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;
invoke-direct {v0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;-><init>(Lcom/googlecode/mp4parser/DataSource;)V
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->parse(Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;)V
.line 91
return-void
.end method
.method static synthetic access$0()Ljava/util/logging/Logger;
.registers 1
.line 27
sget-object v0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->LOG:Ljava/util/logging/Logger;
return-object v0
.end method
.method private configureFramerate()V
.registers 10
.line 484
iget-boolean v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->determineFrameRate:Z
if-eqz v0, :cond_60
.line 485
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v0, v0, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->vuiParams:Lcom/googlecode/mp4parser/h264/model/VUIParameters;
const/16 v1, 0xe10
const-wide/32 v2, 0x15f90
if-eqz v0, :cond_55
.line 486
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v0, v0, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->vuiParams:Lcom/googlecode/mp4parser/h264/model/VUIParameters;
iget v0, v0, Lcom/googlecode/mp4parser/h264/model/VUIParameters;->time_scale:I
shr-int/lit8 v0, v0, 0x1
int-to-long v4, v0
iput-wide v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
.line 487
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v0, v0, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->vuiParams:Lcom/googlecode/mp4parser/h264/model/VUIParameters;
iget v0, v0, Lcom/googlecode/mp4parser/h264/model/VUIParameters;->num_units_in_tick:I
iput v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
.line 488
iget-wide v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
const-wide/16 v6, 0x0
cmp-long v8, v4, v6
if-eqz v8, :cond_2c
if-nez v0, :cond_60
.line 489
:cond_2c
sget-object v0, Ljava/lang/System;->err:Ljava/io/PrintStream;
new-instance v4, Ljava/lang/StringBuilder;
const-string v5, "Warning: vuiParams contain invalid values: time_scale: "
invoke-direct {v4, v5}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
iget-wide v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
invoke-virtual {v4, v5, v6}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;
const-string v5, " and frame_tick: "
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v5, ". Setting frame rate to 25fps"
invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-virtual {v0, v4}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 490
iput-wide v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
.line 491
iput v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
.line 493
goto :goto_60
.line 494
:cond_55
sget-object v0, Ljava/lang/System;->err:Ljava/io/PrintStream;
const-string v4, "Warning: Can\'t determine frame rate. Guessing 25 fps"
invoke-virtual {v0, v4}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 495
iput-wide v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
.line 496
iput v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
.line 499
:cond_60
:goto_60
return-void
.end method
.method private createSample(Ljava/util/List;)V
.registers 12
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Ljava/nio/ByteBuffer;",
">;)V"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 380
.local p1, "buffered":Ljava/util/List;, "Ljava/util/List<Ljava/nio/ByteBuffer;>;"
const/16 v0, 0x16
.line 382
.local v0, "stdpValue":I
const/4 v1, 0x0
.line 383
.local v1, "IdrPicFlag":Z
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v2
:goto_7
invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z
move-result v3
const/4 v4, 0x0
if-nez v3, :cond_9d
.line 391
if-eqz v1, :cond_12
.line 392
add-int/lit8 v0, v0, 0x10
.line 395
:cond_12
new-instance v2, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;
invoke-interface {p1}, Ljava/util/List;->size()I
move-result v3
const/4 v5, 0x1
sub-int/2addr v3, v5
invoke-interface {p1, v3}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/nio/ByteBuffer;
invoke-direct {v2, p0, v3}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;-><init>(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;Ljava/nio/ByteBuffer;)V
invoke-static {v2}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->cleanBuffer(Ljava/io/InputStream;)Ljava/io/InputStream;
move-result-object v2
.line 396
.local v2, "bs":Ljava/io/InputStream;
new-instance v3, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader;
iget-object v6, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSps:Ljava/util/Map;
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPps:Ljava/util/Map;
invoke-direct {v3, v2, v6, v7, v1}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader;-><init>(Ljava/io/InputStream;Ljava/util/Map;Ljava/util/Map;Z)V
.line 397
.local v3, "sh":Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader;
iget-object v6, v3, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader;->slice_type:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader$SliceType;
sget-object v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader$SliceType;->B:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader$SliceType;
if-ne v6, v7, :cond_38
.line 398
add-int/lit8 v0, v0, 0x4
.line 400
:cond_38
invoke-virtual {p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSampleObject(Ljava/util/List;)Lcom/googlecode/mp4parser/authoring/Sample;
move-result-object v6
.line 402
.local v6, "bb":Lcom/googlecode/mp4parser/authoring/Sample;
invoke-interface {p1}, Ljava/util/List;->clear()V
.line 404
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
if-eqz v7, :cond_47
iget v7, v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;->n_frames:I
if-nez v7, :cond_49
.line 405
:cond_47
iput v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frameNrInGop:I
.line 407
:cond_49
const/4 v4, 0x0
.line 408
.local v4, "offset":I
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
if-eqz v7, :cond_5b
iget-boolean v7, v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;->clock_timestamp_flag:Z
if-eqz v7, :cond_5b
.line 409
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
iget v7, v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;->n_frames:I
iget v8, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frameNrInGop:I
sub-int v4, v7, v8
.line 410
:cond_5a
goto :goto_69
:cond_5b
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
if-eqz v7, :cond_5a
iget-boolean v7, v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;->removal_delay_flag:Z
if-eqz v7, :cond_5a
.line 411
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
iget v7, v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;->dpb_removal_delay:I
div-int/lit8 v4, v7, 0x2
.line 413
:goto_69
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ctts:Ljava/util/List;
new-instance v8, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;
iget v9, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
mul-int v9, v9, v4
invoke-direct {v8, v5, v9}, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;-><init>(II)V
invoke-interface {v7, v8}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 414
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->sdtp:Ljava/util/List;
new-instance v8, Lcom/coremedia/iso/boxes/SampleDependencyTypeBox$Entry;
invoke-direct {v8, v0}, Lcom/coremedia/iso/boxes/SampleDependencyTypeBox$Entry;-><init>(I)V
invoke-interface {v7, v8}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 415
iget v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frameNrInGop:I
add-int/2addr v7, v5
iput v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frameNrInGop:I
.line 417
iget-object v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
invoke-interface {v5, v6}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 418
if-eqz v1, :cond_9c
.line 419
iget-object v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->stss:Ljava/util/List;
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
invoke-interface {v7}, Ljava/util/List;->size()I
move-result v7
invoke-static {v7}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v7
invoke-interface {v5, v7}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 422
:cond_9c
return-void
.line 383
.end local v2 # "bs":Ljava/io/InputStream;
.end local v3 # "sh":Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SliceHeader;
.end local v4 # "offset":I
.end local v6 # "bb":Lcom/googlecode/mp4parser/authoring/Sample;
:cond_9d
invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/nio/ByteBuffer;
.line 384
.local v3, "nal":Ljava/nio/ByteBuffer;
invoke-virtual {v3, v4}, Ljava/nio/ByteBuffer;->get(I)B
move-result v4
.line 385
.local v4, "type":I
and-int/lit8 v5, v4, 0x1f
.line 386
.local v5, "nal_unit_type":I
const/4 v6, 0x5
if-ne v5, v6, :cond_af
.line 387
const/4 v1, 0x1
goto/16 :goto_7
.line 386
:cond_af
goto/16 :goto_7
.end method
.method private handlePPS(Ljava/nio/ByteBuffer;)V
.registers 8
.param p1, "data" # Ljava/nio/ByteBuffer;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 429
new-instance v0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;
invoke-direct {v0, p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;-><init>(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;Ljava/nio/ByteBuffer;)V
.line 430
.local v0, "is":Ljava/io/InputStream;
invoke-virtual {v0}, Ljava/io/InputStream;->read()I
.line 432
invoke-static {v0}, Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;->read(Ljava/io/InputStream;)Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
move-result-object v1
.line 433
.local v1, "_pictureParameterSet":Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
if-nez v2, :cond_12
.line 434
iput-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
.line 437
:cond_12
iput-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->currentPictureParameterSet:Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;
.line 439
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
move-result-object v2
check-cast v2, Ljava/nio/ByteBuffer;
invoke-static {v2}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->toArray(Ljava/nio/ByteBuffer;)[B
move-result-object v2
.line 440
.local v2, "ppsBytes":[B
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPpsBytes:Ljava/util/Map;
iget v4, v1, Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;->pic_parameter_set_id:I
invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v4
invoke-interface {v3, v4}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
check-cast v3, [B
.line 443
.local v3, "oldPpsSameId":[B
if-eqz v3, :cond_3d
invoke-static {v3, v2}, Ljava/util/Arrays;->equals([B[B)Z
move-result v4
if-eqz v4, :cond_35
goto :goto_3d
.line 444
:cond_35
new-instance v4, Ljava/lang/RuntimeException;
const-string v5, "OMG - I got two SPS with same ID but different settings! (AVC3 is the solution)"
invoke-direct {v4, v5}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v4
.line 446
:cond_3d
:goto_3d
if-nez v3, :cond_4e
.line 447
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->pictureParameterRangeMap:Lcom/googlecode/mp4parser/util/RangeStartMap;
iget-object v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
invoke-interface {v5}, Ljava/util/List;->size()I
move-result v5
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
invoke-virtual {v4, v5, v2}, Lcom/googlecode/mp4parser/util/RangeStartMap;->put(Ljava/lang/Comparable;Ljava/lang/Object;)Ljava/lang/Object;
.line 449
:cond_4e
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPpsBytes:Ljava/util/Map;
iget v5, v1, Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;->pic_parameter_set_id:I
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
invoke-interface {v4, v5, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 450
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPps:Ljava/util/Map;
iget v5, v1, Lcom/googlecode/mp4parser/h264/model/PictureParameterSet;->pic_parameter_set_id:I
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
invoke-interface {v4, v5, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 454
return-void
.end method
.method private handleSPS(Ljava/nio/ByteBuffer;)V
.registers 8
.param p1, "data" # Ljava/nio/ByteBuffer;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 457
new-instance v0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;
invoke-direct {v0, p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;-><init>(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;Ljava/nio/ByteBuffer;)V
invoke-static {v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->cleanBuffer(Ljava/io/InputStream;)Ljava/io/InputStream;
move-result-object v0
.line 458
.local v0, "spsInputStream":Ljava/io/InputStream;
invoke-virtual {v0}, Ljava/io/InputStream;->read()I
.line 459
invoke-static {v0}, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->read(Ljava/io/InputStream;)Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
move-result-object v1
.line 460
.local v1, "_seqParameterSet":Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
if-nez v2, :cond_19
.line 461
iput-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
.line 462
invoke-direct {p0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->configureFramerate()V
.line 464
:cond_19
iput-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->currentSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
.line 466
invoke-virtual {p1}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
move-result-object v2
check-cast v2, Ljava/nio/ByteBuffer;
invoke-static {v2}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->toArray(Ljava/nio/ByteBuffer;)[B
move-result-object v2
.line 467
.local v2, "spsBytes":[B
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSpsBytes:Ljava/util/Map;
iget v4, v1, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->seq_parameter_set_id:I
invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v4
invoke-interface {v3, v4}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v3
check-cast v3, [B
.line 468
.local v3, "oldSpsSameId":[B
if-eqz v3, :cond_44
invoke-static {v3, v2}, Ljava/util/Arrays;->equals([B[B)Z
move-result v4
if-eqz v4, :cond_3c
goto :goto_44
.line 469
:cond_3c
new-instance v4, Ljava/lang/RuntimeException;
const-string v5, "OMG - I got two SPS with same ID but different settings!"
invoke-direct {v4, v5}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v4
.line 471
:cond_44
:goto_44
if-eqz v3, :cond_55
.line 472
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seqParameterRangeMap:Lcom/googlecode/mp4parser/util/RangeStartMap;
iget-object v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
invoke-interface {v5}, Ljava/util/List;->size()I
move-result v5
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
invoke-virtual {v4, v5, v2}, Lcom/googlecode/mp4parser/util/RangeStartMap;->put(Ljava/lang/Comparable;Ljava/lang/Object;)Ljava/lang/Object;
.line 474
:cond_55
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSpsBytes:Ljava/util/Map;
iget v5, v1, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->seq_parameter_set_id:I
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
invoke-interface {v4, v5, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 475
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSps:Ljava/util/Map;
iget v5, v1, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->seq_parameter_set_id:I
invoke-static {v5}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v5
invoke-interface {v4, v5, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 480
return-void
.end method
.method private parse(Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;)V
.registers 9
.param p1, "la" # Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 107
new-instance v0, Ljava/util/LinkedList;
invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V
iput-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
.line 108
invoke-direct {p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->readSamples(Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;)Z
move-result v0
if-eqz v0, :cond_116
.line 112
invoke-direct {p0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->readVariables()Z
move-result v0
if-eqz v0, :cond_110
.line 116
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/H264TrackImpl;->sampleDescriptionBox:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.line 117
new-instance v0, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;
const-string v1, "avc1"
invoke-direct {v0, v1}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;-><init>(Ljava/lang/String;)V
.line 118
.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 119
const/16 v2, 0x18
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setDepth(I)V
.line 120
invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setFrameCount(I)V
.line 121
const-wide/high16 v2, 0x4052000000000000L # 72.0
invoke-virtual {v0, v2, v3}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setHorizresolution(D)V
.line 122
invoke-virtual {v0, v2, v3}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setVertresolution(D)V
.line 123
iget v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->width:I
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setWidth(I)V
.line 124
iget v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->height:I
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setHeight(I)V
.line 125
const-string v2, "AVC Coding"
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->setCompressorname(Ljava/lang/String;)V
.line 127
new-instance v2, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;
invoke-direct {v2}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;-><init>()V
.line 129
.local v2, "avcConfigurationBox":Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;
new-instance v3, Ljava/util/ArrayList;
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->spsIdToSpsBytes:Ljava/util/Map;
invoke-interface {v4}, Ljava/util/Map;->values()Ljava/util/Collection;
move-result-object v4
invoke-direct {v3, v4}, Ljava/util/ArrayList;-><init>(Ljava/util/Collection;)V
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setSequenceParameterSets(Ljava/util/List;)V
.line 130
new-instance v3, Ljava/util/ArrayList;
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->ppsIdToPpsBytes:Ljava/util/Map;
invoke-interface {v4}, Ljava/util/Map;->values()Ljava/util/Collection;
move-result-object v4
invoke-direct {v3, v4}, Ljava/util/ArrayList;-><init>(Ljava/util/Collection;)V
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setPictureParameterSets(Ljava/util/List;)V
.line 131
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->level_idc:I
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setAvcLevelIndication(I)V
.line 132
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->profile_idc:I
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setAvcProfileIndication(I)V
.line 133
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->bit_depth_luma_minus8:I
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setBitDepthLumaMinus8(I)V
.line 134
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->bit_depth_chroma_minus8:I
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setBitDepthChromaMinus8(I)V
.line 135
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->chroma_format_idc:Lcom/googlecode/mp4parser/h264/model/ChromaFormat;
invoke-virtual {v3}, Lcom/googlecode/mp4parser/h264/model/ChromaFormat;->getId()I
move-result v3
invoke-virtual {v2, v3}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setChromaFormat(I)V
.line 136
invoke-virtual {v2, v1}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setConfigurationVersion(I)V
.line 137
const/4 v1, 0x3
invoke-virtual {v2, v1}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setLengthSizeMinusOne(I)V
.line 140
nop
.line 141
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v1, v1, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->constraint_set_0_flag:Z
const/4 v3, 0x0
if-eqz v1, :cond_9e
const/16 v1, 0x80
goto :goto_9f
:cond_9e
const/4 v1, 0x0
.line 142
:goto_9f
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v4, v4, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->constraint_set_1_flag:Z
if-eqz v4, :cond_a8
const/16 v4, 0x40
goto :goto_a9
:cond_a8
const/4 v4, 0x0
.line 141
:goto_a9
add-int/2addr v1, v4
.line 143
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v4, v4, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->constraint_set_2_flag:Z
if-eqz v4, :cond_b3
const/16 v4, 0x20
goto :goto_b4
:cond_b3
const/4 v4, 0x0
.line 141
:goto_b4
add-int/2addr v1, v4
.line 144
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v4, v4, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->constraint_set_3_flag:Z
if-eqz v4, :cond_be
const/16 v4, 0x10
goto :goto_bf
:cond_be
const/4 v4, 0x0
.line 141
:goto_bf
add-int/2addr v1, v4
.line 145
iget-object v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v4, v4, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->constraint_set_4_flag:Z
if-eqz v4, :cond_c8
const/16 v3, 0x8
.line 141
:cond_c8
add-int/2addr v1, v3
.line 146
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-wide v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->reserved_zero_2bits:J
const-wide/16 v5, 0x3
and-long/2addr v3, v5
long-to-int v4, v3
.line 141
add-int/2addr v1, v4
.line 140
invoke-virtual {v2, v1}, Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;->setProfileCompatibility(I)V
.line 149
invoke-virtual {v0, v2}, Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;->addBox(Lcom/coremedia/iso/boxes/Box;)V
.line 150
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->sampleDescriptionBox:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
invoke-virtual {v1, v0}, Lcom/coremedia/iso/boxes/SampleDescriptionBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V
.line 152
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->trackMetaData:Lcom/googlecode/mp4parser/authoring/TrackMetaData;
new-instance v3, Ljava/util/Date;
invoke-direct {v3}, Ljava/util/Date;-><init>()V
invoke-virtual {v1, v3}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setCreationTime(Ljava/util/Date;)V
.line 153
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->trackMetaData:Lcom/googlecode/mp4parser/authoring/TrackMetaData;
new-instance v3, Ljava/util/Date;
invoke-direct {v3}, Ljava/util/Date;-><init>()V
invoke-virtual {v1, v3}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setModificationTime(Ljava/util/Date;)V
.line 154
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->trackMetaData:Lcom/googlecode/mp4parser/authoring/TrackMetaData;
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->lang:Ljava/lang/String;
invoke-virtual {v1, v3}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setLanguage(Ljava/lang/String;)V
.line 155
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->trackMetaData:Lcom/googlecode/mp4parser/authoring/TrackMetaData;
iget-wide v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->timescale:J
invoke-virtual {v1, v3, v4}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setTimescale(J)V
.line 156
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->trackMetaData:Lcom/googlecode/mp4parser/authoring/TrackMetaData;
iget v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->width:I
int-to-double v3, v3
invoke-virtual {v1, v3, v4}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setWidth(D)V
.line 157
iget-object v1, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->trackMetaData:Lcom/googlecode/mp4parser/authoring/TrackMetaData;
iget v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->height:I
int-to-double v3, v3
invoke-virtual {v1, v3, v4}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->setHeight(D)V
.line 158
return-void
.line 113
.end local v0 # "visualSampleEntry":Lcom/coremedia/iso/boxes/sampleentry/VisualSampleEntry;
.end local v2 # "avcConfigurationBox":Lcom/mp4parser/iso14496/part15/AvcConfigurationBox;
:cond_110
new-instance v0, Ljava/io/IOException;
invoke-direct {v0}, Ljava/io/IOException;-><init>()V
throw v0
.line 109
:cond_116
new-instance v0, Ljava/io/IOException;
invoke-direct {v0}, Ljava/io/IOException;-><init>()V
throw v0
.end method
.method private readSamples(Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;)Z
.registers 11
.param p1, "la" # Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 210
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
.line 292
.local v0, "buffered":Ljava/util/List;, "Ljava/util/List<Ljava/nio/ByteBuffer;>;"
const/4 v1, 0x0
.line 296
.local v1, "fvnd":Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$1FirstVclNalDetector;
nop
:goto_7
invoke-virtual {p0, p1}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->findNextNal(Lcom/googlecode/mp4parser/authoring/tracks/AbstractH26XTrack$LookAhead;)Ljava/nio/ByteBuffer;
move-result-object v2
move-object v3, v2
.local v3, "nal":Ljava/nio/ByteBuffer;
if-nez v2, :cond_f
goto :goto_3a
.line 297
:cond_f
const/4 v2, 0x0
invoke-virtual {v3, v2}, Ljava/nio/ByteBuffer;->get(I)B
move-result v2
.line 298
.local v2, "type":I
shr-int/lit8 v4, v2, 0x5
and-int/lit8 v4, v4, 0x3
.line 299
.local v4, "nal_ref_idc":I
and-int/lit8 v5, v2, 0x1f
.line 303
.local v5, "nal_unit_type":I
packed-switch v5, :pswitch_data_ba
.line 365
:pswitch_1d
sget-object v6, Ljava/lang/System;->err:Ljava/io/PrintStream;
new-instance v7, Ljava/lang/StringBuilder;
const-string v8, "Unknown NAL unit type: "
invoke-direct {v7, v8}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
invoke-virtual {v7, v5}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
invoke-virtual {v6, v7}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
goto :goto_7
.line 362
:pswitch_31
new-instance v6, Ljava/lang/RuntimeException;
const-string v7, "Sequence parameter set extension is not yet handled. Needs TLC."
invoke-direct {v6, v7}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
throw v6
.line 359
:pswitch_39
nop
.line 372
.end local v2 # "type":I
.end local v4 # "nal_ref_idc":I
.end local v5 # "nal_unit_type":I
:goto_3a
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSample(Ljava/util/List;)V
.line 373
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
invoke-interface {v2}, Ljava/util/List;->size()I
move-result v2
new-array v2, v2, [J
iput-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->decodingTimes:[J
.line 374
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->decodingTimes:[J
iget v4, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->frametick:I
int-to-long v4, v4
invoke-static {v2, v4, v5}, Ljava/util/Arrays;->fill([JJ)V
.line 375
const/4 v2, 0x1
return v2
.line 333
.restart local v2 # "type":I
.restart local v4 # "nal_ref_idc":I
.restart local v5 # "nal_unit_type":I
:pswitch_51
if-eqz v1, :cond_57
.line 335
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSample(Ljava/util/List;)V
.line 336
const/4 v1, 0x0
.line 338
:cond_57
invoke-interface {v0, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 339
goto :goto_7
.line 349
:pswitch_5b
if-eqz v1, :cond_61
.line 351
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSample(Ljava/util/List;)V
.line 352
const/4 v1, 0x0
.line 354
:cond_61
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
move-result-object v6
check-cast v6, Ljava/nio/ByteBuffer;
invoke-direct {p0, v6}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->handlePPS(Ljava/nio/ByteBuffer;)V
.line 355
goto :goto_7
.line 341
:pswitch_6b
if-eqz v1, :cond_71
.line 343
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSample(Ljava/util/List;)V
.line 344
const/4 v1, 0x0
.line 346
:cond_71
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
move-result-object v6
check-cast v6, Ljava/nio/ByteBuffer;
invoke-direct {p0, v6}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->handleSPS(Ljava/nio/ByteBuffer;)V
.line 347
goto :goto_7
.line 323
:pswitch_7b
if-eqz v1, :cond_81
.line 325
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSample(Ljava/util/List;)V
.line 326
const/4 v1, 0x0
.line 328
:cond_81
new-instance v6, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
new-instance v7, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;
invoke-direct {v7, p0, v3}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$ByteBufferBackedInputStream;-><init>(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;Ljava/nio/ByteBuffer;)V
invoke-static {v7}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->cleanBuffer(Ljava/io/InputStream;)Ljava/io/InputStream;
move-result-object v7
iget-object v8, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->currentSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
invoke-direct {v6, p0, v7, v8}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;-><init>(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;Ljava/io/InputStream;Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;)V
iput-object v6, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->seiMessage:Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$SEIMessage;
.line 329
invoke-interface {v0, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 330
goto/16 :goto_7
.line 309
:pswitch_98
new-instance v6, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$1FirstVclNalDetector;
invoke-direct {v6, p0, v3, v4, v5}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$1FirstVclNalDetector;-><init>(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;Ljava/nio/ByteBuffer;II)V
.line 310
.local v6, "current":Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$1FirstVclNalDetector;
if-nez v1, :cond_a1
.line 311
move-object v1, v6
goto :goto_ad
.line 312
:cond_a1
invoke-virtual {v1, v6}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$1FirstVclNalDetector;->isFirstInNew(Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl$1FirstVclNalDetector;)Z
move-result v7
if-eqz v7, :cond_ad
.line 314
invoke-direct {p0, v0}, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->createSample(Ljava/util/List;)V
.line 315
const/4 v1, 0x0
.line 316
move-object v1, v6
goto :goto_ae
.line 312
:cond_ad
:goto_ad
nop
.line 318
:goto_ae
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->rewind()Ljava/nio/Buffer;
move-result-object v7
check-cast v7, Ljava/nio/ByteBuffer;
invoke-interface {v0, v7}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 320
goto/16 :goto_7
nop
:pswitch_data_ba
.packed-switch 0x1
:pswitch_98
:pswitch_98
:pswitch_98
:pswitch_98
:pswitch_98
:pswitch_7b
:pswitch_6b
:pswitch_5b
:pswitch_51
:pswitch_39
:pswitch_39
:pswitch_1d
:pswitch_31
.end packed-switch
.end method
.method private readVariables()Z
.registers 9
.line 176
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v0, v0, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->pic_width_in_mbs_minus1:I
const/4 v1, 0x1
add-int/2addr v0, v1
mul-int/lit8 v0, v0, 0x10
iput v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->width:I
.line 177
const/4 v0, 0x2
.line 178
.local v0, "mult":I
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v2, v2, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->frame_mbs_only_flag:Z
if-eqz v2, :cond_12
.line 179
const/4 v0, 0x1
.line 181
:cond_12
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v2, v2, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->pic_height_in_map_units_minus1:I
add-int/2addr v2, v1
mul-int/lit8 v2, v2, 0x10
mul-int v2, v2, v0
iput v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->height:I
.line 182
iget-object v2, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v2, v2, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->frame_cropping_flag:Z
if-eqz v2, :cond_68
.line 183
const/4 v2, 0x0
.line 184
.local v2, "chromaArrayType":I
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-boolean v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->residual_color_transform_flag:Z
if-nez v3, :cond_32
.line 185
iget-object v3, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v3, v3, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->chroma_format_idc:Lcom/googlecode/mp4parser/h264/model/ChromaFormat;
invoke-virtual {v3}, Lcom/googlecode/mp4parser/h264/model/ChromaFormat;->getId()I
move-result v2
.line 187
:cond_32
const/4 v3, 0x1
.line 188
.local v3, "cropUnitX":I
move v4, v0
.line 189
.local v4, "cropUnitY":I
if-eqz v2, :cond_48
.line 190
iget-object v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v5, v5, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->chroma_format_idc:Lcom/googlecode/mp4parser/h264/model/ChromaFormat;
invoke-virtual {v5}, Lcom/googlecode/mp4parser/h264/model/ChromaFormat;->getSubWidth()I
move-result v3
.line 191
iget-object v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget-object v5, v5, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->chroma_format_idc:Lcom/googlecode/mp4parser/h264/model/ChromaFormat;
invoke-virtual {v5}, Lcom/googlecode/mp4parser/h264/model/ChromaFormat;->getSubHeight()I
move-result v5
mul-int v4, v5, v0
.line 194
:cond_48
iget v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->width:I
iget-object v6, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v6, v6, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->frame_crop_left_offset:I
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v7, v7, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->frame_crop_right_offset:I
add-int/2addr v6, v7
mul-int v6, v6, v3
sub-int/2addr v5, v6
iput v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->width:I
.line 195
iget v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->height:I
iget-object v6, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v6, v6, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->frame_crop_top_offset:I
iget-object v7, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->firstSeqParameterSet:Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;
iget v7, v7, Lcom/googlecode/mp4parser/h264/model/SeqParameterSet;->frame_crop_bottom_offset:I
add-int/2addr v6, v7
mul-int v6, v6, v4
sub-int/2addr v5, v6
iput v5, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->height:I
.line 197
.end local v2 # "chromaArrayType":I
.end local v3 # "cropUnitX":I
.end local v4 # "cropUnitY":I
:cond_68
return v1
.end method
# virtual methods
.method public getHandler()Ljava/lang/String;
.registers 2
.line 168
const-string/jumbo v0, "vide"
return-object v0
.end method
.method public getSampleDescriptionBox()Lcom/coremedia/iso/boxes/SampleDescriptionBox;
.registers 2
.line 161
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->sampleDescriptionBox:Lcom/coremedia/iso/boxes/SampleDescriptionBox;
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 172
iget-object v0, p0, Lcom/googlecode/mp4parser/authoring/tracks/H264TrackImpl;->samples:Ljava/util/List;
return-object v0
.end method