Commit 1c44e3e2 authored by Gildas Bazin's avatar Gildas Bazin

* modules/stream_out/transcode.c: fixed crash with multithread encoding.

parent 0946ea13
...@@ -1952,7 +1952,8 @@ static void video_release_buffer( picture_t *p_pic ) ...@@ -1952,7 +1952,8 @@ static void video_release_buffer( picture_t *p_pic )
else if( p_pic && p_pic->i_refcount > 0 ) p_pic->i_refcount--; else if( p_pic && p_pic->i_refcount > 0 ) p_pic->i_refcount--;
} }
static picture_t *video_new_buffer( vlc_object_t *p_this, picture_t **pp_ring ) static picture_t *video_new_buffer( vlc_object_t *p_this, picture_t **pp_ring,
sout_stream_sys_t *p_sys )
{ {
decoder_t *p_dec = (decoder_t *)p_this; decoder_t *p_dec = (decoder_t *)p_this;
picture_t *p_pic; picture_t *p_pic;
...@@ -1972,15 +1973,14 @@ static picture_t *video_new_buffer( vlc_object_t *p_this, picture_t **pp_ring ) ...@@ -1972,15 +1973,14 @@ static picture_t *video_new_buffer( vlc_object_t *p_this, picture_t **pp_ring )
if( pp_ring[i] == 0 ) break; if( pp_ring[i] == 0 ) break;
} }
if( i == PICTURE_RING_SIZE && p_dec->p_owner->p_sys->i_threads >= 1 ) if( i == PICTURE_RING_SIZE && p_sys->i_threads >= 1 )
{ {
int i_first_pic = p_dec->p_owner->p_sys->i_first_pic; int i_first_pic = p_sys->i_first_pic;
if( p_dec->p_owner->p_sys->i_first_pic != if( p_sys->i_first_pic != p_sys->i_last_pic )
p_dec->p_owner->p_sys->i_last_pic )
{ {
/* Encoder still has stuff to encode, wait to clear-up the list */ /* Encoder still has stuff to encode, wait to clear-up the list */
while( p_dec->p_owner->p_sys->i_first_pic == i_first_pic ) while( p_sys->i_first_pic == i_first_pic )
msleep( 100000 ); msleep( 100000 );
} }
...@@ -2039,13 +2039,14 @@ static picture_t *video_new_buffer( vlc_object_t *p_this, picture_t **pp_ring ) ...@@ -2039,13 +2039,14 @@ static picture_t *video_new_buffer( vlc_object_t *p_this, picture_t **pp_ring )
static picture_t *video_new_buffer_decoder( decoder_t *p_dec ) static picture_t *video_new_buffer_decoder( decoder_t *p_dec )
{ {
return video_new_buffer( VLC_OBJECT(p_dec), return video_new_buffer( VLC_OBJECT(p_dec),
p_dec->p_owner->pp_pics ); p_dec->p_owner->pp_pics, p_dec->p_owner->p_sys );
} }
static picture_t *video_new_buffer_filter( filter_t *p_filter ) static picture_t *video_new_buffer_filter( filter_t *p_filter )
{ {
return video_new_buffer( VLC_OBJECT(p_filter), return video_new_buffer( VLC_OBJECT(p_filter),
p_filter->p_owner->pp_pics ); p_filter->p_owner->pp_pics,
p_filter->p_owner->p_sys );
} }
static void video_del_buffer( vlc_object_t *p_this, picture_t *p_pic ) static void video_del_buffer( vlc_object_t *p_this, picture_t *p_pic )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment