📄 box_code_base.c
字号:
}#ifndef GPAC_READ_ONLYGF_Err dimm_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_DIMMBox *ptr = (GF_DIMMBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u64(bs, ptr->nbBytes); return GF_OK;}GF_Err dimm_Size(GF_Box *s){ GF_Err e; e = gf_isom_box_get_size(s); if (e) return e; s->size += 8; return GF_OK;}#endif/********************************************************** DREP GF_Box**********************************************************/void drep_del(GF_Box *s){ free((GF_DREPBox *)s);}GF_Err drep_Read(GF_Box *s, GF_BitStream *bs){ GF_DREPBox *ptr = (GF_DREPBox *)s; ptr->nbBytes = gf_bs_read_u64(bs); return GF_OK;}GF_Box *drep_New(){ GF_DREPBox *tmp = (GF_DREPBox *) malloc(sizeof(GF_DREPBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_DREP; tmp->nbBytes = 0; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err drep_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_DREPBox *ptr = (GF_DREPBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u64(bs, ptr->nbBytes); return GF_OK;}GF_Err drep_Size(GF_Box *s){ GF_Err e; e = gf_isom_box_get_size(s); if (e) return e; s->size += 8; return GF_OK;}#endif/********************************************************** TMIN GF_Box**********************************************************/void tmin_del(GF_Box *s){ free((GF_TMINBox *)s);}GF_Err tmin_Read(GF_Box *s, GF_BitStream *bs){ GF_TMINBox *ptr = (GF_TMINBox *)s; ptr->minTime = gf_bs_read_u32(bs); return GF_OK;}GF_Box *tmin_New(){ GF_TMINBox *tmp = (GF_TMINBox *) malloc(sizeof(GF_TMINBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_TMIN; tmp->minTime = 0; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err tmin_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_TMINBox *ptr = (GF_TMINBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->minTime); return GF_OK;}GF_Err tmin_Size(GF_Box *s){ GF_Err e; e = gf_isom_box_get_size(s); if (e) return e; s->size += 4; return GF_OK;}#endif/********************************************************** TMAX GF_Box**********************************************************/void tmax_del(GF_Box *s){ free((GF_TMAXBox *)s);}GF_Err tmax_Read(GF_Box *s, GF_BitStream *bs){ GF_TMAXBox *ptr = (GF_TMAXBox *)s; ptr->maxTime = gf_bs_read_u32(bs); return GF_OK;}GF_Box *tmax_New(){ GF_TMAXBox *tmp = (GF_TMAXBox *) malloc(sizeof(GF_TMAXBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_TMAX; tmp->maxTime = 0; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err tmax_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_TMAXBox *ptr = (GF_TMAXBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->maxTime); return GF_OK;}GF_Err tmax_Size(GF_Box *s){ GF_Err e; e = gf_isom_box_get_size(s); if (e) return e; s->size += 4; return GF_OK;}#endif/********************************************************** PMAX GF_Box**********************************************************/void pmax_del(GF_Box *s){ free((GF_PMAXBox *)s);}GF_Err pmax_Read(GF_Box *s, GF_BitStream *bs){ GF_PMAXBox *ptr = (GF_PMAXBox *)s; ptr->maxSize = gf_bs_read_u32(bs); return GF_OK;}GF_Box *pmax_New(){ GF_PMAXBox *tmp = (GF_PMAXBox *) malloc(sizeof(GF_PMAXBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_PMAX; tmp->maxSize = 0; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err pmax_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_PMAXBox *ptr = (GF_PMAXBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->maxSize); return GF_OK;}GF_Err pmax_Size(GF_Box *s){ GF_Err e; e = gf_isom_box_get_size(s); if (e) return e; s->size += 4; return GF_OK;}#endif/********************************************************** DMAX GF_Box**********************************************************/void dmax_del(GF_Box *s){ free((GF_DMAXBox *)s);}GF_Err dmax_Read(GF_Box *s, GF_BitStream *bs){ GF_DMAXBox *ptr = (GF_DMAXBox *)s; ptr->maxDur = gf_bs_read_u32(bs); return GF_OK;}GF_Box *dmax_New(){ GF_DMAXBox *tmp = (GF_DMAXBox *) malloc(sizeof(GF_DMAXBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_DMAX; tmp->maxDur = 0; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err dmax_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_DMAXBox *ptr = (GF_DMAXBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->maxDur); return GF_OK;}GF_Err dmax_Size(GF_Box *s){ GF_Err e; e = gf_isom_box_get_size(s); if (e) return e; s->size += 4; return GF_OK;}#endif/********************************************************** PAYT GF_Box**********************************************************/void payt_del(GF_Box *s){ GF_PAYTBox *payt = (GF_PAYTBox *)s; if (payt->payloadString) free(payt->payloadString); free(payt);}GF_Err payt_Read(GF_Box *s, GF_BitStream *bs){ u32 length; GF_PAYTBox *ptr = (GF_PAYTBox *)s; ptr->payloadCode = gf_bs_read_u32(bs); length = gf_bs_read_u8(bs); ptr->payloadString = (char*)malloc(sizeof(char) * (length+1) ); if (! ptr->payloadString) return GF_OUT_OF_MEM; gf_bs_read_data(bs, ptr->payloadString, length); ptr->payloadString[length] = 0; ptr->size -= 4+length+1; return GF_OK;}GF_Box *payt_New(){ GF_PAYTBox *tmp = (GF_PAYTBox *) malloc(sizeof(GF_PAYTBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_PAYT; tmp->payloadCode = 0; tmp->payloadString = NULL; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err payt_Write(GF_Box *s, GF_BitStream *bs){ u32 len; GF_Err e; GF_PAYTBox *ptr = (GF_PAYTBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; gf_bs_write_u32(bs, ptr->payloadCode); len = strlen(ptr->payloadString); gf_bs_write_u8(bs, len); if (len) gf_bs_write_data(bs, ptr->payloadString, len); return GF_OK;}GF_Err payt_Size(GF_Box *s){ GF_Err e; GF_PAYTBox *ptr = (GF_PAYTBox *)s; e = gf_isom_box_get_size(s); if (e) return e; s->size += 4; if (ptr->payloadString) ptr->size += strlen(ptr->payloadString) + 1; return GF_OK;}#endif/********************************************************** PAYT GF_Box**********************************************************/void name_del(GF_Box *s){ GF_NameBox *name = (GF_NameBox *)s; if (name->string) free(name->string); free(name);}GF_Err name_Read(GF_Box *s, GF_BitStream *bs){ u32 length; GF_NameBox *ptr = (GF_NameBox *)s; length = (u32) (ptr->size); ptr->string = (char*)malloc(sizeof(char) * length); if (! ptr->string) return GF_OUT_OF_MEM; gf_bs_read_data(bs, ptr->string, length); return GF_OK;}GF_Box *name_New(){ GF_NameBox *tmp = (GF_NameBox *) malloc(sizeof(GF_NameBox)); if (!tmp) return NULL; tmp->type = GF_ISOM_BOX_TYPE_NAME; tmp->string = NULL; return (GF_Box *)tmp;}#ifndef GPAC_READ_ONLYGF_Err name_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_NameBox *ptr = (GF_NameBox *)s; if (ptr == NULL) return GF_BAD_PARAM; e = gf_isom_box_write_header(s, bs); if (e) return e; if (ptr->string) { gf_bs_write_data(bs, ptr->string, strlen(ptr->string) + 1); } return GF_OK;}GF_Err name_Size(GF_Box *s){ GF_Err e; GF_NameBox *ptr = (GF_NameBox *)s; e = gf_isom_box_get_size(s); if (e) return e; if (ptr->string) ptr->size += strlen(ptr->string) + 1; return GF_OK;}#endifvoid iods_del(GF_Box *s){ GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s; if (ptr == NULL) return; if (ptr->descriptor) gf_odf_desc_del(ptr->descriptor); free(ptr);}GF_Err iods_Read(GF_Box *s, GF_BitStream *bs){ GF_Err e; u32 descSize; char *desc; GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s; e = gf_isom_full_box_read(s, bs); if (e) return e; //use the OD codec... descSize = (u32) (ptr->size); desc = (char*)malloc(sizeof(char) * descSize); gf_bs_read_data(bs, desc, descSize); e = gf_odf_desc_read(desc, descSize, &ptr->descriptor); //OK, free our desc free(desc); return GF_OK;}GF_Box *iods_New(){ GF_ObjectDescriptorBox *tmp = (GF_ObjectDescriptorBox *) malloc(sizeof(GF_ObjectDescriptorBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_ObjectDescriptorBox)); gf_isom_full_box_init((GF_Box *)tmp); tmp->type = GF_ISOM_BOX_TYPE_IODS; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err iods_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; u32 descSize; char *desc; GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s; e = gf_isom_full_box_write(s, bs); if (e) return e; //call our OD codec e = gf_odf_desc_write(ptr->descriptor, &desc, &descSize); if (e) return e; gf_bs_write_data(bs, desc, descSize); //and free our stuff maybe!! free(desc); return GF_OK;}GF_Err iods_Size(GF_Box *s){ GF_Err e; GF_ObjectDescriptorBox *ptr = (GF_ObjectDescriptorBox *)s; e = gf_isom_full_box_get_size(s); if (e) return e; ptr->size += gf_odf_desc_size(ptr->descriptor); return GF_OK;}#endif //GPAC_READ_ONLYvoid mdat_del(GF_Box *s){ GF_MediaDataBox *ptr = (GF_MediaDataBox *)s; if (!s) return; if (ptr->data) free(ptr->data); free(ptr);}GF_Err mdat_Read(GF_Box *s, GF_BitStream *bs){ GF_MediaDataBox *ptr = (GF_MediaDataBox *)s; if (ptr == NULL) return GF_BAD_PARAM; ptr->dataSize = s->size; //then skip these bytes gf_bs_skip_bytes(bs, ptr->dataSize); return GF_OK;}GF_Box *mdat_New(){ GF_MediaDataBox *tmp = (GF_MediaDataBox *) malloc(sizeof(GF_MediaDataBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_MediaDataBox)); tmp->type = GF_ISOM_BOX_TYPE_MDAT; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err mdat_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_MediaDataBox *ptr = (GF_MediaDataBox *)s; e = gf_isom_box_write_header(s, bs); if (e) return e; //make sure we have some data ... //if not, we handle that independantly (edit files) if (ptr->data) { gf_bs_write_data(bs, ptr->data, (u32) ptr->dataSize); } return GF_OK;}GF_Err mdat_Size(GF_Box *s){ GF_Err e; GF_MediaDataBox *ptr = (GF_MediaDataBox *)s; e = gf_isom_box_get_size(s); if (e) return e; ptr->size += ptr->dataSize; return GF_OK;}#endif //GPAC_READ_ONLYvoid mdhd_del(GF_Box *s){ GF_MediaHeaderBox *ptr = (GF_MediaHeaderBox *)s; if (ptr == NULL) return; free(ptr);}GF_Err mdhd_Read(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_MediaHeaderBox *ptr = (GF_MediaHeaderBox *)s; e = gf_isom_full_box_read(s, bs); if (e) return e; if (ptr->version == 1) { ptr->creationTime = gf_bs_read_u64(bs); ptr->modificationTime = gf_bs_read_u64(bs); ptr->timeScale = gf_bs_read_u32(bs); ptr->duration = gf_bs_read_u64(bs); } else { ptr->creationTime = gf_bs_read_u32(bs); ptr->modificationTime = gf_bs_read_u32(bs); ptr->timeScale = gf_bs_read_u32(bs); ptr->duration = gf_bs_read_u32(bs); } //our padding bit gf_bs_read_int(bs, 1); //the spec is unclear here, just says "the value 0 is interpreted as undetermined" ptr->packedLanguage[0] = gf_bs_read_int(bs, 5); ptr->packedLanguage[1] = gf_bs_read_int(bs, 5); ptr->packedLanguage[2] = gf_bs_read_int(bs, 5); //but before or after compaction ?? We assume before if (ptr->packedLanguage[0] || ptr->packedLanguage[1] || ptr->packedLanguage[2]) { ptr->packedLanguage[0] += 0x60; ptr->packedLanguage[1] += 0x60; ptr->packedLanguage[2] += 0x60; } else { ptr->packedLanguage[0] = 'u'; ptr->packedLanguage[1] = 'n'; ptr->packedLanguage[2] = 'd'; } ptr->reserved = gf_bs_read_u16(bs); return GF_OK;}GF_Box *mdhd_New(){ GF_MediaHeaderBox *tmp = (GF_MediaHeaderBox *) malloc(sizeof(GF_MediaHeaderBox)); if (tmp == NULL) return NULL; memset(tmp, 0, sizeof(GF_MediaHeaderBox)); gf_isom_full_box_init((GF_Box *) tmp); tmp->type = GF_ISOM_BOX_TYPE_MDHD; tmp->packedLanguage[0] = 'u'; tmp->packedLanguage[1] = 'n'; tmp->packedLanguage[2] = 'd'; return (GF_Box *)tmp;}//from here, for write/edit versions#ifndef GPAC_READ_ONLYGF_Err mdhd_Write(GF_Box *s, GF_BitStream *bs){ GF_Err e; GF_MediaHeaderBox *ptr = (GF_MediaHeaderBox *)s; e = gf_isom_full_box_write(s, bs); if (e) return e; if (ptr->version == 1) { gf_bs_write_u64(bs, ptr->creationTime); gf_bs_write_u64(bs, ptr->modificationTime); gf_bs_write_u32(bs, ptr->timeScale); gf_bs_write_u64(bs, ptr->duration); } else { gf_bs_write_u32(bs, (u32) ptr->creationTime); gf_bs_write_u32(bs, (u32) ptr->modificationTime); gf_bs_write_u32(bs, ptr->timeScale); gf_bs_write_u32(bs, (u32) ptr->duration); } //SPECS: BIT(1) of padding gf_bs_write_int(bs, 0, 1); gf_bs_write_int(bs, ptr->packedLanguage[0] - 0x60, 5); gf_bs_write_int(bs, ptr->packedLanguage[1] - 0x60, 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -