/***************************************************************************** * Builders *****************************************************************************/ static int BuildChromaResize( filter_t *p_filter ) { filter_sys_t *p_sys = p_filter->p_sys; es_format_t fmt_mid; int i_ret; /* Lets try resizing and then doing the chroma conversion */ filter_chain_Reset( p_sys->p_chain, &p_filter->fmt_in, &p_filter->fmt_out ); msg_Dbg( p_filter, "Trying to build resize+chroma" ); EsFormatMergeSize( &fmt_mid, &p_filter->fmt_in, &p_filter->fmt_out ); i_ret = CreateChain( p_sys->p_chain, &fmt_mid, NULL ); es_format_Clean( &fmt_mid ); if( i_ret == VLC_SUCCESS ) return VLC_SUCCESS; /* Lets try it the other way arround (chroma and then resize) */ filter_chain_Reset( p_sys->p_chain, &p_filter->fmt_in, &p_filter->fmt_out ); msg_Dbg( p_filter, "Trying to build chroma+resize" ); EsFormatMergeSize( &fmt_mid, &p_filter->fmt_out, &p_filter->fmt_in ); i_ret = CreateChain( p_sys->p_chain, &fmt_mid, NULL ); es_format_Clean( &fmt_mid ); if( i_ret == VLC_SUCCESS ) return VLC_SUCCESS; return VLC_EGENERIC; }
static int BuildTransformChain( filter_t *p_filter ) { es_format_t fmt_mid; int i_ret; /* Lets try transform first, then (potentially) resize+chroma */ msg_Dbg( p_filter, "Trying to build transform, then chroma+resize" ); es_format_Copy( &fmt_mid, &p_filter->fmt_in ); video_format_TransformTo(&fmt_mid.video, p_filter->fmt_out.video.orientation); i_ret = CreateChain( p_filter, &fmt_mid ); es_format_Clean( &fmt_mid ); if( i_ret == VLC_SUCCESS ) return VLC_SUCCESS; /* Lets try resize+chroma first, then transform */ msg_Dbg( p_filter, "Trying to build chroma+resize" ); EsFormatMergeSize( &fmt_mid, &p_filter->fmt_out, &p_filter->fmt_in ); i_ret = CreateChain( p_filter, &fmt_mid ); es_format_Clean( &fmt_mid ); if( i_ret == VLC_SUCCESS ) return VLC_SUCCESS; return VLC_EGENERIC; }
/** * Filter chain destruction */ void filter_chain_Delete( filter_chain_t *p_chain ) { filter_chain_Reset( p_chain, NULL, NULL ); es_format_Clean( &p_chain->fmt_in ); es_format_Clean( &p_chain->fmt_out ); free( p_chain ); }
static void DeleteFilter( filter_t * p_filter ) { if( p_filter->p_module ) module_unneed( p_filter, p_filter->p_module ); es_format_Clean( &p_filter->fmt_in ); es_format_Clean( &p_filter->fmt_out ); vlc_object_release( p_filter ); }
static void DeleteEncoder( encoder_t * p_enc ) { if( p_enc->p_module ) module_unneed( p_enc, p_enc->p_module ); es_format_Clean( &p_enc->fmt_in ); es_format_Clean( &p_enc->fmt_out ); vlc_object_release( p_enc ); p_enc = NULL; }
static int BuildFilterChain( filter_t *p_filter ) { es_format_t fmt_mid; int i_ret = VLC_EGENERIC; filter_sys_t *p_sys = p_filter->p_sys; /* Now try chroma format list */ const vlc_fourcc_t *pi_allowed_chromas = get_allowed_chromas( p_filter ); for( int i = 0; pi_allowed_chromas[i]; i++ ) { filter_chain_Reset( p_sys->p_chain, &p_filter->fmt_in, &p_filter->fmt_out ); const vlc_fourcc_t i_chroma = pi_allowed_chromas[i]; if( i_chroma == p_filter->fmt_in.i_codec || i_chroma == p_filter->fmt_out.i_codec ) continue; msg_Dbg( p_filter, "Trying to use chroma %4.4s as middle man", (char*)&i_chroma ); es_format_Copy( &fmt_mid, &p_filter->fmt_in ); fmt_mid.i_codec = fmt_mid.video.i_chroma = i_chroma; fmt_mid.video.i_rmask = 0; fmt_mid.video.i_gmask = 0; fmt_mid.video.i_bmask = 0; video_format_FixRgb(&fmt_mid.video); if( filter_chain_AppendConverter( p_sys->p_chain, NULL, &fmt_mid ) == VLC_SUCCESS ) { p_sys->p_video_filter = filter_chain_AppendFilter( p_sys->p_chain, p_filter->psz_name, p_filter->p_cfg, &fmt_mid, &fmt_mid ); if( p_sys->p_video_filter ) { filter_AddProxyCallbacks( p_filter, p_sys->p_video_filter, RestartFilterCallback ); if (p_sys->p_video_filter->pf_video_mouse != NULL) p_filter->pf_video_mouse = ChainMouse; es_format_Clean( &fmt_mid ); i_ret = VLC_SUCCESS; break; } } es_format_Clean( &fmt_mid ); } if( i_ret != VLC_SUCCESS ) filter_chain_Reset( p_sys->p_chain, &p_filter->fmt_in, &p_filter->fmt_out ); return i_ret; }
static void DeleteDecoder( decoder_t * p_dec ) { if( p_dec->p_module ) module_unneed( p_dec, p_dec->p_module ); es_format_Clean( &p_dec->fmt_in ); es_format_Clean( &p_dec->fmt_out ); if( p_dec->p_description ) vlc_meta_Delete( p_dec->p_description ); vlc_object_release( p_dec ); p_dec = NULL; }
static sout_stream_id_sys_t *Add(sout_stream_t *stream, const es_format_t *fmt) { sout_stream_sys_t *sys = stream->p_sys; sout_stream_id_sys_t *id = malloc(sizeof (*id)); if (unlikely(id == NULL)) return NULL; id->next = NULL; if (es_format_Copy(&id->fmt, fmt)) { es_format_Clean(&id->fmt); free(id); return NULL; } if (sys->stream != NULL) id->id = sout_StreamIdAdd(sys->stream, &id->fmt); id->prev = sys->last; sys->last = id; if (id->prev != NULL) id->prev->next = id; else sys->first = id; return id; }
/***************************************************************************** * Close: *****************************************************************************/ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; int i; for( i = 0; i < PS_TK_COUNT; i++ ) { ps_track_t *tk = &p_sys->tk[i]; if( tk->b_seen ) { es_format_Clean( &tk->fmt ); if( tk->es ) es_out_Del( p_demux->out, tk->es ); } } /* Free the array of titles */ for( int i = 0; i < p_sys->i_titles; i++ ) vlc_input_title_Delete( p_sys->titles[i] ); TAB_CLEAN( p_sys->i_titles, p_sys->titles ); /* Close libdvdread */ if( p_sys->p_title ) DVDCloseFile( p_sys->p_title ); if( p_sys->p_vts_file ) ifoClose( p_sys->p_vts_file ); if( p_sys->p_vmg_file ) ifoClose( p_sys->p_vmg_file ); DVDClose( p_sys->p_dvdread ); free( p_sys ); }
static void Del(sout_stream_t *p_stream, sout_stream_id_sys_t *id) { sout_stream_sys_t *p_sys = p_stream->p_sys; for (size_t i=0; i<p_sys->streams.size(); i++) { if ( p_sys->streams[i] == id ) { if ( p_sys->streams[i]->p_sub_id != NULL ) sout_StreamIdDel( p_sys->p_out, p_sys->streams[i]->p_sub_id ); es_format_Clean( &p_sys->streams[i]->fmt ); free( p_sys->streams[i] ); p_sys->streams.erase( p_sys->streams.begin() + i ); p_sys->es_changed = true; break; } } if ( p_sys->streams.empty() ) { p_sys->p_intf->requestPlayerStop(); sout_StreamChainDelete( p_sys->p_out, p_sys->p_out ); p_sys->p_out = NULL; p_sys->sout = ""; } }
static int CreateResizeChromaChain( filter_t *p_parent, const es_format_t *p_fmt_mid ) { filter_sys_t *p_sys = p_parent->p_sys; filter_chain_Reset( p_sys->p_chain, &p_parent->fmt_in, &p_parent->fmt_out ); int i_ret = filter_chain_AppendConverter( p_sys->p_chain, NULL, p_fmt_mid ); if( i_ret != VLC_SUCCESS ) return i_ret; if( p_parent->b_allow_fmt_out_change ) { /* XXX: Update i_sar_num/i_sar_den from last converter. Cf. * p_filter->b_allow_fmt_out_change comment in video_chroma/swscale.c. * */ es_format_t fmt_out; es_format_Copy( &fmt_out, filter_chain_GetFmtOut( p_sys->p_chain ) ); fmt_out.video.i_chroma = p_parent->fmt_out.video.i_chroma; i_ret = filter_chain_AppendConverter( p_sys->p_chain, NULL, &fmt_out ); es_format_Clean( &fmt_out ); } else i_ret = filter_chain_AppendConverter( p_sys->p_chain, NULL, &p_parent->fmt_out ); if( i_ret != VLC_SUCCESS ) filter_chain_Reset( p_sys->p_chain, NULL, NULL ); return i_ret; }
static int Del( sout_stream_t *p_stream, sout_stream_id_t *id ) { sout_stream_sys_t *p_sys = p_stream->p_sys; if( !p_sys->p_out ) OutputStart( p_stream ); if( id->p_first ) block_ChainRelease( id->p_first ); assert( !id->id || p_sys->p_out ); if( id->id ) sout_StreamIdDel( p_sys->p_out, id->id ); es_format_Clean( &id->fmt ); TAB_REMOVE( p_sys->i_id, p_sys->id, id ); if( p_sys->i_id <= 0 ) { if( !p_sys->p_out ) p_sys->b_drop = false; } free( id ); return VLC_SUCCESS; }
static int BuildChromaChain( filter_t *p_filter ) { es_format_t fmt_mid; int i_ret = VLC_EGENERIC; /* Now try chroma format list */ const vlc_fourcc_t *pi_allowed_chromas = get_allowed_chromas( p_filter ); for( int i = 0; pi_allowed_chromas[i]; i++ ) { const vlc_fourcc_t i_chroma = pi_allowed_chromas[i]; if( i_chroma == p_filter->fmt_in.i_codec || i_chroma == p_filter->fmt_out.i_codec ) continue; msg_Dbg( p_filter, "Trying to use chroma %4.4s as middle man", (char*)&i_chroma ); es_format_Copy( &fmt_mid, &p_filter->fmt_in ); fmt_mid.i_codec = fmt_mid.video.i_chroma = i_chroma; fmt_mid.video.i_rmask = 0; fmt_mid.video.i_gmask = 0; fmt_mid.video.i_bmask = 0; video_format_FixRgb(&fmt_mid.video); i_ret = CreateChain( p_filter, &fmt_mid ); es_format_Clean( &fmt_mid ); if( i_ret == VLC_SUCCESS ) break; } return i_ret; }
matroska_segment_c::~matroska_segment_c() { for( tracks_map_t::iterator it = tracks.begin(); it != tracks.end(); ++it) { tracks_map_t::mapped_type& track = it->second; es_format_Clean( &track.fmt ); delete track.p_compression_data; delete track.p_sys; free( track.p_extra_data ); } free( psz_writing_application ); free( psz_muxing_application ); free( psz_segment_filename ); free( psz_title ); free( psz_date_utc ); delete ep; delete segment; delete p_segment_uid; delete p_prev_segment_uid; delete p_next_segment_uid; vlc_delete_all( stored_editions ); vlc_delete_all( translations ); vlc_delete_all( families ); }
/***************************************************************************** * sout_MuxDeleteStream: *****************************************************************************/ void sout_MuxDeleteStream( sout_mux_t *p_mux, sout_input_t *p_input ) { int i_index; if( p_mux->b_waiting_stream && block_FifoCount( p_input->p_fifo ) > 0 ) { /* We stop waiting, and call the muxer for taking care of the data * before we remove this es */ p_mux->b_waiting_stream = false; p_mux->pf_mux( p_mux ); } TAB_FIND( p_mux->i_nb_inputs, p_mux->pp_inputs, p_input, i_index ); if( i_index >= 0 ) { p_mux->pf_delstream( p_mux, p_input ); /* remove the entry */ TAB_REMOVE( p_mux->i_nb_inputs, p_mux->pp_inputs, p_input ); if( p_mux->i_nb_inputs == 0 ) { msg_Warn( p_mux, "no more input streams for this mux" ); } block_FifoRelease( p_input->p_fifo ); es_format_Clean( &p_input->fmt ); free( p_input ); } }
/***************************************************************************** * Close: frees unused data *****************************************************************************/ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; es_format_Clean( &p_sys->fmt ); free( p_sys ); }
/***************************************************************************** * Activate: allocate a chroma function ***************************************************************************** * This function allocates and initializes a chroma function *****************************************************************************/ static int Activate( filter_t *p_filter, int (*pf_build)(filter_t *) ) { filter_sys_t *p_sys; int i_ret = VLC_EGENERIC; p_sys = p_filter->p_sys = calloc( 1, sizeof( *p_sys ) ); if( !p_sys ) return VLC_ENOMEM; filter_owner_t owner = { .video = &filter_video_chain_cbs, .sys = p_filter, }; p_sys->p_chain = filter_chain_NewVideo( p_filter, p_filter->b_allow_fmt_out_change, &owner ); if( !p_sys->p_chain ) { free( p_sys ); return VLC_EGENERIC; } int type = VLC_VAR_INTEGER; if( var_Type( p_filter->obj.parent, "chain-level" ) != 0 ) type |= VLC_VAR_DOINHERIT; var_Create( p_filter, "chain-level", type ); /* Note: atomicity is not actually needed here. */ var_IncInteger( p_filter, "chain-level" ); int level = var_GetInteger( p_filter, "chain-level" ); if( level < 0 || level > CHAIN_LEVEL_MAX ) msg_Err( p_filter, "Too high level of recursion (%d)", level ); else i_ret = pf_build( p_filter ); var_Destroy( p_filter, "chain-level" ); if( i_ret ) { /* Hum ... looks like this really isn't going to work. Too bad. */ if (p_sys->p_video_filter) filter_DelProxyCallbacks( p_filter, p_sys->p_video_filter, RestartFilterCallback ); filter_chain_Delete( p_sys->p_chain ); free( p_sys ); return VLC_EGENERIC; } if( p_filter->b_allow_fmt_out_change ) { es_format_Clean( &p_filter->fmt_out ); es_format_Copy( &p_filter->fmt_out, filter_chain_GetFmtOut( p_sys->p_chain ) ); } /* */ p_filter->pf_video_filter = Chain; return VLC_SUCCESS; }
/** * Filter chain reinitialisation */ void filter_chain_Reset( filter_chain_t *p_chain, const es_format_t *p_fmt_in, const es_format_t *p_fmt_out ) { filter_t *p_filter; while( (p_filter = &p_chain->first->filter) != NULL ) filter_chain_DeleteFilterInternal( p_chain, p_filter ); if( p_fmt_in ) { es_format_Clean( &p_chain->fmt_in ); es_format_Copy( &p_chain->fmt_in, p_fmt_in ); } if( p_fmt_out ) { es_format_Clean( &p_chain->fmt_out ); es_format_Copy( &p_chain->fmt_out, p_fmt_out ); } }
static void ts_pes_es_Clean( demux_t *p_demux, ts_pes_es_t *p_es ) { if( p_es && p_es->id ) { /* Ensure we don't wait for overlap hacks #14257 */ es_out_Control( p_demux->out, ES_OUT_SET_ES_STATE, p_es->id, false ); es_out_Del( p_demux->out, p_es->id ); p_demux->p_sys->i_pmt_es--; } es_format_Clean( &p_es->fmt ); }
static void Del( sout_stream_t *p_stream, sout_stream_id_sys_t *p_es ) { sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys; if( p_es->id != NULL ) sout_StreamIdDel( p_stream->p_next, p_es->id ); TAB_REMOVE( p_sys->i_es_num, p_sys->pp_es, p_es ); es_format_Clean( &p_es->fmt ); free( p_es ); }
/***************************************************************************** * Close: *****************************************************************************/ static void Close( vlc_object_t *p_this ) { decoder_t *p_dec = (decoder_t*)p_this; if( p_dec->p_sys->p_block ) { block_ChainRelease( p_dec->p_sys->p_block ); } es_format_Clean( &p_dec->fmt_out ); free( p_dec->p_sys ); }
void input_item_Release( input_item_t *p_item ) { input_item_owner_t *owner = item_owner(p_item); if( atomic_fetch_sub(&owner->refs, 1) != 1 ) return; vlc_event_manager_fini( &p_item->event_manager ); free( p_item->psz_name ); free( p_item->psz_uri ); if( p_item->p_stats != NULL ) { vlc_mutex_destroy( &p_item->p_stats->lock ); free( p_item->p_stats ); } if( p_item->p_meta != NULL ) vlc_meta_Delete( p_item->p_meta ); for( input_item_opaque_t *o = p_item->opaques, *next; o != NULL; o = next ) { next = o->next; free( o ); } for( int i = 0; i < p_item->i_options; i++ ) free( p_item->ppsz_options[i] ); TAB_CLEAN( p_item->i_options, p_item->ppsz_options ); free( p_item->optflagv ); for( int i = 0; i < p_item->i_es; i++ ) { es_format_Clean( p_item->es[i] ); free( p_item->es[i] ); } TAB_CLEAN( p_item->i_es, p_item->es ); for( int i = 0; i < p_item->i_epg; i++ ) vlc_epg_Delete( p_item->pp_epg[i] ); TAB_CLEAN( p_item->i_epg, p_item->pp_epg ); for( int i = 0; i < p_item->i_categories; i++ ) info_category_Delete( p_item->pp_categories[i] ); TAB_CLEAN( p_item->i_categories, p_item->pp_categories ); for( int i = 0; i < p_item->i_slaves; i++ ) input_item_slave_Delete( p_item->pp_slaves[i] ); TAB_CLEAN( p_item->i_slaves, p_item->pp_slaves ); vlc_mutex_destroy( &p_item->lock ); free( owner ); }
static inline void input_item_Clean( input_item_t *p_i ) { int i; vlc_event_manager_fini( &p_i->event_manager ); free( p_i->psz_name ); free( p_i->psz_uri ); if( p_i->p_stats ) { vlc_mutex_destroy( &p_i->p_stats->lock ); free( p_i->p_stats ); } if( p_i->p_meta ) vlc_meta_Delete( p_i->p_meta ); for( i = 0; i < p_i->i_options; i++ ) free( p_i->ppsz_options[i] ); TAB_CLEAN( p_i->i_options, p_i->ppsz_options ); free( p_i->optflagv); for( i = 0; i < p_i->i_es; i++ ) { es_format_Clean( p_i->es[i] ); free( p_i->es[i] ); } TAB_CLEAN( p_i->i_es, p_i->es ); for( i = 0; i < p_i->i_categories; i++ ) { info_category_t *p_category = p_i->pp_categories[i]; int j; for( j = 0; j < p_category->i_infos; j++ ) { struct info_t *p_info = p_category->pp_infos[j]; free( p_info->psz_name); free( p_info->psz_value ); free( p_info ); } TAB_CLEAN( p_category->i_infos, p_category->pp_infos ); free( p_category->psz_name ); free( p_category ); } TAB_CLEAN( p_i->i_categories, p_i->pp_categories ); vlc_mutex_destroy( &p_i->lock ); }
/***************************************************************************** * Close: *****************************************************************************/ static void Close( vlc_object_t * p_this ) { sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_sys_t *p_sys = p_stream->p_sys; int i; for( i = 0; i < p_sys->i_id; i++ ) { sout_stream_id_sys_t *id = p_sys->id[i]; sout_StreamIdDel( p_stream->p_next, id->id ); es_format_Clean( &id->fmt ); free( id ); } TAB_CLEAN( p_sys->i_id, p_sys->id ); free( p_sys ); }
static int Del( sout_stream_t *p_stream, sout_stream_id_t *id ) { sout_stream_sys_t *p_sys = p_stream->p_sys; if( id->b_transcode ) { switch( id->p_decoder->fmt_in.i_cat ) { case AUDIO_ES: Send( p_stream, id, NULL ); transcode_audio_close( id ); break; case VIDEO_ES: Send( p_stream, id, NULL ); transcode_video_close( p_stream, id ); break; case SPU_ES: if( p_sys->b_osd ) transcode_osd_close( p_stream, id ); else transcode_spu_close( p_stream, id ); break; } } if( id->id ) sout_StreamIdDel( p_stream->p_next, (sout_stream_id_t *)id->id ); // sunqueen modify if( id->p_decoder ) { vlc_object_release( id->p_decoder ); id->p_decoder = NULL; } if( id->p_encoder ) { es_format_Clean( &id->p_encoder->fmt_out ); vlc_object_release( id->p_encoder ); id->p_encoder = NULL; } free( id ); return VLC_SUCCESS; }
static inline void input_item_Clean( input_item_t *p_i ) { int i; vlc_event_manager_fini( &p_i->event_manager ); free( p_i->psz_name ); free( p_i->psz_uri ); if( p_i->p_stats ) { vlc_mutex_destroy( &p_i->p_stats->lock ); free( p_i->p_stats ); } if( p_i->p_meta ) vlc_meta_Delete( p_i->p_meta ); for( i = 0; i < p_i->i_options; i++ ) free( p_i->ppsz_options[i] ); TAB_CLEAN( p_i->i_options, p_i->ppsz_options ); free( p_i->optflagv); for( i = 0; i < p_i->i_es; i++ ) { es_format_Clean( p_i->es[i] ); free( p_i->es[i] ); } TAB_CLEAN( p_i->i_es, p_i->es ); for( i = 0; i < p_i->i_tracks; i++ ) input_item_track_Delete( p_i->tracks[i] ); TAB_CLEAN( p_i->tracks, p_i->tracks ); for( i = 0; i < p_i->i_epg; i++ ) vlc_epg_Delete( p_i->pp_epg[i] ); TAB_CLEAN( p_i->i_epg, p_i->pp_epg ); for( i = 0; i < p_i->i_categories; i++ ) info_category_Delete( p_i->pp_categories[i] ); TAB_CLEAN( p_i->i_categories, p_i->pp_categories ); vlc_mutex_destroy( &p_i->lock ); }
static void Del(sout_stream_t *stream, sout_stream_id_sys_t *id) { sout_stream_sys_t *sys = stream->p_sys; if (id->prev != NULL) id->prev->next = id->next; else sys->first = id->next; if (id->next != NULL) id->next->prev = id->prev; else sys->last = id->prev; if (sys->stream != NULL) sout_StreamIdDel(sys->stream, id->id); es_format_Clean(&id->fmt); free(id); }
/***************************************************************************** * Close *****************************************************************************/ static void Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; int i; for( i = 0; i < PS_TK_COUNT; i++ ) { ps_track_t *tk = &p_sys->tk[i]; if( tk->b_configured ) { es_format_Clean( &tk->fmt ); if( tk->es ) es_out_Del( p_demux->out, tk->es ); } } ps_psm_destroy( &p_sys->psm ); free( p_sys ); }
/***************************************************************************** * sout_MuxAddStream: *****************************************************************************/ sout_input_t *sout_MuxAddStream( sout_mux_t *p_mux, const es_format_t *p_fmt ) { sout_input_t *p_input; if( !p_mux->b_add_stream_any_time && !p_mux->b_waiting_stream ) { msg_Err( p_mux, "cannot add a new stream (unsupported while muxing " "to this format). You can try increasing sout-mux-caching value" ); return NULL; } msg_Dbg( p_mux, "adding a new input" ); /* create a new sout input */ p_input = malloc( sizeof( sout_input_t ) ); if( !p_input ) return NULL; // FIXME: remove either fmt or p_fmt... es_format_Copy( &p_input->fmt, p_fmt ); p_input->p_fmt = &p_input->fmt; p_input->p_fifo = block_FifoNew(); p_input->p_sys = NULL; TAB_APPEND( p_mux->i_nb_inputs, p_mux->pp_inputs, p_input ); if( p_mux->pf_addstream( p_mux, p_input ) < 0 ) { msg_Err( p_mux, "cannot add this stream" ); TAB_REMOVE( p_mux->i_nb_inputs, p_mux->pp_inputs, p_input ); block_FifoRelease( p_input->p_fifo ); es_format_Clean( &p_input->fmt ); free( p_input ); return NULL; } return p_input; }
static void CVE_2010_3907_vlc_media_player0_9_5_Close( vlc_object_t *p_this ) { demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys = p_demux->p_sys; int i; for( i = 0; i < p_sys->i_track; i++ ) { real_track_t *tk = p_sys->track[i]; int j = tk->i_subpackets; if( tk->p_frame ) block_Release( tk->p_frame ); es_format_Clean( &tk->fmt ); while( j-- ) { if( tk->p_subpackets[ j ] ) block_Release( tk->p_subpackets[ j ] ); } if( tk->i_subpackets ) { free( tk->p_subpackets ); free( tk->p_subpackets_timecode ); } free( tk ); } free( p_sys->psz_title ); free( p_sys->psz_artist ); free( p_sys->psz_copyright ); free( p_sys->psz_description ); free( p_sys->p_index ); if( p_sys->i_track > 0 ) free( p_sys->track ); free( p_sys ); }