vlc/vlc-3.0 | branch: master | Thomas Guillem <[email protected]> | Mon Jan 8 15:09:55 2018 +0100| [a876b25c15258a626ba51eb828b43b70a7b2caa2] | committer: Thomas Guillem
videotoolbox: refactor restart handling When the status is restart, Stop the VT session and start it again from the "Late Start" code block. (cherry picked from commit d901dcac04525becc5b75428f33a34c55a69ba9f) Signed-off-by: Thomas Guillem <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=a876b25c15258a626ba51eb828b43b70a7b2caa2 --- modules/codec/videotoolbox.m | 42 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/modules/codec/videotoolbox.m b/modules/codec/videotoolbox.m index f3622f2508..12af74102f 100644 --- a/modules/codec/videotoolbox.m +++ b/modules/codec/videotoolbox.m @@ -1262,18 +1262,6 @@ static void StopVideoToolbox(decoder_t *p_dec, bool b_reset_format) p_sys->b_vt_feed = false; } -static int RestartVideoToolbox(decoder_t *p_dec, bool b_reset_format) -{ - decoder_sys_t *p_sys = p_dec->p_sys; - - msg_Dbg(p_dec, "Restarting decoder session"); - - if (p_sys->session != nil) - StopVideoToolbox(p_dec, b_reset_format); - - return StartVideoToolbox(p_dec); -} - #pragma mark - module open and close @@ -1793,18 +1781,20 @@ static int DecodeBlock(decoder_t *p_dec, block_t *p_block) if (p_sys->vtsession_status == VTSESSION_STATUS_RESTART) { msg_Warn(p_dec, "restarting vt session (dec callback failed)"); - vlc_mutex_unlock(&p_sys->lock); - int ret = RestartVideoToolbox(p_dec, true); - vlc_mutex_lock(&p_sys->lock); - p_sys->vtsession_status = ret == VLC_SUCCESS ? VTSESSION_STATUS_OK - : VTSESSION_STATUS_ABORT; + /* Session will be started by Late Start code block */ + StopVideoToolbox(p_dec, true); + + vlc_mutex_lock(&p_sys->lock); + p_sys->vtsession_status = VTSESSION_STATUS_OK; } if (p_sys->vtsession_status == VTSESSION_STATUS_ABORT) { vlc_mutex_unlock(&p_sys->lock); + + msg_Err(p_dec, "decoder failure, Abort."); /* Add an empty variable so that videotoolbox won't be loaded again for * this ES */ var_Create(p_dec, "videotoolbox-failed", VLC_VAR_VOID); @@ -1899,22 +1889,10 @@ static int DecodeBlock(decoder_t *p_dec, block_t *p_block) } else { - if (vtsession_status == VTSESSION_STATUS_RESTART) - { - int ret = RestartVideoToolbox(p_dec, true); - if (ret != VLC_SUCCESS) /* restart failed, abort */ - vtsession_status = VTSESSION_STATUS_ABORT; - } vlc_mutex_lock(&p_sys->lock); - if (vtsession_status == VTSESSION_STATUS_ABORT) - { - msg_Err(p_dec, "decoder failure, Abort."); - /* The decoder module will be reloaded next time since we already - * modified the input block */ - p_sys->vtsession_status = VTSESSION_STATUS_ABORT; - } - else /* reset status set by the decoder callback during restart */ - p_sys->vtsession_status = VTSESSION_STATUS_OK; + p_sys->vtsession_status = vtsession_status; + /* In case of abort, the decoder module will be reloaded next time + * since we already modified the input block */ vlc_mutex_unlock(&p_sys->lock); } CFRelease(sampleBuffer); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
