📄 box_code_base.c
字号:
{ GF_Err e; char *enc_desc; u32 descSize = 0; GF_ESDBox *ptr = (GF_ESDBox *)s; e = gf_isom_full_box_write(s, bs); if (e) return e; e = gf_odf_desc_write((GF_Descriptor *)ptr->desc, &enc_desc, &descSize); if (e) return e; gf_bs_write_data(bs, enc_desc, descSize); //free our buffer free(enc_desc); return GF_OK;}GF_Err esds_Size(GF_Box *s){ GF_Err e; u32 descSize = 0; GF_ESDBox *ptr = (GF_ESDBox *)s; e = gf_isom_full_box_get_size(s); if (e) return e; descSize = gf_odf_desc_size((GF_Descriptor *)ptr->desc); ptr->size += descSize; return GF_OK;}#endif //GPAC_READ_ONLYvoid free_del(GF_Box *s){ GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s; if (ptr->data) free(ptr->data); free(ptr);}GF_Err free_Read(GF_Box *s, GF_BitStream *bs){ u32 bytesToRead; GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s; if (ptr->size > 0xFFFFFFFF) return GF_IO_ERR; bytesToRead = (u32) (ptr->size); if (bytesToRead) { ptr->data = (char*)malloc(bytesToRead * sizeof(char)); gf_bs_read_data(bs, ptr->data, bytesToRead); ptr->dataSize = bytesToRead; } return GF_OK;}GF_Box *free_New(){ GF_FreeSpaceBox *tmp = (GF_FreeSpaceBox *) malloc(sizeof(GF_FreeSpaceBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_FreeSpaceBox)); tmp->type = GF_ISOM_BOX_TYPE_FREE; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err free_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s; e = gf_isom_box_write_header(s, bs); if (e) return e; if (ptr->dataSize) gf_bs_write_data(bs, ptr->data, ptr->dataSize); return GF_OK;}GF_Err free_Size(GF_Box *s){ GF_Err e; GF_FreeSpaceBox *ptr = (GF_FreeSpaceBox *)s; e = gf_isom_box_get_size(s); if (e) return e; ptr->size += ptr->dataSize; return GF_OK;}#endif //GPAC_READ_ONLYvoid ftyp_del(GF_Box *s){ GF_FileTypeBox *ptr = (GF_FileTypeBox *) s; if (ptr->altBrand) free(ptr->altBrand); free(ptr);}GF_Box *ftyp_New(){ GF_FileTypeBox *tmp; tmp = (GF_FileTypeBox *) malloc(sizeof(GF_FileTypeBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_FileTypeBox)); tmp->type = GF_ISOM_BOX_TYPE_FTYP; return (GF_Box *)tmp;}GF_Err ftyp_Read(GF_Box *s,GF_BitStream *bs){ u32 i; GF_FileTypeBox *ptr = (GF_FileTypeBox *)s; ptr->majorBrand = gf_bs_read_u32(bs); ptr->minorVersion = gf_bs_read_u32(bs); ptr->size -= 8; ptr->altCount = ( (u32) (ptr->size)) / 4; if (!ptr->altCount) return GF_OK; if (ptr->altCount * 4 != (u32) (ptr->size)) return GF_ISOM_INVALID_FILE; ptr->altBrand = (u32*)malloc(sizeof(u32)*ptr->altCount); for (i = 0; i<ptr->altCount; i++) { ptr->altBrand[i] = gf_bs_read_u32(bs); } return GF_OK;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err ftyp_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; u32 i; GF_FileTypeBox *ptr = (GF_FileTypeBox *) s; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->majorBrand); gf_bs_write_u32(bs, ptr->minorVersion); for (i=0; i<ptr->altCount; i++) { gf_bs_write_u32(bs, ptr->altBrand[i]); } return GF_OK;}GF_Err ftyp_Size(GF_Box *s){ GF_Err e; GF_FileTypeBox *ptr = (GF_FileTypeBox *)s; e = gf_isom_box_get_size(s); if (e) return e; ptr->size += 8 + ptr->altCount * 4; return GF_OK;}#endif //GPAC_READ_ONLYvoid gnrm_del(GF_Box *s){ GF_GenericSampleEntryBox *ptr = (GF_GenericSampleEntryBox *)s; if (ptr->data) free(ptr->data); free(ptr);}GF_Box *gnrm_New(){ GF_GenericSampleEntryBox *tmp = (GF_GenericSampleEntryBox *) malloc(sizeof(GF_GenericSampleEntryBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_GenericSampleEntryBox)); tmp->type = GF_ISOM_BOX_TYPE_GNRM; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err gnrm_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_GenericSampleEntryBox *ptr = (GF_GenericSampleEntryBox *)s; //carefull we are not writing the box type but the entry type so switch for write ptr->type = ptr->EntryType; e = gf_isom_box_write_header(s, bs); if (e) return e; ptr->type = GF_ISOM_BOX_TYPE_GNRM; gf_bs_write_data(bs, ptr->reserved, 6); gf_bs_write_u16(bs, ptr->dataReferenceIndex); gf_bs_write_data(bs, ptr->data, ptr->data_size); return GF_OK;}GF_Err gnrm_Size(GF_Box *s){ GF_Err e; GF_GenericSampleEntryBox *ptr = (GF_GenericSampleEntryBox *)s; s->type = ptr->EntryType; e = gf_isom_box_get_size(s); s->type = GF_ISOM_BOX_TYPE_GNRM; if (e) return e; ptr->size += 8+ptr->data_size; return GF_OK;}#endif //GPAC_READ_ONLYvoid gnrv_del(GF_Box *s){ GF_GenericVisualSampleEntryBox *ptr = (GF_GenericVisualSampleEntryBox *)s; if (ptr->data) free(ptr->data); free(ptr);}GF_Box *gnrv_New(){ GF_GenericVisualSampleEntryBox *tmp = (GF_GenericVisualSampleEntryBox *) malloc(sizeof(GF_GenericVisualSampleEntryBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_GenericVisualSampleEntryBox)); tmp->type = GF_ISOM_BOX_TYPE_GNRV; gf_isom_video_sample_entry_init((GF_VisualSampleEntryBox*) tmp); return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err gnrv_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_GenericVisualSampleEntryBox *ptr = (GF_GenericVisualSampleEntryBox *)s; //carefull we are not writing the box type but the entry type so switch for write ptr->type = ptr->EntryType; e = gf_isom_box_write_header(s, bs); if (e) return e; ptr->type = GF_ISOM_BOX_TYPE_GNRV; gf_isom_video_sample_entry_write((GF_VisualSampleEntryBox *)ptr, bs); gf_bs_write_data(bs, ptr->data, ptr->data_size); return GF_OK;}GF_Err gnrv_Size(GF_Box *s){ GF_Err e; GF_GenericVisualSampleEntryBox *ptr = (GF_GenericVisualSampleEntryBox *)s; s->type = ptr->EntryType; e = gf_isom_box_get_size(s); s->type = GF_ISOM_BOX_TYPE_GNRV; if (e) return e; gf_isom_video_sample_entry_size((GF_VisualSampleEntryBox *)s); ptr->size += ptr->data_size; return GF_OK;}#endif //GPAC_READ_ONLYvoid gnra_del(GF_Box *s){ GF_GenericAudioSampleEntryBox *ptr = (GF_GenericAudioSampleEntryBox *)s; if (ptr->data) free(ptr->data); free(ptr);}GF_Box *gnra_New(){ GF_GenericAudioSampleEntryBox *tmp = (GF_GenericAudioSampleEntryBox *) malloc(sizeof(GF_GenericAudioSampleEntryBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_GenericAudioSampleEntryBox)); tmp->type = GF_ISOM_BOX_TYPE_GNRA; gf_isom_audio_sample_entry_init((GF_AudioSampleEntryBox*) tmp); return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err gnra_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_GenericAudioSampleEntryBox *ptr = (GF_GenericAudioSampleEntryBox *)s; //carefull we are not writing the box type but the entry type so switch for write ptr->type = ptr->EntryType; e = gf_isom_box_write_header(s, bs); if (e) return e; ptr->type = GF_ISOM_BOX_TYPE_GNRA; gf_isom_audio_sample_entry_write((GF_AudioSampleEntryBox *)ptr, bs); gf_bs_write_data(bs, ptr->data, ptr->data_size); return GF_OK;}GF_Err gnra_Size(GF_Box *s){ GF_Err e; GF_GenericAudioSampleEntryBox *ptr = (GF_GenericAudioSampleEntryBox *)s; s->type = ptr->EntryType; e = gf_isom_box_get_size(s); s->type = GF_ISOM_BOX_TYPE_GNRA; if (e) return e; gf_isom_audio_sample_entry_size((GF_AudioSampleEntryBox *)s); ptr->size += ptr->data_size; return GF_OK;}#endif //GPAC_READ_ONLYvoid hdlr_del(GF_Box *s){ GF_HandlerBox *ptr = (GF_HandlerBox *)s; if (ptr == NULL) return; if (ptr->nameUTF8) free(ptr->nameUTF8); free(ptr);}GF_Err hdlr_Read(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_HandlerBox *ptr = (GF_HandlerBox *)s; e = gf_isom_full_box_read(s, bs); if (e) return e; ptr->reserved1 = gf_bs_read_u32(bs); ptr->handlerType = gf_bs_read_u32(bs); gf_bs_read_data(bs, (char*)ptr->reserved2, 12); ptr->size -= 20; if (ptr->size) { ptr->nameUTF8 = (char*)malloc((u32) ptr->size); if (ptr->nameUTF8 == NULL) return GF_OUT_OF_MEM; gf_bs_read_data(bs, ptr->nameUTF8, (u32) ptr->size); /*safety check in case the string is not null-terminated*/ if (ptr->nameUTF8[ptr->size-1]) { char *str = (char*)malloc((u32) ptr->size + 1); memcpy(str, ptr->nameUTF8, (u32) ptr->size); str[ptr->size] = 0; free(ptr->nameUTF8); ptr->nameUTF8 = str; } } return GF_OK;}GF_Box *hdlr_New(){ GF_HandlerBox *tmp = (GF_HandlerBox *) malloc(sizeof(GF_HandlerBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_HandlerBox)); gf_isom_full_box_init((GF_Box *)tmp); tmp->type = GF_ISOM_BOX_TYPE_HDLR; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err hdlr_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_HandlerBox *ptr = (GF_HandlerBox *)s; e = gf_isom_full_box_write(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->reserved1); gf_bs_write_u32(bs, ptr->handlerType); gf_bs_write_data(bs, (char*)ptr->reserved2, 12); if (ptr->nameUTF8) gf_bs_write_data(bs, ptr->nameUTF8, strlen(ptr->nameUTF8)); /*NULL-terminated string is written*/ gf_bs_write_u8(bs, 0); return GF_OK;}GF_Err hdlr_Size(GF_Box *s){ GF_Err e; GF_HandlerBox *ptr = (GF_HandlerBox *)s; e = gf_isom_full_box_get_size(s); if (e) return e; ptr->size += 20 + 1; if (ptr->nameUTF8) ptr->size += strlen(ptr->nameUTF8); return GF_OK;}#endif //GPAC_READ_ONLYvoid hinf_del(GF_Box *s){ GF_HintInfoBox *hinf = (GF_HintInfoBox *)s; gf_isom_box_array_del(hinf->boxList); gf_list_del(hinf->dataRates); free(hinf);}GF_Box *hinf_New(){ GF_HintInfoBox *tmp = (GF_HintInfoBox *)malloc(sizeof(GF_HintInfoBox)); if (!tmp) return NULL; memset(tmp, 0, sizeof(GF_HintInfoBox)); tmp->boxList = gf_list_new(); if (!tmp->boxList) { free(tmp); return NULL; } tmp->dataRates = gf_list_new(); if (!tmp->dataRates) { gf_list_del(tmp->boxList); free(tmp); return NULL; } tmp->type = GF_ISOM_BOX_TYPE_HINF; return (GF_Box *)tmp;}GF_Err hinf_AddBox(GF_Box *s, GF_Box *a){ GF_MAXRBox *maxR; GF_HintInfoBox *hinf = (GF_HintInfoBox *)s; u32 i; switch (a->type) { case GF_ISOM_BOX_TYPE_MAXR: i=0; while ((maxR = (GF_MAXRBox *)gf_list_enum(hinf->dataRates, &i))) { if (maxR->granularity == ((GF_MAXRBox *)a)->granularity) return GF_ISOM_INVALID_FILE; } gf_list_add(hinf->dataRates, a); break; default: break; } return gf_list_add(hinf->boxList, a);}GF_Err hinf_Read(GF_Box *s, GF_BitStream *bs){ return gf_isom_read_box_list(s, bs, hinf_AddBox);}#ifndef GPAC_READ_ONLYGF_Err hinf_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_HintInfoBox *ptr = (GF_HintInfoBox *)s; if (!s) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; return gf_isom_box_array_write(s, ptr->boxList, bs);}GF_Err hinf_Size(GF_Box *s){ GF_Err e; GF_HintInfoBox *ptr = (GF_HintInfoBox *)s; e = gf_isom_box_get_size(s); if (e) return e; return gf_isom_box_array_size(s, ptr->boxList);}#endif void hmhd_del(GF_Box *s){ GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s; if (ptr == NULL) return; free(ptr);}GF_Err hmhd_Read(GF_Box *s,GF_BitStream *bs){ GF_Err e; GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s; e = gf_isom_full_box_read(s, bs); if (e) return e; ptr->maxPDUSize = gf_bs_read_u16(bs); ptr->avgPDUSize = gf_bs_read_u16(bs); ptr->maxBitrate = gf_bs_read_u32(bs); ptr->avgBitrate = gf_bs_read_u32(bs); ptr->slidingAverageBitrate = gf_bs_read_u32(bs); return GF_OK;}GF_Box *hmhd_New(){ GF_HintMediaHeaderBox *tmp = (GF_HintMediaHeaderBox *) malloc(sizeof(GF_HintMediaHeaderBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_HintMediaHeaderBox)); gf_isom_full_box_init((GF_Box *)tmp); tmp->type = GF_ISOM_BOX_TYPE_HMHD; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err hmhd_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s; e = gf_isom_full_box_write(s, bs); if (e) return e; gf_bs_write_u16(bs, ptr->maxPDUSize); gf_bs_write_u16(bs, ptr->avgPDUSize); gf_bs_write_u32(bs, ptr->maxBitrate); gf_bs_write_u32(bs, ptr->avgBitrate); gf_bs_write_u32(bs, ptr->slidingAverageBitrate); return GF_OK;}GF_Err hmhd_Size(GF_Box *s){ GF_Err e; GF_HintMediaHeaderBox *ptr = (GF_HintMediaHeaderBox *)s; e = gf_isom_full_box_get_size(s); if (e) return e; ptr->size += 16; return GF_OK;}#endif //GPAC_READ_ONLYGF_Box *hnti_New(){ GF_HintTrackInfoBox *tmp = (GF_HintTrackInfoBox *)malloc(sizeof(GF_HintTrackInfoBox)); if (!tmp) return NULL; memset(tmp, 0, sizeof(GF_HintTrackInfoBox)); tmp->boxList = gf_list_new(); if (!tmp->boxList) { free(tmp); return NULL; } tmp->type = GF_ISOM_BOX_TYPE_HNTI; return (GF_Box *)tmp;}void hnti_del(GF_Box *a){ GF_Box *t; GF_RTPBox *rtp; GF_HintTrackInfoBox *ptr = (GF_HintTrackInfoBox *)a; while (gf_list_count(ptr->boxList)) { t = (GF_Box*)gf_list_get(ptr->boxList, 0); if (t->type != GF_ISOM_BOX_TYPE_RTP) { gf_isom_box_del(t); } else { rtp = (GF_RTPBox *)t; if (rtp->sdpText) free(rtp->sdpText); free(rtp); } gf_list_rem(ptr->boxList, 0); } gf_list_del(ptr->boxList); free(ptr);}GF_Err hnti_AddBox(GF_HintTrackInfoBox *hnti, GF_Box *a){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -