本文整理汇总了C++中CanAccessMovie函数的典型用法代码示例。如果您正苦于以下问题:C++ CanAccessMovie函数的具体用法?C++ CanAccessMovie怎么用?C++ CanAccessMovie使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CanAccessMovie函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: gf_isom_change_ismacryp_protection
GF_EXPORT
GF_Err gf_isom_change_ismacryp_protection(GF_ISOFile *the_file, u32 trackNumber, u32 sampleDescriptionIndex, char *scheme_uri, char *kms_uri)
{
GF_TrackBox *trak;
GF_Err e;
GF_SampleEntryBox *sea;
GF_ProtectionInfoBox *sinf;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media || !sampleDescriptionIndex) return GF_BAD_PARAM;
sea = NULL;
sinf = gf_isom_get_sinf_entry(trak, sampleDescriptionIndex, GF_ISOM_ISMACRYP_SCHEME, &sea);
if (!sinf) return GF_OK;
if (scheme_uri) {
gf_free(sinf->scheme_type->URI);
sinf->scheme_type->URI = gf_strdup(scheme_uri);
}
if (kms_uri) {
gf_free(sinf->info->ikms->URI);
sinf->info->ikms->URI = gf_strdup(kms_uri);
}
return GF_OK;
}
开发者ID:HungMingWu,项目名称:gpac,代码行数:28,代码来源:drm_sample.c
示例2: CanAccessMovie
GF_WebVTTSampleEntryBox *gf_webvtt_isom_get_description(GF_ISOFile *movie, u32 trackNumber, u32 descriptionIndex)
{
GF_WebVTTSampleEntryBox *wvtt;
GF_TrackBox *trak;
GF_Err e;
if (!descriptionIndex) return NULL;
e = CanAccessMovie(movie, GF_ISOM_OPEN_READ);
if (e) return NULL;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media) return NULL;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_TEXT:
break;
default:
return NULL;
}
wvtt = (GF_WebVTTSampleEntryBox*)gf_list_get(trak->Media->information->sampleTable->SampleDescription->other_boxes, descriptionIndex - 1);
if (!wvtt) return NULL;
switch (wvtt->type) {
case GF_ISOM_BOX_TYPE_WVTT:
break;
default:
return NULL;
}
return wvtt;
}
开发者ID:erelh,项目名称:gpac,代码行数:31,代码来源:webvtt.c
示例3: gf_isom_new_webvtt_description
GF_Err gf_isom_new_webvtt_description(GF_ISOFile *movie, u32 trackNumber, GF_TextSampleDescriptor *desc, char *URLname, char *URNname, u32 *outDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
u32 dataRefIndex;
GF_WebVTTSampleEntryBox *wvtt;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media) return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_TEXT:
break;
default:
return GF_BAD_PARAM;
}
//get or create the data ref
e = Media_FindDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
if (!dataRefIndex) {
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
}
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
wvtt = (GF_WebVTTSampleEntryBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_WVTT);
wvtt->dataReferenceIndex = dataRefIndex;
gf_list_add(trak->Media->information->sampleTable->SampleDescription->other_boxes, wvtt);
if (outDescriptionIndex) *outDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->other_boxes);
return e;
}
开发者ID:erelh,项目名称:gpac,代码行数:35,代码来源:webvtt.c
示例4: gf_isom_update_xml_subtitle_description
GF_Err gf_isom_update_xml_subtitle_description(GF_ISOFile *movie, u32 trackNumber,
u32 descriptionIndex, GF_GenericSubtitleSampleDescriptor *desc)
{
GF_TrackBox *trak;
GF_Err e;
if (!descriptionIndex || !desc) return GF_BAD_PARAM;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media) return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_MPEG_SUBT:
break;
default:
return GF_BAD_PARAM;
}
if (!movie->keep_utc)
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
return e;
}
开发者ID:HungMingWu,项目名称:gpac,代码行数:25,代码来源:sample_descs.c
示例5: gf_isom_remove_track_protection
GF_Err gf_isom_remove_track_protection(GF_ISOFile *the_file, u32 trackNumber, u32 sampleDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
GF_SampleEntryBox *sea;
GF_ProtectionInfoBox *sinf;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media || !sampleDescriptionIndex) return GF_BAD_PARAM;
sea = NULL;
sinf = gf_isom_get_sinf_entry(trak, sampleDescriptionIndex, GF_ISOM_CENC_SCHEME, &sea);
if (!sinf) sinf = gf_isom_get_sinf_entry(trak, sampleDescriptionIndex, GF_ISOM_CBC_SCHEME, &sea);
if (!sinf) sinf = gf_isom_get_sinf_entry(trak, sampleDescriptionIndex, GF_ISOM_ISMACRYP_SCHEME, &sea);
if (!sinf) sinf = gf_isom_get_sinf_entry(trak, sampleDescriptionIndex, GF_ISOM_OMADRM_SCHEME, &sea);
if (!sinf) sinf = gf_isom_get_sinf_entry(trak, sampleDescriptionIndex, GF_ISOM_ADOBE_SCHEME, &sea);
if (!sinf) return GF_OK;
sea->type = sinf->original_format->data_format;
gf_isom_box_array_del(sea->protections);
sea->protections = gf_list_new();
if (sea->type == GF_4CC('2','6','4','b')) sea->type = GF_ISOM_BOX_TYPE_AVC1;
if (sea->type == GF_4CC('2','6','5','b')) sea->type = GF_ISOM_BOX_TYPE_HVC1;
return GF_OK;
}
开发者ID:HungMingWu,项目名称:gpac,代码行数:28,代码来源:drm_sample.c
示例6: gf_isom_3gp_config_update
GF_Err gf_isom_3gp_config_update(GF_ISOFile *the_file, u32 trackNumber, GF_3GPConfig *param, u32 DescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
GF_3GPConfig *cfg;
GF_3GPPAudioSampleEntryBox *entry;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media || !param || !DescriptionIndex) return GF_BAD_PARAM;
cfg = NULL;
entry = (GF_3GPPAudioSampleEntryBox *)gf_list_get(trak->Media->information->sampleTable->SampleDescription->other_boxes, DescriptionIndex-1);
if (!entry) return GF_BAD_PARAM;
switch (entry->type) {
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:
cfg = &entry->info->cfg;
break;
case GF_ISOM_SUBTYPE_3GP_H263:
cfg = & ((GF_3GPPVisualSampleEntryBox *)entry)->info->cfg;
break;
default:
break;
}
if (!cfg || (cfg->type != param->type)) return GF_BAD_PARAM;
memcpy(cfg, param, sizeof(GF_3GPConfig));
return GF_OK;
}
开发者ID:erelh,项目名称:gpac,代码行数:34,代码来源:sample_descs.c
示例7: gf_isom_hevc_config_new
GF_Err gf_isom_hevc_config_new(GF_ISOFile *the_file, u32 trackNumber, GF_HEVCConfig *cfg, char *URLname, char *URNname, u32 *outDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
u32 dataRefIndex;
GF_MPEGVisualSampleEntryBox *entry;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media || !cfg) return GF_BAD_PARAM;
//get or create the data ref
e = Media_FindDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
if (!dataRefIndex) {
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
}
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
//create a new entry
entry = (GF_MPEGVisualSampleEntryBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_HVC1);
if (!entry) return GF_OUT_OF_MEM;
entry->hevc_config = (GF_HEVCConfigurationBox*)gf_isom_box_new(GF_ISOM_BOX_TYPE_HVCC);
entry->hevc_config->config = HEVC_DuplicateConfig(cfg);
entry->dataReferenceIndex = dataRefIndex;
e = gf_list_add(trak->Media->information->sampleTable->SampleDescription->other_boxes, entry);
*outDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->other_boxes);
HEVC_RewriteESDescriptor(entry);
return e;
}
开发者ID:wipple,项目名称:gpac,代码行数:33,代码来源:avc_ext.c
示例8: gf_isom_set_meta_xml_memory
GF_Err gf_isom_set_meta_xml_memory(GF_ISOFile *file, Bool root_meta, u32 track_num, unsigned char *data, u32 data_size, Bool IsBinaryXML)
{
GF_Err e;
GF_XMLBox *xml;
GF_MetaBox *meta;
e = CanAccessMovie(file, GF_ISOM_OPEN_WRITE);
if (e) return e;
meta = gf_isom_get_meta(file, root_meta, track_num);
if (!meta) return GF_BAD_PARAM;
e = gf_isom_remove_meta_xml(file, root_meta, track_num);
if (e) return e;
xml = (GF_XMLBox *)xml_New();
if (!xml) return GF_OUT_OF_MEM;
gf_list_add(meta->other_boxes, xml);
if (IsBinaryXML) xml->type = GF_ISOM_BOX_TYPE_BXML;
/*assume 32bit max size = 4Go should be sufficient for a DID!!*/
xml->xml_length = data_size;
xml->xml = (char*)gf_malloc(sizeof(unsigned char)*xml->xml_length);
memcpy(xml->xml, data, sizeof(unsigned char)*xml->xml_length);
return GF_OK;
}
开发者ID:Brilon314,项目名称:gpac,代码行数:27,代码来源:meta.c
示例9: gf_isom_set_ipod_compatible
GF_EXPORT
GF_Err gf_isom_set_ipod_compatible(GF_ISOFile *the_file, u32 trackNumber)
{
static const u8 ipod_ext[][16] = { { 0x6B, 0x68, 0x40, 0xF2, 0x5F, 0x24, 0x4F, 0xC5, 0xBA, 0x39, 0xA5, 0x1B, 0xCF, 0x03, 0x23, 0xF3} };
static const u8 ipod_ext_data[][4] = { { 0x00, 0x00, 0x00, 0x00 } };
GF_TrackBox *trak;
GF_Err e;
GF_MPEGVisualSampleEntryBox *entry;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media) return GF_BAD_PARAM;
entry = (GF_MPEGVisualSampleEntryBox*)gf_list_get(trak->Media->information->sampleTable->SampleDescription->other_boxes, 0);
if (!entry) return GF_OK;
switch (entry->type) {
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:
break;
default:
return GF_OK;
}
if (!entry->ipod_ext) entry->ipod_ext = (GF_UnknownUUIDBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_UUID);
memcpy(entry->ipod_ext->uuid, ipod_ext, sizeof(u8)*16);
entry->ipod_ext->dataSize = 4;
entry->ipod_ext->data = gf_malloc(sizeof(u8)*4);
memcpy(entry->ipod_ext->data, ipod_ext_data, sizeof(u8)*4);
return GF_OK;
}
开发者ID:wipple,项目名称:gpac,代码行数:35,代码来源:avc_ext.c
示例10: gf_isom_svc_config_del
GF_Err gf_isom_svc_config_del(GF_ISOFile *the_file, u32 trackNumber, u32 DescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
GF_MPEGVisualSampleEntryBox *entry;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media || !DescriptionIndex) return GF_BAD_PARAM;
entry = (GF_MPEGVisualSampleEntryBox *)gf_list_get(trak->Media->information->sampleTable->SampleDescription->other_boxes, DescriptionIndex-1);
if (!entry) return GF_BAD_PARAM;
switch (entry->type) {
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:
break;
default:
return GF_BAD_PARAM;
}
if (entry->svc_config) {
gf_isom_box_del((GF_Box*)entry->svc_config);
entry->svc_config = NULL;
}
AVC_RewriteESDescriptor(entry);
return GF_OK;
}
开发者ID:wipple,项目名称:gpac,代码行数:30,代码来源:avc_ext.c
示例11: M4_AMR_UpdateStreamConfig
M4Err M4_AMR_UpdateStreamConfig(M4File *the_file, u32 trackNumber, LPAMRCONFIGURATION param, u32 DescriptionIndex)
{
TrackAtom *trak;
M4Err e;
AMRSampleEntryAtom *entry;
e = CanAccessMovie((M4Movie *)the_file, M4_OPEN_WRITE);
if (e) return e;
trak = GetTrackFromFile(the_file, trackNumber);
if (!trak || !trak->Media || !param || !DescriptionIndex) return M4BadParam;
entry = ChainGetEntry(trak->Media->information->sampleTable->SampleDescription->atomList, DescriptionIndex-1);
if (!entry) return M4BadParam;
switch (entry->type) {
case AMRSampleEntryAtomType:
case WB_AMRSampleEntryAtomType:
break;
default:
return M4BadParam;
}
entry->amr_info->decoder_version = param->decoder_version;
entry->amr_info->frames_per_sample = param->frames_per_sample;
entry->amr_info->mode_change_period = param->mode_change_period;
entry->amr_info->mode_set = param->mode_set;
entry->amr_info->vendor = param->vendor;
//change atom type
entry->type = param->WideBandAMR ? WB_AMRSampleEntryAtomType : AMRSampleEntryAtomType;
return M4OK;
}
开发者ID:DmitrySigaev,项目名称:DSMedia,代码行数:31,代码来源:M4_3GPP.c
示例12: gf_isom_set_meta_type
GF_EXPORT
GF_Err gf_isom_set_meta_type(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 metaType)
{
char szName[20];
GF_MetaBox *meta;
GF_Err e = CanAccessMovie(file, GF_ISOM_OPEN_WRITE);
if (e) return e;
meta = gf_isom_get_meta(file, root_meta, track_num);
if (!meta) {
if (!metaType) return GF_OK;
meta = (GF_MetaBox *) meta_New();
if (root_meta) {
file->meta = meta;
gf_list_add(file->TopBoxes, meta);
} else {
gf_isom_insert_moov(file);
if (!track_num) {
file->moov->meta = meta;
} else {
GF_TrackBox *tk = (GF_TrackBox *)gf_list_get(file->moov->trackList, track_num-1);
if (!tk) {
gf_isom_box_del((GF_Box *)meta);
return GF_BAD_PARAM;
}
tk->meta = meta;
}
}
} else if (!metaType) {
if (root_meta) {
gf_list_del_item(file->TopBoxes, meta);
gf_isom_box_del((GF_Box *)file->meta);
file->meta = NULL;
} else if (file->moov) {
if (!track_num) {
gf_isom_box_del((GF_Box *)file->moov->meta);
file->moov->meta = NULL;
} else {
GF_TrackBox *tk = (GF_TrackBox *)gf_list_get(file->moov->trackList, track_num-1);
if (!tk) return GF_BAD_PARAM;
gf_isom_box_del((GF_Box *)tk->meta);
tk->meta = NULL;
}
}
return GF_OK;
}
if (!meta->handler)
meta->handler = (GF_HandlerBox *)hdlr_New();
if (meta->handler->nameUTF8) gf_free(meta->handler->nameUTF8);
meta->handler->handlerType = metaType;
sprintf(szName, "GPAC %s Handler", gf_4cc_to_str(metaType));
meta->handler->nameUTF8 = gf_strdup(szName);
return GF_OK;
}
开发者ID:Brilon314,项目名称:gpac,代码行数:57,代码来源:meta.c
示例13: gf_isom_new_text_description
GF_Err gf_isom_new_text_description(GF_ISOFile *movie, u32 trackNumber, GF_TextSampleDescriptor *desc, char *URLname, char *URNname, u32 *outDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
u32 dataRefIndex, i;
GF_Tx3gSampleEntryBox *txt;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media || !desc->font_count) return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_TEXT:
case GF_ISOM_MEDIA_SUBT:
break;
default:
return GF_BAD_PARAM;
}
//get or create the data ref
e = Media_FindDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
if (!dataRefIndex) {
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
}
if (!movie->keep_utc)
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
txt = (GF_Tx3gSampleEntryBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_TX3G);
txt->dataReferenceIndex = dataRefIndex;
gf_list_add(trak->Media->information->sampleTable->SampleDescription->other_boxes, txt);
if (outDescriptionIndex) *outDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->other_boxes);
txt->back_color = desc->back_color;
txt->default_box = desc->default_pos;
txt->default_style = desc->default_style;
txt->displayFlags = desc->displayFlags;
txt->vertical_justification = desc->vert_justif;
txt->horizontal_justification = desc->horiz_justif;
txt->font_table = (GF_FontTableBox *)gf_isom_box_new(GF_ISOM_BOX_TYPE_FTAB);
txt->font_table->entry_count = desc->font_count;
txt->font_table->fonts = (GF_FontRecord *) gf_malloc(sizeof(GF_FontRecord) * desc->font_count);
for (i=0; i<desc->font_count; i++) {
txt->font_table->fonts[i].fontID = desc->fonts[i].fontID;
if (desc->fonts[i].fontName) txt->font_table->fonts[i].fontName = gf_strdup(desc->fonts[i].fontName);
}
return e;
}
开发者ID:DmitrySigaev,项目名称:gpac-sf,代码行数:52,代码来源:tx3g.c
示例14: gf_isom_update_text_description
GF_Err gf_isom_update_text_description(GF_ISOFile *movie, u32 trackNumber, u32 descriptionIndex, GF_TextSampleDescriptor *desc)
{
GF_TrackBox *trak;
GF_Err e;
u32 i;
GF_Tx3gSampleEntryBox *txt;
if (!descriptionIndex || !desc) return GF_BAD_PARAM;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media || !desc->font_count) return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_TEXT:
case GF_ISOM_MEDIA_SUBT:
break;
default:
return GF_BAD_PARAM;
}
txt = (GF_Tx3gSampleEntryBox*)gf_list_get(trak->Media->information->sampleTable->SampleDescription->other_boxes, descriptionIndex - 1);
if (!txt) return GF_BAD_PARAM;
switch (txt->type) {
case GF_ISOM_BOX_TYPE_TX3G:
case GF_ISOM_BOX_TYPE_TEXT:
break;
default:
return GF_BAD_PARAM;
}
if (!movie->keep_utc)
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
txt->back_color = desc->back_color;
txt->default_box = desc->default_pos;
txt->default_style = desc->default_style;
txt->displayFlags = desc->displayFlags;
txt->vertical_justification = desc->vert_justif;
txt->horizontal_justification = desc->horiz_justif;
if (txt->font_table) gf_isom_box_del((GF_Box*)txt->font_table);
txt->font_table = (GF_FontTableBox *)gf_isom_box_new(GF_ISOM_BOX_TYPE_FTAB);
txt->font_table->entry_count = desc->font_count;
txt->font_table->fonts = (GF_FontRecord *) gf_malloc(sizeof(GF_FontRecord) * desc->font_count);
for (i=0; i<desc->font_count; i++) {
txt->font_table->fonts[i].fontID = desc->fonts[i].fontID;
if (desc->fonts[i].fontName) txt->font_table->fonts[i].fontName = gf_strdup(desc->fonts[i].fontName);
}
return e;
}
开发者ID:DmitrySigaev,项目名称:gpac-sf,代码行数:52,代码来源:tx3g.c
示例15: gf_isom_new_xml_subtitle_description
GF_Err gf_isom_new_xml_subtitle_description(GF_ISOFile *movie, u32 trackNumber,
const char *xmlnamespace, const char *xml_schema_loc, const char *mimes,
u32 *outDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
u32 dataRefIndex;
GF_MetaDataSampleEntryBox *stpp;
char *URLname = NULL;
char *URNname = NULL;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media) return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_MPEG_SUBT:
case GF_ISOM_MEDIA_META:
case GF_ISOM_MEDIA_TEXT:
break;
default:
return GF_BAD_PARAM;
}
if (!xmlnamespace) {
GF_LOG(GF_LOG_WARNING, GF_LOG_PARSER, ("XML (Subtitle, Metadata or Text) SampleEntry: namespace is mandatory. Abort.\n"));
return GF_BAD_PARAM;
}
//get or create the data ref
e = Media_FindDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
if (!dataRefIndex) {
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
}
if (!movie->keep_utc)
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
stpp = (GF_MetaDataSampleEntryBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_STPP);
stpp->dataReferenceIndex = dataRefIndex;
gf_list_add(trak->Media->information->sampleTable->SampleDescription->other_boxes, stpp);
if (outDescriptionIndex) *outDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->other_boxes);
stpp->xml_namespace = gf_strdup(xmlnamespace);
if (xml_schema_loc) stpp->xml_schema_loc = gf_strdup(xml_schema_loc); //optional
if (mimes) stpp->mime_type = gf_strdup(mimes); //optional
return e;
}
开发者ID:HungMingWu,项目名称:gpac,代码行数:51,代码来源:sample_descs.c
示例16: gf_isom_avc_config_update_ex
static GF_Err gf_isom_avc_config_update_ex(GF_ISOFile *the_file, u32 trackNumber, u32 DescriptionIndex, GF_AVCConfig *cfg, u32 op_type)
{
GF_TrackBox *trak;
GF_Err e;
GF_MPEGVisualSampleEntryBox *entry;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
if (!trak || !trak->Media || !cfg || !DescriptionIndex) return GF_BAD_PARAM;
entry = (GF_MPEGVisualSampleEntryBox *)gf_list_get(trak->Media->information->sampleTable->SampleDescription->boxList, DescriptionIndex-1);
if (!entry) return GF_BAD_PARAM;
switch (entry->type) {
case GF_ISOM_BOX_TYPE_AVC1:
case GF_ISOM_BOX_TYPE_AVC2:
case GF_ISOM_BOX_TYPE_SVC1:
break;
default:
return GF_BAD_PARAM;
}
switch (op_type) {
/*AVCC replacement*/
case 0:
if (!entry->avc_config) entry->avc_config = (GF_AVCConfigurationBox*)gf_isom_box_new(GF_ISOM_BOX_TYPE_AVCC);
if (entry->avc_config->config) gf_odf_avc_cfg_del(entry->avc_config->config);
entry->avc_config->config = AVC_DuplicateConfig(cfg);
entry->type = GF_ISOM_BOX_TYPE_AVC1;
break;
/*SVCC replacement*/
case 1:
if (!entry->svc_config) entry->svc_config = (GF_AVCConfigurationBox*)gf_isom_box_new(GF_ISOM_BOX_TYPE_SVCC);
if (entry->svc_config->config) gf_odf_avc_cfg_del(entry->svc_config->config);
entry->svc_config->config = AVC_DuplicateConfig(cfg);
entry->type = GF_ISOM_BOX_TYPE_AVC1;
break;
/*SVCC replacement and AVC removal*/
case 2:
if (entry->avc_config) {
gf_isom_box_del((GF_Box*)entry->avc_config);
entry->avc_config = NULL;
}
if (!entry->svc_config) entry->svc_config = (GF_AVCConfigurationBox*)gf_isom_box_new(GF_ISOM_BOX_TYPE_SVCC);
if (entry->svc_config->config) gf_odf_avc_cfg_del(entry->svc_config->config);
entry->svc_config->config = AVC_DuplicateConfig(cfg);
entry->type = GF_ISOM_BOX_TYPE_SVC1;
break;
}
AVC_RewriteESDescriptor(entry);
return GF_OK;
}
开发者ID:noelove,项目名称:GPAC-old,代码行数:51,代码来源:avc_ext.c
示例17: gf_isom_text_has_similar_description
GF_Err gf_isom_text_has_similar_description(GF_ISOFile *movie, u32 trackNumber, GF_TextSampleDescriptor *desc, u32 *outDescIdx, Bool *same_box, Bool *same_styles)
{
GF_TrackBox *trak;
GF_Err e;
u32 i, j, count;
GF_Tx3gSampleEntryBox *txt;
*same_box = *same_styles = 0;
*outDescIdx = 0;
if (!desc) return GF_BAD_PARAM;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return GF_BAD_PARAM;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media || !desc->font_count) return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_TEXT:
case GF_ISOM_MEDIA_SUBT:
break;
default:
return GF_BAD_PARAM;
}
count = gf_list_count(trak->Media->information->sampleTable->SampleDescription->boxList);
for (i=0; i<count; i++) {
Bool same_fonts;
txt = (GF_Tx3gSampleEntryBox*)gf_list_get(trak->Media->information->sampleTable->SampleDescription->boxList, i);
if (!txt) continue;
if ((txt->type != GF_ISOM_BOX_TYPE_TX3G) && (txt->type != GF_ISOM_BOX_TYPE_TEXT)) continue;
if (txt->back_color != desc->back_color) continue;
if (txt->displayFlags != desc->displayFlags) continue;
if (txt->vertical_justification != desc->vert_justif) continue;
if (txt->horizontal_justification != desc->horiz_justif) continue;
if (txt->font_table->entry_count != desc->font_count) continue;
same_fonts = 1;
for (j=0; j<desc->font_count; j++) {
if (txt->font_table->fonts[j].fontID != desc->fonts[j].fontID) same_fonts = 0;
else if (strcmp(desc->fonts[j].fontName, txt->font_table->fonts[j].fontName)) same_fonts = 0;
}
if (same_fonts) {
*outDescIdx = i+1;
if (!memcmp(&txt->default_box, &desc->default_pos, sizeof(GF_BoxRecord))) *same_box = 1;
if (!memcmp(&txt->default_style, &desc->default_style, sizeof(GF_StyleRecord))) *same_styles = 1;
return GF_OK;
}
}
return GF_OK;
}
开发者ID:ScandalCorp,项目名称:ccextractor,代码行数:51,代码来源:tx3g.c
示例18: gf_isom_new_xml_metadata_description
GF_Err gf_isom_new_xml_metadata_description(GF_ISOFile *movie, u32 trackNumber,
const char *_namespace, const char *schema_loc, const char *content_encoding,
u32 *outDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
u32 dataRefIndex;
GF_MetaDataSampleEntryBox *metad;
char *URLname = NULL;
char *URNname = NULL;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media || !_namespace)
return GF_BAD_PARAM;
switch (trak->Media->handler->handlerType) {
case GF_ISOM_MEDIA_MPEG_SUBT:
case GF_ISOM_MEDIA_META:
case GF_ISOM_MEDIA_TEXT:
break;
default:
return GF_BAD_PARAM;
}
//get or create the data ref
e = Media_FindDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
if (!dataRefIndex) {
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
}
if (!movie->keep_utc)
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
metad = (GF_MetaDataSampleEntryBox*) gf_isom_box_new(GF_ISOM_BOX_TYPE_METX);
if (!metad) return GF_OUT_OF_MEM;
metad->dataReferenceIndex = dataRefIndex;
metad->xml_namespace = gf_strdup(_namespace);
if (content_encoding) metad->content_encoding = gf_strdup(content_encoding);
if (schema_loc) metad->xml_schema_loc = gf_strdup(schema_loc);
e = gf_list_add(trak->Media->information->sampleTable->SampleDescription->other_boxes, metad);
if (outDescriptionIndex) *outDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->other_boxes);
return e;
}
开发者ID:HungMingWu,项目名称:gpac,代码行数:49,代码来源:sample_descs.c
示例19: gf_isom_new_hint_description
//to use with internally supported protocols
GF_Err gf_isom_new_hint_description(GF_ISOFile *the_file, u32 trackNumber, s32 HintTrackVersion, s32 LastCompatibleVersion, u8 Rely, u32 *HintDescriptionIndex)
{
GF_Err e;
u32 drefIndex;
GF_TrackBox *trak;
GF_HintSampleEntryBox *hdesc;
GF_RelyHintBox *relyA;
e = CanAccessMovie(the_file, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(the_file, trackNumber);
*HintDescriptionIndex = 0;
if (!trak || !IsHintTrack(trak)) return GF_BAD_PARAM;
//OK, create a new HintSampleDesc
hdesc = (GF_HintSampleEntryBox *) gf_isom_box_new(GetHintFormat(trak));
if (HintTrackVersion > 0) hdesc->HintTrackVersion = HintTrackVersion;
if (LastCompatibleVersion > 0) hdesc->LastCompatibleVersion = LastCompatibleVersion;
//create a data reference - WE ONLY DEAL WITH SELF-CONTAINED HINT TRACKS
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, NULL, NULL, &drefIndex);
if (e) return e;
hdesc->dataReferenceIndex = drefIndex;
//add the entry to our table...
e = stsd_AddBox(trak->Media->information->sampleTable->SampleDescription, (GF_Box *) hdesc);
if (e) return e;
*HintDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->boxList);
//RTP needs a default timeScale... use the media one.
if (CheckHintFormat(trak, GF_ISOM_HINT_RTP)) {
e = gf_isom_rtp_set_timescale(the_file, trackNumber, *HintDescriptionIndex, trak->Media->mediaHeader->timeScale);
if (e) return e;
}
if (!Rely) return GF_OK;
//we need a rely box (common to all protocols)
relyA = (GF_RelyHintBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_RELY);
if (Rely == 1) {
relyA->prefered = 1;
} else {
relyA->required = 1;
}
return gf_list_add(hdesc->HintDataTable, relyA);
}
开发者ID:noelove,项目名称:GPAC-old,代码行数:48,代码来源:hint_track.c
示例20: gf_isom_new_dims_description
GF_Err gf_isom_new_dims_description(GF_ISOFile *movie, u32 trackNumber, GF_DIMSDescription *desc, char *URLname, char *URNname, u32 *outDescriptionIndex)
{
GF_TrackBox *trak;
GF_Err e;
u32 dataRefIndex;
GF_DIMSSampleEntryBox *dims;
e = CanAccessMovie(movie, GF_ISOM_OPEN_WRITE);
if (e) return e;
trak = gf_isom_get_track_from_file(movie, trackNumber);
if (!trak || !trak->Media) return GF_BAD_PARAM;
if (trak->Media->handler->handlerType != GF_ISOM_MEDIA_SCENE) return GF_BAD_PARAM;
//get or create the data ref
e = Media_FindDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
if (!dataRefIndex) {
e = Media_CreateDataRef(trak->Media->information->dataInformation->dref, URLname, URNname, &dataRefIndex);
if (e) return e;
}
if (!movie->keep_utc)
trak->Media->mediaHeader->modificationTime = gf_isom_get_mp4time();
dims = (GF_DIMSSampleEntryBox *) gf_isom_box_new(GF_ISOM_BOX_TYPE_DIMS);
dims->dataReferenceIndex = dataRefIndex;
gf_list_add(trak->Media->information->sampleTable->SampleDescription->other_boxes, dims);
if (outDescriptionIndex) *outDescriptionIndex = gf_list_count(trak->Media->information->sampleTable->SampleDescription->other_boxes);
dims->config = (GF_DIMSSceneConfigBox*) gf_isom_box_new(GF_ISOM_BOX_TYPE_DIMC);
dims->config->profile = desc->profile;
dims->config->level = desc->level;
dims->config->pathComponents = desc->pathComponents;
dims->config->fullRequestHost = desc->fullRequestHost;
dims->config->containsRedundant = desc->containsRedundant;
if (!dims->config->containsRedundant) dims->config->containsRedundant = 1;
dims->config->streamType = desc->streamType;
dims->config->textEncoding = gf_strdup(desc->textEncoding ? desc->textEncoding : "");
dims->config->contentEncoding = gf_strdup(desc->contentEncoding ? desc->contentEncoding : "");
if (desc->content_script_types) {
dims->scripts = (GF_DIMSScriptTypesBox*) gf_isom_box_new(GF_ISOM_BOX_TYPE_DIST);
dims->scripts->content_script_types = gf_strdup(desc->content_script_types);
}
return e;
}
开发者ID:HungMingWu,项目名称:gpac,代码行数:47,代码来源:sample_descs.c
注:本文中的CanAccessMovie函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论