Lines Matching defs:mMp4FileDataPtr

538     M4MP4W_Mp4FileData *mMp4FileDataPtr = M4OSA_NULL;
561 mMp4FileDataPtr =
564 ERR_CHECK(mMp4FileDataPtr != M4OSA_NULL, M4ERR_ALLOC);
565 mMp4FileDataPtr->url = outputFileDescriptor;
566 mMp4FileDataPtr->audioTrackPtr = M4OSA_NULL;
567 mMp4FileDataPtr->videoTrackPtr = M4OSA_NULL;
568 mMp4FileDataPtr->MaxChunkSize = M4MP4W_DefaultMaxChunkSize; /*default */
569 mMp4FileDataPtr->MaxAUSize = M4MP4W_DefaultMaxAuSize; /*default */
570 mMp4FileDataPtr->InterleaveDur =
572 mMp4FileDataPtr->MaxFileSize = 0; /*default = 0, i.e. not used*/
573 mMp4FileDataPtr->camcoderVersion = 0; /*default is " 0.0.0"*/
574 mMp4FileDataPtr->embeddedString =
576 mMp4FileDataPtr->integrationTag = M4OSA_NULL; /*default is 0 */
577 mMp4FileDataPtr->MaxFileDuration = 0; /*default = 0, i.e. not used*/
579 mMp4FileDataPtr->fileWriterFunctions = fileWriterFunction;
580 mMp4FileDataPtr->hasAudio = M4OSA_FALSE;
581 mMp4FileDataPtr->hasVideo = M4OSA_FALSE;
582 mMp4FileDataPtr->state = M4MP4W_opened;
583 mMp4FileDataPtr->duration = 0; /*i*/
585 mMp4FileDataPtr->filesize =
588 mMp4FileDataPtr->estimateAudioSize = M4OSA_FALSE;
589 mMp4FileDataPtr->audioMsChunkDur =
591 mMp4FileDataPtr->audioMsStopTime =
594 mMp4FileDataPtr->fileWriterContext = M4OSA_NULL;
596 mMp4FileDataPtr->bMULPPSSPS = M4OSA_FALSE;
601 mMp4FileDataPtr->absoluteCurrentPos =
608 mMp4FileDataPtr->safetyFileUrl = tempFileDescriptor;
609 mMp4FileDataPtr->cleanSafetyFile =
616 memset((void *) &mMp4FileDataPtr->ftyp,0,
617 sizeof(mMp4FileDataPtr->ftyp));
619 *contextPtr = mMp4FileDataPtr;
621 M4MP4W_initializeAllocationParameters(mMp4FileDataPtr);
633 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
637 ERR_CHECK(( mMp4FileDataPtr->state == M4MP4W_opened)
638 || (mMp4FileDataPtr->state == M4MP4W_ready), M4ERR_STATE);
639 mMp4FileDataPtr->state = M4MP4W_ready;
651 ERR_CHECK(mMp4FileDataPtr->hasAudio == M4OSA_FALSE,
655 if (mMp4FileDataPtr->audioTrackPtr == M4OSA_NULL)
657 mMp4FileDataPtr->audioTrackPtr = (M4MP4W_AudioTrackData
660 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr != M4OSA_NULL,
665 mMp4FileDataPtr->audioTrackPtr->Chunk = M4OSA_NULL;
666 mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable = M4OSA_NULL;
667 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable = M4OSA_NULL;
668 mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable = M4OSA_NULL;
669 mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable = M4OSA_NULL;
670 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS = M4OSA_NULL;
671 mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ = M4OSA_NULL;
672 mMp4FileDataPtr->audioTrackPtr->DSI = M4OSA_NULL;
678 mMp4FileDataPtr->audioTrackPtr->Chunk =
682 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->Chunk != M4OSA_NULL,
687 mMp4FileDataPtr->audioTrackPtr->Chunk =
690 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->Chunk != M4OSA_NULL,
692 mMp4FileDataPtr->audioTrackPtr->Chunk[0] = M4OSA_NULL;
694 mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable =
698 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable
703 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS =
706 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->TABLE_STTS
708 mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedSttsBlocks = 1;
710 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable =
714 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkSizeTable
716 mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable =
720 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable
722 mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable =
726 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable
729 mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk = 0;
731 mMp4FileDataPtr->hasAudio = M4OSA_TRUE;
732 mMp4FileDataPtr->filesize += 402;
733 mMp4FileDataPtr->audioTrackPtr->MaxChunkSize =
734 mMp4FileDataPtr->MaxChunkSize; /* init value */
735 mMp4FileDataPtr->audioTrackPtr->MaxAUSize =
736 mMp4FileDataPtr->MaxAUSize;
737 mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS = 0;
738 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb = 0;
739 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize = 0;
740 mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb = 1;
741 mMp4FileDataPtr->audioTrackPtr->CommonData.timescale =
743 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable[0] = 0; /*init*/
744 mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable[0] = 0; /*init*/
745 mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable[0] = 0; /*init*/
746 mMp4FileDataPtr->audioTrackPtr->currentChunk =
748 mMp4FileDataPtr->audioTrackPtr->currentPos = 0;
751 mMp4FileDataPtr->audioTrackPtr->currentStsc = 0;
755 mMp4FileDataPtr->audioTrackPtr->microState = M4MP4W_ready;
756 mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedStszBlocks = 0;
757 mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ = M4OSA_NULL;
759 mMp4FileDataPtr->audioTrackPtr->avgBitrate =
761 mMp4FileDataPtr->audioTrackPtr->maxBitrate =
767 mMp4FileDataPtr->audioTrackPtr->CommonData.trackType =
770 mMp4FileDataPtr->audioTrackPtr->sampleDuration =
777 mMp4FileDataPtr->audioTrackPtr->dsiSize =
781 mMp4FileDataPtr->audioTrackPtr->DSI =
784 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->DSI != M4OSA_NULL,
787 (void *)mMp4FileDataPtr->audioTrackPtr->DSI,
793 mMp4FileDataPtr->audioTrackPtr->DSI =
795 mMp4FileDataPtr->audioTrackPtr->dsiSize =
802 mMp4FileDataPtr->audioTrackPtr->CommonData.trackType =
805 mMp4FileDataPtr->audioTrackPtr->sampleDuration =
812 mMp4FileDataPtr->audioTrackPtr->dsiSize =
816 mMp4FileDataPtr->audioTrackPtr->DSI =
819 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->DSI != M4OSA_NULL,
822 (void *)mMp4FileDataPtr->audioTrackPtr->DSI,
828 mMp4FileDataPtr->audioTrackPtr->DSI =
830 mMp4FileDataPtr->audioTrackPtr->dsiSize =
840 mMp4FileDataPtr->audioTrackPtr->CommonData.trackType =
842 mMp4FileDataPtr->audioTrackPtr->sampleDuration =
845 mMp4FileDataPtr->audioTrackPtr->dsiSize =
848 if (mMp4FileDataPtr->audioTrackPtr->dsiSize != 0)
850 mMp4FileDataPtr->audioTrackPtr->DSI =
854 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->DSI != M4OSA_NULL,
857 (void *)mMp4FileDataPtr->audioTrackPtr->DSI,
878 ERR_CHECK(mMp4FileDataPtr->hasVideo == M4OSA_FALSE,
882 if (mMp4FileDataPtr->videoTrackPtr == M4OSA_NULL)
884 mMp4FileDataPtr->videoTrackPtr = (M4MP4W_VideoTrackData
887 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr != M4OSA_NULL,
892 mMp4FileDataPtr->videoTrackPtr->Chunk = M4OSA_NULL;
893 mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable = M4OSA_NULL;
894 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable = M4OSA_NULL;
895 mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable = M4OSA_NULL;
896 mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable = M4OSA_NULL;
897 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS = M4OSA_NULL;
898 mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ = M4OSA_NULL;
899 mMp4FileDataPtr->videoTrackPtr->TABLE_STSS = M4OSA_NULL;
900 mMp4FileDataPtr->videoTrackPtr->DSI = M4OSA_NULL;
906 mMp4FileDataPtr->videoTrackPtr->Chunk =
910 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->Chunk != M4OSA_NULL,
916 mMp4FileDataPtr->videoTrackPtr->Chunk =
919 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->Chunk != M4OSA_NULL,
921 mMp4FileDataPtr->videoTrackPtr->Chunk[0] = M4OSA_NULL;
923 mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable =
927 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable
932 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->Chunk != M4OSA_NULL,
934 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable =
938 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkSizeTable
940 mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable =
944 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable
946 mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable =
950 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable
953 mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk = 0;
955 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS =
958 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->TABLE_STTS
960 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedSttsBlocks = 1;
963 mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ =
969 mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ =
975 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ
977 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStszBlocks = 1;
978 mMp4FileDataPtr->videoTrackPtr->TABLE_STSS =
981 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->TABLE_STSS
983 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStssBlocks = 1;
985 mMp4FileDataPtr->hasVideo = M4OSA_TRUE;
986 mMp4FileDataPtr->filesize += 462;
987 mMp4FileDataPtr->videoTrackPtr->width = M4MP4W_DefaultWidth;
988 mMp4FileDataPtr->videoTrackPtr->height = M4MP4W_DefaultHeight;
989 mMp4FileDataPtr->videoTrackPtr->MaxAUSize =
990 mMp4FileDataPtr->MaxAUSize;
991 mMp4FileDataPtr->videoTrackPtr->CommonData.trackType =
993 mMp4FileDataPtr->videoTrackPtr->MaxChunkSize =
994 mMp4FileDataPtr->MaxChunkSize; /* init value */
997 mMp4FileDataPtr->videoTrackPtr->MaxAUperChunk =
1003 mMp4FileDataPtr->videoTrackPtr->CommonData.timescale = 1000;
1004 mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS = 0;
1005 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb = 0;
1006 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleSize = 0;
1007 mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb = 1;
1008 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable[0] = 0; /*init*/
1009 mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable[0] = 0; /*init*/
1010 mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable[0] = 0; /*init*/
1011 mMp4FileDataPtr->videoTrackPtr->currentChunk =
1013 mMp4FileDataPtr->videoTrackPtr->currentPos = 0;
1016 mMp4FileDataPtr->videoTrackPtr->currentStsc = 0;
1020 mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb = 0;
1021 mMp4FileDataPtr->videoTrackPtr->microState = M4MP4W_ready;
1030 mMp4FileDataPtr->videoTrackPtr->avgBitrate = -1;
1031 mMp4FileDataPtr->videoTrackPtr->maxBitrate = -1;
1037 mMp4FileDataPtr->videoTrackPtr->avgBitrate =
1039 mMp4FileDataPtr->videoTrackPtr->maxBitrate =
1049 mMp4FileDataPtr->videoTrackPtr->dsiSize =
1051 mMp4FileDataPtr->videoTrackPtr->DSI =
1055 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI != M4OSA_NULL,
1058 (void *)mMp4FileDataPtr->videoTrackPtr->DSI,
1065 mMp4FileDataPtr->videoTrackPtr->DSI = M4OSA_NULL;
1066 mMp4FileDataPtr->videoTrackPtr->dsiSize = 0;
1072 mMp4FileDataPtr->filesize += 22; /*extra bytes (from h263)*/
1078 mMp4FileDataPtr->videoTrackPtr->DSI = M4OSA_NULL;
1079 mMp4FileDataPtr->videoTrackPtr->dsiSize = 0;
1089 mMp4FileDataPtr->videoTrackPtr->dsiSize =
1091 mMp4FileDataPtr->videoTrackPtr->DSI =
1095 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI != M4OSA_NULL,
1098 (void *)mMp4FileDataPtr->videoTrackPtr->DSI,
1101 mMp4FileDataPtr->filesize +=
1106 mMp4FileDataPtr->videoTrackPtr->avgBitrate =
1108 mMp4FileDataPtr->videoTrackPtr->maxBitrate =
1115 mMp4FileDataPtr->videoTrackPtr->avgBitrate =
1117 mMp4FileDataPtr->videoTrackPtr->maxBitrate =
1124 if (M4OSA_TRUE == mMp4FileDataPtr->bMULPPSSPS)
1129 mMp4FileDataPtr->videoTrackPtr->dsiSize =
1134 mMp4FileDataPtr->videoTrackPtr->DSI =
1138 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI
1146 (void *)mMp4FileDataPtr->videoTrackPtr->DSI,
1150 (void *)((mMp4FileDataPtr->videoTrackPtr->
1155 (void *)((mMp4FileDataPtr->videoTrackPtr->
1160 (void *)((mMp4FileDataPtr->videoTrackPtr->
1170 mMp4FileDataPtr->videoTrackPtr->dsiSize =
1174 mMp4FileDataPtr->videoTrackPtr->DSI =
1178 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI
1181 (void *)mMp4FileDataPtr->videoTrackPtr->DSI,
1190 mMp4FileDataPtr->videoTrackPtr->DSI = M4OSA_NULL;
1191 mMp4FileDataPtr->videoTrackPtr->dsiSize = 0;
1210 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
1213 ERR_CHECK((mMp4FileDataPtr->state == M4MP4W_ready), M4ERR_STATE);
1214 mMp4FileDataPtr->state = M4MP4W_writing;
1217 /* if (mMp4FileDataPtr->audioTrackPtr != M4OSA_NULL)*/
1218 if (mMp4FileDataPtr->hasAudio)
1220 ERR_CHECK((mMp4FileDataPtr->audioTrackPtr->microState == M4MP4W_ready),
1222 mMp4FileDataPtr->audioTrackPtr->microState = M4MP4W_writing;
1225 mMp4FileDataPtr->audioTrackPtr->Chunk[0] = (M4OSA_UChar
1226 *)M4OSA_32bitAlignedMalloc(mMp4FileDataPtr->audioTrackPtr->MaxChunkSize,
1228 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->Chunk[0] != M4OSA_NULL,
1233 /* if (mMp4FileDataPtr->videoTrackPtr != M4OSA_NULL)*/
1234 if (mMp4FileDataPtr->hasVideo)
1236 ERR_CHECK((mMp4FileDataPtr->videoTrackPtr->microState == M4MP4W_ready),
1238 mMp4FileDataPtr->videoTrackPtr->microState = M4MP4W_writing;
1241 mMp4FileDataPtr->videoTrackPtr->Chunk[0] = (M4OSA_UChar
1242 *)M4OSA_32bitAlignedMalloc(mMp4FileDataPtr->videoTrackPtr->MaxChunkSize,
1244 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->Chunk[0] != M4OSA_NULL,
1248 if (mMp4FileDataPtr->estimateAudioSize == M4OSA_TRUE)
1252 ERR_CHECK(mMp4FileDataPtr->hasVideo, M4ERR_BAD_CONTEXT);
1253 ERR_CHECK(mMp4FileDataPtr->hasAudio, M4ERR_BAD_CONTEXT);
1255 mMp4FileDataPtr->audioMsChunkDur =
1256 20 * mMp4FileDataPtr->audioTrackPtr->MaxChunkSize
1257 / mMp4FileDataPtr->audioTrackPtr->MaxAUSize;
1259 if (( mMp4FileDataPtr->InterleaveDur != 0)
1260 && (mMp4FileDataPtr->InterleaveDur
1261 < 20 *mMp4FileDataPtr->audioTrackPtr->MaxChunkSize
1262 / mMp4FileDataPtr->audioTrackPtr->MaxAUSize))
1264 mMp4FileDataPtr->audioMsChunkDur = mMp4FileDataPtr->InterleaveDur;
1272 err = mMp4FileDataPtr->fileWriterFunctions->openWrite(
1273 &mMp4FileDataPtr->fileWriterContext,
1274 mMp4FileDataPtr->url, fileModeAccess);
1278 if (mMp4FileDataPtr->ftyp.major_brand != 0)
1282 M4MP4W_putBE32(16 + (mMp4FileDataPtr->ftyp.nbCompatibleBrands * 4),
1283 mMp4FileDataPtr->fileWriterFunctions,
1284 mMp4FileDataPtr->fileWriterContext);
1287 mMp4FileDataPtr->fileWriterFunctions,
1288 mMp4FileDataPtr->fileWriterContext);
1290 err = M4MP4W_putBE32(mMp4FileDataPtr->ftyp.major_brand,
1291 mMp4FileDataPtr->fileWriterFunctions,
1292 mMp4FileDataPtr->fileWriterContext);
1294 err = M4MP4W_putBE32(mMp4FileDataPtr->ftyp.minor_version,
1295 mMp4FileDataPtr->fileWriterFunctions,
1296 mMp4FileDataPtr->fileWriterContext);
1299 for ( i = 0; i < mMp4FileDataPtr->ftyp.nbCompatibleBrands; i++ )
1301 err = M4MP4W_putBE32(mMp4FileDataPtr->ftyp.compatible_brands[i],
1302 mMp4FileDataPtr->fileWriterFunctions,
1303 mMp4FileDataPtr->fileWriterContext);
1311 mMp4FileDataPtr->fileWriterFunctions,
1312 mMp4FileDataPtr->fileWriterContext);
1317 err = M4MP4W_putBE32(0, mMp4FileDataPtr->fileWriterFunctions,
1318 mMp4FileDataPtr->fileWriterContext);
1321 mMp4FileDataPtr->fileWriterFunctions,
1322 mMp4FileDataPtr->fileWriterContext);
1329 if (0 != mMp4FileDataPtr->MaxFileSize
1330 && M4OSA_NULL != mMp4FileDataPtr->safetyFileUrl)
1338 mMp4FileDataPtr->fileWriterFunctions->openWrite(&safetyFileContext,
1339 mMp4FileDataPtr->safetyFileUrl, fileModeAccess);
1342 mMp4FileDataPtr->cleanSafetyFile = M4OSA_TRUE;
1345 safetyFileSize = 1000 + (mMp4FileDataPtr->MaxFileSize * 10 + 99) / 100;
1353 if (mMp4FileDataPtr->hasVideo)
1355 safetyFileSize += mMp4FileDataPtr->videoTrackPtr->MaxChunkSize;
1360 if (mMp4FileDataPtr->hasAudio)
1362 safetyFileSize += mMp4FileDataPtr->audioTrackPtr->MaxChunkSize;
1371 err = mMp4FileDataPtr->fileWriterFunctions->writeData(
1381 mMp4FileDataPtr->fileWriterFunctions->closeWrite(safetyFileContext);
1404 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
1415 if (mMp4FileDataPtr->audioTrackPtr == M4OSA_NULL)
1420 mMp4FileDataPtr->audioTrackPtr->currentChunk,
1421 mMp4FileDataPtr->absoluteCurrentPos);
1423 scale_audio = 1000.0 / mMp4FileDataPtr->audioTrackPtr->CommonData.timescale;
1428 err = M4MP4W_putBlock(mMp4FileDataPtr->audioTrackPtr->Chunk[0],
1429 mMp4FileDataPtr->audioTrackPtr->currentPos,
1430 mMp4FileDataPtr->fileWriterFunctions,
1431 mMp4FileDataPtr->fileWriterContext);
1435 M4OSA_FilePosition temp = mMp4FileDataPtr->absoluteCurrentPos;
1445 err = mMp4FileDataPtr->fileWriterFunctions->seek(
1446 mMp4FileDataPtr->fileWriterContext,
1451 mMp4FileDataPtr->absoluteCurrentPos, err, temp);
1464 mMp4FileDataPtr->audioTrackPtr->
1465 chunkOffsetTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
1466 mMp4FileDataPtr->absoluteCurrentPos;
1469 mMp4FileDataPtr->absoluteCurrentPos +=
1470 mMp4FileDataPtr->audioTrackPtr->currentPos;
1476 mMp4FileDataPtr->audioTrackPtr->
1477 chunkSizeTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
1478 mMp4FileDataPtr->audioTrackPtr->currentPos;
1479 mMp4FileDataPtr->audioTrackPtr->
1480 chunkTimeMsTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
1481 mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS;
1483 mMp4FileDataPtr->audioTrackPtr->currentChunk += 1;
1485 if (mMp4FileDataPtr->estimateAudioSize == M4OSA_FALSE)
1486 mMp4FileDataPtr->filesize += 16;
1490 if (mMp4FileDataPtr->audioTrackPtr->currentChunk
1491 > mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk)
1494 mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk += 1;
1499 if (mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk
1508 if (((mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk)
1511 reallocNb = mMp4FileDataPtr->audioTrackPtr->LastAllocatedChunk
1516 mMp4FileDataPtr->audioTrackPtr->Chunk =
1518 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->Chunk,
1522 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->Chunk != M4OSA_NULL,
1527 mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable =
1529 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->
1534 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable
1539 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable =
1541 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->
1546 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkSizeTable
1549 mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable =
1551 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->
1556 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable
1559 mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable =
1561 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->
1566 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable
1573 mMp4FileDataPtr->audioTrackPtr->
1574 Chunk[mMp4FileDataPtr->audioTrackPtr->currentChunk] = (M4OSA_UChar
1575 *)M4OSA_32bitAlignedMalloc(mMp4FileDataPtr->audioTrackPtr->MaxChunkSize,
1577 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->
1578 Chunk[mMp4FileDataPtr->audioTrackPtr->currentChunk]
1586 *leftSpaceInChunk = mMp4FileDataPtr->audioTrackPtr->MaxChunkSize;
1587 mMp4FileDataPtr->audioTrackPtr->currentPos = 0;
1592 if (mMp4FileDataPtr->audioTrackPtr->currentStsc > 0)
1594 if (( mMp4FileDataPtr->audioTrackPtr->
1595 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->
1596 currentStsc] & 0xFFF) != (mMp4FileDataPtr->audioTrackPtr->
1597 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->currentStsc
1599 mMp4FileDataPtr->audioTrackPtr->currentStsc += 1;
1602 mMp4FileDataPtr->audioTrackPtr->currentStsc += 1;
1605 if (mMp4FileDataPtr->audioTrackPtr->currentStsc
1613 mMp4FileDataPtr->audioTrackPtr->
1614 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->currentStsc] =
1615 0 + (mMp4FileDataPtr->audioTrackPtr->currentChunk << 12);
1620 mMp4FileDataPtr->audioTrackPtr->
1621 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] = 0;
1628 mMp4FileDataPtr->audioTrackPtr->
1629 chunkTimeMsTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
1630 (M4OSA_UInt32)(mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS
1643 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
1654 if (mMp4FileDataPtr->videoTrackPtr == M4OSA_NULL)
1659 mMp4FileDataPtr->videoTrackPtr->currentChunk,
1660 mMp4FileDataPtr->absoluteCurrentPos);
1662 scale_video = 1000.0 / mMp4FileDataPtr->videoTrackPtr->CommonData.timescale;
1671 err = M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->Chunk[0],
1672 mMp4FileDataPtr->videoTrackPtr->currentPos,
1673 mMp4FileDataPtr->fileWriterFunctions,
1674 mMp4FileDataPtr->fileWriterContext);
1678 M4OSA_FilePosition temp = mMp4FileDataPtr->absoluteCurrentPos;
1688 err = mMp4FileDataPtr->fileWriterFunctions->seek(
1689 mMp4FileDataPtr->fileWriterContext,
1694 mMp4FileDataPtr->absoluteCurrentPos, err, temp);
1710 mMp4FileDataPtr->videoTrackPtr->
1711 chunkOffsetTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
1712 mMp4FileDataPtr->absoluteCurrentPos;
1715 mMp4FileDataPtr->absoluteCurrentPos +=
1716 mMp4FileDataPtr->videoTrackPtr->currentPos;
1722 mMp4FileDataPtr->videoTrackPtr->
1723 chunkSizeTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
1724 mMp4FileDataPtr->videoTrackPtr->currentPos;
1725 mMp4FileDataPtr->videoTrackPtr->
1726 chunkTimeMsTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
1727 (M4OSA_UInt32)(mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS
1730 mMp4FileDataPtr->videoTrackPtr->currentChunk += 1;
1731 mMp4FileDataPtr->filesize += 16;
1735 if (mMp4FileDataPtr->videoTrackPtr->currentChunk
1736 > mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk)
1739 mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk += 1;
1744 if ( mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk
1753 if (((mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk)
1756 reallocNb = mMp4FileDataPtr->videoTrackPtr->LastAllocatedChunk
1761 mMp4FileDataPtr->videoTrackPtr->Chunk =
1763 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->Chunk,
1767 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->Chunk != M4OSA_NULL,
1772 mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable =
1774 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->
1778 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable
1783 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable =
1785 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->
1789 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkSizeTable
1792 mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable =
1794 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->
1798 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable
1801 mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable =
1803 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->
1807 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable
1814 mMp4FileDataPtr->videoTrackPtr->
1815 Chunk[mMp4FileDataPtr->videoTrackPtr->currentChunk] = (M4OSA_UChar
1816 *)M4OSA_32bitAlignedMalloc(mMp4FileDataPtr->videoTrackPtr->MaxChunkSize,
1818 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->
1819 Chunk[mMp4FileDataPtr->videoTrackPtr->currentChunk]
1827 *leftSpaceInChunk = mMp4FileDataPtr->videoTrackPtr->MaxChunkSize;
1828 mMp4FileDataPtr->videoTrackPtr->currentPos = 0;
1833 if (mMp4FileDataPtr->videoTrackPtr->currentStsc > 0)
1835 if ((mMp4FileDataPtr->videoTrackPtr->
1836 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->
1837 currentStsc] & 0xFFF) != (mMp4FileDataPtr->videoTrackPtr->
1838 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->currentStsc
1840 mMp4FileDataPtr->videoTrackPtr->currentStsc += 1;
1843 mMp4FileDataPtr->videoTrackPtr->currentStsc += 1;
1846 if (mMp4FileDataPtr->videoTrackPtr->currentStsc
1854 mMp4FileDataPtr->videoTrackPtr->
1855 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->currentStsc] =
1856 0 + (mMp4FileDataPtr->videoTrackPtr->currentChunk << 12);
1861 mMp4FileDataPtr->videoTrackPtr->
1862 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] = 0;
1869 mMp4FileDataPtr->videoTrackPtr->
1870 chunkTimeMsTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
1871 (M4OSA_UInt32)(mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS
1884 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
1898 ERR_CHECK((mMp4FileDataPtr->state == M4MP4W_writing), M4ERR_STATE);
1905 1000.0 / mMp4FileDataPtr->audioTrackPtr->CommonData.timescale;
1908 ERR_CHECK((mMp4FileDataPtr->audioTrackPtr->microState
1910 mMp4FileDataPtr->audioTrackPtr->microState = M4MP4W_writing_startAU;
1912 leftSpaceInChunk = mMp4FileDataPtr->audioTrackPtr->MaxChunkSize
1913 - mMp4FileDataPtr->audioTrackPtr->currentPos;
1916 mMp4FileDataPtr->audioTrackPtr->currentPos, leftSpaceInChunk);
1919 (M4OSA_UInt32)(( mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS
1920 * scale_audio) - mMp4FileDataPtr->audioTrackPtr->
1921 chunkTimeMsTable[mMp4FileDataPtr->audioTrackPtr->
1924 if ((leftSpaceInChunk < mMp4FileDataPtr->audioTrackPtr->MaxAUSize)
1925 || (( mMp4FileDataPtr->InterleaveDur != 0)
1926 && (chunkDurMs >= mMp4FileDataPtr->InterleaveDur)))
1931 if ((mMp4FileDataPtr->videoTrackPtr != M4OSA_NULL)
1932 && (mMp4FileDataPtr->videoTrackPtr->currentPos > 0))
1954 auPtr->dataAddress = (M4OSA_MemAddr32)(mMp4FileDataPtr->audioTrackPtr->
1955 Chunk[mMp4FileDataPtr->audioTrackPtr->currentChunk]
1956 + mMp4FileDataPtr->audioTrackPtr->currentPos);
1961 (M4OSA_MemAddr32)(mMp4FileDataPtr->audioTrackPtr->Chunk[0]
1962 + mMp4FileDataPtr->audioTrackPtr->currentPos);
1972 1000.0 / mMp4FileDataPtr->videoTrackPtr->CommonData.timescale;
1975 ERR_CHECK((mMp4FileDataPtr->videoTrackPtr->microState
1977 mMp4FileDataPtr->videoTrackPtr->microState = M4MP4W_writing_startAU;
1979 leftSpaceInChunk = mMp4FileDataPtr->videoTrackPtr->MaxChunkSize
1980 - mMp4FileDataPtr->videoTrackPtr->currentPos;
1983 (M4OSA_UInt32)(( mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS
1984 * scale_video) - mMp4FileDataPtr->videoTrackPtr->
1985 chunkTimeMsTable[mMp4FileDataPtr->videoTrackPtr->
1990 leftSpaceInChunk = mMp4FileDataPtr->videoTrackPtr->MaxChunkSize;
1995 mMp4FileDataPtr->videoTrackPtr->currentPos, leftSpaceInChunk);
1997 if (( leftSpaceInChunk < mMp4FileDataPtr->videoTrackPtr->MaxAUSize)
1998 || (( mMp4FileDataPtr->InterleaveDur != 0)
1999 && (chunkDurMs >= mMp4FileDataPtr->InterleaveDur))
2002 || (( mMp4FileDataPtr->videoTrackPtr->MaxAUperChunk != 0)
2003 && (( mMp4FileDataPtr->videoTrackPtr->
2004 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->
2006 == mMp4FileDataPtr->videoTrackPtr->MaxAUperChunk))
2020 mMp4FileDataPtr->videoTrackPtr->currentPos,
2021 mMp4FileDataPtr->videoTrackPtr->currentChunk);
2034 if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
2037 (M4OSA_MemAddr32)(mMp4FileDataPtr->videoTrackPtr->
2038 Chunk[mMp4FileDataPtr->videoTrackPtr->currentChunk]
2039 + mMp4FileDataPtr->videoTrackPtr->currentPos + 4);
2042 (M4OSA_MemAddr32)(mMp4FileDataPtr->videoTrackPtr->
2043 Chunk[mMp4FileDataPtr->videoTrackPtr->currentChunk]
2044 + mMp4FileDataPtr->videoTrackPtr->currentPos);
2049 if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
2052 (M4OSA_MemAddr32)(mMp4FileDataPtr->videoTrackPtr->Chunk[0] + 4);
2055 (M4OSA_MemAddr32)(mMp4FileDataPtr->videoTrackPtr->Chunk[0]);
2059 if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
2062 (M4OSA_MemAddr32)(mMp4FileDataPtr->videoTrackPtr->Chunk[0]
2063 + mMp4FileDataPtr->videoTrackPtr->currentPos
2067 (M4OSA_MemAddr32)(mMp4FileDataPtr->videoTrackPtr->Chunk[0]
2068 + mMp4FileDataPtr->videoTrackPtr->currentPos);
2099 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
2103 ERR_CHECK((mMp4FileDataPtr->state == M4MP4W_writing), M4ERR_STATE);
2109 1000.0 / mMp4FileDataPtr->audioTrackPtr->CommonData.timescale;
2113 1000.0 / mMp4FileDataPtr->videoTrackPtr->CommonData.timescale;
2122 + mMp4FileDataPtr->audioTrackPtr->currentPos
2123 > mMp4FileDataPtr->audioTrackPtr->MaxChunkSize,
2127 > mMp4FileDataPtr->audioTrackPtr->MaxAUSize,
2135 + mMp4FileDataPtr->videoTrackPtr->currentPos
2136 > mMp4FileDataPtr->videoTrackPtr->MaxChunkSize,
2140 > mMp4FileDataPtr->videoTrackPtr->MaxAUSize,
2149 if ((mMp4FileDataPtr->estimateAudioSize == M4OSA_FALSE)
2153 if (mMp4FileDataPtr->MaxFileSize != 0)
2155 expectedSize += mMp4FileDataPtr->filesize + auPtr->size;
2158 && (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
2164 if (expectedSize > mMp4FileDataPtr->MaxFileSize)
2177 if ((mMp4FileDataPtr->estimateAudioSize == M4OSA_TRUE)
2180 if (mMp4FileDataPtr->audioMsStopTime <= (auPtr->CTS *scale_audio))
2183 if ((mMp4FileDataPtr->audioTrackPtr->currentChunk != 0)
2184 && (mMp4FileDataPtr->audioTrackPtr->currentPos == 0))
2186 mMp4FileDataPtr->audioTrackPtr->currentChunk--;
2198 ERR_CHECK((mMp4FileDataPtr->audioTrackPtr->microState
2200 mMp4FileDataPtr->audioTrackPtr->microState = M4MP4W_writing;
2202 mMp4FileDataPtr->audioTrackPtr->currentPos += auPtr->size;
2205 - mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS;
2210 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb
2214 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize = auPtr->size;
2219 /*mMp4FileDataPtr->audioTrackPtr->sampleDuration = delta; */
2226 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize != 0)
2228 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize
2233 mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedStszBlocks =
2234 1 + mMp4FileDataPtr->audioTrackPtr->
2237 mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ =
2239 mMp4FileDataPtr->audioTrackPtr->
2243 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ
2247 i < mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
2250 mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ[i] =
2251 mMp4FileDataPtr->audioTrackPtr->
2254 mMp4FileDataPtr->audioTrackPtr->
2255 TABLE_STSZ[mMp4FileDataPtr->audioTrackPtr->
2257 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize =
2260 if (mMp4FileDataPtr->estimateAudioSize == M4OSA_FALSE)
2261 mMp4FileDataPtr->filesize +=
2262 4 * mMp4FileDataPtr->audioTrackPtr->
2271 if (4 *(mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb + 3)
2272 >= mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedStszBlocks
2282 if (4 *mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb
2283 >= mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedStszBlocks
2286 mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedStszBlocks +=
2288 mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ =
2290 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->
2291 TABLE_STSZ, ( mMp4FileDataPtr->audioTrackPtr->
2294 mMp4FileDataPtr->audioTrackPtr->
2297 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ
2303 mMp4FileDataPtr->audioTrackPtr->
2304 TABLE_STSZ[mMp4FileDataPtr->audioTrackPtr->
2307 if (mMp4FileDataPtr->estimateAudioSize == M4OSA_FALSE)
2308 mMp4FileDataPtr->filesize += 4;
2312 if (delta > mMp4FileDataPtr->audioTrackPtr->sampleDuration)
2315 mMp4FileDataPtr->audioTrackPtr->sampleDuration = delta;
2318 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb
2321 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[0] = 1;
2322 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[1] = 0;
2323 mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb = 1;
2324 mMp4FileDataPtr->filesize += 8;
2326 else if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb
2331 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[0] += 1;
2335 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[1] = delta;
2336 mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb += 1;
2337 mMp4FileDataPtr->filesize += 8;
2342 lastSampleDur = mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[2
2343 * (mMp4FileDataPtr->audioTrackPtr->
2348 if (8 *(mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb
2349 + 3) >= mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedSttsBlocks
2358 if (8 *mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb
2359 >= mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedSttsBlocks
2362 mMp4FileDataPtr->audioTrackPtr->nbOfAllocatedSttsBlocks += 1;
2363 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS =
2365 (M4OSA_MemAddr32)mMp4FileDataPtr->audioTrackPtr->
2366 TABLE_STTS, ( mMp4FileDataPtr->audioTrackPtr->
2369 mMp4FileDataPtr->audioTrackPtr->
2372 ERR_CHECK(mMp4FileDataPtr->audioTrackPtr->TABLE_STTS
2380 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[2 *(
2381 mMp4FileDataPtr->audioTrackPtr->
2383 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[2 *(
2384 mMp4FileDataPtr->audioTrackPtr->
2386 mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb +=
2388 mMp4FileDataPtr->filesize += 8;
2393 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[2 *(
2394 mMp4FileDataPtr->audioTrackPtr->
2398 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb += 1;
2401 mMp4FileDataPtr->audioTrackPtr->
2402 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->currentStsc] +=
2407 mMp4FileDataPtr->audioTrackPtr->
2408 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] +=
2414 mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS =
2422 if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
2440 ERR_CHECK((mMp4FileDataPtr->videoTrackPtr->microState
2442 mMp4FileDataPtr->videoTrackPtr->microState = M4MP4W_writing;
2448 mMp4FileDataPtr->fileWriterFunctions,
2449 mMp4FileDataPtr->fileWriterContext);
2453 M4OSA_FilePosition temp = mMp4FileDataPtr->absoluteCurrentPos
2454 + mMp4FileDataPtr->videoTrackPtr->currentPos;
2467 err = mMp4FileDataPtr->fileWriterFunctions->seek(
2468 mMp4FileDataPtr->fileWriterContext,
2473 mMp4FileDataPtr->absoluteCurrentPos
2474 + mMp4FileDataPtr->videoTrackPtr->currentPos, err, temp);
2489 if ((M4MP4W_Time32)auPtr->CTS < mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS) {
2495 mMp4FileDataPtr->videoTrackPtr->currentPos += auPtr->size;
2499 - mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS;
2506 if (2 *(mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb + 3)
2507 >= mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStszBlocks
2514 mMp4FileDataPtr->videoTrackPtr->
2515 TABLE_STSZ[mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb] =
2517 mMp4FileDataPtr->filesize += 4;
2521 if (4 *mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb
2522 >= mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStszBlocks
2525 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStszBlocks += 1;
2527 mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ =
2529 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ,
2530 ( mMp4FileDataPtr->videoTrackPtr->
2533 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStszBlocks
2536 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ != M4OSA_NULL,
2540 mMp4FileDataPtr->videoTrackPtr->
2541 TABLE_STSZ[mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb] =
2543 mMp4FileDataPtr->filesize += 4;
2547 if (mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb
2552 M4MP4W_put32_Lo(&mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[0], 1);
2553 M4MP4W_put32_Hi(&mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[0], 0);
2557 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[0] = 1;
2558 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[1] = 0;
2562 mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb = 1;
2563 mMp4FileDataPtr->filesize += 8;
2565 else if (mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb
2570 M4MP4W_put32_Hi(&mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[0],
2575 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[1] = delta;
2585 lastSampleDur = M4MP4W_get32_Hi(&mMp4FileDataPtr->videoTrackPtr->
2586 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
2589 if (4 *(mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb
2590 + 3) >= mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedSttsBlocks
2599 lastSampleDur = mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2
2600 * (mMp4FileDataPtr->videoTrackPtr->
2603 if (8 *mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb
2604 >= mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedSttsBlocks
2607 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedSttsBlocks += 1;
2608 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS =
2610 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->
2611 TABLE_STTS, ( mMp4FileDataPtr->videoTrackPtr->
2614 mMp4FileDataPtr->videoTrackPtr->
2617 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->TABLE_STTS
2627 M4MP4W_put32_Lo(&mMp4FileDataPtr->videoTrackPtr->
2628 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
2630 M4MP4W_put32_Hi(&mMp4FileDataPtr->videoTrackPtr->
2631 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
2636 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2 *(
2637 mMp4FileDataPtr->videoTrackPtr->
2639 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2
2640 *(mMp4FileDataPtr->videoTrackPtr->
2645 mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb +=
2647 mMp4FileDataPtr->filesize += 8;
2654 mMp4FileDataPtr->videoTrackPtr->
2655 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
2660 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2 *(
2661 mMp4FileDataPtr->videoTrackPtr->
2669 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb += 1;
2672 mMp4FileDataPtr->videoTrackPtr->
2673 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->currentStsc] +=
2678 mMp4FileDataPtr->videoTrackPtr->
2679 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] +=
2688 if (4 *(mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb + 3)
2689 >= mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStssBlocks
2698 if (4 *mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb
2699 >= mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStssBlocks
2702 mMp4FileDataPtr->videoTrackPtr->nbOfAllocatedStssBlocks += 1;
2703 mMp4FileDataPtr->videoTrackPtr->TABLE_STSS =
2705 (M4OSA_MemAddr32)mMp4FileDataPtr->videoTrackPtr->
2706 TABLE_STSS, ( mMp4FileDataPtr->videoTrackPtr->
2709 mMp4FileDataPtr->videoTrackPtr->
2712 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->TABLE_STSS
2718 mMp4FileDataPtr->videoTrackPtr->
2719 TABLE_STSS[mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb] =
2720 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb;
2721 mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb += 1;
2722 mMp4FileDataPtr->filesize += 4;
2726 mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS =
2733 if ((mMp4FileDataPtr->estimateAudioSize == M4OSA_TRUE)
2736 mMp4FileDataPtr->audioMsStopTime =
2740 if ((mMp4FileDataPtr->estimateAudioSize == M4OSA_FALSE)
2744 mMp4FileDataPtr->filesize += auPtr->size;
2747 if ((mMp4FileDataPtr->estimateAudioSize == M4OSA_TRUE)
2755 ERR_CHECK(mMp4FileDataPtr->audioMsChunkDur != 0,
2757 mMp4FileDataPtr->filesize -=
2758 (M4OSA_UInt32)(( mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS
2760 *(M4OSA_Double)mMp4FileDataPtr->audioTrackPtr->MaxAUSize
2762 / (M4OSA_Double)mMp4FileDataPtr->audioMsChunkDur));
2764 mMp4FileDataPtr->filesize += (M4OSA_UInt32)(( auPtr->CTS * scale_video)
2766 *(M4OSA_Double)mMp4FileDataPtr->audioTrackPtr->MaxAUSize
2768 / (M4OSA_Double)mMp4FileDataPtr->audioMsChunkDur));
2772 auPtr->size, auPtr->attribute, mMp4FileDataPtr->filesize,
2773 mMp4FileDataPtr->MaxFileSize);
2787 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
2791 (( mMp4FileDataPtr->hasAudio)
2792 && (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb
2793 != 0)); /*((mMp4FileDataPtr->audioTrackPtr != M4OSA_NULL) &&
2794 (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb != 0));*/
2796 (( mMp4FileDataPtr->hasVideo)
2797 && (mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb
2798 != 0)); /*((mMp4FileDataPtr->videoTrackPtr != M4OSA_NULL) &&
2799 (mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb != 0));*/
2875 (bAudio && bVideo && (mMp4FileDataPtr->InterleaveDur != 0));
2877 M4OSA_Context fileWriterContext = mMp4FileDataPtr->fileWriterContext;
2894 mMp4FileDataPtr->state = M4MP4W_closed;
2907 if (M4OSA_TRUE == mMp4FileDataPtr->cleanSafetyFile)
2910 err = mMp4FileDataPtr->fileWriterFunctions->openWrite(&tempContext,
2911 mMp4FileDataPtr->safetyFileUrl,
2916 err = mMp4FileDataPtr->fileWriterFunctions->closeWrite(tempContext);
2920 mMp4FileDataPtr->safetyFileUrl = M4OSA_NULL;
2921 mMp4FileDataPtr->cleanSafetyFile = M4OSA_FALSE;
2928 if ((M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable)
2929 || (M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->chunkSizeTable)
2931 == mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable)
2933 == mMp4FileDataPtr->videoTrackPtr->chunkTimeMsTable)
2934 || (M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ)
2935 || (M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->TABLE_STTS)
2936 || (M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->TABLE_STSS))
2938 mMp4FileDataPtr->fileWriterFunctions->closeWrite(
2945 mMp4FileDataPtr->videoTrackPtr->microState = M4MP4W_closed;
2948 for ( i = 0; i < mMp4FileDataPtr->videoTrackPtr->currentChunk; i++ )
2950 v_dataSize += mMp4FileDataPtr->videoTrackPtr->chunkSizeTable[i];
2957 if (mMp4FileDataPtr->videoTrackPtr->currentPos > 0)
2959 err = M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->Chunk[0],
2960 mMp4FileDataPtr->videoTrackPtr->currentPos,
2961 mMp4FileDataPtr->fileWriterFunctions,
2962 mMp4FileDataPtr->fileWriterContext);
2972 mMp4FileDataPtr->videoTrackPtr->currentChunk,
2973 mMp4FileDataPtr->absoluteCurrentPos,
2974 mMp4FileDataPtr->videoTrackPtr->currentPos);
2977 mMp4FileDataPtr->videoTrackPtr->
2978 chunkOffsetTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
2979 mMp4FileDataPtr->absoluteCurrentPos;
2982 mMp4FileDataPtr->absoluteCurrentPos +=
2983 mMp4FileDataPtr->videoTrackPtr->currentPos;
2988 mMp4FileDataPtr->videoTrackPtr->
2989 chunkSizeTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
2990 mMp4FileDataPtr->videoTrackPtr->currentPos;
2992 mMp4FileDataPtr->videoTrackPtr->currentPos; /*add last chunk size*/
2994 v_trakDuration = mMp4FileDataPtr->videoTrackPtr->
2998 if ((mMp4FileDataPtr->videoTrackPtr->currentChunk != 0)
2999 && (mMp4FileDataPtr->videoTrackPtr->currentPos == 0))
3001 mMp4FileDataPtr->videoTrackPtr->currentChunk--;
3005 if ((mMp4FileDataPtr->videoTrackPtr->
3006 chunkSampleNbTable[mMp4FileDataPtr->videoTrackPtr->
3009 mMp4FileDataPtr->videoTrackPtr->currentStsc--;
3017 if (mMp4FileDataPtr->MaxFileDuration > 0)
3020 delta = mMp4FileDataPtr->MaxFileDuration
3021 - mMp4FileDataPtr->videoTrackPtr->CommonData.lastCTS;
3022 v_trakDuration = mMp4FileDataPtr->MaxFileDuration;
3024 if (mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb > 1)
3027 mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb++;
3032 M4MP4W_put32_Lo(&mMp4FileDataPtr->videoTrackPtr->
3033 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
3035 M4MP4W_put32_Hi(&mMp4FileDataPtr->videoTrackPtr->
3036 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
3041 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2
3042 *(mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb
3044 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2
3045 *(mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb
3054 if (mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb > 1)
3060 M4MP4W_get32_Hi(&mMp4FileDataPtr->videoTrackPtr->
3061 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
3063 mMp4FileDataPtr->videoTrackPtr->
3064 TABLE_STTS[mMp4FileDataPtr->videoTrackPtr->
3069 v_trakDuration += mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2
3070 * (mMp4FileDataPtr->videoTrackPtr->
3072 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[2 *(
3073 mMp4FileDataPtr->videoTrackPtr->
3085 if (mMp4FileDataPtr->audioTrackPtr != M4OSA_NULL)
3089 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[1] =
3091 mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS
3092 * (1000.0 / mMp4FileDataPtr->audioTrackPtr->
3095 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[1];
3102 mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[1] = 66;
3109 A = v_sttsSize = 16 + 8 * mMp4FileDataPtr->videoTrackPtr->
3111 B = v_stszSize = 20 + 4 * mMp4FileDataPtr->videoTrackPtr->
3113 N = mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb;
3117 1000.0 / mMp4FileDataPtr->videoTrackPtr->CommonData.timescale;
3123 M4MP4W_table32ToBE(mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ,
3124 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb);
3125 M4MP4W_table32ToBE(mMp4FileDataPtr->videoTrackPtr->TABLE_STTS,
3126 2 * (mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb));
3130 M4MP4W_table32ToBE(mMp4FileDataPtr->videoTrackPtr->TABLE_STSS,
3131 mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb);
3133 if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
3146 if (((M4OSA_Int32)mMp4FileDataPtr->videoTrackPtr->avgBitrate) != -1)
3158 else if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
3164 if (0 == mMp4FileDataPtr->videoTrackPtr->dsiSize
3165 || M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->DSI)
3178 mMp4FileDataPtr->videoTrackPtr->dsiSize;
3190 else if (mMp4FileDataPtr->videoTrackPtr->CommonData.trackType
3196 if (0 == mMp4FileDataPtr->videoTrackPtr->dsiSize
3197 || M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->DSI)
3206 dsi = mMp4FileDataPtr->videoTrackPtr->dsiSize;
3229 v_stscSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentStsc;
3230 v_stblSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentStsc;
3231 v_minfSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentStsc;
3232 v_mdiaSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentStsc;
3233 v_trakSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentStsc;
3234 moovSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentStsc;
3237 v_stcoSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3238 v_stblSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3239 v_minfSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3240 v_mdiaSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3241 v_trakSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3242 moovSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3247 v_stscSize += 12 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3248 v_stcoSize += 4 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3249 v_stblSize += 16 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3250 v_minfSize += 16 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3251 v_mdiaSize += 16 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3252 v_trakSize += 16 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3253 moovSize += 16 * mMp4FileDataPtr->videoTrackPtr->currentChunk;
3259 mMp4FileDataPtr->videoTrackPtr->
3260 chunkTimeMsTable[mMp4FileDataPtr->videoTrackPtr->currentChunk] =
3266 if ((M4OSA_NULL == mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable)
3267 || (M4OSA_NULL == mMp4FileDataPtr->audioTrackPtr->chunkSizeTable)
3269 == mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable)
3271 == mMp4FileDataPtr->audioTrackPtr->chunkTimeMsTable)
3272 || (M4OSA_NULL == mMp4FileDataPtr->audioTrackPtr->TABLE_STTS))
3274 mMp4FileDataPtr->fileWriterFunctions->closeWrite(
3281 mMp4FileDataPtr->audioTrackPtr->microState = M4MP4W_closed;
3283 if (mMp4FileDataPtr->audioTrackPtr->CommonData.trackType == M4SYS_kAAC)
3287 dsi = mMp4FileDataPtr->audioTrackPtr->dsiSize; /*variable size*/
3305 if (mMp4FileDataPtr->audioTrackPtr->CommonData.trackType
3321 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize == 0)
3323 if (M4OSA_NULL == mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ)
3325 mMp4FileDataPtr->fileWriterFunctions->closeWrite(
3331 M4MP4W_table32ToBE(mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ,
3332 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb);
3334 4 * mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
3336 4 * mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
3338 4 * mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
3340 4 * mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
3342 4 * mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
3343 moovSize += 4 * mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb;
3349 for ( i = 0; i < mMp4FileDataPtr->audioTrackPtr->currentChunk; i++ )
3351 a_dataSize += mMp4FileDataPtr->audioTrackPtr->chunkSizeTable[i];
3357 if (mMp4FileDataPtr->audioTrackPtr->currentPos > 0)
3359 err = M4MP4W_putBlock(mMp4FileDataPtr->audioTrackPtr->Chunk[0],
3360 mMp4FileDataPtr->audioTrackPtr->currentPos,
3361 mMp4FileDataPtr->fileWriterFunctions,
3362 mMp4FileDataPtr->fileWriterContext);
3370 mMp4FileDataPtr->audioTrackPtr->currentChunk,
3371 mMp4FileDataPtr->absoluteCurrentPos);
3374 mMp4FileDataPtr->audioTrackPtr->
3375 chunkOffsetTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
3376 mMp4FileDataPtr->absoluteCurrentPos;
3379 mMp4FileDataPtr->absoluteCurrentPos +=
3380 mMp4FileDataPtr->audioTrackPtr->currentPos;
3386 mMp4FileDataPtr->audioTrackPtr->
3387 chunkSizeTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
3388 mMp4FileDataPtr->audioTrackPtr->currentPos;
3390 mMp4FileDataPtr->audioTrackPtr->currentPos; /*add last chunk size*/
3393 if ((mMp4FileDataPtr->audioTrackPtr->currentChunk != 0)
3394 && (mMp4FileDataPtr->audioTrackPtr->currentPos == 0))
3396 mMp4FileDataPtr->audioTrackPtr->currentChunk--;
3400 if ((mMp4FileDataPtr->audioTrackPtr->
3401 chunkSampleNbTable[mMp4FileDataPtr->audioTrackPtr->
3404 mMp4FileDataPtr->audioTrackPtr->currentStsc--;
3409 a_trakDuration = mMp4FileDataPtr->audioTrackPtr->
3413 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb != 1)
3418 mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[2
3419 *(mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb
3424 a_trakDuration += mMp4FileDataPtr->audioTrackPtr->TABLE_STTS[2
3425 * (mMp4FileDataPtr->audioTrackPtr->
3428 else if (0 == mMp4FileDataPtr->audioTrackPtr->CommonData.lastCTS)
3430 if (mMp4FileDataPtr->audioTrackPtr->CommonData.trackType
3433 if (12200 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3436 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3438 else if (10200 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3441 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3443 else if (7950 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3446 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3448 else if (7400 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3451 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3453 else if (6700 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3456 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3458 else if (5900 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3461 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3463 else if (5150 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3466 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3468 else if (4750 == mMp4FileDataPtr->audioTrackPtr->avgBitrate)
3471 * mMp4FileDataPtr->audioTrackPtr->sampleDuration;
3477 1000.0 / mMp4FileDataPtr->audioTrackPtr->CommonData.timescale;
3483 a_stscSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentStsc;
3484 a_stblSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentStsc;
3485 a_minfSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentStsc;
3486 a_mdiaSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentStsc;
3487 a_trakSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentStsc;
3488 moovSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentStsc;
3491 a_stcoSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3492 a_stblSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3493 a_minfSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3494 a_mdiaSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3495 a_trakSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3496 moovSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3501 a_stscSize += 12 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3502 a_stcoSize += 4 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3503 a_stblSize += 16 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3504 a_minfSize += 16 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3505 a_mdiaSize += 16 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3506 a_trakSize += 16 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3507 moovSize += 16 * mMp4FileDataPtr->audioTrackPtr->currentChunk;
3513 a_sttsSize = 16 + 8 * (mMp4FileDataPtr->audioTrackPtr->
3523 mMp4FileDataPtr->audioTrackPtr->
3524 chunkTimeMsTable[mMp4FileDataPtr->audioTrackPtr->currentChunk] =
3575 mMp4FileDataPtr->duration =
3581 err = mMp4FileDataPtr->fileWriterFunctions->openWrite(&fileWriterContext,
3582 mMp4FileDataPtr->url, 0x22);
3586 if (mMp4FileDataPtr->ftyp.major_brand != 0)
3592 + (mMp4FileDataPtr->ftyp.nbCompatibleBrands * 4),
3593 mMp4FileDataPtr->fileWriterFunctions,
3594 mMp4FileDataPtr->fileWriterContext));
3596 mMp4FileDataPtr->fileWriterFunctions,
3597 mMp4FileDataPtr->fileWriterContext));
3598 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->ftyp.major_brand,
3599 mMp4FileDataPtr->fileWriterFunctions,
3600 mMp4FileDataPtr->fileWriterContext));
3601 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->ftyp.minor_version,
3602 mMp4FileDataPtr->fileWriterFunctions,
3603 mMp4FileDataPtr->fileWriterContext));
3605 for ( i = 0; i < mMp4FileDataPtr->ftyp.nbCompatibleBrands; i++ )
3608 M4MP4W_putBE32(mMp4FileDataPtr->ftyp.compatible_brands[i],
3609 mMp4FileDataPtr->fileWriterFunctions,
3610 mMp4FileDataPtr->fileWriterContext));
3617 mMp4FileDataPtr->fileWriterFunctions,
3618 mMp4FileDataPtr->fileWriterContext));
3631 CLEANUPonERR(mMp4FileDataPtr->fileWriterFunctions->getOption(
3632 mMp4FileDataPtr->fileWriterContext,
3638 CLEANUPonERR(M4MP4W_putBE32(moovSize, mMp4FileDataPtr->fileWriterFunctions,
3641 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3643 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3645 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3647 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3648 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->duration,
3649 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3651 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3656 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3658 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3660 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3662 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3664 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3666 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3668 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3670 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3672 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*audio*/
3674 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3676 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3678 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3680 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3682 M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->CommonData.timescale,
3683 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3685 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3687 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3689 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*audio*/
3691 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3693 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3695 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3697 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3699 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3701 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3704 mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb - 1,
3705 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3707 M4MP4W_table32ToBE(mMp4FileDataPtr->audioTrackPtr->TABLE_STTS,
3708 2 * (mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb
3711 *)mMp4FileDataPtr->audioTrackPtr->TABLE_STTS,
3712 ( mMp4FileDataPtr->audioTrackPtr->CommonData.sttsTableEntryNb - 1)
3714 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*audio*/
3718 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3721 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3723 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3729 mMp4FileDataPtr->fileWriterFunctions,
3735 mMp4FileDataPtr->fileWriterFunctions,
3741 mMp4FileDataPtr->fileWriterFunctions,
3746 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3749 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*audio*/
3751 M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->CommonData.timescale
3753 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3759 mMp4FileDataPtr->fileWriterFunctions,
3762 sizeof(MPEGConfigBlock0), mMp4FileDataPtr->fileWriterFunctions,
3765 mMp4FileDataPtr->fileWriterFunctions,
3768 sizeof(MPEGConfigBlock1), mMp4FileDataPtr->fileWriterFunctions,
3771 mMp4FileDataPtr->fileWriterFunctions,
3774 mMp4FileDataPtr->fileWriterFunctions,
3777 M4MP4W_putBE24(mMp4FileDataPtr->audioTrackPtr->avgBitrate * 5,
3778 mMp4FileDataPtr->fileWriterFunctions,
3781 M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->maxBitrate,
3782 mMp4FileDataPtr->fileWriterFunctions,
3785 M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->avgBitrate,
3786 mMp4FileDataPtr->fileWriterFunctions,
3789 sizeof(MPEGConfigBlock2), mMp4FileDataPtr->fileWriterFunctions,
3791 CLEANUPonERR(M4MP4W_putByte(mMp4FileDataPtr->audioTrackPtr->dsiSize,
3792 mMp4FileDataPtr->fileWriterFunctions,
3794 CLEANUPonERR(M4MP4W_putBlock(mMp4FileDataPtr->audioTrackPtr->DSI,
3795 mMp4FileDataPtr->audioTrackPtr->dsiSize,
3796 mMp4FileDataPtr->fileWriterFunctions,
3799 sizeof(MPEGConfigBlock3), mMp4FileDataPtr->fileWriterFunctions,
3808 mMp4FileDataPtr->fileWriterFunctions,
3820 (M4OSA_UInt8)(mMp4FileDataPtr->audioTrackPtr->sampleDuration
3823 if (mMp4FileDataPtr->audioTrackPtr->DSI != M4OSA_NULL)
3829 mMp4FileDataPtr->audioTrackPtr->DSI[localI]);
3833 mMp4FileDataPtr->fileWriterFunctions,
3842 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3857 (M4OSA_UInt8)(mMp4FileDataPtr->audioTrackPtr->sampleDuration
3860 if (mMp4FileDataPtr->audioTrackPtr->DSI != M4OSA_NULL)
3866 mMp4FileDataPtr->audioTrackPtr->DSI[localI]);
3873 mMp4FileDataPtr->audioTrackPtr->DSI[localI]);
3877 mMp4FileDataPtr->fileWriterFunctions,
3883 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3885 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3887 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize,
3888 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3890 M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb,
3891 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3894 if (mMp4FileDataPtr->audioTrackPtr->CommonData.sampleSize == 0)
3897 *)mMp4FileDataPtr->audioTrackPtr->TABLE_STSZ,
3898 mMp4FileDataPtr->audioTrackPtr->CommonData.sampleNb * 4,
3899 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3903 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3905 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3909 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->currentStsc
3910 + 1, mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3912 for ( i = 0; i <= mMp4FileDataPtr->audioTrackPtr->currentStsc; i++ )
3915 ( mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable[i]
3916 >> 12) + 1, mMp4FileDataPtr->fileWriterFunctions,
3918 CLEANUPonERR(M4MP4W_putBE32((mMp4FileDataPtr->audioTrackPtr->
3920 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3921 CLEANUPonERR(M4MP4W_putBE32(1, mMp4FileDataPtr->fileWriterFunctions,
3927 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->currentChunk
3928 + 1, mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3930 for ( i = 0; i <= mMp4FileDataPtr->audioTrackPtr->currentChunk; i++ )
3933 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3935 mMp4FileDataPtr->audioTrackPtr->chunkSampleNbTable[i],
3936 mMp4FileDataPtr->fileWriterFunctions,
3938 CLEANUPonERR(M4MP4W_putBE32(1, mMp4FileDataPtr->fileWriterFunctions,
3945 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3947 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3948 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->audioTrackPtr->currentChunk
3949 + 1, mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3953 for ( i = 0; i <= mMp4FileDataPtr->audioTrackPtr->currentChunk; i++ )
3956 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3957 a_trakOffset += mMp4FileDataPtr->audioTrackPtr->chunkSizeTable[i];
3960 && (mMp4FileDataPtr->videoTrackPtr->currentChunk >= i))
3963 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable[i];
3969 for ( i = 0; i <= mMp4FileDataPtr->audioTrackPtr->currentChunk; i++ )
3972 mMp4FileDataPtr->audioTrackPtr->chunkOffsetTable[i],
3973 mMp4FileDataPtr->fileWriterFunctions,
3980 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*audio*/
3987 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3989 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3991 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3993 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3995 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3997 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
3999 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4001 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4005 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->width << 16,
4006 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4007 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->height
4009 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4012 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4014 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4016 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4018 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4020 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->CommonData.timescale,
4021 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4023 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4025 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4027 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4029 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4031 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4033 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4035 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4037 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4039 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4041 mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb,
4042 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4046 i < mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb;
4050 &mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[i]),
4051 mMp4FileDataPtr->fileWriterFunctions,
4054 &mMp4FileDataPtr->videoTrackPtr->TABLE_STTS[i]),
4055 mMp4FileDataPtr->fileWriterFunctions,
4062 *)mMp4FileDataPtr->videoTrackPtr->TABLE_STTS,
4063 ( mMp4FileDataPtr->videoTrackPtr->CommonData.sttsTableEntryNb) * 8,
4064 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4071 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4074 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4076 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4082 mMp4FileDataPtr->fileWriterFunctions,
4089 mMp4FileDataPtr->fileWriterFunctions,
4096 mMp4FileDataPtr->fileWriterFunctions,
4101 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4104 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4105 CLEANUPonERR(M4MP4W_putBE16(mMp4FileDataPtr->videoTrackPtr->width,
4106 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4107 CLEANUPonERR(M4MP4W_putBE16(mMp4FileDataPtr->videoTrackPtr->height,
4108 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4110 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*mp4v*/
4113 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4121 if (((M4OSA_Int32)mMp4FileDataPtr->videoTrackPtr->avgBitrate) != -1)
4125 mMp4FileDataPtr->fileWriterFunctions,
4128 if (M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->DSI)
4131 mMp4FileDataPtr->fileWriterFunctions,
4137 M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->DSI,
4138 mMp4FileDataPtr->videoTrackPtr->dsiSize,
4139 mMp4FileDataPtr->fileWriterFunctions,
4144 mMp4FileDataPtr->fileWriterFunctions,
4149 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->avgBitrate,
4150 mMp4FileDataPtr->fileWriterFunctions,
4153 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->maxBitrate,
4154 mMp4FileDataPtr->fileWriterFunctions,
4160 mMp4FileDataPtr->fileWriterFunctions,
4163 if (M4OSA_NULL == mMp4FileDataPtr->videoTrackPtr->DSI)
4166 mMp4FileDataPtr->fileWriterFunctions,
4172 M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->DSI,
4173 mMp4FileDataPtr->videoTrackPtr->dsiSize,
4174 mMp4FileDataPtr->fileWriterFunctions,
4182 M4OSA_UInt32 bufferSizeDB = 5 * mMp4FileDataPtr->videoTrackPtr->
4186 mMp4FileDataPtr->fileWriterFunctions,
4189 sizeof(MPEGConfigBlock0), mMp4FileDataPtr->fileWriterFunctions,
4192 mMp4FileDataPtr->fileWriterFunctions,
4195 sizeof(MPEGConfigBlock1), mMp4FileDataPtr->fileWriterFunctions,
4198 mMp4FileDataPtr->fileWriterFunctions,
4201 mMp4FileDataPtr->fileWriterFunctions,
4204 mMp4FileDataPtr->fileWriterFunctions,
4207 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->maxBitrate,
4208 mMp4FileDataPtr->fileWriterFunctions,
4211 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->avgBitrate,
4212 mMp4FileDataPtr->fileWriterFunctions,
4215 sizeof(MPEGConfigBlock2), mMp4FileDataPtr->fileWriterFunctions,
4217 CLEANUPonERR(M4MP4W_putByte(mMp4FileDataPtr->videoTrackPtr->dsiSize,
4218 mMp4FileDataPtr->fileWriterFunctions,
4220 CLEANUPonERR(M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->DSI,
4221 mMp4FileDataPtr->videoTrackPtr->dsiSize,
4222 mMp4FileDataPtr->fileWriterFunctions,
4225 sizeof(MPEGConfigBlock3), mMp4FileDataPtr->fileWriterFunctions,
4233 M4OSA_UChar *tmpDSI = mMp4FileDataPtr->videoTrackPtr->DSI; /* DSI */
4239 mMp4FileDataPtr->fileWriterFunctions,
4243 mMp4FileDataPtr->fileWriterFunctions,
4248 if ((0x01 != mMp4FileDataPtr->videoTrackPtr->DSI[0]) ||
4249 (0x42 != mMp4FileDataPtr->videoTrackPtr->DSI[1]))
4252 mMp4FileDataPtr->videoTrackPtr->DSI[0],
4253 mMp4FileDataPtr->videoTrackPtr->DSI[1]);
4257 CLEANUPonERR( M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->DSI,
4258 mMp4FileDataPtr->videoTrackPtr->dsiSize,
4259 mMp4FileDataPtr->fileWriterFunctions,
4266 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4268 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4270 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleSize,
4271 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4273 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb,
4274 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4277 for ( i = 0; i < mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb;
4281 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ[i],
4282 mMp4FileDataPtr->fileWriterFunctions,
4289 *)mMp4FileDataPtr->videoTrackPtr->TABLE_STSZ,
4290 mMp4FileDataPtr->videoTrackPtr->CommonData.sampleNb * 4,
4291 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4296 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4298 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4302 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->currentStsc
4303 + 1, mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4305 for ( i = 0; i <= mMp4FileDataPtr->videoTrackPtr->currentStsc; i++ )
4308 ( mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable[i]
4309 >> 12) + 1, mMp4FileDataPtr->fileWriterFunctions,
4311 CLEANUPonERR(M4MP4W_putBE32((mMp4FileDataPtr->videoTrackPtr->
4313 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4314 CLEANUPonERR(M4MP4W_putBE32(1, mMp4FileDataPtr->fileWriterFunctions,
4320 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->currentChunk
4321 + 1, mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4323 for (i = 0; i <= mMp4FileDataPtr->videoTrackPtr->currentChunk; i++)
4326 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4328 mMp4FileDataPtr->videoTrackPtr->chunkSampleNbTable[i],
4329 mMp4FileDataPtr->fileWriterFunctions,
4331 CLEANUPonERR(M4MP4W_putBE32(1, mMp4FileDataPtr->fileWriterFunctions,
4338 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4340 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4341 CLEANUPonERR(M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->currentChunk
4342 + 1, mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4346 for (i = 0; i <= mMp4FileDataPtr->videoTrackPtr->currentChunk; i++)
4349 && (mMp4FileDataPtr->audioTrackPtr->currentChunk >= i))
4352 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable[i];
4355 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4356 v_trakOffset += mMp4FileDataPtr->videoTrackPtr->chunkSizeTable[i];
4361 for ( i = 0; i <= mMp4FileDataPtr->videoTrackPtr->currentChunk; i++ )
4364 mMp4FileDataPtr->videoTrackPtr->chunkOffsetTable[i],
4365 mMp4FileDataPtr->fileWriterFunctions,
4372 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4374 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4376 M4MP4W_putBE32(mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb,
4377 mMp4FileDataPtr->fileWriterFunctions,
4380 *)mMp4FileDataPtr->videoTrackPtr->TABLE_STSS,
4381 mMp4FileDataPtr->videoTrackPtr->stssTableEntryNb * 4,
4382 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4384 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext)); /*video*/
4389 CLEANUPonERR(M4MP4W_putBE32(mdatSize, mMp4FileDataPtr->fileWriterFunctions,
4392 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4399 for ( i = 0; i <= mMp4FileDataPtr->audioTrackPtr->currentChunk;
4403 M4MP4W_putBlock(mMp4FileDataPtr->audioTrackPtr->Chunk[i],
4404 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable[i],
4405 mMp4FileDataPtr->fileWriterFunctions,
4412 for ( i = 0; i <= mMp4FileDataPtr->videoTrackPtr->currentChunk;
4416 M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->Chunk[i],
4417 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable[i],
4418 mMp4FileDataPtr->fileWriterFunctions,
4425 for ( i = 0; i <= max(mMp4FileDataPtr->audioTrackPtr->currentChunk,
4426 mMp4FileDataPtr->videoTrackPtr->currentChunk); i++ )
4428 if (i <= mMp4FileDataPtr->audioTrackPtr->currentChunk)
4431 M4MP4W_putBlock(mMp4FileDataPtr->audioTrackPtr->Chunk[i],
4432 mMp4FileDataPtr->audioTrackPtr->chunkSizeTable[i],
4433 mMp4FileDataPtr->fileWriterFunctions,
4437 if (i <= mMp4FileDataPtr->videoTrackPtr->currentChunk)
4440 M4MP4W_putBlock(mMp4FileDataPtr->videoTrackPtr->Chunk[i],
4441 mMp4FileDataPtr->videoTrackPtr->chunkSizeTable[i],
4442 mMp4FileDataPtr->fileWriterFunctions,
4453 sizeof(BlockSignatureSkipHeader), mMp4FileDataPtr->fileWriterFunctions,
4457 if (mMp4FileDataPtr->embeddedString == M4OSA_NULL)
4461 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4465 CLEANUPonERR(M4MP4W_putBlock(mMp4FileDataPtr->embeddedString, 16,
4466 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4470 camcoder_maj = (M4OSA_UChar)(mMp4FileDataPtr->camcoderVersion / 100);
4472 (M4OSA_UChar)(( mMp4FileDataPtr->camcoderVersion - 100 * camcoder_maj)
4475 (M4OSA_UChar)(mMp4FileDataPtr->camcoderVersion - 100 * camcoder_maj - 10
4478 CLEANUPonERR(M4MP4W_putByte(' ', mMp4FileDataPtr->fileWriterFunctions,
4481 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4482 CLEANUPonERR(M4MP4W_putByte('.', mMp4FileDataPtr->fileWriterFunctions,
4485 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4486 CLEANUPonERR(M4MP4W_putByte('.', mMp4FileDataPtr->fileWriterFunctions,
4489 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4493 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4495 if (mMp4FileDataPtr->integrationTag == M4OSA_NULL)
4499 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4503 CLEANUPonERR(M4MP4W_putBlock(mMp4FileDataPtr->integrationTag, 60,
4504 mMp4FileDataPtr->fileWriterFunctions, fileWriterContext));
4510 if (mMp4FileDataPtr->ftyp.major_brand != 0)
4511 mdatPos= 16 + mMp4FileDataPtr->ftyp.nbCompatibleBrands * 4;
4518 CLEANUPonERR(mMp4FileDataPtr->fileWriterFunctions->seek(fileWriterContext,
4520 CLEANUPonERR(M4MP4W_putBE32(mdatSize, mMp4FileDataPtr->fileWriterFunctions,
4529 if (M4OSA_NULL != mMp4FileDataPtr->fileWriterContext)
4532 mMp4FileDataPtr->fileWriterFunctions->closeWrite(mMp4FileDataPtr->
4541 mMp4FileDataPtr->fileWriterContext = M4OSA_NULL;
4548 if (M4OSA_TRUE == mMp4FileDataPtr->cleanSafetyFile)
4551 err3 = mMp4FileDataPtr->fileWriterFunctions->openWrite(&tempContext,
4552 mMp4FileDataPtr->safetyFileUrl,
4562 mMp4FileDataPtr->fileWriterFunctions->closeWrite(tempContext);
4567 mMp4FileDataPtr->safetyFileUrl = M4OSA_NULL;
4568 mMp4FileDataPtr->cleanSafetyFile = M4OSA_FALSE;
4575 if (M4OSA_NULL != mMp4FileDataPtr->embeddedString)
4577 free(mMp4FileDataPtr->embeddedString);
4578 mMp4FileDataPtr->embeddedString = M4OSA_NULL;
4582 if (M4OSA_NULL != mMp4FileDataPtr->integrationTag)
4584 free(mMp4FileDataPtr->integrationTag);
4585 mMp4FileDataPtr->integrationTag = M4OSA_NULL;
4636 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
4639 ERR_CHECK(( mMp4FileDataPtr->state == M4MP4W_opened)
4640 || (mMp4FileDataPtr->state == M4MP4W_ready), M4ERR_STATE);
4654 if (mMp4FileDataPtr->hasAudio == M4OSA_FALSE)
4658 mMp4FileDataPtr->audioTrackPtr->MaxChunkSize;
4662 if (mMp4FileDataPtr->hasVideo == M4OSA_FALSE)
4666 mMp4FileDataPtr->videoTrackPtr->MaxChunkSize;
4670 streamIDvaluePtr->value = mMp4FileDataPtr->MaxChunkSize;
4686 streamIDvaluePtr->value = (M4OSA_UInt32)mMp4FileDataPtr->
4704 if (mMp4FileDataPtr->embeddedString != M4OSA_NULL)
4706 (void *)mMp4FileDataPtr->embeddedString, 16);
4722 if (mMp4FileDataPtr->integrationTag != M4OSA_NULL)
4724 (void *)mMp4FileDataPtr->integrationTag, 60);
4738 streamIDvaluePtr->value = mMp4FileDataPtr->camcoderVersion;
4749 *callBackPtr = mMp4FileDataPtr->PreWriteCallBack;
4755 *callBackPtr = mMp4FileDataPtr->PostWriteCallBack;
4765 if (mMp4FileDataPtr->hasAudio == M4OSA_FALSE)
4769 mMp4FileDataPtr->audioTrackPtr->MaxAUSize;
4773 if (mMp4FileDataPtr->hasVideo == M4OSA_FALSE)
4777 mMp4FileDataPtr->videoTrackPtr->MaxAUSize;
4781 streamIDvaluePtr->value = mMp4FileDataPtr->MaxAUSize;
4801 streamIDsizePtr->width = mMp4FileDataPtr->videoTrackPtr->width;
4802 streamIDsizePtr->height = mMp4FileDataPtr->videoTrackPtr->height;
4808 (M4OSA_UInt32)mMp4FileDataPtr->estimateAudioSize;
4839 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
4848 ERR_CHECK((mMp4FileDataPtr->state != M4MP4W_closed), M4ERR_STATE);
4853 ERR_CHECK(mMp4FileDataPtr->state == M4MP4W_opened, M4ERR_STATE);
4858 ERR_CHECK(( mMp4FileDataPtr->state == M4MP4W_opened)
4859 || (mMp4FileDataPtr->state == M4MP4W_ready), M4ERR_STATE);
4875 if (mMp4FileDataPtr->hasAudio == M4OSA_FALSE)
4880 mMp4FileDataPtr->audioTrackPtr->MaxChunkSize =
4887 if (mMp4FileDataPtr->hasVideo == M4OSA_FALSE)
4892 mMp4FileDataPtr->videoTrackPtr->MaxChunkSize =
4901 mMp4FileDataPtr->MaxChunkSize = streamIDvaluePtr->value;
4903 if (mMp4FileDataPtr->hasAudio == M4OSA_TRUE)
4905 mMp4FileDataPtr->audioTrackPtr->MaxChunkSize =
4909 if (mMp4FileDataPtr->hasVideo == M4OSA_TRUE)
4911 mMp4FileDataPtr->videoTrackPtr->MaxChunkSize =
4928 mMp4FileDataPtr->InterleaveDur =
4940 mMp4FileDataPtr->MaxFileSize = *(M4OSA_UInt32 *)value;
4951 if (mMp4FileDataPtr->embeddedString == M4OSA_NULL)
4953 mMp4FileDataPtr->embeddedString =
4956 ERR_CHECK(mMp4FileDataPtr->embeddedString != M4OSA_NULL,
4960 memcpy((void *)mMp4FileDataPtr->embeddedString,
4970 if (mMp4FileDataPtr->integrationTag == M4OSA_NULL)
4972 mMp4FileDataPtr->integrationTag =
4975 ERR_CHECK(mMp4FileDataPtr->integrationTag != M4OSA_NULL,
4981 memcpy((void *)mMp4FileDataPtr->integrationTag,
4984 memcpy((void *)mMp4FileDataPtr->integrationTag,
4989 memcpy((void *)mMp4FileDataPtr->integrationTag,
5001 mMp4FileDataPtr->camcoderVersion = streamIDvaluePtr->value;
5012 /*mMp4FileDataPtr->PreWriteCallBack = *(M4MP4W_WriteCallBack*)value;
5017 /*mMp4FileDataPtr->PostWriteCallBack = *(M4MP4W_WriteCallBack*)value;
5028 /*if (mMp4FileDataPtr->audioTrackPtr == M4OSA_NULL)*/
5029 if (mMp4FileDataPtr->hasAudio == M4OSA_FALSE)
5032 mMp4FileDataPtr->audioTrackPtr->MaxAUSize =
5038 /*if (mMp4FileDataPtr->videoTrackPtr == M4OSA_NULL)*/
5039 if (mMp4FileDataPtr->hasVideo == M4OSA_FALSE)
5042 mMp4FileDataPtr->videoTrackPtr->MaxAUSize =
5048 mMp4FileDataPtr->MaxAUSize = streamIDvaluePtr->value;
5050 if (mMp4FileDataPtr->hasAudio == M4OSA_TRUE)
5051 mMp4FileDataPtr->audioTrackPtr->MaxAUSize =
5054 if (mMp4FileDataPtr->hasVideo == M4OSA_TRUE)
5055 mMp4FileDataPtr->videoTrackPtr->MaxAUSize =
5079 || (mMp4FileDataPtr->hasVideo == M4OSA_FALSE))
5083 mMp4FileDataPtr->videoTrackPtr->width = streamIDsizePtr->width;
5084 mMp4FileDataPtr->videoTrackPtr->height =
5095 if ((mMp4FileDataPtr->hasAudio == M4OSA_FALSE)
5096 || (mMp4FileDataPtr->hasVideo == M4OSA_FALSE))
5099 mMp4FileDataPtr->estimateAudioSize =
5113 mMp4FileDataPtr->MaxFileDuration = *(M4OSA_UInt32 *)value;
5124 mMp4FileDataPtr->ftyp = *(M4MP4C_FtypBox *)value;
5129 mMp4FileDataPtr->ftyp.nbCompatibleBrands * sizeof(M4OSA_UInt32);
5131 mMp4FileDataPtr->absoluteCurrentPos = 8/*mdat*/ + 16 + size;
5132 mMp4FileDataPtr->filesize = 218/*mdat+moov+skip*/ + 16 + size;
5150 switch( mMp4FileDataPtr->videoTrackPtr->
5154 if ((0 != mMp4FileDataPtr->videoTrackPtr->dsiSize)
5156 != mMp4FileDataPtr->videoTrackPtr->DSI))
5175 mMp4FileDataPtr->videoTrackPtr->dsiSize =
5177 mMp4FileDataPtr->videoTrackPtr->DSI = (M4OSA_UChar
5180 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI
5183 (void *)mMp4FileDataPtr->videoTrackPtr->
5191 if ((0 != mMp4FileDataPtr->videoTrackPtr->dsiSize)
5193 != mMp4FileDataPtr->videoTrackPtr->DSI))
5211 mMp4FileDataPtr->videoTrackPtr->dsiSize =
5213 mMp4FileDataPtr->videoTrackPtr->DSI = (M4OSA_UChar
5216 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI
5219 (void *)mMp4FileDataPtr->videoTrackPtr->
5223 mMp4FileDataPtr->filesize +=
5229 if ((0 != mMp4FileDataPtr->videoTrackPtr->dsiSize)
5231 != mMp4FileDataPtr->videoTrackPtr->DSI))
5234 if (M4OSA_TRUE == mMp4FileDataPtr->bMULPPSSPS)
5236 free(mMp4FileDataPtr->videoTrackPtr->DSI);
5240 mMp4FileDataPtr->videoTrackPtr->dsiSize =
5243 ,mMp4FileDataPtr->videoTrackPtr->dsiSize);
5245 mMp4FileDataPtr->videoTrackPtr->DSI =
5249 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI !=
5252 (void *)mMp4FileDataPtr->videoTrackPtr->DSI,
5276 mMp4FileDataPtr->videoTrackPtr->dsiSize =
5280 mMp4FileDataPtr->videoTrackPtr->DSI = (M4OSA_UChar
5283 ERR_CHECK(mMp4FileDataPtr->videoTrackPtr->DSI
5286 (void *)mMp4FileDataPtr->videoTrackPtr->
5304 mMp4FileDataPtr->bMULPPSSPS = *(M4OSA_Int8 *)value;
5322 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
5328 *state = mMp4FileDataPtr->state;
5332 if (mMp4FileDataPtr->hasAudio == M4OSA_TRUE)
5334 *state = mMp4FileDataPtr->audioTrackPtr->microState;
5343 if (mMp4FileDataPtr->hasVideo == M4OSA_TRUE)
5345 *state = mMp4FileDataPtr->videoTrackPtr->microState;
5367 M4MP4W_Mp4FileData *mMp4FileDataPtr = (M4MP4W_Mp4FileData *)context;
5371 *pCurrentFileSize = mMp4FileDataPtr->filesize;