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