libdvr: support timeshift FF/FR events on playback reaching EOF/BOF [1/1]

PD#SWPL-142317
PD#OTT-49486

Problem:
Skyworth requests DTVKit need to provide events when timeshift FF/FR
reach EOF/BOF.

Solution:
Implement such function as customer request.

Verify:
Tested pass on ohm

Signed-off-by: Wentao.MA <wentao.ma@amlogic.com>
Change-Id: I609568d3846ca6ae2cfd25a91dddf61bba6f6785
diff --git a/include/dvr_playback.h b/include/dvr_playback.h
index a811c0d..94a564a 100644
--- a/include/dvr_playback.h
+++ b/include/dvr_playback.h
@@ -188,7 +188,9 @@
   DVR_PLAYBACK_EVENT_NOTIFY_PLAYTIME,               /**< notify play cur segment time ms*/
   DVR_PLAYBACK_EVENT_FIRST_FRAME,                   /**< first frame*/
   DVR_PLAYBACK_EVENT_NODATA,                        /**< no data*/
-  DVR_PLAYBACK_EVENT_DATARESUME                     /**< data resume*/
+  DVR_PLAYBACK_EVENT_DATARESUME,                     /**< data resume*/
+  DVR_PLAYBACK_EVENT_TIMESHIFT_FR_REACHED_BEGIN,
+  DVR_PLAYBACK_EVENT_TIMESHIFT_FF_REACHED_END,
 } DVR_PlaybackEvent_t;
 
 /**\brief DVR playback event notify function*/
diff --git a/src/dvr_playback.c b/src/dvr_playback.c
index 037ff72..4fac6e3 100644
--- a/src/dvr_playback.c
+++ b/src/dvr_playback.c
@@ -1386,6 +1386,11 @@
         DVR_PlaybackSpeed_t normal_speed = {PLAYBACK_SPEED_X1,0};
         DVR_PB_INFO("Change to normal speed due to FF reaching end");
         dvr_playback_set_speed((DVR_PlaybackHandle_t)player,normal_speed);
+
+        DVR_Play_Notify_t notify;
+        memset(&notify, 0 , sizeof(DVR_Play_Notify_t));
+        notify.event = DVR_PLAYBACK_EVENT_TIMESHIFT_FF_REACHED_END;
+        _dvr_playback_sent_event((DVR_PlaybackHandle_t)player, notify.event, &notify, 0);
       }
     }
 #endif
@@ -3672,17 +3677,26 @@
       DVR_PlaybackSpeed_t normal_speed = {PLAYBACK_SPEED_X1,0};
       DVR_PB_INFO("Change to normal speed due to FB reaching beginning");
       dvr_playback_set_speed((DVR_PlaybackHandle_t)player,normal_speed);
+
+      {
+        DVR_Play_Notify_t notify;
+        memset(&notify, 0 , sizeof(DVR_Play_Notify_t));
+        notify.event = DVR_PLAYBACK_EVENT_TIMESHIFT_FR_REACHED_BEGIN;
+        _dvr_playback_sent_event((DVR_PlaybackHandle_t)player, notify.event, &notify, 0);
+      }
 #else
+      DVR_PB_INFO("Change to pause due to FB reaching beginning");
       dvr_playback_pause(handle, DVR_FALSE);
 #endif
-      //send event here and pause
-      DVR_Play_Notify_t notify;
-      memset(&notify, 0 , sizeof(DVR_Play_Notify_t));
-      notify.event = DVR_PLAYBACK_EVENT_REACHED_BEGIN;
-      //get play statue not here
-      _dvr_playback_sent_event(handle, DVR_PLAYBACK_EVENT_REACHED_BEGIN, &notify, DVR_TRUE);
-      DVR_PB_INFO("*******************send begin event  speed [%f] cur [%d]", player->speed, _dvr_get_cur_time(handle));
-      //change to pause
+      {
+        //send event here and pause
+        DVR_Play_Notify_t notify;
+        memset(&notify, 0 , sizeof(DVR_Play_Notify_t));
+        notify.event = DVR_PLAYBACK_EVENT_REACHED_BEGIN;
+        //get play statue not here
+        _dvr_playback_sent_event(handle, DVR_PLAYBACK_EVENT_REACHED_BEGIN, &notify, DVR_TRUE);
+        DVR_PB_INFO("*******************send begin event  speed [%f] cur [%d]", player->speed, _dvr_get_cur_time(handle));
+      }
       return DVR_SUCCESS;
     }
     _dvr_playback_sent_transition_ok(handle, DVR_FALSE);
diff --git a/src/dvr_wrapper.c b/src/dvr_wrapper.c
index ce9b190..bf3eee6 100644
--- a/src/dvr_wrapper.c
+++ b/src/dvr_wrapper.c
@@ -3069,6 +3069,8 @@
     case DVR_PLAYBACK_EVENT_REACHED_BEGIN:
     case DVR_PLAYBACK_EVENT_NODATA:
     case DVR_PLAYBACK_EVENT_DATARESUME:
+    case DVR_PLAYBACK_EVENT_TIMESHIFT_FR_REACHED_BEGIN:
+    case DVR_PLAYBACK_EVENT_TIMESHIFT_FF_REACHED_END:
     {
       DVR_WrapperPlaybackStatus_t status;