@@ -74,50 +74,35 @@ static void* EncoderThread( void *obj )
74
74
int canc = vlc_savecancel ();
75
75
block_t * p_block = NULL ;
76
76
77
+ vlc_mutex_lock ( & p_sys -> lock_out );
78
+
77
79
for ( ;; )
78
80
{
79
-
80
- vlc_mutex_lock ( & p_sys -> lock_out );
81
81
while ( !p_sys -> b_abort &&
82
82
(p_pic = picture_fifo_Pop ( p_sys -> pp_pics )) == NULL )
83
83
vlc_cond_wait ( & p_sys -> cond , & p_sys -> lock_out );
84
84
85
- if ( p_sys -> b_abort && !p_pic )
86
- {
87
- vlc_mutex_unlock ( & p_sys -> lock_out );
88
- break ;
89
- }
90
- vlc_mutex_unlock ( & p_sys -> lock_out );
91
-
92
85
if ( p_pic )
93
86
{
87
+ /* release lock while encoding */
88
+ vlc_mutex_unlock ( & p_sys -> lock_out );
94
89
p_block = id -> p_encoder -> pf_encode_video ( id -> p_encoder , p_pic );
95
-
90
+ picture_Release ( p_pic );
96
91
vlc_mutex_lock ( & p_sys -> lock_out );
97
- block_ChainAppend ( & p_sys -> p_buffers , p_block );
98
92
99
- vlc_mutex_unlock ( & p_sys -> lock_out );
100
- picture_Release ( p_pic );
93
+ block_ChainAppend ( & p_sys -> p_buffers , p_block );
101
94
}
102
95
103
- vlc_mutex_lock ( & p_sys -> lock_out );
104
96
if ( p_sys -> b_abort )
105
- {
106
- vlc_mutex_unlock ( & p_sys -> lock_out );
107
97
break ;
108
- }
109
- vlc_mutex_unlock ( & p_sys -> lock_out );
110
98
}
111
99
112
100
/*Encode what we have in the buffer on closing*/
113
- vlc_mutex_lock ( & p_sys -> lock_out );
114
101
while ( (p_pic = picture_fifo_Pop ( p_sys -> pp_pics )) != NULL )
115
102
{
116
103
p_block = id -> p_encoder -> pf_encode_video ( id -> p_encoder , p_pic );
117
-
118
- block_ChainAppend ( & p_sys -> p_buffers , p_block );
119
-
120
104
picture_Release ( p_pic );
105
+ block_ChainAppend ( & p_sys -> p_buffers , p_block );
121
106
}
122
107
123
108
/*Now flush encoder*/
0 commit comments