id->p_decoder->fmt_out.i_codec );
id->p_encoder->fmt_in.audio.i_format = id->p_decoder->fmt_out.i_codec;
- id->p_encoder->fmt_in.audio.i_rate = fmt_last.audio.i_rate;//id->p_encoder->fmt_out.audio.i_rate;
+ id->p_encoder->fmt_in.audio.i_rate = id->p_encoder->fmt_out.audio.i_rate;
id->p_encoder->fmt_in.audio.i_physical_channels =
id->p_encoder->fmt_out.audio.i_physical_channels;
id->p_encoder->fmt_in.audio.i_original_channels =
id->p_encoder->p_cfg = p_stream->p_sys->p_audio_cfg;
id->p_encoder->p_module =
module_Need( id->p_encoder, "encoder", p_sys->psz_aenc, true );
- if( !id->p_encoder->p_module )
+ if( !id->p_encoder->p_module ||
+ fmt_last.audio.i_channels != id->p_encoder->fmt_in.audio.i_channels ||
+ fmt_last.i_codec != id->p_encoder->fmt_in.i_codec )
{
+ if( id->p_encoder->p_module )
+ {
+ module_Unneed( id->p_encoder, id->p_encoder->p_module );
+ id->p_encoder->p_module = NULL;
+ }
msg_Err( p_stream, "cannot find audio encoder (module:%s fourcc:%4.4s)",
p_sys->psz_aenc ? p_sys->psz_aenc : "any",
(char *)&p_sys->i_acodec );
VLC_THREAD_PRIORITY_VIDEO;
p_sys->id_video = id;
vlc_mutex_init( &p_sys->lock_out );
- vlc_cond_init( p_stream, &p_sys->cond );
+ vlc_cond_init( &p_sys->cond );
memset( p_sys->pp_pics, 0, sizeof(p_sys->pp_pics) );
p_sys->i_first_pic = 0;
p_sys->i_last_pic = 0;
id->p_encoder->fmt_in.video.i_width;
id->p_encoder->fmt_out.video.i_height =
id->p_encoder->fmt_in.video.i_height;
+ id->p_encoder->fmt_out.video.i_aspect =
+ id->p_encoder->fmt_in.video.i_aspect;
}
if( transcode_video_encoder_open( p_stream, id ) != VLC_SUCCESS )
if( p_sys->p_spu )
{
p_subpic = spu_SortSubpictures( p_sys->p_spu, p_pic->date,
- false /* Fixme: check if stream is paused */ );
+ false /* Fixme: check if stream is paused */, false );
/* TODO: get another pic */
}
fmt.i_sar_num = fmt.i_aspect * fmt.i_height / fmt.i_width;
fmt.i_sar_den = VOUT_ASPECT_FACTOR;
- spu_RenderSubpictures( p_sys->p_spu, &fmt, p_pic, p_pic, p_subpic,
+ spu_RenderSubpictures( p_sys->p_spu, &fmt, p_pic, p_subpic,
i_scale_width, i_scale_height );
}
sout_stream_sys_t *p_sys = (sout_stream_sys_t*)p_this;
sout_stream_id_t *id = p_sys->id_video;
picture_t *p_pic;
+ int canc = vlc_savecancel ();
while( vlc_object_alive (p_sys) && !p_sys->b_error )
{
}
block_ChainRelease( p_sys->p_buffers );
+ vlc_restorecancel (canc);
return NULL;
}
VLC_UNUSED(p_this);
if( p_pic )
{
+ free( p_pic->p_q );
free( p_pic->p_data_orig );
free( p_pic->p_sys );
free( p_pic );
VLC_UNUSED(p_decoder);
p_pic->i_refcount = 0;
p_pic->i_status = DESTROYED_PICTURE;
+ picture_CleanupQuant( p_pic );
}
static void video_del_buffer_filter( filter_t *p_filter, picture_t *p_pic )
VLC_UNUSED(p_filter);
p_pic->i_refcount = 0;
p_pic->i_status = DESTROYED_PICTURE;
+ picture_CleanupQuant( p_pic );
}
static void video_link_picture_decoder( decoder_t *p_dec, picture_t *p_pic )
/* Check if we have a subpicture to send */
if( p_sys->p_spu && in->i_dts > 0)
{
- p_subpic = spu_SortSubpictures( p_sys->p_spu, in->i_dts, false );
+ p_subpic = spu_SortSubpictures( p_sys->p_spu, in->i_dts, false, false );
}
else
{