64 #define ATOMTYPE_ESD 0x65736473 /* 'esds' */ |
64 #define ATOMTYPE_ESD 0x65736473 /* 'esds' */ |
65 #define ATOMTYPE_URL 0x75726c20 /* 'url ' */ |
65 #define ATOMTYPE_URL 0x75726c20 /* 'url ' */ |
66 #define ATOMTYPE_URN 0x75726e20 /* 'urn ' */ |
66 #define ATOMTYPE_URN 0x75726e20 /* 'urn ' */ |
67 #define ATOMTYPE_UUID 0x75756964 /* 'uuid' */ |
67 #define ATOMTYPE_UUID 0x75756964 /* 'uuid' */ |
68 #define ATOMTYPE_EDTS 0x65647473 /* 'edts' */ |
68 #define ATOMTYPE_EDTS 0x65647473 /* 'edts' */ |
|
69 #define ATOMTYPE_META 0x6d657461 /* 'meta' */ |
69 /* AVC Additions */ |
70 /* AVC Additions */ |
70 #define ATOMTYPE_AVCC 0x61766343 /* 'avcC' */ |
71 #define ATOMTYPE_AVCC 0x61766343 /* 'avcC' */ |
71 #define ATOMTYPE_BTRT 0x62747274 /* 'btrt' */ |
72 #define ATOMTYPE_BTRT 0x62747274 /* 'btrt' */ |
72 #define ATOMTYPE_AVC1 0x61766331 /* 'avc1' */ |
73 #define ATOMTYPE_AVC1 0x61766331 /* 'avc1' */ |
73 #define ATOMTYPE_M4DS 0x6d346473 /* 'm4ds' */ |
74 #define ATOMTYPE_M4DS 0x6d346473 /* 'm4ds' */ |
74 #define ATOMTYPE_SDTP 0x73647470 /* 'sdtp' */ |
75 #define ATOMTYPE_SDTP 0x73647470 /* 'sdtp' */ |
75 #define ATOMTYPE_AVCP 0x61766370 /* 'avcp' */ |
76 #define ATOMTYPE_AVCP 0x61766370 /* 'avcp' */ |
76 /* QCELP 13K Additions */ |
77 /* QCELP 13K Additions */ |
77 #define ATOMTYPE_SQCP 0x73716370 /* 'sqcp' */ |
78 #define ATOMTYPE_SQCP 0x73716370 /* 'sqcp' */ |
78 #define ATOMTYPE_DQCP 0x64716370 /* 'dqcp' */ |
79 #define ATOMTYPE_DQCP 0x64716370 /* 'dqcp' */ |
79 |
80 /* inline Addition */ |
|
81 #define ATOMTYPE_ID32 0x49443332 /* 'ID32' */ |
80 |
82 |
81 #define HANDLERTYPE_ODSM 0x6f64736d /* 'odsm' */ |
83 #define HANDLERTYPE_ODSM 0x6f64736d /* 'odsm' */ |
82 #define HANDLERTYPE_VIDE 0x76696465 /* 'vide' */ |
84 #define HANDLERTYPE_VIDE 0x76696465 /* 'vide' */ |
83 #define HANDLERTYPE_SOUN 0x736f756e /* 'soun' */ |
85 #define HANDLERTYPE_SOUN 0x736f756e /* 'soun' */ |
84 |
86 |
558 editListContainerAtom *edts; |
560 editListContainerAtom *edts; |
559 mediaAtom *mdia; |
561 mediaAtom *mdia; |
560 userDataAtom *udta; |
562 userDataAtom *udta; |
561 } trackAtom; |
563 } trackAtom; |
562 |
564 |
|
565 typedef struct ID32Atom |
|
566 { |
|
567 atomHeader *atomhdr; |
|
568 mp4_u64 atomcontentloc; |
|
569 mp4_u16 language; // top bit is padding, remaining 15 bits is Packed ISO-639-2/T language code |
|
570 } ID32Atom; |
|
571 |
|
572 typedef struct metaAtom |
|
573 { |
|
574 atomHeader *atomhdr; |
|
575 handlerAtom *hdlr; |
|
576 ID32Atom *ID32; |
|
577 } metaAtom; |
|
578 |
563 typedef struct movieAtom |
579 typedef struct movieAtom |
564 { |
580 { |
565 atomHeader *atomhdr; |
581 atomHeader *atomhdr; |
566 movieHeaderAtom *mvhd; |
582 movieHeaderAtom *mvhd; |
567 trackAtom *trakAudio; // audio |
583 trackAtom *trakAudio; // audio |
568 trackAtom *trakVideo; // video |
584 trackAtom *trakVideo; // video |
569 objectDescriptorAtom *iods; |
585 objectDescriptorAtom *iods; |
570 userDataAtom *udta; |
586 userDataAtom *udta; |
|
587 metaAtom *meta; |
571 } movieAtom; |
588 } movieAtom; |
572 |
589 |
573 |
590 |
574 typedef struct mediaDataAtom |
591 typedef struct mediaDataAtom |
575 { |
592 { |
775 mp4_i32 readSAWB(MP4HandleImp handle, amrSampleEntry *sawb); |
792 mp4_i32 readSAWB(MP4HandleImp handle, amrSampleEntry *sawb); |
776 mp4_i32 readESD(MP4HandleImp handle, ESDAtom *esd); |
793 mp4_i32 readESD(MP4HandleImp handle, ESDAtom *esd); |
777 mp4_i32 readD263(MP4HandleImp handle, h263SpecificAtom *d263); |
794 mp4_i32 readD263(MP4HandleImp handle, h263SpecificAtom *d263); |
778 mp4_i32 readBITR(MP4HandleImp handle, bitrateAtom *bitr); |
795 mp4_i32 readBITR(MP4HandleImp handle, bitrateAtom *bitr); |
779 mp4_i32 readDAMR(MP4HandleImp handle, amrDecSpecStruc *damr); |
796 mp4_i32 readDAMR(MP4HandleImp handle, amrDecSpecStruc *damr); |
|
797 mp4_i32 readMeta(MP4HandleImp handle, metaAtom *meta); |
780 /* avc inclusions*/ |
798 /* avc inclusions*/ |
781 mp4_i32 readAVC1(MP4HandleImp handle, avcSampleEntry *avc1); |
799 mp4_i32 readAVC1(MP4HandleImp handle, avcSampleEntry *avc1); |
782 mp4_i32 readSDTP(MP4HandleImp handle, sampleDependencyAtom *sdtp, mp4_i32 sample_count); |
800 mp4_i32 readSDTP(MP4HandleImp handle, sampleDependencyAtom *sdtp, mp4_i32 sample_count); |
783 /* QCELP 13k inclusions */ |
801 /* QCELP 13k inclusions */ |
784 mp4_i32 readSQCP(MP4HandleImp handle, qcelpSampleEntry *sqcp); |
802 mp4_i32 readSQCP(MP4HandleImp handle, qcelpSampleEntry *sqcp); |
785 mp4_i32 readDQCP(MP4HandleImp handle, qcelpDecSpecStruc *dqcp); |
803 mp4_i32 readDQCP(MP4HandleImp handle, qcelpDecSpecStruc *dqcp); |
|
804 /* inline related */ |
|
805 mp4_i32 readID32(MP4HandleImp handle, ID32Atom *ID32); |
786 |
806 |
787 mp4_i32 freeFTYP(fileTypeAtom *ftyp); |
807 mp4_i32 freeFTYP(fileTypeAtom *ftyp); |
788 mp4_i32 freeMOOV(movieAtom *moov); |
808 mp4_i32 freeMOOV(movieAtom *moov); |
789 mp4_i32 freeAtomHeader(atomHeader *atomhdr); |
809 mp4_i32 freeAtomHeader(atomHeader *atomhdr); |
790 mp4_i32 freeMVHD(movieHeaderAtom *mvhd); |
810 mp4_i32 freeMVHD(movieHeaderAtom *mvhd); |
824 mp4_i32 freeSTSH(shadowSyncSampleAtom *stsh); |
844 mp4_i32 freeSTSH(shadowSyncSampleAtom *stsh); |
825 mp4_i32 freeIODS(objectDescriptorAtom *iods); |
845 mp4_i32 freeIODS(objectDescriptorAtom *iods); |
826 mp4_i32 readUDTA(MP4HandleImp handle, userDataAtom *udta); |
846 mp4_i32 readUDTA(MP4HandleImp handle, userDataAtom *udta); |
827 mp4_i32 freeUDTA(userDataAtom *udta); |
847 mp4_i32 freeUDTA(userDataAtom *udta); |
828 mp4_i32 freeSDTP(sampleDependencyAtom* sdtp); |
848 mp4_i32 freeSDTP(sampleDependencyAtom* sdtp); |
|
849 mp4_i32 freeMETA(metaAtom *meta); |
829 /* The following and AVC related */ |
850 /* The following and AVC related */ |
830 mp4_i32 freeAVC1(avcSampleEntry *avc1); |
851 mp4_i32 freeAVC1(avcSampleEntry *avc1); |
831 mp4_i32 freeM4DS(mpeg4ExtensionDescriptorsAtom *m4ds); |
852 mp4_i32 freeM4DS(mpeg4ExtensionDescriptorsAtom *m4ds); |
832 mp4_i32 freeBTRT(mpeg4BitrateAtom *btrt); |
853 mp4_i32 freeBTRT(mpeg4BitrateAtom *btrt); |
833 mp4_i32 freeAVCC(avcConfigurationAtom *avcc); |
854 mp4_i32 freeAVCC(avcConfigurationAtom *avcc); |
834 /* QCELP 13K related */ |
855 /* QCELP 13K related */ |
835 mp4_i32 freeSQCP(qcelpSampleEntry *sqcp); |
856 mp4_i32 freeSQCP(qcelpSampleEntry *sqcp); |
836 mp4_i32 freeDQCP(qcelpDecSpecStruc *dqcp); |
857 mp4_i32 freeDQCP(qcelpDecSpecStruc *dqcp); |
|
858 /* inline related */ |
|
859 mp4_i32 freeID32(ID32Atom *ID32); |
837 |
860 |
838 mp4_i32 determineVideoLength(MP4HandleImp handle, mp4_u32 *videolength); |
861 mp4_i32 determineVideoLength(MP4HandleImp handle, mp4_u32 *videolength); |
839 mp4_i32 determineFrameRate(MP4HandleImp handle, mp4_double *framerate); |
862 mp4_i32 determineFrameRate(MP4HandleImp handle, mp4_double *framerate); |
840 mp4_i32 determineVideoType(MP4HandleImp handle, mp4_u32 *videotype); |
863 mp4_i32 determineVideoType(MP4HandleImp handle, mp4_u32 *videotype); |
841 mp4_i32 determineVideoResolution(MP4HandleImp handle, mp4_u32 *videowidth, mp4_u32 *videoheight); |
864 mp4_i32 determineVideoResolution(MP4HandleImp handle, mp4_u32 *videowidth, mp4_u32 *videoheight); |