LCOV - code coverage report
Current view: top level - odf - desc_private.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 225 235 95.7 %
Date: 2021-04-29 23:48:07 Functions: 9 9 100.0 %

          Line data    Source code
       1             : /*
       2             :  *                      GPAC - Multimedia Framework C SDK
       3             :  *
       4             :  *                      Authors: Jean Le Feuvre
       5             :  *                      Copyright (c) Telecom ParisTech 2000-2012
       6             :  *                                      All rights reserved
       7             :  *
       8             :  *  This file is part of GPAC / MPEG-4 ObjectDescriptor sub-project
       9             :  *
      10             :  *  GPAC is free software; you can redistribute it and/or modify
      11             :  *  it under the terms of the GNU Lesser General Public License as published by
      12             :  *  the Free Software Foundation; either version 2, or (at your option)
      13             :  *  any later version.
      14             :  *
      15             :  *  GPAC is distributed in the hope that it will be useful,
      16             :  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
      17             :  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18             :  *  GNU Lesser General Public License for more details.
      19             :  *
      20             :  *  You should have received a copy of the GNU Lesser General Public
      21             :  *  License along with this library; see the file COPYING.  If not, write to
      22             :  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
      23             :  *
      24             :  */
      25             : 
      26             : #include <gpac/internal/odf_dev.h>
      27             : 
      28             : 
      29             : //
      30             : //              CONSTRUCTORS
      31             : //
      32       32218 : GF_Descriptor *gf_odf_create_descriptor(u8 tag)
      33             : {
      34             :         GF_Descriptor *desc;
      35             : 
      36       32218 :         switch (tag) {
      37         390 :         case GF_ODF_IOD_TAG:
      38         390 :                 return gf_odf_new_iod();
      39         701 :         case GF_ODF_OD_TAG:
      40         701 :                 return gf_odf_new_od();
      41        8059 :         case GF_ODF_ESD_TAG:
      42        8059 :                 return gf_odf_new_esd();
      43        7893 :         case GF_ODF_DCD_TAG:
      44        7893 :                 return gf_odf_new_dcd();
      45        3971 :         case GF_ODF_SLC_TAG:
      46             :                 //default : we create it without any predefinition...
      47        3971 :                 return gf_odf_new_slc(0);
      48         245 :         case GF_ODF_MUXINFO_TAG:
      49         245 :                 return gf_odf_new_muxinfo();
      50         421 :         case GF_ODF_BIFS_CFG_TAG:
      51         421 :                 return gf_odf_new_bifs_cfg();
      52          33 :         case GF_ODF_UI_CFG_TAG:
      53          33 :                 return gf_odf_new_ui_cfg();
      54          10 :         case GF_ODF_TEXT_CFG_TAG:
      55          10 :                 return gf_odf_new_text_cfg();
      56          62 :         case GF_ODF_TX3G_TAG:
      57          62 :                 return gf_odf_new_tx3g();
      58           1 :         case GF_ODF_ELEM_MASK_TAG:
      59           1 :                 return gf_odf_New_ElemMask();
      60           2 :         case GF_ODF_LASER_CFG_TAG:
      61           2 :                 return gf_odf_new_laser_cfg();
      62             : 
      63        7264 :         case GF_ODF_DSI_TAG:
      64        7264 :                 desc = gf_odf_new_default();
      65        7264 :                 if (!desc) return desc;
      66        7264 :                 desc->tag = GF_ODF_DSI_TAG;
      67        7264 :                 return desc;
      68             : 
      69          10 :         case GF_ODF_AUX_VIDEO_DATA:
      70          10 :                 return gf_odf_new_auxvid();
      71             : 
      72          33 :         case GF_ODF_SEGMENT_TAG:
      73          33 :                 return gf_odf_new_segment();
      74             : 
      75             :         //File Format Specific
      76        1857 :         case GF_ODF_ISOM_IOD_TAG:
      77        1857 :                 return gf_odf_new_isom_iod();
      78         232 :         case GF_ODF_ISOM_OD_TAG:
      79         232 :                 return gf_odf_new_isom_od();
      80         391 :         case GF_ODF_ESD_INC_TAG:
      81         391 :                 return gf_odf_new_esd_inc();
      82         314 :         case GF_ODF_ESD_REF_TAG:
      83         314 :                 return gf_odf_new_esd_ref();
      84         311 :         case GF_ODF_LANG_TAG:
      85         311 :                 return gf_odf_new_lang();
      86          18 :         case GF_ODF_GPAC_LANG:
      87          18 :                 desc = gf_odf_new_lang();
      88          18 :                 if (desc) desc->tag = GF_ODF_GPAC_LANG;
      89             :                 return desc;
      90             : 
      91             : #ifndef GPAC_MINIMAL_ODF
      92             :         case GF_ODF_MEDIATIME_TAG:
      93             :                 return gf_odf_new_mediatime();
      94             :         case GF_ODF_CI_TAG:
      95             :                 return gf_odf_new_ci();
      96             :         case GF_ODF_SCI_TAG:
      97             :                 return gf_odf_new_sup_cid();
      98             :         case GF_ODF_IPI_PTR_TAG:
      99             :                 return gf_odf_new_ipi_ptr();
     100             :         //special case for the file format
     101             :         case GF_ODF_ISOM_IPI_PTR_TAG:
     102             :                 desc = gf_odf_new_ipi_ptr();
     103             :                 if (!desc) return desc;
     104             :                 desc->tag = GF_ODF_ISOM_IPI_PTR_TAG;
     105             :                 return desc;
     106             : 
     107             :         case GF_ODF_IPMP_PTR_TAG:
     108             :                 return gf_odf_new_ipmp_ptr();
     109             :         case GF_ODF_IPMP_TAG:
     110             :                 return gf_odf_new_ipmp();
     111             :         case GF_ODF_QOS_TAG:
     112             :                 return gf_odf_new_qos();
     113             :         case GF_ODF_REG_TAG:
     114             :                 return gf_odf_new_reg();
     115             :         case GF_ODF_CC_TAG:
     116             :                 return gf_odf_new_cc();
     117             :         case GF_ODF_KW_TAG:
     118             :                 return gf_odf_new_kw();
     119             :         case GF_ODF_RATING_TAG:
     120             :                 return gf_odf_new_rating();
     121             :         case GF_ODF_SHORT_TEXT_TAG:
     122             :                 return gf_odf_new_short_text();
     123             :         case GF_ODF_TEXT_TAG:
     124             :                 return gf_odf_new_exp_text();
     125             :         case GF_ODF_CC_NAME_TAG:
     126             :                 return gf_odf_new_cc_name();
     127             :         case GF_ODF_CC_DATE_TAG:
     128             :                 return gf_odf_new_cc_date();
     129             :         case GF_ODF_OCI_NAME_TAG:
     130             :                 return gf_odf_new_oci_name();
     131             :         case GF_ODF_OCI_DATE_TAG:
     132             :                 return gf_odf_new_oci_date();
     133             :         case GF_ODF_SMPTE_TAG:
     134             :                 return gf_odf_new_smpte_camera();
     135             :         case GF_ODF_EXT_PL_TAG:
     136             :                 return gf_odf_new_pl_ext();
     137             :         case GF_ODF_PL_IDX_TAG:
     138             :                 return gf_odf_new_pl_idx();
     139             : 
     140             :         case GF_ODF_IPMP_TL_TAG:
     141             :                 return gf_odf_new_ipmp_tool_list();
     142             :         case GF_ODF_IPMP_TOOL_TAG:
     143             :                 return gf_odf_new_ipmp_tool();
     144             : 
     145             :         case 0:
     146             :         case 0xFF:
     147             :                 return NULL;
     148             : #endif /*GPAC_MINIMAL_ODF*/
     149           0 :         default:
     150             :                 //ISO Reserved
     151           0 :                 if ( (tag >= GF_ODF_ISO_RES_BEGIN_TAG) &&
     152             :                         (tag <= GF_ODF_ISO_RES_END_TAG) ) {
     153             :                         return NULL;
     154             :                 }
     155           0 :                 desc = gf_odf_new_default();
     156           0 :                 if (!desc) return desc;
     157           0 :                 desc->tag = tag;
     158           0 :                 return desc;
     159             :         }
     160             : }
     161             : 
     162             : //
     163             : //              DESTRUCTORS
     164             : //
     165       36661 : GF_Err gf_odf_delete_descriptor(GF_Descriptor *desc)
     166             : {
     167       36661 :         switch (desc->tag) {
     168         963 :         case GF_ODF_IOD_TAG :
     169         963 :                 return gf_odf_del_iod((GF_InitialObjectDescriptor *)desc);
     170         797 :         case GF_ODF_OD_TAG:
     171         797 :                 return gf_odf_del_od((GF_ObjectDescriptor *)desc);
     172        8059 :         case GF_ODF_ESD_TAG :
     173        8059 :                 return gf_odf_del_esd((GF_ESD *)desc);
     174        7893 :         case GF_ODF_DCD_TAG :
     175        7893 :                 return gf_odf_del_dcd((GF_DecoderConfig *)desc);
     176        7547 :         case GF_ODF_SLC_TAG:
     177        7547 :                 return gf_odf_del_slc((GF_SLConfig *)desc);
     178             : 
     179        1893 :         case GF_ODF_ISOM_IOD_TAG:
     180        1893 :                 return gf_odf_del_isom_iod((GF_IsomInitialObjectDescriptor *)desc);
     181         349 :         case GF_ODF_ISOM_OD_TAG:
     182         349 :                 return gf_odf_del_isom_od((GF_IsomObjectDescriptor *)desc);
     183             : 
     184          33 :         case GF_ODF_SEGMENT_TAG:
     185          33 :                 return gf_odf_del_segment((GF_Segment *) desc);
     186             : 
     187         245 :         case GF_ODF_MUXINFO_TAG:
     188         245 :                 return gf_odf_del_muxinfo((GF_MuxInfo *)desc);
     189         421 :         case GF_ODF_BIFS_CFG_TAG:
     190         421 :                 return gf_odf_del_bifs_cfg((GF_BIFSConfig *)desc);
     191          33 :         case GF_ODF_UI_CFG_TAG:
     192          33 :                 return gf_odf_del_ui_cfg((GF_UIConfig *)desc);
     193          10 :         case GF_ODF_TEXT_CFG_TAG:
     194          10 :                 return gf_odf_del_text_cfg((GF_TextConfig *)desc);
     195         107 :         case GF_ODF_TX3G_TAG:
     196         107 :                 return gf_odf_del_tx3g((GF_TextSampleDescriptor*)desc);
     197           1 :         case GF_ODF_ELEM_MASK_TAG:
     198           1 :                 return gf_odf_del_ElemMask((GF_ElementaryMask*)desc);
     199           2 :         case GF_ODF_LASER_CFG_TAG:
     200           2 :                 return gf_odf_del_laser_cfg((GF_LASERConfig *)desc);
     201             : 
     202          10 :         case GF_ODF_AUX_VIDEO_DATA:
     203          10 :                 return gf_odf_del_auxvid((GF_AuxVideoDescriptor *)desc);
     204             : 
     205         329 :         case GF_ODF_LANG_TAG:
     206             :         case GF_ODF_GPAC_LANG:
     207         329 :                 return gf_odf_del_lang((GF_Language *)desc);
     208             : 
     209         391 :         case GF_ODF_ESD_INC_TAG:
     210         391 :                 return gf_odf_del_esd_inc((GF_ES_ID_Inc *)desc);
     211         314 :         case GF_ODF_ESD_REF_TAG:
     212         314 :                 return gf_odf_del_esd_ref((GF_ES_ID_Ref *)desc);
     213             : 
     214             : #ifndef GPAC_MINIMAL_ODF
     215             :         case GF_ODF_MEDIATIME_TAG:
     216             :                 return gf_odf_del_mediatime((GF_MediaTime *) desc);
     217             :         case GF_ODF_CC_TAG:
     218             :                 return gf_odf_del_cc((GF_CCDescriptor *)desc);
     219             :         case GF_ODF_CC_DATE_TAG:
     220             :                 return gf_odf_del_cc_date((GF_CC_Date *)desc);
     221             :         case GF_ODF_CC_NAME_TAG:
     222             :                 return gf_odf_del_cc_name((GF_CC_Name *)desc);
     223             :         case GF_ODF_CI_TAG:
     224             :                 return gf_odf_del_ci((GF_CIDesc *)desc);
     225             :         case GF_ODF_TEXT_TAG:
     226             :                 return gf_odf_del_exp_text((GF_ExpandedTextual *)desc);
     227             :         case GF_ODF_EXT_PL_TAG:
     228             :                 return gf_odf_del_pl_ext((GF_PLExt *)desc);
     229             :         case GF_ODF_IPI_PTR_TAG:
     230             :         case GF_ODF_ISOM_IPI_PTR_TAG:
     231             :                 return gf_odf_del_ipi_ptr((GF_IPIPtr *)desc);
     232             :         case GF_ODF_IPMP_TAG:
     233             :                 return gf_odf_del_ipmp((GF_IPMP_Descriptor *)desc);
     234             :         case GF_ODF_IPMP_PTR_TAG:
     235             :                 return gf_odf_del_ipmp_ptr((GF_IPMPPtr *)desc);
     236             :         case GF_ODF_KW_TAG:
     237             :                 return gf_odf_del_kw((GF_KeyWord *)desc);
     238             :         case GF_ODF_OCI_DATE_TAG:
     239             :                 return gf_odf_del_oci_date((GF_OCI_Data *)desc);
     240             :         case GF_ODF_OCI_NAME_TAG:
     241             :                 return gf_odf_del_oci_name((GF_OCICreators *)desc);
     242             :         case GF_ODF_PL_IDX_TAG:
     243             :                 return gf_odf_del_pl_idx((GF_PL_IDX *)desc);
     244             :         case GF_ODF_QOS_TAG:
     245             :                 return gf_odf_del_qos((GF_QoS_Descriptor *)desc);
     246             :         case GF_ODF_RATING_TAG:
     247             :                 return gf_odf_del_rating((GF_Rating *)desc);
     248             :         case GF_ODF_REG_TAG:
     249             :                 return gf_odf_del_reg((GF_Registration *)desc);
     250             :         case GF_ODF_SHORT_TEXT_TAG:
     251             :                 return gf_odf_del_short_text((GF_ShortTextual *)desc);
     252             :         case GF_ODF_SMPTE_TAG:
     253             :                 return gf_odf_del_smpte_camera((GF_SMPTECamera *)desc);
     254             :         case GF_ODF_SCI_TAG:
     255             :                 return gf_odf_del_sup_cid((GF_SCIDesc *)desc);
     256             : 
     257             :         case GF_ODF_IPMP_TL_TAG:
     258             :                 return gf_odf_del_ipmp_tool_list((GF_IPMP_ToolList *)desc);
     259             :         case GF_ODF_IPMP_TOOL_TAG:
     260             :                 return gf_odf_del_ipmp_tool((GF_IPMP_Tool *)desc);
     261             : 
     262             : #endif /*GPAC_MINIMAL_ODF*/
     263             : 
     264        7264 :         default:
     265        7264 :                 return gf_odf_del_default((GF_DefaultDescriptor *)desc);
     266             :         }
     267             :         return GF_OK;
     268             : }
     269             : 
     270             : 
     271             : 
     272             : 
     273             : //
     274             : //              READERS
     275             : //
     276       17444 : GF_Err gf_odf_read_descriptor(GF_BitStream *bs, GF_Descriptor *desc, u32 DescSize)
     277             : {
     278       17444 :         switch (desc->tag) {
     279           4 :         case GF_ODF_IOD_TAG :
     280           4 :                 return gf_odf_read_iod(bs, (GF_InitialObjectDescriptor *)desc, DescSize);
     281        3754 :         case GF_ODF_ESD_TAG :
     282        3754 :                 return gf_odf_read_esd(bs, (GF_ESD *)desc, DescSize);
     283        3752 :         case GF_ODF_DCD_TAG :
     284        3752 :                 return gf_odf_read_dcd(bs, (GF_DecoderConfig *)desc, DescSize);
     285        3893 :         case GF_ODF_SLC_TAG :
     286        3893 :                 return gf_odf_read_slc(bs, (GF_SLConfig *)desc, DescSize);
     287         323 :         case GF_ODF_OD_TAG:
     288         323 :                 return gf_odf_read_od(bs, (GF_ObjectDescriptor *)desc, DescSize);
     289             : 
     290             :         //MP4 File Format
     291        1383 :         case GF_ODF_ISOM_IOD_TAG:
     292        1383 :                 return gf_odf_read_isom_iod(bs, (GF_IsomInitialObjectDescriptor *)desc, DescSize);
     293         196 :         case GF_ODF_ISOM_OD_TAG:
     294         196 :                 return gf_odf_read_isom_od(bs, (GF_IsomObjectDescriptor *)desc, DescSize);
     295         297 :         case GF_ODF_ESD_INC_TAG:
     296         297 :                 return gf_odf_read_esd_inc(bs, (GF_ES_ID_Inc *)desc, DescSize);
     297         199 :         case GF_ODF_ESD_REF_TAG:
     298         199 :                 return gf_odf_read_esd_ref(bs, (GF_ES_ID_Ref *)desc, DescSize);
     299             : 
     300          18 :         case GF_ODF_SEGMENT_TAG:
     301          18 :                 return gf_odf_read_segment(bs, (GF_Segment *) desc, DescSize);
     302           0 :         case GF_ODF_MUXINFO_TAG:
     303           0 :                 GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[ODF] MuxInfo descriptor cannot be read, wrong serialization or conflict with other user-space OD tags\n"));
     304             :                 return GF_NON_COMPLIANT_BITSTREAM;
     305             : 
     306           2 :         case GF_ODF_AUX_VIDEO_DATA:
     307           2 :                 return gf_odf_read_auxvid(bs, (GF_AuxVideoDescriptor *)desc, DescSize);
     308             : 
     309          19 :         case GF_ODF_LANG_TAG:
     310             :         case GF_ODF_GPAC_LANG:
     311          19 :                 return gf_odf_read_lang(bs, (GF_Language *)desc, DescSize);
     312             : 
     313             : #ifndef GPAC_MINIMAL_ODF
     314             :         case GF_ODF_MEDIATIME_TAG:
     315             :                 return gf_odf_read_mediatime(bs, (GF_MediaTime *) desc, DescSize);
     316             :         case GF_ODF_IPMP_TAG:
     317             :                 return gf_odf_read_ipmp(bs, (GF_IPMP_Descriptor *)desc, DescSize);
     318             :         case GF_ODF_IPMP_PTR_TAG:
     319             :                 return gf_odf_read_ipmp_ptr(bs, (GF_IPMPPtr *)desc, DescSize);
     320             : 
     321             :         case GF_ODF_CC_TAG:
     322             :                 return gf_odf_read_cc(bs, (GF_CCDescriptor *)desc, DescSize);
     323             :         case GF_ODF_CC_DATE_TAG:
     324             :                 return gf_odf_read_cc_date(bs, (GF_CC_Date *)desc, DescSize);
     325             :         case GF_ODF_CC_NAME_TAG:
     326             :                 return gf_odf_read_cc_name(bs, (GF_CC_Name *)desc, DescSize);
     327             :         case GF_ODF_CI_TAG:
     328             :                 return gf_odf_read_ci(bs, (GF_CIDesc *)desc, DescSize);
     329             :         case GF_ODF_TEXT_TAG:
     330             :                 return gf_odf_read_exp_text(bs, (GF_ExpandedTextual *)desc, DescSize);
     331             :         case GF_ODF_EXT_PL_TAG:
     332             :                 return gf_odf_read_pl_ext(bs, (GF_PLExt *)desc, DescSize);
     333             :         case GF_ODF_IPI_PTR_TAG:
     334             :         case GF_ODF_ISOM_IPI_PTR_TAG:
     335             :                 return gf_odf_read_ipi_ptr(bs, (GF_IPIPtr *)desc, DescSize);
     336             :         case GF_ODF_KW_TAG:
     337             :                 return gf_odf_read_kw(bs, (GF_KeyWord *)desc, DescSize);
     338             :         case GF_ODF_OCI_DATE_TAG:
     339             :                 return gf_odf_read_oci_date(bs, (GF_OCI_Data *)desc, DescSize);
     340             :         case GF_ODF_OCI_NAME_TAG:
     341             :                 return gf_odf_read_oci_name(bs, (GF_OCICreators *)desc, DescSize);
     342             :         case GF_ODF_PL_IDX_TAG:
     343             :                 return gf_odf_read_pl_idx(bs, (GF_PL_IDX *)desc, DescSize);
     344             :         case GF_ODF_QOS_TAG:
     345             :                 return gf_odf_read_qos(bs, (GF_QoS_Descriptor *)desc, DescSize);
     346             :         case GF_ODF_RATING_TAG:
     347             :                 return gf_odf_read_rating(bs, (GF_Rating *)desc, DescSize);
     348             :         case GF_ODF_REG_TAG:
     349             :                 return gf_odf_read_reg(bs, (GF_Registration *)desc, DescSize);
     350             :         case GF_ODF_SHORT_TEXT_TAG:
     351             :                 return gf_odf_read_short_text(bs, (GF_ShortTextual *)desc, DescSize);
     352             :         case GF_ODF_SMPTE_TAG:
     353             :                 return gf_odf_read_smpte_camera(bs, (GF_SMPTECamera *)desc, DescSize);
     354             :         case GF_ODF_SCI_TAG:
     355             :                 return gf_odf_read_sup_cid(bs, (GF_SCIDesc *)desc, DescSize);
     356             : 
     357             :         case GF_ODF_IPMP_TL_TAG:
     358             :                 return gf_odf_read_ipmp_tool_list(bs, (GF_IPMP_ToolList *)desc, DescSize);
     359             :         case GF_ODF_IPMP_TOOL_TAG:
     360             :                 return gf_odf_read_ipmp_tool(bs, (GF_IPMP_Tool *)desc, DescSize);
     361             : 
     362             : #endif /*GPAC_MINIMAL_ODF*/
     363             :         //default:
     364        3604 :         case GF_ODF_DSI_TAG:
     365             :         default:
     366        3604 :                 return gf_odf_read_default(bs, (GF_DefaultDescriptor *)desc, DescSize);
     367             :         }
     368             :         return GF_OK;
     369             : }
     370             : 
     371             : 
     372             : 
     373             : 
     374             : 
     375             : //
     376             : //              SIZE FUNCTION
     377             : //
     378       44169 : GF_Err gf_odf_size_descriptor(GF_Descriptor *desc, u32 *outSize)
     379             : {
     380       44169 :         switch(desc->tag) {
     381          83 :         case GF_ODF_IOD_TAG :
     382          83 :                 return gf_odf_size_iod((GF_InitialObjectDescriptor *)desc, outSize);
     383        6121 :         case GF_ODF_ESD_TAG :
     384        6121 :                 return gf_odf_size_esd((GF_ESD *)desc, outSize);
     385        9753 :         case GF_ODF_DCD_TAG :
     386        9753 :                 return gf_odf_size_dcd((GF_DecoderConfig *)desc, outSize);
     387        9894 :         case GF_ODF_SLC_TAG :
     388        9894 :                 return gf_odf_size_slc((GF_SLConfig *)desc, outSize);
     389             : 
     390         535 :         case GF_ODF_OD_TAG:
     391         535 :                 return gf_odf_size_od((GF_ObjectDescriptor *)desc, outSize);
     392        2999 :         case GF_ODF_ISOM_IOD_TAG:
     393        2999 :                 return gf_odf_size_isom_iod((GF_IsomInitialObjectDescriptor *)desc, outSize);
     394         330 :         case GF_ODF_ISOM_OD_TAG:
     395         330 :                 return gf_odf_size_isom_od((GF_IsomObjectDescriptor *)desc, outSize);
     396         775 :         case GF_ODF_ESD_INC_TAG:
     397         775 :                 return gf_odf_size_esd_inc((GF_ES_ID_Inc *)desc, outSize);
     398         534 :         case GF_ODF_ESD_REF_TAG:
     399         534 :                 return gf_odf_size_esd_ref((GF_ES_ID_Ref *)desc, outSize);
     400             : 
     401          48 :         case GF_ODF_SEGMENT_TAG:
     402          48 :                 return gf_odf_size_segment((GF_Segment *) desc, outSize);
     403         156 :         case GF_ODF_MUXINFO_TAG:
     404         156 :                 return gf_odf_size_muxinfo((GF_MuxInfo *) desc, outSize);
     405             : 
     406           8 :         case GF_ODF_AUX_VIDEO_DATA:
     407           8 :                 return gf_odf_size_auxvid((GF_AuxVideoDescriptor *)desc, outSize);
     408             : 
     409          33 :         case GF_ODF_LANG_TAG:
     410             :         case GF_ODF_GPAC_LANG:
     411          33 :                 return gf_odf_size_lang((GF_Language *)desc, outSize);
     412             : 
     413             : #ifndef GPAC_MINIMAL_ODF
     414             :         case GF_ODF_MEDIATIME_TAG:
     415             :                 return gf_odf_size_mediatime((GF_MediaTime *) desc, outSize);
     416             :         case GF_ODF_CC_TAG:
     417             :                 return gf_odf_size_cc((GF_CCDescriptor *)desc, outSize);
     418             :         case GF_ODF_CC_DATE_TAG:
     419             :                 return gf_odf_size_cc_date((GF_CC_Date *)desc, outSize);
     420             :         case GF_ODF_CC_NAME_TAG:
     421             :                 return gf_odf_size_cc_name((GF_CC_Name *)desc, outSize);
     422             :         case GF_ODF_CI_TAG:
     423             :                 return gf_odf_size_ci((GF_CIDesc *)desc, outSize);
     424             :         case GF_ODF_TEXT_TAG:
     425             :                 return gf_odf_size_exp_text((GF_ExpandedTextual *)desc, outSize);
     426             :         case GF_ODF_EXT_PL_TAG:
     427             :                 return gf_odf_size_pl_ext((GF_PLExt *)desc, outSize);
     428             :         case GF_ODF_IPI_PTR_TAG:
     429             :         case GF_ODF_ISOM_IPI_PTR_TAG:
     430             :                 return gf_odf_size_ipi_ptr((GF_IPIPtr *)desc, outSize);
     431             :         case GF_ODF_IPMP_TAG:
     432             :                 return gf_odf_size_ipmp((GF_IPMP_Descriptor *)desc, outSize);
     433             :         case GF_ODF_IPMP_PTR_TAG:
     434             :                 return gf_odf_size_ipmp_ptr((GF_IPMPPtr *)desc, outSize);
     435             :         case GF_ODF_KW_TAG:
     436             :                 return gf_odf_size_kw((GF_KeyWord *)desc, outSize);
     437             :         case GF_ODF_OCI_DATE_TAG:
     438             :                 return gf_odf_size_oci_date((GF_OCI_Data *)desc, outSize);
     439             :         case GF_ODF_OCI_NAME_TAG:
     440             :                 return gf_odf_size_oci_name((GF_OCICreators *)desc, outSize);
     441             :         case GF_ODF_PL_IDX_TAG:
     442             :                 return gf_odf_size_pl_idx((GF_PL_IDX *)desc, outSize);
     443             :         case GF_ODF_QOS_TAG:
     444             :                 return gf_odf_size_qos((GF_QoS_Descriptor *)desc, outSize);
     445             :         case GF_ODF_RATING_TAG:
     446             :                 return gf_odf_size_rating((GF_Rating *)desc, outSize);
     447             :         case GF_ODF_REG_TAG:
     448             :                 return gf_odf_size_reg((GF_Registration *)desc, outSize);
     449             :         case GF_ODF_SHORT_TEXT_TAG:
     450             :                 return gf_odf_size_short_text((GF_ShortTextual *)desc, outSize);
     451             :         case GF_ODF_SMPTE_TAG:
     452             :                 return gf_odf_size_smpte_camera((GF_SMPTECamera *)desc, outSize);
     453             :         case GF_ODF_SCI_TAG:
     454             :                 return gf_odf_size_sup_cid((GF_SCIDesc *)desc, outSize);
     455             : 
     456             : 
     457             :         case GF_ODF_IPMP_TL_TAG:
     458             :                 return gf_odf_size_ipmp_tool_list((GF_IPMP_ToolList *)desc, outSize);
     459             :         case GF_ODF_IPMP_TOOL_TAG:
     460             :                 return gf_odf_size_ipmp_tool((GF_IPMP_Tool *)desc, outSize);
     461             : 
     462             : #endif /*GPAC_MINIMAL_ODF*/
     463       12900 :         default:
     464             :                 /*don't write out l descriptors*/
     465       12900 :                 if ((desc->tag>=GF_ODF_MUXINFO_TAG) && (desc->tag<=GF_ODF_LASER_CFG_TAG)) {
     466           0 :                         *outSize = 0;
     467           0 :                         return GF_OK;
     468             :                 }
     469       12900 :                 return gf_odf_size_default((GF_DefaultDescriptor *)desc, outSize);
     470             :         }
     471             :         return GF_OK;
     472             : }
     473             : 
     474             : 
     475             : //
     476             : //              WRITERS
     477             : //
     478             : GF_EXPORT
     479       16899 : GF_Err gf_odf_write_descriptor(GF_BitStream *bs, GF_Descriptor *desc)
     480             : {
     481       16899 :         switch(desc->tag) {
     482           9 :         case GF_ODF_IOD_TAG :
     483           9 :                 return gf_odf_write_iod(bs, (GF_InitialObjectDescriptor *)desc);
     484        3639 :         case GF_ODF_ESD_TAG :
     485        3639 :                 return gf_odf_write_esd(bs, (GF_ESD *)desc);
     486        3637 :         case GF_ODF_DCD_TAG :
     487        3637 :                 return gf_odf_write_dcd(bs, (GF_DecoderConfig *)desc);
     488        3778 :         case GF_ODF_SLC_TAG :
     489        3778 :                 return gf_odf_write_slc(bs, (GF_SLConfig *)desc);
     490         284 :         case GF_ODF_ESD_INC_TAG:
     491         284 :                 return gf_odf_write_esd_inc(bs, (GF_ES_ID_Inc *)desc);
     492         211 :         case GF_ODF_ESD_REF_TAG:
     493         211 :                 return gf_odf_write_esd_ref(bs, (GF_ES_ID_Ref *)desc);
     494             : 
     495             : 
     496        1204 :         case GF_ODF_ISOM_IOD_TAG:
     497        1204 :                 return gf_odf_write_isom_iod(bs, (GF_IsomInitialObjectDescriptor *)desc);
     498         213 :         case GF_ODF_ISOM_OD_TAG:
     499         213 :                 return gf_odf_write_isom_od(bs, (GF_IsomObjectDescriptor *)desc);
     500         335 :         case GF_ODF_OD_TAG:
     501         335 :                 return gf_odf_write_od(bs, (GF_ObjectDescriptor *)desc);
     502          18 :         case GF_ODF_SEGMENT_TAG:
     503          18 :                 return gf_odf_write_segment(bs, (GF_Segment *) desc);
     504          55 :         case GF_ODF_MUXINFO_TAG:
     505          55 :                 return gf_odf_write_muxinfo(bs, (GF_MuxInfo *) desc);
     506             : 
     507           2 :         case GF_ODF_AUX_VIDEO_DATA:
     508           2 :                 return gf_odf_write_auxvid(bs, (GF_AuxVideoDescriptor *)desc);
     509             : 
     510          15 :         case GF_ODF_LANG_TAG:
     511             :         case GF_ODF_GPAC_LANG:
     512          15 :                 return gf_odf_write_lang(bs, (GF_Language *)desc);
     513             : 
     514             : #ifndef GPAC_MINIMAL_ODF
     515             :         case GF_ODF_MEDIATIME_TAG:
     516             :                 return gf_odf_write_mediatime(bs, (GF_MediaTime *) desc);
     517             :         case GF_ODF_CC_TAG:
     518             :                 return gf_odf_write_cc(bs, (GF_CCDescriptor *)desc);
     519             :         case GF_ODF_CC_DATE_TAG:
     520             :                 return gf_odf_write_cc_date(bs, (GF_CC_Date *)desc);
     521             :         case GF_ODF_CC_NAME_TAG:
     522             :                 return gf_odf_write_cc_name(bs, (GF_CC_Name *)desc);
     523             :         case GF_ODF_CI_TAG:
     524             :                 return gf_odf_write_ci(bs, (GF_CIDesc *)desc);
     525             : 
     526             :         case GF_ODF_TEXT_TAG:
     527             :                 return gf_odf_write_exp_text(bs, (GF_ExpandedTextual *)desc);
     528             :         case GF_ODF_EXT_PL_TAG:
     529             :                 return gf_odf_write_pl_ext(bs, (GF_PLExt *)desc);
     530             :         case GF_ODF_IPI_PTR_TAG:
     531             :         case GF_ODF_ISOM_IPI_PTR_TAG:
     532             :                 return gf_odf_write_ipi_ptr(bs, (GF_IPIPtr *)desc);
     533             :         case GF_ODF_IPMP_TAG:
     534             :                 return gf_odf_write_ipmp(bs, (GF_IPMP_Descriptor *)desc);
     535             :         case GF_ODF_IPMP_PTR_TAG:
     536             :                 return gf_odf_write_ipmp_ptr(bs, (GF_IPMPPtr *)desc);
     537             :         case GF_ODF_KW_TAG:
     538             :                 return gf_odf_write_kw(bs, (GF_KeyWord *)desc);
     539             :         case GF_ODF_OCI_DATE_TAG:
     540             :                 return gf_odf_write_oci_date(bs, (GF_OCI_Data *)desc);
     541             :         case GF_ODF_OCI_NAME_TAG:
     542             :                 return gf_odf_write_oci_name(bs, (GF_OCICreators *)desc);
     543             :         case GF_ODF_PL_IDX_TAG:
     544             :                 return gf_odf_write_pl_idx(bs, (GF_PL_IDX *)desc);
     545             :         case GF_ODF_QOS_TAG:
     546             :                 return gf_odf_write_qos(bs, (GF_QoS_Descriptor *)desc);
     547             :         case GF_ODF_RATING_TAG:
     548             :                 return gf_odf_write_rating(bs, (GF_Rating *)desc);
     549             :         case GF_ODF_REG_TAG:
     550             :                 return gf_odf_write_reg(bs, (GF_Registration *)desc);
     551             :         case GF_ODF_SHORT_TEXT_TAG:
     552             :                 return gf_odf_write_short_text(bs, (GF_ShortTextual *)desc);
     553             :         case GF_ODF_SMPTE_TAG:
     554             :                 return gf_odf_write_smpte_camera(bs, (GF_SMPTECamera *)desc);
     555             :         case GF_ODF_SCI_TAG:
     556             :                 return gf_odf_write_sup_cid(bs, (GF_SCIDesc *)desc);
     557             : 
     558             :         case GF_ODF_IPMP_TL_TAG:
     559             :                 return gf_odf_write_ipmp_tool_list(bs, (GF_IPMP_ToolList *)desc);
     560             :         case GF_ODF_IPMP_TOOL_TAG:
     561             :                 return gf_odf_write_ipmp_tool(bs, (GF_IPMP_Tool *)desc);
     562             : #endif /*GPAC_MINIMAL_ODF*/
     563        3499 :         default:
     564             :                 /*don't write out internal descriptors*/
     565        3499 :                 if ((desc->tag>=GF_ODF_MUXINFO_TAG) && (desc->tag<=GF_ODF_LASER_CFG_TAG))
     566             :                         return GF_OK;
     567        3499 :                 return gf_odf_write_default(bs, (GF_DefaultDescriptor *)desc);
     568             :         }
     569             :         return GF_OK;
     570             : }
     571             : 
     572             : //
     573             : //              CONSTRUCTORS
     574             : //
     575         603 : GF_ODCom *gf_odf_create_command(u8 tag)
     576             : {
     577             :         GF_ODCom *com;
     578         603 :         switch (tag) {
     579         432 :         case GF_ODF_OD_UPDATE_TAG:
     580         432 :                 return gf_odf_new_od_update();
     581          58 :         case GF_ODF_OD_REMOVE_TAG:
     582          58 :                 return gf_odf_new_od_remove();
     583          28 :         case GF_ODF_ESD_UPDATE_TAG:
     584          28 :                 return gf_odf_new_esd_update();
     585          67 :         case GF_ODF_ESD_REMOVE_TAG:
     586          67 :                 return gf_odf_new_esd_remove();
     587             :         //special case for ESDRemove in the file format...
     588          18 :         case GF_ODF_ESD_REMOVE_REF_TAG:
     589          18 :                 com = gf_odf_new_esd_remove();
     590          18 :                 if (!com) return com;
     591          18 :                 com->tag = GF_ODF_ESD_REMOVE_REF_TAG;
     592          18 :                 return com;
     593             : 
     594             : #ifndef GPAC_MINIMAL_ODF
     595             :         case GF_ODF_IPMP_UPDATE_TAG:
     596             :                 return gf_odf_new_ipmp_update();
     597             :         case GF_ODF_IPMP_REMOVE_TAG:
     598             :                 return gf_odf_new_ipmp_remove();
     599             : 
     600             :         default:
     601             :                 if ( (tag >= GF_ODF_COM_ISO_BEGIN_TAG) &&
     602             :                         ( tag <= GF_ODF_COM_ISO_END_TAG) ) {
     603             :                         return NULL;
     604             :                 }
     605             :                 com = gf_odf_new_base_command();
     606             :                 if (!com) return com;
     607             :                 com->tag = tag;
     608             :                 return com;
     609             : #else
     610             :         default:
     611             :                 return NULL;
     612             : #endif
     613             :         }
     614             : }
     615             : 
     616             : 
     617             : //
     618             : //              DESTRUCTORS
     619             : //
     620         603 : GF_Err gf_odf_delete_command(GF_ODCom *com)
     621             : {
     622         603 :         switch (com->tag) {
     623         432 :         case GF_ODF_OD_UPDATE_TAG:
     624         432 :                 return gf_odf_del_od_update((GF_ODUpdate *)com);
     625          58 :         case GF_ODF_OD_REMOVE_TAG:
     626          58 :                 return gf_odf_del_od_remove((GF_ODRemove *)com);
     627             : 
     628          28 :         case GF_ODF_ESD_UPDATE_TAG:
     629          28 :                 return gf_odf_del_esd_update((GF_ESDUpdate *)com);
     630          85 :         case GF_ODF_ESD_REMOVE_TAG:
     631             :         case GF_ODF_ESD_REMOVE_REF_TAG:
     632          85 :                 return gf_odf_del_esd_remove((GF_ESDRemove *)com);
     633             : #ifndef GPAC_MINIMAL_ODF
     634             :         case GF_ODF_IPMP_UPDATE_TAG:
     635             :                 return gf_odf_del_ipmp_update((GF_IPMPUpdate *)com);
     636             :         case GF_ODF_IPMP_REMOVE_TAG:
     637             :                 return gf_odf_del_ipmp_remove((GF_IPMPRemove *)com);
     638             : 
     639             :         default:
     640             :                 return gf_odf_del_base_command((GF_BaseODCom *)com);
     641             : #else
     642             :         default:
     643             :                 return GF_NOT_SUPPORTED;
     644             : #endif
     645             : 
     646             :         }
     647             : }
     648             : 
     649             : 
     650             : //
     651             : //              READERS
     652             : //
     653         249 : GF_Err gf_odf_read_command(GF_BitStream *bs, GF_ODCom *com, u32 gf_odf_size_command)
     654             : {
     655         249 :         switch (com->tag) {
     656         151 :         case GF_ODF_OD_UPDATE_TAG:
     657         151 :                 return gf_odf_read_od_update(bs, (GF_ODUpdate *)com, gf_odf_size_command);
     658          42 :         case GF_ODF_OD_REMOVE_TAG:
     659          42 :                 return gf_odf_read_od_remove(bs, (GF_ODRemove *)com, gf_odf_size_command);
     660          14 :         case GF_ODF_ESD_UPDATE_TAG:
     661          14 :                 return gf_odf_read_esd_update(bs, (GF_ESDUpdate *)com, gf_odf_size_command);
     662          42 :         case GF_ODF_ESD_REMOVE_TAG:
     663             :         case GF_ODF_ESD_REMOVE_REF_TAG:
     664          42 :                 return gf_odf_read_esd_remove(bs, (GF_ESDRemove *)com, gf_odf_size_command);
     665             : #ifndef GPAC_MINIMAL_ODF
     666             :         case GF_ODF_IPMP_UPDATE_TAG:
     667             :                 return gf_odf_read_ipmp_update(bs, (GF_IPMPUpdate *)com, gf_odf_size_command);
     668             :         case GF_ODF_IPMP_REMOVE_TAG:
     669             :                 return gf_odf_read_ipmp_remove(bs, (GF_IPMPRemove *)com, gf_odf_size_command);
     670             :         default:
     671             :                 return gf_odf_read_base_command(bs, (GF_BaseODCom *)com, gf_odf_size_command);
     672             : #else
     673             :         default:
     674             :                 return GF_NOT_SUPPORTED;
     675             : #endif
     676             : 
     677             :         }
     678             : }
     679             : 
     680             : 
     681             : 
     682             : //
     683             : //              WRITERS
     684             : //
     685         238 : GF_Err gf_odf_write_command(GF_BitStream *bs, GF_ODCom *com)
     686             : {
     687         238 :         switch (com->tag) {
     688         154 :         case GF_ODF_OD_UPDATE_TAG:
     689         154 :                 return gf_odf_write_od_update(bs, (GF_ODUpdate *)com);
     690          36 :         case GF_ODF_OD_REMOVE_TAG:
     691          36 :                 return gf_odf_write_od_remove(bs, (GF_ODRemove *)com);
     692             : 
     693          12 :         case GF_ODF_ESD_UPDATE_TAG:
     694          12 :                 return gf_odf_write_esd_update(bs, (GF_ESDUpdate *)com);
     695          36 :         case GF_ODF_ESD_REMOVE_TAG:
     696             :         case GF_ODF_ESD_REMOVE_REF_TAG:
     697          36 :                 return gf_odf_write_esd_remove(bs, (GF_ESDRemove *)com);
     698             : #ifndef GPAC_MINIMAL_ODF
     699             :         case GF_ODF_IPMP_UPDATE_TAG:
     700             :                 return gf_odf_write_ipmp_update(bs, (GF_IPMPUpdate *)com);
     701             :         case GF_ODF_IPMP_REMOVE_TAG:
     702             :                 return gf_odf_write_ipmp_remove(bs, (GF_IPMPRemove *)com);
     703             : 
     704             :         default:
     705             :                 return gf_odf_write_base_command(bs, (GF_BaseODCom *)com);
     706             : #else
     707             :         default:
     708             :                 return GF_NOT_SUPPORTED;
     709             : #endif
     710             :         }
     711             : }

Generated by: LCOV version 1.13