playback: manage the auto-pause in fffb [1/1]
PD#SWPL-161006
Problem:
1. pause in FB is not catched by wrapper
FB -> pause(reach end)
-> set speed(100)(pause not checked, due to race)
-> still pause
2. condition race
the extra logic in wrapper
should be locked with player inner logic.
Solution:
1. correct the mutex location,
make the pause state notified.
2. move the extra logic in set_playback_speed,
they should be inner logic, and should be locked.
Verify:
PB
Change-Id: Ib57f74772d380b56779330d1b0306409b65c3c01
Signed-off-by: Zhiqiang Han <zhiqiang.han@amlogic.com>
diff --git a/src/dvr_playback.c b/src/dvr_playback.c
index 341bb81..9c658f9 100644
--- a/src/dvr_playback.c
+++ b/src/dvr_playback.c
@@ -3837,6 +3837,10 @@
player->speed = (float)speed.speed.speed/(float)100;
player->cmd.cur_cmd = DVR_PLAYBACK_CMD_AV_RESTART;
player->fffb_play = DVR_FALSE;
+
+ /*paused in fffb and set speed(>0), resume the playback*/
+ dvr_playback_resume(player);
+
DVR_PB_DEBUG("unlock ---\r\n");
dvr_mutex_unlock(&player->lock);
return DVR_SUCCESS;
diff --git a/src/dvr_wrapper.c b/src/dvr_wrapper.c
index b571219..9c0a5ef 100644
--- a/src/dvr_wrapper.c
+++ b/src/dvr_wrapper.c
@@ -2216,19 +2216,6 @@
error = dvr_playback_set_speed(ctx->playback.player, dvr_speed);
- if (ctx->playback.speed != 0.0f && ctx->playback.speed != 100.0f
- && ctx->playback.last_event == DVR_PLAYBACK_EVENT_REACHED_BEGIN
- && ctx->playback.seg_status.state == DVR_PLAYBACK_STATE_PAUSE) {
- DVR_WRAPPER_INFO("x%f -> x%f, paused, do resume first\n", ctx->playback.speed, speed);
- error = dvr_playback_resume(ctx->playback.player);
- } else if (ctx->playback.speed == 0.0f
- && speed != 0.0f
- && speed != 100.0f) {
- /*libdvr do not support pause with speed=0, will not be here*/
- DVR_WRAPPER_INFO("x%f -> x%f, do resume first\n", ctx->playback.speed, speed);
- error = dvr_playback_resume(ctx->playback.player);
- }
-
ctx->playback.speed = speed;
DVR_WRAPPER_INFO("playback(sn:%ld) speeded(x%f) (%d)\n",