Fix video crash on iOS4

This commit is contained in:
bossiel 2013-03-23 17:00:46 +00:00
parent 49ab8a0fed
commit c92c80cd12
1 changed files with 13 additions and 8 deletions

View File

@ -374,16 +374,19 @@ static int tdav_session_video_producer_enc_cb(const void* callback_data, const v
// Encode data
tsk_mutex_lock(video->encoder.h_mutex);
if(video->encoder.conv_buffer && yuv420p_size){
/* producer doesn't support yuv42p */
out_size = video->encoder.codec->plugin->encode(video->encoder.codec, video->encoder.conv_buffer, yuv420p_size, &video->encoder.buffer, &video->encoder.buffer_size);
}
else{
/* producer supports yuv42p */
out_size = video->encoder.codec->plugin->encode(video->encoder.codec, buffer, size, &video->encoder.buffer, &video->encoder.buffer_size);
if(video->encoder.codec){ // codec is destroyed by stop() which use same mutex
if(video->encoder.conv_buffer && yuv420p_size){
/* producer doesn't support yuv42p */
out_size = video->encoder.codec->plugin->encode(video->encoder.codec, video->encoder.conv_buffer, yuv420p_size, &video->encoder.buffer, &video->encoder.buffer_size);
}
else{
/* producer supports yuv42p */
out_size = video->encoder.codec->plugin->encode(video->encoder.codec, buffer, size, &video->encoder.buffer, &video->encoder.buffer_size);
}
}
tsk_mutex_unlock(video->encoder.h_mutex);
if(out_size){
/* Never called, see tdav_session_video_raw_cb() */
trtp_manager_send_rtp(base->rtp_manager, video->encoder.buffer, out_size, 6006, tsk_true, tsk_true);
@ -929,11 +932,13 @@ static int tdav_session_video_stop(tmedia_session_t* self)
tsk_list_clear_items(video->avpf.packets);
tsk_list_unlock(video->avpf.packets);
ret = tdav_session_av_stop(base);
// the encoder must be locked before stopping the session as such action will close all codecs
tsk_mutex_lock(video->encoder.h_mutex);
ret = tdav_session_av_stop(base);
TSK_OBJECT_SAFE_FREE(video->encoder.codec);
tsk_mutex_unlock(video->encoder.h_mutex);
TSK_OBJECT_SAFE_FREE(video->decoder.codec);
return ret;
}