TwoSecondIntersectionFinder.smali
.class public Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;
.super Ljava/lang/Object;
.source "TwoSecondIntersectionFinder.java"
# interfaces
.implements Lcom/googlecode/mp4parser/authoring/builder/FragmentIntersectionFinder;
# instance fields
.field private fragmentLength:I
.field private movie:Lcom/googlecode/mp4parser/authoring/Movie;
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(Lcom/googlecode/mp4parser/authoring/Movie;I)V
.registers 4
.param p1, "movie" # Lcom/googlecode/mp4parser/authoring/Movie;
.param p2, "fragmentLength" # I
.line 32
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 28
const/4 v0, 0x2
iput v0, p0, Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;->fragmentLength:I
.line 33
iput-object p1, p0, Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;->movie:Lcom/googlecode/mp4parser/authoring/Movie;
.line 34
iput p2, p0, Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;->fragmentLength:I
.line 35
return-void
.end method
# virtual methods
.method public sampleNumbers(Lcom/googlecode/mp4parser/authoring/Track;)[J
.registers 23
.param p1, "track" # Lcom/googlecode/mp4parser/authoring/Track;
.line 42
move-object/from16 v0, p0
const-wide/16 v1, 0x0
.line 43
.local v1, "trackLength":D
iget-object v3, v0, Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;->movie:Lcom/googlecode/mp4parser/authoring/Movie;
invoke-virtual {v3}, Lcom/googlecode/mp4parser/authoring/Movie;->getTracks()Ljava/util/List;
move-result-object v3
invoke-interface {v3}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v3
:goto_e
invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z
move-result v4
if-nez v4, :cond_c2
.line 50
iget v3, v0, Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;->fragmentLength:I
int-to-double v3, v3
invoke-static {v3, v4}, Ljava/lang/Double;->isNaN(D)Z
div-double v3, v1, v3
invoke-static {v3, v4}, Ljava/lang/Math;->ceil(D)D
move-result-wide v3
double-to-int v3, v3
const/4 v4, 0x1
sub-int/2addr v3, v4
.line 51
.local v3, "fragmentCount":I
invoke-interface/range {p1 .. p1}, Lcom/googlecode/mp4parser/authoring/Track;->getSamples()Ljava/util/List;
move-result-object v5
invoke-interface {v5}, Ljava/util/List;->size()I
move-result v5
invoke-static {v3, v5}, Ljava/lang/Math;->min(II)I
move-result v3
.line 52
if-ge v3, v4, :cond_34
.line 53
const/4 v3, 0x1
move v5, v3
goto :goto_35
.line 52
:cond_34
move v5, v3
.line 56
.end local v3 # "fragmentCount":I
.local v5, "fragmentCount":I
:goto_35
new-array v6, v5, [J
.line 57
.local v6, "fragments":[J
const-wide/16 v7, -0x1
invoke-static {v6, v7, v8}, Ljava/util/Arrays;->fill([JJ)V
.line 58
const-wide/16 v9, 0x1
const/4 v11, 0x0
aput-wide v9, v6, v11
.line 60
const-wide/16 v9, 0x0
.line 61
.local v9, "time":J
const/4 v3, 0x0
.line 62
.local v3, "samples":I
invoke-interface/range {p1 .. p1}, Lcom/googlecode/mp4parser/authoring/Track;->getSampleDurations()[J
move-result-object v12
array-length v13, v12
const/4 v14, 0x0
:goto_4a
if-lt v14, v13, :cond_4d
goto :goto_64
:cond_4d
aget-wide v15, v12, v14
.line 63
.local v15, "delta":J
invoke-interface/range {p1 .. p1}, Lcom/googlecode/mp4parser/authoring/Track;->getTrackMetaData()Lcom/googlecode/mp4parser/authoring/TrackMetaData;
move-result-object v17
invoke-virtual/range {v17 .. v17}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->getTimescale()J
move-result-wide v17
div-long v17, v9, v17
iget v7, v0, Lcom/googlecode/mp4parser/authoring/builder/TwoSecondIntersectionFinder;->fragmentLength:I
int-to-long v7, v7
div-long v7, v17, v7
long-to-int v8, v7
add-int/2addr v8, v4
.line 64
.local v8, "currentFragment":I
array-length v7, v6
if-lt v8, v7, :cond_aa
.line 65
nop
.line 70
.end local v8 # "currentFragment":I
.end local v15 # "delta":J
:goto_64
add-int/lit8 v7, v3, 0x1
int-to-long v7, v7
.line 72
.local v7, "last":J
array-length v12, v6
sub-int/2addr v12, v4
.local v12, "i":I
:goto_69
if-gez v12, :cond_98
.line 78
.end local v12 # "i":I
new-array v12, v11, [J
.line 79
.local v12, "cleanedFragments":[J
array-length v13, v6
:goto_6e
if-lt v11, v13, :cond_71
.line 85
return-object v12
.line 79
:cond_71
aget-wide v14, v6, v11
.line 80
.local v14, "fragment":J
array-length v4, v12
if-eqz v4, :cond_85
array-length v4, v12
const/16 v16, 0x1
add-int/lit8 v4, v4, -0x1
aget-wide v18, v12, v4
cmp-long v4, v18, v14
if-eqz v4, :cond_82
goto :goto_85
:cond_82
const/16 v17, 0x1
goto :goto_94
.line 81
:cond_85
:goto_85
array-length v4, v12
const/16 v17, 0x1
add-int/lit8 v4, v4, 0x1
invoke-static {v12, v4}, Ljava/util/Arrays;->copyOf([JI)[J
move-result-object v4
.line 82
.end local v12 # "cleanedFragments":[J
.local v4, "cleanedFragments":[J
array-length v12, v4
add-int/lit8 v12, v12, -0x1
aput-wide v14, v4, v12
move-object v12, v4
.line 79
.end local v4 # "cleanedFragments":[J
.end local v14 # "fragment":J
.restart local v12 # "cleanedFragments":[J
:goto_94
add-int/lit8 v11, v11, 0x1
const/4 v4, 0x1
goto :goto_6e
.line 73
.local v12, "i":I
:cond_98
const/16 v17, 0x1
aget-wide v13, v6, v12
const-wide/16 v18, -0x1
cmp-long v4, v13, v18
if-nez v4, :cond_a4
.line 74
aput-wide v7, v6, v12
.line 76
:cond_a4
aget-wide v7, v6, v12
.line 72
add-int/lit8 v12, v12, -0x1
const/4 v4, 0x1
goto :goto_69
.line 67
.end local v7 # "last":J
.end local v12 # "i":I
.restart local v8 # "currentFragment":I
.restart local v15 # "delta":J
:cond_aa
const/16 v17, 0x1
const-wide/16 v18, -0x1
add-int/lit8 v4, v3, 0x1
.end local v3 # "samples":I
.local v4, "samples":I
add-int/lit8 v3, v3, 0x1
move-object/from16 v20, v12
int-to-long v11, v3
aput-wide v11, v6, v8
.line 68
add-long/2addr v9, v15
.line 62
.end local v8 # "currentFragment":I
.end local v15 # "delta":J
add-int/lit8 v14, v14, 0x1
move v3, v4
move-wide/from16 v7, v18
move-object/from16 v12, v20
const/4 v4, 0x1
const/4 v11, 0x0
goto :goto_4a
.line 43
.end local v4 # "samples":I
.end local v5 # "fragmentCount":I
.end local v6 # "fragments":[J
.end local v9 # "time":J
:cond_c2
invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v4
check-cast v4, Lcom/googlecode/mp4parser/authoring/Track;
.line 44
.local v4, "thisTrack":Lcom/googlecode/mp4parser/authoring/Track;
invoke-interface {v4}, Lcom/googlecode/mp4parser/authoring/Track;->getDuration()J
move-result-wide v5
invoke-interface {v4}, Lcom/googlecode/mp4parser/authoring/Track;->getTrackMetaData()Lcom/googlecode/mp4parser/authoring/TrackMetaData;
move-result-object v7
invoke-virtual {v7}, Lcom/googlecode/mp4parser/authoring/TrackMetaData;->getTimescale()J
move-result-wide v7
div-long/2addr v5, v7
long-to-double v5, v5
.line 45
.local v5, "thisTracksLength":D
cmpg-double v7, v1, v5
if-gez v7, :cond_dd
.line 46
move-wide v1, v5
goto/16 :goto_e
.line 45
:cond_dd
goto/16 :goto_e
.end method