GF_Codec *gf_codec_new(GF_ObjectManager *odm, GF_ESD *base_layer, s32 PL, GF_Err *e) { GF_Codec *tmp; GF_SAFEALLOC(tmp, GF_Codec); if (! tmp) { *e = GF_OUT_OF_MEM; return NULL; } tmp->odm = odm; if (PL<0) PL = 0xFF; *e = Codec_Load(tmp, base_layer, PL); if (*e) { GF_LOG(GF_LOG_ERROR, GF_LOG_CODEC, ("[Codec] Cannot find decoder for stream type %s\n", gf_esd_get_textual_description(base_layer) )); gf_free(tmp); return NULL; } /*remember codec type*/ tmp->type = base_layer->decoderConfig->streamType; tmp->inChannels = gf_list_new(); tmp->Status = GF_ESM_CODEC_STOP; if (tmp->type==GF_STREAM_PRIVATE_MEDIA) tmp->type = GF_STREAM_VISUAL; GF_LOG(GF_LOG_INFO, GF_LOG_CODEC, ("[Codec] Found decoder %s for stream type %s\n", tmp->decio->module_name, gf_esd_get_textual_description(base_layer) )); return tmp; }
GenericCodec *NewDecoder(ODManager *odm, ESDescriptor *base_layer, s32 PL, M4Err *e) { GenericCodec *tmp = malloc(sizeof(GenericCodec)); if (! tmp) { *e = M4OutOfMem; return NULL; } memset(tmp, 0, sizeof(GenericCodec)); tmp->odm = odm; if (PL<0) PL = 0xFF; *e = Codec_Load(tmp, base_layer, PL); if (*e) { free(tmp); return NULL; } /*remember codec type*/ tmp->type = base_layer->decoderConfig->streamType; tmp->inChannels = NewChain(); tmp->Status = CODEC_STOP; return tmp; }