libdvr: add system clock support. [1/1]
PD#SWPL-108319
Problem:
playback to end too quickly in oc test.
Solution:
add system clock support
Verify:
s905x4
Change-Id: I3438d5dc8105d47d56198461c2248cea9c7c098c
Signed-off-by: shenghui.geng <shenghui.geng@amlogic.com>
diff --git a/include/dvr_playback.h b/include/dvr_playback.h
index 38fdb01..5f6c2c6 100644
--- a/include/dvr_playback.h
+++ b/include/dvr_playback.h
@@ -230,6 +230,7 @@
void *event_userdata; /**< event userdata*/
DVR_PlaybackVendor_t vendor; /**< vendor type,default is 0*/
DVR_Bool_t is_notify_time; /**< notify play time info true or not*/
+ DVR_Bool_t control_speed_enable; /**< 1: system clock, 0: libdvr can determine index time source based on actual situation*/
} DVR_PlaybackOpenParams_t;
/**\brief playback play state*/
@@ -361,6 +362,9 @@
int fake_pid;
//Audio presentation id, used for dolby AC4 audio
int32_t audio_presentation_id;
+
+ /**< 1: system clock, 0: libdvr can determine index time source based on actual situation*/
+ DVR_Bool_t control_speed_enable;
} DVR_Playback_t;
/**\endcond*/
diff --git a/include/dvr_wrapper.h b/include/dvr_wrapper.h
index 2917dc7..e04654c 100644
--- a/include/dvr_wrapper.h
+++ b/include/dvr_wrapper.h
@@ -118,6 +118,7 @@
void *event_userdata; /**< event userdata*/
DVR_Bool_t is_notify_time; /**< 0:not notify time, 1 : notify*/
DVR_PlaybackVendor_t vendor; /**< vendor type*/
+ DVR_Bool_t control_speed_enable; /**< 1: system clock, 0: libdvr can determine index time source based on actual situation*/
} DVR_WrapperPlaybackOpenParams_t;
/**
diff --git a/src/dvr_playback.c b/src/dvr_playback.c
index acdf81d..64f82a4 100644
--- a/src/dvr_playback.c
+++ b/src/dvr_playback.c
@@ -26,8 +26,6 @@
#define VALID_PID(_pid_) ((_pid_)>0 && (_pid_)<0x1fff)
-#define CONTROL_SPEED_ENABLE 0
-
#define FF_SPEED (2.0f)
#define FB_SPEED (-1.0f)
#define IS_FFFB(_SPEED_) ((_SPEED_) > FF_SPEED && (_SPEED_) < FB_SPEED)
@@ -427,12 +425,12 @@
return DVR_FAILURE;
}
if (player->openParams.is_notify_time == DVR_FALSE) {
- if (CONTROL_SPEED_ENABLE == 0)
+ if (player->control_speed_enable == 0)
return DVR_SUCCESS;
}
if (player->send_time == 0) {
- if (CONTROL_SPEED_ENABLE == 0)
+ if (player->control_speed_enable == 0)
player->send_time = _dvr_time_getClock() + 500;
else
player->send_time = _dvr_time_getClock() + 20;
@@ -444,7 +442,7 @@
return DVR_SUCCESS;
}
}
- if (CONTROL_SPEED_ENABLE == 0)
+ if (player->control_speed_enable == 0)
player->send_time = _dvr_time_getClock() + 500;
else
player->send_time = _dvr_time_getClock() + 20;
@@ -1488,7 +1486,7 @@
pthread_mutex_unlock(&player->segment_lock);
real_read = 0;
write_success++;
- if (CONTROL_SPEED_ENABLE == 1) {
+ if (player->control_speed_enable == 1) {
check0:
if (!player->is_running) {
//DVR_PB_DEBUG(1, "playback thread exit");
@@ -1508,7 +1506,7 @@
DVR_PB_DEBUG("write time out write_success:%d buf_size:%d systime:%u",
write_success, input_buffer.buf_size, _dvr_time_getClock());
write_success = 0;
- if (CONTROL_SPEED_ENABLE == 1) {
+ if (player->control_speed_enable == 1) {
check1:
if (!player->is_running) {
//DVR_PB_DEBUG(1, "playback thread exit");
@@ -1654,6 +1652,7 @@
player->has_pids = params->has_pids;
player->handle = params->player_handle ;
+ player->control_speed_enable = params->control_speed_enable;
AmTsPlayer_getCb(player->handle, &player->player_callback_func, &player->player_callback_userdata);
//for test get callback
@@ -1711,7 +1710,7 @@
player->seek_pause = DVR_FALSE;
//speed con init
- if (CONTROL_SPEED_ENABLE == 1) {
+ if (player->control_speed_enable == 1) {
player->con_spe.ply_dur = 0;
player->con_spe.ply_sta = 0;
player->con_spe.sys_dur = 0;
@@ -3923,7 +3922,7 @@
p_status->time_end = _dvr_get_end_time(handle);
p_status->time_cur = _dvr_get_play_cur_time(handle, &segment_id);
- if (CONTROL_SPEED_ENABLE == 1) {
+ if (player->control_speed_enable == 1) {
if (player->con_spe.ply_sta == 0) {
DVR_PB_INFO("player dur[%u] sta[%u] cur[%d] -----reinit",
player->con_spe.ply_dur,
diff --git a/src/dvr_record.c b/src/dvr_record.c
index 0825845..0dc1d41 100644
--- a/src/dvr_record.c
+++ b/src/dvr_record.c
@@ -12,8 +12,6 @@
#include <sys/time.h>
#include "am_crypt.h"
-#define CONTROL_SPEED_ENABLE 0
-
#define CHECK_PTS_MAX_COUNT (20)
//#define DEBUG_PERFORMANCE
@@ -212,15 +210,13 @@
DVR_SecureBuffer_t secure_buf = {0,0};
DVR_NewDmxSecureBuffer_t new_dmx_secure_buf;
int first_read = 0;
- if (CONTROL_SPEED_ENABLE == 0)
- p_ctx->index_type = DVR_INDEX_TYPE_INVALID;
- else
- p_ctx->index_type = DVR_INDEX_TYPE_LOCAL_CLOCK;
// Force to use LOCAL_CLOCK as index type if force_sysclock is on. Please
// refer to SWPL-75327
if (p_ctx->force_sysclock)
p_ctx->index_type = DVR_INDEX_TYPE_LOCAL_CLOCK;
+ else
+ p_ctx->index_type = DVR_INDEX_TYPE_INVALID;
buf = (uint8_t *)malloc(block_size);
if (!buf) {
DVR_INFO("%s, malloc failed", __func__);
diff --git a/src/dvr_wrapper.c b/src/dvr_wrapper.c
index 516d303..702996c 100644
--- a/src/dvr_wrapper.c
+++ b/src/dvr_wrapper.c
@@ -1612,6 +1612,7 @@
open_param.cleariv = params->cleariv;
open_param.keylen = params->keylen;
}
+ open_param.control_speed_enable = params->control_speed_enable;
error = dvr_playback_open(&ctx->playback.player, &open_param);
if (error) {