MP4Builder.smali

.class public Lim/tpelyyftgw/messenger/video/MP4Builder;
.super Ljava/lang/Object;
.source "MP4Builder.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;
    }
.end annotation


# instance fields
.field private currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

.field private dataOffset:J

.field private fc:Ljava/nio/channels/FileChannel;

.field private fos:Ljava/io/FileOutputStream;

.field private mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

.field private sizeBuffer:Ljava/nio/ByteBuffer;

.field private splitMdat:Z

.field private track2SampleSizes:Ljava/util/HashMap;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/HashMap<",
            "Lim/tpelyyftgw/messenger/video/Track;",
            "[J>;"
        }
    .end annotation
.end field

.field private wasFirstVideoFrame:Z

.field private writeNewMdat:Z

.field private wroteSinceLastMdat:J


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method public constructor <init>()V
    .registers 4

    .line 46
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 48
    const/4 v0, 0x0

    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    .line 49
    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

    .line 50
    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    .line 51
    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    .line 52
    const-wide/16 v1, 0x0

    iput-wide v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    .line 53
    iput-wide v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    .line 54
    const/4 v1, 0x1

    iput-boolean v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->writeNewMdat:Z

    .line 55
    new-instance v1, Ljava/util/HashMap;

    invoke-direct {v1}, Ljava/util/HashMap;-><init>()V

    iput-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->track2SampleSizes:Ljava/util/HashMap;

    .line 56
    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->sizeBuffer:Ljava/nio/ByteBuffer;

    return-void
.end method

.method private flushCurrentMdat()V
    .registers 6
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/lang/Exception;
        }
    .end annotation

    .line 80
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v0}, Ljava/nio/channels/FileChannel;->position()J

    move-result-wide v0

    .line 81
    .local v0, "oldPosition":J
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    iget-object v3, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->getOffset()J

    move-result-wide v3

    invoke-virtual {v2, v3, v4}, Ljava/nio/channels/FileChannel;->position(J)Ljava/nio/channels/FileChannel;

    .line 82
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    iget-object v3, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v2, v3}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->getBox(Ljava/nio/channels/WritableByteChannel;)V

    .line 83
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v2, v0, v1}, Ljava/nio/channels/FileChannel;->position(J)Ljava/nio/channels/FileChannel;

    .line 84
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    const-wide/16 v3, 0x0

    invoke-virtual {v2, v3, v4}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->setDataOffset(J)V

    .line 85
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    invoke-virtual {v2, v3, v4}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->setContentSize(J)V

    .line 86
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v2}, Ljava/io/FileOutputStream;->flush()V

    .line 87
    iget-object v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v2}, Ljava/io/FileOutputStream;->getFD()Ljava/io/FileDescriptor;

    move-result-object v2

    invoke-virtual {v2}, Ljava/io/FileDescriptor;->sync()V

    .line 88
    return-void
.end method

.method public static gcd(JJ)J
    .registers 7
    .param p0, "a"    # J
    .param p2, "b"    # J

    .line 268
    const-wide/16 v0, 0x0

    cmp-long v2, p2, v0

    if-nez v2, :cond_7

    .line 269
    return-wide p0

    .line 271
    :cond_7
    rem-long v0, p0, p2

    invoke-static {p2, p3, v0, v1}, Lim/tpelyyftgw/messenger/video/MP4Builder;->gcd(JJ)J

    move-result-wide v0

    return-wide v0
.end method


# virtual methods
.method public addTrack(Landroid/media/MediaFormat;Z)I
    .registers 4
    .param p1, "mediaFormat"    # Landroid/media/MediaFormat;
    .param p2, "isAudio"    # Z

    .line 167
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

    invoke-virtual {v0, p1, p2}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->addTrack(Landroid/media/MediaFormat;Z)I

    move-result v0

    return v0
.end method

.method protected createCtts(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 10
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 389
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getSampleCompositions()[I

    move-result-object v0

    .line 390
    .local v0, "sampleCompositions":[I
    if-nez v0, :cond_7

    .line 391
    return-void

    .line 393
    :cond_7
    const/4 v1, 0x0

    .line 394
    .local v1, "lastEntry":Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;
    new-instance v2, Ljava/util/ArrayList;

    invoke-direct {v2}, Ljava/util/ArrayList;-><init>()V

    .line 396
    .local v2, "entries":Ljava/util/List;, "Ljava/util/List<Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;>;"
    const/4 v3, 0x0

    .local v3, "a":I
    :goto_e
    array-length v4, v0

    if-ge v3, v4, :cond_31

    .line 397
    aget v4, v0, v3

    .line 398
    .local v4, "offset":I
    const/4 v5, 0x1

    if-eqz v1, :cond_25

    invoke-virtual {v1}, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;->getOffset()I

    move-result v6

    if-ne v6, v4, :cond_25

    .line 399
    invoke-virtual {v1}, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;->getCount()I

    move-result v6

    add-int/2addr v6, v5

    invoke-virtual {v1, v6}, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;->setCount(I)V

    goto :goto_2e

    .line 401
    :cond_25
    new-instance v6, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;

    invoke-direct {v6, v5, v4}, Lcom/coremedia/iso/boxes/CompositionTimeToSample$Entry;-><init>(II)V

    move-object v1, v6

    .line 402
    invoke-interface {v2, v1}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 396
    .end local v4    # "offset":I
    :goto_2e
    add-int/lit8 v3, v3, 0x1

    goto :goto_e

    .line 405
    .end local v3    # "a":I
    :cond_31
    new-instance v3, Lcom/coremedia/iso/boxes/CompositionTimeToSample;

    invoke-direct {v3}, Lcom/coremedia/iso/boxes/CompositionTimeToSample;-><init>()V

    .line 406
    .local v3, "ctts":Lcom/coremedia/iso/boxes/CompositionTimeToSample;
    invoke-virtual {v3, v2}, Lcom/coremedia/iso/boxes/CompositionTimeToSample;->setEntries(Ljava/util/List;)V

    .line 407
    invoke-virtual {p2, v3}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 408
    return-void
.end method

.method protected createFileTypeBox()Lcom/coremedia/iso/boxes/FileTypeBox;
    .registers 6

    .line 194
    new-instance v0, Ljava/util/LinkedList;

    invoke-direct {v0}, Ljava/util/LinkedList;-><init>()V

    .line 195
    .local v0, "minorBrands":Ljava/util/LinkedList;, "Ljava/util/LinkedList<Ljava/lang/String;>;"
    const-string v1, "isom"

    invoke-virtual {v0, v1}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z

    .line 196
    const-string v2, "iso2"

    invoke-virtual {v0, v2}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z

    .line 197
    const-string v2, "avc1"

    invoke-virtual {v0, v2}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z

    .line 198
    const-string v2, "mp41"

    invoke-virtual {v0, v2}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z

    .line 199
    new-instance v2, Lcom/coremedia/iso/boxes/FileTypeBox;

    const-wide/16 v3, 0x200

    invoke-direct {v2, v1, v3, v4, v0}, Lcom/coremedia/iso/boxes/FileTypeBox;-><init>(Ljava/lang/String;JLjava/util/List;)V

    return-object v2
.end method

.method public createMovie(Lim/tpelyyftgw/messenger/video/Mp4Movie;Z)Lim/tpelyyftgw/messenger/video/MP4Builder;
    .registers 8
    .param p1, "mp4Movie"    # Lim/tpelyyftgw/messenger/video/Mp4Movie;
    .param p2, "split"    # Z
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/lang/Exception;
        }
    .end annotation

    .line 61
    iput-object p1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

    .line 63
    new-instance v0, Ljava/io/FileOutputStream;

    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getCacheFile()Ljava/io/File;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V

    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    .line 64
    invoke-virtual {v0}, Ljava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;

    move-result-object v0

    iput-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    .line 66
    invoke-virtual {p0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createFileTypeBox()Lcom/coremedia/iso/boxes/FileTypeBox;

    move-result-object v0

    .line 67
    .local v0, "fileTypeBox":Lcom/coremedia/iso/boxes/FileTypeBox;
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/FileTypeBox;->getBox(Ljava/nio/channels/WritableByteChannel;)V

    .line 68
    iget-wide v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    invoke-virtual {v0}, Lcom/coremedia/iso/boxes/FileTypeBox;->getSize()J

    move-result-wide v3

    add-long/2addr v1, v3

    iput-wide v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    .line 69
    iget-wide v3, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    add-long/2addr v3, v1

    iput-wide v3, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    .line 70
    iput-boolean p2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->splitMdat:Z

    .line 72
    new-instance v1, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    const/4 v2, 0x0

    invoke-direct {v1, p0, v2}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;-><init>(Lim/tpelyyftgw/messenger/video/MP4Builder;Lim/tpelyyftgw/messenger/video/MP4Builder$1;)V

    iput-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    .line 74
    const/4 v1, 0x4

    invoke-static {v1}, Ljava/nio/ByteBuffer;->allocateDirect(I)Ljava/nio/ByteBuffer;

    move-result-object v1

    iput-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->sizeBuffer:Ljava/nio/ByteBuffer;

    .line 76
    return-object p0
.end method

.method protected createMovieBox(Lim/tpelyyftgw/messenger/video/Mp4Movie;)Lcom/coremedia/iso/boxes/MovieBox;
    .registers 14
    .param p1, "movie"    # Lim/tpelyyftgw/messenger/video/Mp4Movie;

    .line 286
    new-instance v0, Lcom/coremedia/iso/boxes/MovieBox;

    invoke-direct {v0}, Lcom/coremedia/iso/boxes/MovieBox;-><init>()V

    .line 287
    .local v0, "movieBox":Lcom/coremedia/iso/boxes/MovieBox;
    new-instance v1, Lcom/coremedia/iso/boxes/MovieHeaderBox;

    invoke-direct {v1}, Lcom/coremedia/iso/boxes/MovieHeaderBox;-><init>()V

    .line 289
    .local v1, "mvhd":Lcom/coremedia/iso/boxes/MovieHeaderBox;
    new-instance v2, Ljava/util/Date;

    invoke-direct {v2}, Ljava/util/Date;-><init>()V

    invoke-virtual {v1, v2}, Lcom/coremedia/iso/boxes/MovieHeaderBox;->setCreationTime(Ljava/util/Date;)V

    .line 290
    new-instance v2, Ljava/util/Date;

    invoke-direct {v2}, Ljava/util/Date;-><init>()V

    invoke-virtual {v1, v2}, Lcom/coremedia/iso/boxes/MovieHeaderBox;->setModificationTime(Ljava/util/Date;)V

    .line 291
    sget-object v2, Lcom/googlecode/mp4parser/util/Matrix;->ROTATE_0:Lcom/googlecode/mp4parser/util/Matrix;

    invoke-virtual {v1, v2}, Lcom/coremedia/iso/boxes/MovieHeaderBox;->setMatrix(Lcom/googlecode/mp4parser/util/Matrix;)V

    .line 292
    invoke-virtual {p0, p1}, Lim/tpelyyftgw/messenger/video/MP4Builder;->getTimescale(Lim/tpelyyftgw/messenger/video/Mp4Movie;)J

    move-result-wide v2

    .line 293
    .local v2, "movieTimeScale":J
    const-wide/16 v4, 0x0

    .line 295
    .local v4, "duration":J
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v6

    invoke-virtual {v6}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object v6

    :goto_2d
    invoke-interface {v6}, Ljava/util/Iterator;->hasNext()Z

    move-result v7

    if-eqz v7, :cond_4e

    invoke-interface {v6}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v7

    check-cast v7, Lim/tpelyyftgw/messenger/video/Track;

    .line 296
    .local v7, "track":Lim/tpelyyftgw/messenger/video/Track;
    invoke-virtual {v7}, Lim/tpelyyftgw/messenger/video/Track;->prepare()V

    .line 297
    invoke-virtual {v7}, Lim/tpelyyftgw/messenger/video/Track;->getDuration()J

    move-result-wide v8

    mul-long v8, v8, v2

    invoke-virtual {v7}, Lim/tpelyyftgw/messenger/video/Track;->getTimeScale()I

    move-result v10

    int-to-long v10, v10

    div-long/2addr v8, v10

    .line 298
    .local v8, "tracksDuration":J
    cmp-long v10, v8, v4

    if-lez v10, :cond_4d

    .line 299
    move-wide v4, v8

    .line 301
    .end local v7    # "track":Lim/tpelyyftgw/messenger/video/Track;
    .end local v8    # "tracksDuration":J
    :cond_4d
    goto :goto_2d

    .line 303
    :cond_4e
    invoke-virtual {v1, v4, v5}, Lcom/coremedia/iso/boxes/MovieHeaderBox;->setDuration(J)V

    .line 304
    invoke-virtual {v1, v2, v3}, Lcom/coremedia/iso/boxes/MovieHeaderBox;->setTimescale(J)V

    .line 305
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v6

    invoke-virtual {v6}, Ljava/util/ArrayList;->size()I

    move-result v6

    add-int/lit8 v6, v6, 0x1

    int-to-long v6, v6

    invoke-virtual {v1, v6, v7}, Lcom/coremedia/iso/boxes/MovieHeaderBox;->setNextTrackId(J)V

    .line 307
    invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/MovieBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 308
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v6

    invoke-virtual {v6}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object v6

    :goto_6d
    invoke-interface {v6}, Ljava/util/Iterator;->hasNext()Z

    move-result v7

    if-eqz v7, :cond_81

    invoke-interface {v6}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v7

    check-cast v7, Lim/tpelyyftgw/messenger/video/Track;

    .line 309
    .restart local v7    # "track":Lim/tpelyyftgw/messenger/video/Track;
    invoke-virtual {p0, v7, p1}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createTrackBox(Lim/tpelyyftgw/messenger/video/Track;Lim/tpelyyftgw/messenger/video/Mp4Movie;)Lcom/coremedia/iso/boxes/TrackBox;

    move-result-object v8

    invoke-virtual {v0, v8}, Lcom/coremedia/iso/boxes/MovieBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 310
    .end local v7    # "track":Lim/tpelyyftgw/messenger/video/Track;
    goto :goto_6d

    .line 311
    :cond_81
    return-object v0
.end method

.method protected createSidx(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 3
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 488
    return-void
.end method

.method protected createStbl(Lim/tpelyyftgw/messenger/video/Track;)Lcom/coremedia/iso/boxes/Box;
    .registers 3
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;

    .line 371
    new-instance v0, Lcom/coremedia/iso/boxes/SampleTableBox;

    invoke-direct {v0}, Lcom/coremedia/iso/boxes/SampleTableBox;-><init>()V

    .line 373
    .local v0, "stbl":Lcom/coremedia/iso/boxes/SampleTableBox;
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStsd(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 374
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStts(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 375
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createCtts(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 376
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStss(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 377
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStsc(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 378
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStsz(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 379
    invoke-virtual {p0, p1, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStco(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V

    .line 381
    return-object v0
.end method

.method protected createStco(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 13
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 491
    new-instance v0, Ljava/util/ArrayList;

    invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V

    .line 492
    .local v0, "chunksOffsets":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Ljava/lang/Long;>;"
    const-wide/16 v1, -0x1

    .line 493
    .local v1, "lastOffset":J
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getSamples()Ljava/util/ArrayList;

    move-result-object v3

    invoke-virtual {v3}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :goto_f
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v4

    if-eqz v4, :cond_3d

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v4

    check-cast v4, Lim/tpelyyftgw/messenger/video/Sample;

    .line 494
    .local v4, "sample":Lim/tpelyyftgw/messenger/video/Sample;
    invoke-virtual {v4}, Lim/tpelyyftgw/messenger/video/Sample;->getOffset()J

    move-result-wide v5

    .line 495
    .local v5, "offset":J
    const-wide/16 v7, -0x1

    cmp-long v9, v1, v7

    if-eqz v9, :cond_2b

    cmp-long v9, v1, v5

    if-eqz v9, :cond_2b

    .line 496
    const-wide/16 v1, -0x1

    .line 498
    :cond_2b
    cmp-long v9, v1, v7

    if-nez v9, :cond_36

    .line 499
    invoke-static {v5, v6}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;

    move-result-object v7

    invoke-virtual {v0, v7}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 501
    :cond_36
    invoke-virtual {v4}, Lim/tpelyyftgw/messenger/video/Sample;->getSize()J

    move-result-wide v7

    add-long v1, v5, v7

    .line 502
    .end local v4    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .end local v5    # "offset":J
    goto :goto_f

    .line 503
    :cond_3d
    invoke-virtual {v0}, Ljava/util/ArrayList;->size()I

    move-result v3

    new-array v3, v3, [J

    .line 504
    .local v3, "chunkOffsetsLong":[J
    const/4 v4, 0x0

    .local v4, "a":I
    :goto_44
    invoke-virtual {v0}, Ljava/util/ArrayList;->size()I

    move-result v5

    if-ge v4, v5, :cond_59

    .line 505
    invoke-virtual {v0, v4}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v5

    check-cast v5, Ljava/lang/Long;

    invoke-virtual {v5}, Ljava/lang/Long;->longValue()J

    move-result-wide v5

    aput-wide v5, v3, v4

    .line 504
    add-int/lit8 v4, v4, 0x1

    goto :goto_44

    .line 508
    .end local v4    # "a":I
    :cond_59
    new-instance v4, Lcom/coremedia/iso/boxes/StaticChunkOffsetBox;

    invoke-direct {v4}, Lcom/coremedia/iso/boxes/StaticChunkOffsetBox;-><init>()V

    .line 509
    .local v4, "stco":Lcom/coremedia/iso/boxes/StaticChunkOffsetBox;
    invoke-virtual {v4, v3}, Lcom/coremedia/iso/boxes/StaticChunkOffsetBox;->setChunkOffsets([J)V

    .line 510
    invoke-virtual {p2, v4}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 511
    return-void
.end method

.method protected createStsc(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 30
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 439
    new-instance v0, Lcom/coremedia/iso/boxes/SampleToChunkBox;

    invoke-direct {v0}, Lcom/coremedia/iso/boxes/SampleToChunkBox;-><init>()V

    .line 440
    .local v0, "stsc":Lcom/coremedia/iso/boxes/SampleToChunkBox;
    new-instance v1, Ljava/util/LinkedList;

    invoke-direct {v1}, Ljava/util/LinkedList;-><init>()V

    invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/SampleToChunkBox;->setEntries(Ljava/util/List;)V

    .line 443
    const/4 v1, 0x1

    .line 444
    .local v1, "lastChunkNumber":I
    const/4 v2, 0x0

    .line 446
    .local v2, "lastSampleCount":I
    const/4 v3, -0x1

    .line 448
    .local v3, "previousWritedChunkCount":I
    invoke-virtual/range {p1 .. p1}, Lim/tpelyyftgw/messenger/video/Track;->getSamples()Ljava/util/ArrayList;

    move-result-object v4

    invoke-virtual {v4}, Ljava/util/ArrayList;->size()I

    move-result v4

    .line 449
    .local v4, "samplesCount":I
    const/4 v5, 0x0

    .local v5, "a":I
    :goto_19
    if-ge v5, v4, :cond_89

    .line 450
    invoke-virtual/range {p1 .. p1}, Lim/tpelyyftgw/messenger/video/Track;->getSamples()Ljava/util/ArrayList;

    move-result-object v6

    invoke-virtual {v6, v5}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v6

    check-cast v6, Lim/tpelyyftgw/messenger/video/Sample;

    .line 451
    .local v6, "sample":Lim/tpelyyftgw/messenger/video/Sample;
    invoke-virtual {v6}, Lim/tpelyyftgw/messenger/video/Sample;->getOffset()J

    move-result-wide v7

    .line 452
    .local v7, "offset":J
    invoke-virtual {v6}, Lim/tpelyyftgw/messenger/video/Sample;->getSize()J

    move-result-wide v9

    .line 454
    .local v9, "size":J
    add-long v11, v7, v9

    .line 455
    .local v11, "lastOffset":J
    add-int/lit8 v2, v2, 0x1

    .line 457
    const/4 v13, 0x0

    .line 458
    .local v13, "write":Z
    add-int/lit8 v14, v4, -0x1

    if-eq v5, v14, :cond_4c

    .line 459
    invoke-virtual/range {p1 .. p1}, Lim/tpelyyftgw/messenger/video/Track;->getSamples()Ljava/util/ArrayList;

    move-result-object v14

    add-int/lit8 v15, v5, 0x1

    invoke-virtual {v14, v15}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v14

    check-cast v14, Lim/tpelyyftgw/messenger/video/Sample;

    .line 460
    .local v14, "nextSample":Lim/tpelyyftgw/messenger/video/Sample;
    invoke-virtual {v14}, Lim/tpelyyftgw/messenger/video/Sample;->getOffset()J

    move-result-wide v15

    cmp-long v17, v11, v15

    if-eqz v17, :cond_4b

    .line 461
    const/4 v13, 0x1

    .line 463
    .end local v14    # "nextSample":Lim/tpelyyftgw/messenger/video/Sample;
    :cond_4b
    goto :goto_4d

    .line 464
    :cond_4c
    const/4 v13, 0x1

    .line 466
    :goto_4d
    if-eqz v13, :cond_7c

    .line 467
    if-eq v3, v2, :cond_70

    .line 468
    invoke-virtual {v0}, Lcom/coremedia/iso/boxes/SampleToChunkBox;->getEntries()Ljava/util/List;

    move-result-object v14

    new-instance v15, Lcom/coremedia/iso/boxes/SampleToChunkBox$Entry;

    move/from16 v23, v3

    move/from16 v22, v4

    .end local v3    # "previousWritedChunkCount":I
    .end local v4    # "samplesCount":I
    .local v22, "samplesCount":I
    .local v23, "previousWritedChunkCount":I
    int-to-long v3, v1

    move-object/from16 v24, v6

    move-wide/from16 v25, v7

    .end local v6    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .end local v7    # "offset":J
    .local v24, "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .local v25, "offset":J
    int-to-long v6, v2

    const-wide/16 v20, 0x1

    move-object v8, v15

    move-wide/from16 v16, v3

    move-wide/from16 v18, v6

    invoke-direct/range {v15 .. v21}, Lcom/coremedia/iso/boxes/SampleToChunkBox$Entry;-><init>(JJJ)V

    invoke-interface {v14, v8}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 469
    move v3, v2

    .end local v23    # "previousWritedChunkCount":I
    .restart local v3    # "previousWritedChunkCount":I
    goto :goto_78

    .line 467
    .end local v22    # "samplesCount":I
    .end local v24    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .end local v25    # "offset":J
    .restart local v4    # "samplesCount":I
    .restart local v6    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .restart local v7    # "offset":J
    :cond_70
    move/from16 v23, v3

    move/from16 v22, v4

    move-object/from16 v24, v6

    move-wide/from16 v25, v7

    .line 471
    .end local v4    # "samplesCount":I
    .end local v6    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .end local v7    # "offset":J
    .restart local v22    # "samplesCount":I
    .restart local v24    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .restart local v25    # "offset":J
    :goto_78
    const/4 v2, 0x0

    .line 472
    add-int/lit8 v1, v1, 0x1

    goto :goto_84

    .line 466
    .end local v22    # "samplesCount":I
    .end local v24    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .end local v25    # "offset":J
    .restart local v4    # "samplesCount":I
    .restart local v6    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .restart local v7    # "offset":J
    :cond_7c
    move/from16 v23, v3

    move/from16 v22, v4

    move-object/from16 v24, v6

    move-wide/from16 v25, v7

    .line 449
    .end local v4    # "samplesCount":I
    .end local v6    # "sample":Lim/tpelyyftgw/messenger/video/Sample;
    .end local v7    # "offset":J
    .end local v9    # "size":J
    .end local v13    # "write":Z
    .restart local v22    # "samplesCount":I
    :goto_84
    add-int/lit8 v5, v5, 0x1

    move/from16 v4, v22

    goto :goto_19

    .end local v11    # "lastOffset":J
    .end local v22    # "samplesCount":I
    .restart local v4    # "samplesCount":I
    :cond_89
    move/from16 v23, v3

    .line 475
    .end local v3    # "previousWritedChunkCount":I
    .end local v5    # "a":I
    .restart local v23    # "previousWritedChunkCount":I
    move-object/from16 v3, p2

    invoke-virtual {v3, v0}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 476
    return-void
.end method

.method protected createStsd(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 4
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 385
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getSampleDescriptionBox()Lcom/coremedia/iso/boxes/SampleDescriptionBox;

    move-result-object v0

    invoke-virtual {p2, v0}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 386
    return-void
.end method

.method protected createStss(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 5
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 430
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getSyncSamples()[J

    move-result-object v0

    .line 431
    .local v0, "syncSamples":[J
    if-eqz v0, :cond_14

    array-length v1, v0

    if-lez v1, :cond_14

    .line 432
    new-instance v1, Lcom/coremedia/iso/boxes/SyncSampleBox;

    invoke-direct {v1}, Lcom/coremedia/iso/boxes/SyncSampleBox;-><init>()V

    .line 433
    .local v1, "stss":Lcom/coremedia/iso/boxes/SyncSampleBox;
    invoke-virtual {v1, v0}, Lcom/coremedia/iso/boxes/SyncSampleBox;->setSampleNumber([J)V

    .line 434
    invoke-virtual {p2, v1}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 436
    .end local v1    # "stss":Lcom/coremedia/iso/boxes/SyncSampleBox;
    :cond_14
    return-void
.end method

.method protected createStsz(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 5
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 479
    new-instance v0, Lcom/coremedia/iso/boxes/SampleSizeBox;

    invoke-direct {v0}, Lcom/coremedia/iso/boxes/SampleSizeBox;-><init>()V

    .line 480
    .local v0, "stsz":Lcom/coremedia/iso/boxes/SampleSizeBox;
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->track2SampleSizes:Ljava/util/HashMap;

    invoke-virtual {v1, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v1

    check-cast v1, [J

    invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/SampleSizeBox;->setSampleSizes([J)V

    .line 481
    invoke-virtual {p2, v0}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 482
    return-void
.end method

.method protected createStts(Lim/tpelyyftgw/messenger/video/Track;Lcom/coremedia/iso/boxes/SampleTableBox;)V
    .registers 14
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "stbl"    # Lcom/coremedia/iso/boxes/SampleTableBox;

    .line 411
    const/4 v0, 0x0

    .line 412
    .local v0, "lastEntry":Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;
    new-instance v1, Ljava/util/ArrayList;

    invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V

    .line 413
    .local v1, "entries":Ljava/util/List;, "Ljava/util/List<Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;>;"
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getSampleDurations()[J

    move-result-object v2

    .line 415
    .local v2, "deltas":[J
    const/4 v3, 0x0

    .local v3, "a":I
    :goto_b
    array-length v4, v2

    if-ge v3, v4, :cond_31

    .line 416
    aget-wide v4, v2, v3

    .line 417
    .local v4, "delta":J
    const-wide/16 v6, 0x1

    if-eqz v0, :cond_25

    invoke-virtual {v0}, Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;->getDelta()J

    move-result-wide v8

    cmp-long v10, v8, v4

    if-nez v10, :cond_25

    .line 418
    invoke-virtual {v0}, Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;->getCount()J

    move-result-wide v8

    add-long/2addr v8, v6

    invoke-virtual {v0, v8, v9}, Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;->setCount(J)V

    goto :goto_2e

    .line 420
    :cond_25
    new-instance v8, Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;

    invoke-direct {v8, v6, v7, v4, v5}, Lcom/coremedia/iso/boxes/TimeToSampleBox$Entry;-><init>(JJ)V

    move-object v0, v8

    .line 421
    invoke-interface {v1, v0}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 415
    .end local v4    # "delta":J
    :goto_2e
    add-int/lit8 v3, v3, 0x1

    goto :goto_b

    .line 424
    .end local v3    # "a":I
    :cond_31
    new-instance v3, Lcom/coremedia/iso/boxes/TimeToSampleBox;

    invoke-direct {v3}, Lcom/coremedia/iso/boxes/TimeToSampleBox;-><init>()V

    .line 425
    .local v3, "stts":Lcom/coremedia/iso/boxes/TimeToSampleBox;
    invoke-virtual {v3, v1}, Lcom/coremedia/iso/boxes/TimeToSampleBox;->setEntries(Ljava/util/List;)V

    .line 426
    invoke-virtual {p2, v3}, Lcom/coremedia/iso/boxes/SampleTableBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 427
    return-void
.end method

.method protected createTrackBox(Lim/tpelyyftgw/messenger/video/Track;Lim/tpelyyftgw/messenger/video/Mp4Movie;)Lcom/coremedia/iso/boxes/TrackBox;
    .registers 13
    .param p1, "track"    # Lim/tpelyyftgw/messenger/video/Track;
    .param p2, "movie"    # Lim/tpelyyftgw/messenger/video/Mp4Movie;

    .line 315
    new-instance v0, Lcom/coremedia/iso/boxes/TrackBox;

    invoke-direct {v0}, Lcom/coremedia/iso/boxes/TrackBox;-><init>()V

    .line 316
    .local v0, "trackBox":Lcom/coremedia/iso/boxes/TrackBox;
    new-instance v1, Lcom/coremedia/iso/boxes/TrackHeaderBox;

    invoke-direct {v1}, Lcom/coremedia/iso/boxes/TrackHeaderBox;-><init>()V

    .line 318
    .local v1, "tkhd":Lcom/coremedia/iso/boxes/TrackHeaderBox;
    const/4 v2, 0x1

    invoke-virtual {v1, v2}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setEnabled(Z)V

    .line 319
    invoke-virtual {v1, v2}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setInMovie(Z)V

    .line 320
    invoke-virtual {v1, v2}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setInPreview(Z)V

    .line 321
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->isAudio()Z

    move-result v3

    if-eqz v3, :cond_20

    .line 322
    sget-object v3, Lcom/googlecode/mp4parser/util/Matrix;->ROTATE_0:Lcom/googlecode/mp4parser/util/Matrix;

    invoke-virtual {v1, v3}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setMatrix(Lcom/googlecode/mp4parser/util/Matrix;)V

    goto :goto_27

    .line 324
    :cond_20
    invoke-virtual {p2}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getMatrix()Lcom/googlecode/mp4parser/util/Matrix;

    move-result-object v3

    invoke-virtual {v1, v3}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setMatrix(Lcom/googlecode/mp4parser/util/Matrix;)V

    .line 326
    :goto_27
    const/4 v3, 0x0

    invoke-virtual {v1, v3}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setAlternateGroup(I)V

    .line 327
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getCreationTime()Ljava/util/Date;

    move-result-object v4

    invoke-virtual {v1, v4}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setCreationTime(Ljava/util/Date;)V

    .line 328
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getDuration()J

    move-result-wide v4

    invoke-virtual {p0, p2}, Lim/tpelyyftgw/messenger/video/MP4Builder;->getTimescale(Lim/tpelyyftgw/messenger/video/Mp4Movie;)J

    move-result-wide v6

    mul-long v4, v4, v6

    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getTimeScale()I

    move-result v6

    int-to-long v6, v6

    div-long/2addr v4, v6

    invoke-virtual {v1, v4, v5}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setDuration(J)V

    .line 329
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getHeight()I

    move-result v4

    int-to-double v4, v4

    invoke-virtual {v1, v4, v5}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setHeight(D)V

    .line 330
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getWidth()I

    move-result v4

    int-to-double v4, v4

    invoke-virtual {v1, v4, v5}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setWidth(D)V

    .line 331
    invoke-virtual {v1, v3}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setLayer(I)V

    .line 332
    new-instance v3, Ljava/util/Date;

    invoke-direct {v3}, Ljava/util/Date;-><init>()V

    invoke-virtual {v1, v3}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setModificationTime(Ljava/util/Date;)V

    .line 333
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getTrackId()J

    move-result-wide v3

    const-wide/16 v5, 0x1

    add-long/2addr v3, v5

    invoke-virtual {v1, v3, v4}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setTrackId(J)V

    .line 334
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getVolume()F

    move-result v3

    invoke-virtual {v1, v3}, Lcom/coremedia/iso/boxes/TrackHeaderBox;->setVolume(F)V

    .line 336
    invoke-virtual {v0, v1}, Lcom/coremedia/iso/boxes/TrackBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 338
    new-instance v3, Lcom/coremedia/iso/boxes/MediaBox;

    invoke-direct {v3}, Lcom/coremedia/iso/boxes/MediaBox;-><init>()V

    .line 339
    .local v3, "mdia":Lcom/coremedia/iso/boxes/MediaBox;
    invoke-virtual {v0, v3}, Lcom/coremedia/iso/boxes/TrackBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 340
    new-instance v4, Lcom/coremedia/iso/boxes/MediaHeaderBox;

    invoke-direct {v4}, Lcom/coremedia/iso/boxes/MediaHeaderBox;-><init>()V

    .line 341
    .local v4, "mdhd":Lcom/coremedia/iso/boxes/MediaHeaderBox;
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getCreationTime()Ljava/util/Date;

    move-result-object v5

    invoke-virtual {v4, v5}, Lcom/coremedia/iso/boxes/MediaHeaderBox;->setCreationTime(Ljava/util/Date;)V

    .line 342
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getDuration()J

    move-result-wide v5

    invoke-virtual {v4, v5, v6}, Lcom/coremedia/iso/boxes/MediaHeaderBox;->setDuration(J)V

    .line 343
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getTimeScale()I

    move-result v5

    int-to-long v5, v5

    invoke-virtual {v4, v5, v6}, Lcom/coremedia/iso/boxes/MediaHeaderBox;->setTimescale(J)V

    .line 344
    const-string v5, "eng"

    invoke-virtual {v4, v5}, Lcom/coremedia/iso/boxes/MediaHeaderBox;->setLanguage(Ljava/lang/String;)V

    .line 345
    invoke-virtual {v3, v4}, Lcom/coremedia/iso/boxes/MediaBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 346
    new-instance v5, Lcom/coremedia/iso/boxes/HandlerBox;

    invoke-direct {v5}, Lcom/coremedia/iso/boxes/HandlerBox;-><init>()V

    .line 347
    .local v5, "hdlr":Lcom/coremedia/iso/boxes/HandlerBox;
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->isAudio()Z

    move-result v6

    if-eqz v6, :cond_ad

    const-string v6, "SoundHandle"

    goto :goto_af

    :cond_ad
    const-string v6, "VideoHandle"

    :goto_af
    invoke-virtual {v5, v6}, Lcom/coremedia/iso/boxes/HandlerBox;->setName(Ljava/lang/String;)V

    .line 348
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getHandler()Ljava/lang/String;

    move-result-object v6

    invoke-virtual {v5, v6}, Lcom/coremedia/iso/boxes/HandlerBox;->setHandlerType(Ljava/lang/String;)V

    .line 350
    invoke-virtual {v3, v5}, Lcom/coremedia/iso/boxes/MediaBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 352
    new-instance v6, Lcom/coremedia/iso/boxes/MediaInformationBox;

    invoke-direct {v6}, Lcom/coremedia/iso/boxes/MediaInformationBox;-><init>()V

    .line 353
    .local v6, "minf":Lcom/coremedia/iso/boxes/MediaInformationBox;
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Track;->getMediaHeaderBox()Lcom/coremedia/iso/boxes/AbstractMediaHeaderBox;

    move-result-object v7

    invoke-virtual {v6, v7}, Lcom/coremedia/iso/boxes/MediaInformationBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 355
    new-instance v7, Lcom/coremedia/iso/boxes/DataInformationBox;

    invoke-direct {v7}, Lcom/coremedia/iso/boxes/DataInformationBox;-><init>()V

    .line 356
    .local v7, "dinf":Lcom/coremedia/iso/boxes/DataInformationBox;
    new-instance v8, Lcom/coremedia/iso/boxes/DataReferenceBox;

    invoke-direct {v8}, Lcom/coremedia/iso/boxes/DataReferenceBox;-><init>()V

    .line 357
    .local v8, "dref":Lcom/coremedia/iso/boxes/DataReferenceBox;
    invoke-virtual {v7, v8}, Lcom/coremedia/iso/boxes/DataInformationBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 358
    new-instance v9, Lcom/coremedia/iso/boxes/DataEntryUrlBox;

    invoke-direct {v9}, Lcom/coremedia/iso/boxes/DataEntryUrlBox;-><init>()V

    .line 359
    .local v9, "url":Lcom/coremedia/iso/boxes/DataEntryUrlBox;
    invoke-virtual {v9, v2}, Lcom/coremedia/iso/boxes/DataEntryUrlBox;->setFlags(I)V

    .line 360
    invoke-virtual {v8, v9}, Lcom/coremedia/iso/boxes/DataReferenceBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 361
    invoke-virtual {v6, v7}, Lcom/coremedia/iso/boxes/MediaInformationBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 363
    invoke-virtual {p0, p1}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createStbl(Lim/tpelyyftgw/messenger/video/Track;)Lcom/coremedia/iso/boxes/Box;

    move-result-object v2

    .line 364
    .local v2, "stbl":Lcom/coremedia/iso/boxes/Box;
    invoke-virtual {v6, v2}, Lcom/coremedia/iso/boxes/MediaInformationBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 365
    invoke-virtual {v3, v6}, Lcom/coremedia/iso/boxes/MediaBox;->addBox(Lcom/coremedia/iso/boxes/Box;)V

    .line 367
    return-object v0
.end method

.method public finishMovie()V
    .registers 8
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/lang/Exception;
        }
    .end annotation

    .line 171
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->getContentSize()J

    move-result-wide v0

    const-wide/16 v2, 0x0

    cmp-long v4, v0, v2

    if-eqz v4, :cond_f

    .line 172
    invoke-direct {p0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->flushCurrentMdat()V

    .line 175
    :cond_f
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v0

    invoke-virtual {v0}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object v0

    :goto_19
    invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z

    move-result v1

    if-eqz v1, :cond_48

    invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lim/tpelyyftgw/messenger/video/Track;

    .line 176
    .local v1, "track":Lim/tpelyyftgw/messenger/video/Track;
    invoke-virtual {v1}, Lim/tpelyyftgw/messenger/video/Track;->getSamples()Ljava/util/ArrayList;

    move-result-object v2

    .line 177
    .local v2, "samples":Ljava/util/List;, "Ljava/util/List<Lim/tpelyyftgw/messenger/video/Sample;>;"
    invoke-interface {v2}, Ljava/util/List;->size()I

    move-result v3

    new-array v3, v3, [J

    .line 178
    .local v3, "sizes":[J
    const/4 v4, 0x0

    .local v4, "i":I
    :goto_30
    array-length v5, v3

    if-ge v4, v5, :cond_42

    .line 179
    invoke-interface {v2, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;

    move-result-object v5

    check-cast v5, Lim/tpelyyftgw/messenger/video/Sample;

    invoke-virtual {v5}, Lim/tpelyyftgw/messenger/video/Sample;->getSize()J

    move-result-wide v5

    aput-wide v5, v3, v4

    .line 178
    add-int/lit8 v4, v4, 0x1

    goto :goto_30

    .line 181
    .end local v4    # "i":I
    :cond_42
    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->track2SampleSizes:Ljava/util/HashMap;

    invoke-virtual {v4, v1, v3}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 182
    .end local v1    # "track":Lim/tpelyyftgw/messenger/video/Track;
    .end local v2    # "samples":Ljava/util/List;, "Ljava/util/List<Lim/tpelyyftgw/messenger/video/Sample;>;"
    .end local v3    # "sizes":[J
    goto :goto_19

    .line 184
    :cond_48
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

    invoke-virtual {p0, v0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->createMovieBox(Lim/tpelyyftgw/messenger/video/Mp4Movie;)Lcom/coremedia/iso/boxes/MovieBox;

    move-result-object v0

    .line 185
    .local v0, "moov":Lcom/coremedia/iso/boxes/Box;
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-interface {v0, v1}, Lcom/coremedia/iso/boxes/Box;->getBox(Ljava/nio/channels/WritableByteChannel;)V

    .line 186
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v1}, Ljava/io/FileOutputStream;->flush()V

    .line 187
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v1}, Ljava/io/FileOutputStream;->getFD()Ljava/io/FileDescriptor;

    move-result-object v1

    invoke-virtual {v1}, Ljava/io/FileDescriptor;->sync()V

    .line 189
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v1}, Ljava/nio/channels/FileChannel;->close()V

    .line 190
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v1}, Ljava/io/FileOutputStream;->close()V

    .line 191
    return-void
.end method

.method public getTimescale(Lim/tpelyyftgw/messenger/video/Mp4Movie;)J
    .registers 8
    .param p1, "mp4Movie"    # Lim/tpelyyftgw/messenger/video/Mp4Movie;

    .line 275
    const-wide/16 v0, 0x0

    .line 276
    .local v0, "timescale":J
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v2

    invoke-virtual {v2}, Ljava/util/ArrayList;->isEmpty()Z

    move-result v2

    if-nez v2, :cond_1f

    .line 277
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v2

    invoke-virtual {v2}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object v2

    invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lim/tpelyyftgw/messenger/video/Track;

    invoke-virtual {v2}, Lim/tpelyyftgw/messenger/video/Track;->getTimeScale()I

    move-result v2

    int-to-long v0, v2

    .line 279
    :cond_1f
    invoke-virtual {p1}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->getTracks()Ljava/util/ArrayList;

    move-result-object v2

    invoke-virtual {v2}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;

    move-result-object v2

    :goto_27
    invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z

    move-result v3

    if-eqz v3, :cond_3d

    invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v3

    check-cast v3, Lim/tpelyyftgw/messenger/video/Track;

    .line 280
    .local v3, "track":Lim/tpelyyftgw/messenger/video/Track;
    invoke-virtual {v3}, Lim/tpelyyftgw/messenger/video/Track;->getTimeScale()I

    move-result v4

    int-to-long v4, v4

    invoke-static {v4, v5, v0, v1}, Lim/tpelyyftgw/messenger/video/MP4Builder;->gcd(JJ)J

    move-result-wide v0

    .line 281
    .end local v3    # "track":Lim/tpelyyftgw/messenger/video/Track;
    goto :goto_27

    .line 282
    :cond_3d
    return-wide v0
.end method

.method public writeSampleData(ILjava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;Z)J
    .registers 14
    .param p1, "trackIndex"    # I
    .param p2, "byteBuf"    # Ljava/nio/ByteBuffer;
    .param p3, "bufferInfo"    # Landroid/media/MediaCodec$BufferInfo;
    .param p4, "writeLength"    # Z
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/lang/Exception;
        }
    .end annotation

    .line 91
    iget-boolean v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->writeNewMdat:Z

    const/4 v1, 0x0

    const-wide/16 v2, 0x0

    if-eqz v0, :cond_28

    .line 92
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    invoke-virtual {v0, v2, v3}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->setContentSize(J)V

    .line 93
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v0, v4}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->getBox(Ljava/nio/channels/WritableByteChannel;)V

    .line 94
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    iget-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    invoke-virtual {v0, v4, v5}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->setDataOffset(J)V

    .line 95
    iget-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    const-wide/16 v6, 0x10

    add-long/2addr v4, v6

    iput-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    .line 96
    iget-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    add-long/2addr v4, v6

    iput-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    .line 97
    iput-boolean v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->writeNewMdat:Z

    .line 128
    :cond_28
    iget-object v0, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->mdat:Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;

    invoke-virtual {v0}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->getContentSize()J

    move-result-wide v4

    iget v6, p3, Landroid/media/MediaCodec$BufferInfo;->size:I

    int-to-long v6, v6

    add-long/2addr v4, v6

    invoke-virtual {v0, v4, v5}, Lim/tpelyyftgw/messenger/video/MP4Builder$InterleaveChunkMdat;->setContentSize(J)V

    .line 129
    iget-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    iget v0, p3, Landroid/media/MediaCodec$BufferInfo;->size:I

    int-to-long v6, v0

    add-long/2addr v4, v6

    iput-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    .line 131
    const/4 v0, 0x0

    .line 132
    .local v0, "flush":Z
    const-wide/32 v6, 0x8000

    cmp-long v8, v4, v6

    if-ltz v8, :cond_52

    .line 133
    iget-boolean v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->splitMdat:Z

    if-eqz v4, :cond_4f

    .line 134
    invoke-direct {p0}, Lim/tpelyyftgw/messenger/video/MP4Builder;->flushCurrentMdat()V

    .line 135
    const/4 v4, 0x1

    iput-boolean v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->writeNewMdat:Z

    .line 137
    :cond_4f
    const/4 v0, 0x1

    .line 138
    iput-wide v2, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->wroteSinceLastMdat:J

    .line 141
    :cond_52
    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->currentMp4Movie:Lim/tpelyyftgw/messenger/video/Mp4Movie;

    iget-wide v5, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    invoke-virtual {v4, p1, v5, v6, p3}, Lim/tpelyyftgw/messenger/video/Mp4Movie;->addSample(IJLandroid/media/MediaCodec$BufferInfo;)V

    .line 143
    if-eqz p4, :cond_7d

    .line 144
    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->sizeBuffer:Ljava/nio/ByteBuffer;

    invoke-virtual {v4, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    .line 145
    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->sizeBuffer:Ljava/nio/ByteBuffer;

    iget v5, p3, Landroid/media/MediaCodec$BufferInfo;->size:I

    add-int/lit8 v5, v5, -0x4

    invoke-virtual {v4, v5}, Ljava/nio/ByteBuffer;->putInt(I)Ljava/nio/ByteBuffer;

    .line 146
    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->sizeBuffer:Ljava/nio/ByteBuffer;

    invoke-virtual {v4, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    .line 147
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    iget-object v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->sizeBuffer:Ljava/nio/ByteBuffer;

    invoke-virtual {v1, v4}, Ljava/nio/channels/FileChannel;->write(Ljava/nio/ByteBuffer;)I

    .line 149
    iget v1, p3, Landroid/media/MediaCodec$BufferInfo;->offset:I

    add-int/lit8 v1, v1, 0x4

    invoke-virtual {p2, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    goto :goto_82

    .line 151
    :cond_7d
    iget v1, p3, Landroid/media/MediaCodec$BufferInfo;->offset:I

    invoke-virtual {p2, v1}, Ljava/nio/ByteBuffer;->position(I)Ljava/nio/Buffer;

    .line 153
    :goto_82
    iget v1, p3, Landroid/media/MediaCodec$BufferInfo;->offset:I

    iget v4, p3, Landroid/media/MediaCodec$BufferInfo;->size:I

    add-int/2addr v1, v4

    invoke-virtual {p2, v1}, Ljava/nio/ByteBuffer;->limit(I)Ljava/nio/Buffer;

    .line 154
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v1, p2}, Ljava/nio/channels/FileChannel;->write(Ljava/nio/ByteBuffer;)I

    .line 156
    iget-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    iget v1, p3, Landroid/media/MediaCodec$BufferInfo;->size:I

    int-to-long v6, v1

    add-long/2addr v4, v6

    iput-wide v4, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->dataOffset:J

    .line 158
    if-eqz v0, :cond_ae

    .line 159
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v1}, Ljava/io/FileOutputStream;->flush()V

    .line 160
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fos:Ljava/io/FileOutputStream;

    invoke-virtual {v1}, Ljava/io/FileOutputStream;->getFD()Ljava/io/FileDescriptor;

    move-result-object v1

    invoke-virtual {v1}, Ljava/io/FileDescriptor;->sync()V

    .line 161
    iget-object v1, p0, Lim/tpelyyftgw/messenger/video/MP4Builder;->fc:Ljava/nio/channels/FileChannel;

    invoke-virtual {v1}, Ljava/nio/channels/FileChannel;->position()J

    move-result-wide v1

    return-wide v1

    .line 163
    :cond_ae
    return-wide v2
.end method