Fix video crash on iOS4
This commit is contained in:
parent
49ab8a0fed
commit
c92c80cd12
|
@ -374,16 +374,19 @@ static int tdav_session_video_producer_enc_cb(const void* callback_data, const v
|
||||||
|
|
||||||
// Encode data
|
// Encode data
|
||||||
tsk_mutex_lock(video->encoder.h_mutex);
|
tsk_mutex_lock(video->encoder.h_mutex);
|
||||||
if(video->encoder.conv_buffer && yuv420p_size){
|
if(video->encoder.codec){ // codec is destroyed by stop() which use same mutex
|
||||||
/* producer doesn't support yuv42p */
|
if(video->encoder.conv_buffer && yuv420p_size){
|
||||||
out_size = video->encoder.codec->plugin->encode(video->encoder.codec, video->encoder.conv_buffer, yuv420p_size, &video->encoder.buffer, &video->encoder.buffer_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 */
|
else{
|
||||||
out_size = video->encoder.codec->plugin->encode(video->encoder.codec, buffer, size, &video->encoder.buffer, &video->encoder.buffer_size);
|
/* 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);
|
tsk_mutex_unlock(video->encoder.h_mutex);
|
||||||
|
|
||||||
|
|
||||||
if(out_size){
|
if(out_size){
|
||||||
/* Never called, see tdav_session_video_raw_cb() */
|
/* 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);
|
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_clear_items(video->avpf.packets);
|
||||||
tsk_list_unlock(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);
|
tsk_mutex_lock(video->encoder.h_mutex);
|
||||||
|
ret = tdav_session_av_stop(base);
|
||||||
TSK_OBJECT_SAFE_FREE(video->encoder.codec);
|
TSK_OBJECT_SAFE_FREE(video->encoder.codec);
|
||||||
tsk_mutex_unlock(video->encoder.h_mutex);
|
tsk_mutex_unlock(video->encoder.h_mutex);
|
||||||
TSK_OBJECT_SAFE_FREE(video->decoder.codec);
|
TSK_OBJECT_SAFE_FREE(video->decoder.codec);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue