GF_Err gf_isom_box_write_listing()

in src/isomedia/box_funcs.c [2018:2481]


GF_Err gf_isom_box_write_listing(GF_Box *a, GF_BitStream *bs)
{
	switch (a->type) {
	case GF_ISOM_BOX_TYPE_REFT:
		return reftype_Write(a, bs);
	case GF_ISOM_BOX_TYPE_FREE:
	case GF_ISOM_BOX_TYPE_SKIP:
		return free_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MDAT:
		return mdat_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MOOV:
		return moov_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MVHD:
		return mvhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MDHD:
		return mdhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_VMHD:
		return vmhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SMHD:
		return smhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HMHD:
		return hmhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ODHD:
	case GF_ISOM_BOX_TYPE_CRHD:
	case GF_ISOM_BOX_TYPE_SDHD:
	case GF_ISOM_BOX_TYPE_NMHD:
	case GF_ISOM_BOX_TYPE_STHD:
		return nmhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STBL:
		return stbl_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DINF:
		return dinf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_URL:
		return url_Write(a, bs);
	case GF_ISOM_BOX_TYPE_URN:
		return urn_Write(a, bs);
	case GF_ISOM_BOX_TYPE_CHPL:
		return chpl_Write(a, bs);
	case GF_ISOM_BOX_TYPE_CPRT:
		return cprt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_KIND:
		return kind_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HDLR:
		return hdlr_Write(a, bs);
	case GF_ISOM_BOX_TYPE_IODS:
		return iods_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TRAK:
		return trak_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MP4S:
		return mp4s_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MP4V:
		return mp4v_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MP4A:
		return mp4a_Write(a, bs);
	case GF_ISOM_BOX_TYPE_GNRM:
		return gnrm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_GNRV:
		return gnrv_Write(a, bs);
	case GF_ISOM_BOX_TYPE_GNRA:
		return gnra_Write(a, bs);
	case GF_ISOM_BOX_TYPE_EDTS:
		return edts_Write(a, bs);
	case GF_ISOM_BOX_TYPE_UDTA:
		return udta_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DREF:
		return dref_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STSD:
		return stsd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STTS:
		return stts_Write(a, bs);
	case GF_ISOM_BOX_TYPE_CTTS:
		return ctts_Write(a, bs);
	case GF_ISOM_BOX_TYPE_CSLG:
		return cslg_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STSH:
		return stsh_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ELST:
		return elst_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STSC:
		return stsc_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STZ2:
	case GF_ISOM_BOX_TYPE_STSZ:
		return stsz_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STCO:
		return stco_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STSS:
		return stss_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STDP:
		return stdp_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SDTP:
		return sdtp_Write(a, bs);
	case GF_ISOM_BOX_TYPE_CO64:
		return co64_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ESDS:
		return esds_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MINF:
		return minf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TKHD:
		return tkhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TREF:
		return tref_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MDIA:
		return mdia_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ELNG:
		return elng_Write(a, bs);
	case GF_ISOM_BOX_TYPE_FTYP:
	case GF_ISOM_BOX_TYPE_STYP:
		return ftyp_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PADB:
		return padb_Write(a, bs);
	case GF_ISOM_BOX_TYPE_VOID:
		return void_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STSF:
		return stsf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PDIN:
		return pdin_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SBGP:
		return sbgp_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SGPD:
		return sgpd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SAIZ:
		return saiz_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SAIO:
		return saio_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PSSH:
		return pssh_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TENC:
		return tenc_Write(a, bs);

#ifndef GPAC_DISABLE_ISOM_HINTING
	case GF_ISOM_BOX_TYPE_RTP_STSD:
		return ghnt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_RTPO:
		return rtpo_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HNTI:
		return hnti_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SDP:
		return sdp_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HINF:
		return hinf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_RELY:
		return rely_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TIMS:
		return tims_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TSRO:
		return tsro_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SNRO:
		return snro_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TRPY:
		return trpy_Write(a, bs);
	case GF_ISOM_BOX_TYPE_NUMP:
		return nump_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TOTL:
		return totl_Write(a, bs);
	case GF_ISOM_BOX_TYPE_NPCK:
		return npck_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TPYL:
		return tpyl_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TPAY:
		return tpay_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MAXR:
		return maxr_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DMED:
		return dmed_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DIMM:
		return dimm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DREP:
		return drep_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TMIN:
		return tmin_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TMAX:
		return tmax_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PMAX:
		return pmax_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DMAX:
		return dmax_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PAYT:
		return payt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_NAME:
		return name_Write(a, bs);
#endif /*GPAC_DISABLE_ISOM_HINTING*/

#ifndef	GPAC_DISABLE_ISOM_FRAGMENTS
	case GF_ISOM_BOX_TYPE_MVEX:
		return mvex_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MEHD:
		return mehd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TREX:
		return trex_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TREP:
		return trep_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MOOF:
		return moof_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MFHD:
		return mfhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TRAF:
		return traf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TFHD:
		return tfhd_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TFDT:
		return tfdt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TRUN:
		return trun_Write(a, bs);
#endif

	/*3GPP boxes*/
	case GF_ISOM_SUBTYPE_3GP_AMR:
	case GF_ISOM_SUBTYPE_3GP_AMR_WB:
	case GF_ISOM_SUBTYPE_3GP_EVRC:
	case GF_ISOM_SUBTYPE_3GP_QCELP:
	case GF_ISOM_SUBTYPE_3GP_SMV:
		return gppa_Write(a, bs);
	case GF_ISOM_SUBTYPE_3GP_H263:
		return gppv_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DAMR:
	case GF_ISOM_BOX_TYPE_DEVC:
	case GF_ISOM_BOX_TYPE_DQCP:
	case GF_ISOM_BOX_TYPE_DSMV:
	case GF_ISOM_BOX_TYPE_D263:
		return gppc_Write(a, bs);

	case GF_ISOM_BOX_TYPE_AVCC:
	case GF_ISOM_BOX_TYPE_SVCC:
		return avcc_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HVCC:
	case GF_ISOM_BOX_TYPE_SHCC:
		return hvcc_Write(a, bs);
	case GF_ISOM_BOX_TYPE_BTRT:
		return btrt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_M4DS:
		return m4ds_Write(a, bs);
	case GF_ISOM_BOX_TYPE_AVC1:
	case GF_ISOM_BOX_TYPE_AVC2:
	case GF_ISOM_BOX_TYPE_AVC3:
	case GF_ISOM_BOX_TYPE_AVC4:
	case GF_ISOM_BOX_TYPE_SVC1:
	case GF_ISOM_BOX_TYPE_HVC1:
	case GF_ISOM_BOX_TYPE_HEV1:
	case GF_ISOM_BOX_TYPE_HVC2:
	case GF_ISOM_BOX_TYPE_HEV2:
	case GF_ISOM_BOX_TYPE_SHC1:
	case GF_ISOM_BOX_TYPE_SHV1:
	case GF_ISOM_BOX_TYPE_HVT1:
		return mp4v_Write(a, bs);

	/*3GPP streaming text*/
	case GF_ISOM_BOX_TYPE_FTAB:
		return ftab_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TX3G:
		return tx3g_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TEXT:
		return text_Write(a, bs);
	case GF_ISOM_BOX_TYPE_STYL:
		return styl_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HLIT:
		return hlit_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HCLR:
		return hclr_Write(a, bs);
	case GF_ISOM_BOX_TYPE_KROK:
		return krok_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DLAY:
		return dlay_Write(a, bs);
	case GF_ISOM_BOX_TYPE_HREF:
		return href_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TBOX:
		return tbox_Write(a, bs);
	case GF_ISOM_BOX_TYPE_BLNK:
		return blnk_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TWRP:
		return twrp_Write(a, bs);

	/* ISMA 1.0 Encryption and Authentication V 1.0 */
	case GF_ISOM_BOX_TYPE_IKMS:
		return iKMS_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ISFM:
		return iSFM_Write(a, bs);

	/* ISO FF extensions for MPEG-21 */
	case GF_ISOM_BOX_TYPE_META:
		return meta_Write(a, bs);
	case GF_ISOM_BOX_TYPE_XML:
		return xml_Write(a, bs);
	case GF_ISOM_BOX_TYPE_BXML:
		return bxml_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ILOC:
		return iloc_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PITM:
		return pitm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_IPRO:
		return ipro_Write(a, bs);
	case GF_ISOM_BOX_TYPE_INFE:
		return infe_Write(a, bs);
	case GF_ISOM_BOX_TYPE_IINF:
		return iinf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SINF:
		return sinf_Write(a, bs);
	case GF_ISOM_BOX_TYPE_FRMA:
		return frma_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SCHM:
		return schm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SCHI:
		return schi_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ENCA:
		return mp4a_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ENCV:
		return mp4v_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ENCS:
		return mp4s_Write(a, bs);

	case GF_ISOM_BOX_TYPE_SENC:
		return senc_Write(a, bs);

	case GF_ISOM_BOX_TYPE_UUID:
		switch ( ((GF_UnknownUUIDBox *)a)->internal_4cc) {
		case GF_ISOM_BOX_UUID_TENC:
			return piff_tenc_Write(a, bs);
		case GF_ISOM_BOX_UUID_PSEC:
			return piff_psec_Write(a, bs);
		case GF_ISOM_BOX_UUID_PSSH:
			return piff_pssh_Write(a, bs);
		case GF_ISOM_BOX_UUID_TFRF:
		case GF_ISOM_BOX_UUID_TFXD:
		default:
			return uuid_Write(a, bs);
		}

#ifndef GPAC_DISABLE_ISOM_ADOBE
	/* Adobe extensions */
	case GF_ISOM_BOX_TYPE_ABST:
		return abst_Write(a, bs);
	case GF_ISOM_BOX_TYPE_AFRA:
		return afra_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ASRT:
		return asrt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_AFRT:
		return afrt_Write(a, bs);
#endif

	/* Apple extensions */
	case GF_ISOM_BOX_TYPE_ILST:
		return ilst_Write(a, bs);

	case GF_ISOM_BOX_TYPE_0xA9NAM:
	case GF_ISOM_BOX_TYPE_0xA9CMT:
	case GF_ISOM_BOX_TYPE_0xA9DAY:
	case GF_ISOM_BOX_TYPE_0xA9ART:
	case GF_ISOM_BOX_TYPE_0xA9TRK:
	case GF_ISOM_BOX_TYPE_0xA9ALB:
	case GF_ISOM_BOX_TYPE_0xA9COM:
	case GF_ISOM_BOX_TYPE_0xA9WRT:
	case GF_ISOM_BOX_TYPE_0xA9TOO:
	case GF_ISOM_BOX_TYPE_0xA9CPY:
	case GF_ISOM_BOX_TYPE_0xA9DES:
	case GF_ISOM_BOX_TYPE_0xA9GEN:
	case GF_ISOM_BOX_TYPE_0xA9GRP:
	case GF_ISOM_BOX_TYPE_0xA9ENC:
	case GF_ISOM_BOX_TYPE_aART:
	case GF_ISOM_BOX_TYPE_GNRE:
	case GF_ISOM_BOX_TYPE_DISK:
	case GF_ISOM_BOX_TYPE_TRKN:
	case GF_ISOM_BOX_TYPE_TMPO:
	case GF_ISOM_BOX_TYPE_CPIL:
	case GF_ISOM_BOX_TYPE_PGAP:
	case GF_ISOM_BOX_TYPE_COVR:
		return ListItem_Write(a, bs);

	case GF_ISOM_BOX_TYPE_DATA:
		return data_Write(a, bs);

	case GF_ISOM_BOX_TYPE_OHDR:
		return ohdr_Write(a, bs);
	case GF_ISOM_BOX_TYPE_GRPI:
		return grpi_Write(a, bs);
	case GF_ISOM_BOX_TYPE_MDRI:
		return mdri_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ODTT:
		return odtt_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ODRB:
		return odrb_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ODKM:
		return odkm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ODAF:
		return iSFM_Write(a, bs);

	case GF_ISOM_BOX_TYPE_PASP:
		return pasp_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TSEL:
		return tsel_Write(a, bs);

	case GF_ISOM_BOX_TYPE_METX:
	case GF_ISOM_BOX_TYPE_METT:
		return metx_Write(a, bs);

	case GF_ISOM_BOX_TYPE_DIMS:
		return dims_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DIMC:
		return dimC_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DIST:
		return diST_Write(a, bs);

	case GF_ISOM_BOX_TYPE_AC3:
		return ac3_Write(a, bs);
	case GF_ISOM_BOX_TYPE_DAC3:
		return dac3_Write(a, bs);

	case GF_ISOM_BOX_TYPE_LSRC:
		return lsrc_Write(a, bs);
	case GF_ISOM_BOX_TYPE_LSR1:
		return lsr1_Write(a, bs);

	case GF_ISOM_BOX_TYPE_SIDX:
		return sidx_Write(a, bs);
	case GF_ISOM_BOX_TYPE_PCRB:
		return pcrb_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SUBS:
		return subs_Write(a, bs);
	case GF_ISOM_BOX_TYPE_RVCC:
		return rvcc_Write(a, bs);

#ifndef GPAC_DISABLE_TTXT
	case GF_ISOM_BOX_TYPE_STXT:
		return metx_Write(a, bs);
	case GF_ISOM_BOX_TYPE_TXTC:
		return txtc_Write(a, bs);

	case GF_ISOM_BOX_TYPE_VTCU:
		return vtcu_Write(a, bs);
	case GF_ISOM_BOX_TYPE_VTTE:
		return vtte_Write(a, bs);
	case GF_ISOM_BOX_TYPE_VTTC:
	case GF_ISOM_BOX_TYPE_CTIM:
	case GF_ISOM_BOX_TYPE_IDEN:
	case GF_ISOM_BOX_TYPE_STTG:
	case GF_ISOM_BOX_TYPE_PAYL:
	case GF_ISOM_BOX_TYPE_VTTA:
		return boxstring_Write(a, bs);
	case GF_ISOM_BOX_TYPE_WVTT:
		return wvtt_Write(a, bs);

	case GF_ISOM_BOX_TYPE_STPP:
		return metx_Write(a, bs);
	case GF_ISOM_BOX_TYPE_SBTT:
		return metx_Write(a, bs);
#endif//GPAC_DISABLE_TTXT

	case GF_ISOM_BOX_TYPE_ADKM:
		return adkm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_AHDR:
		return ahdr_Write(a, bs);
	case GF_ISOM_BOX_TYPE_APRM:
		return aprm_Write(a, bs);
	case GF_ISOM_BOX_TYPE_AEIB:
		return aeib_Write(a, bs);
	case GF_ISOM_BOX_TYPE_AKEY:
		return akey_Write(a, bs);
	case GF_ISOM_BOX_TYPE_FLXS:
		return flxs_Write(a, bs);
	case GF_ISOM_BOX_TYPE_ADAF:
		return adaf_Write(a, bs);

	default:
		return defa_Write(a, bs);
	}
}