From c1065e6c7dfa9ea896b9ba6259c86601f088f987 Mon Sep 17 00:00:00 2001 From: manhao liang Date: Thu, 31 May 2018 16:00:47 +0800 Subject: [PATCH] dvb: AV SYNC register func instead of func pointer. PD#167562: dvb av sync: register func instead of func pointer. Change-Id: Ia28f30d99e9ffb27236ec5d4d0da94451a013e6d Signed-off-by: manhao liang --- drivers/amlogic/media/frame_sync/tsync.c | 62 ++++++++++++++++--- .../linux/amlogic/media/frame_sync/tsync.h | 16 +++++ 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/drivers/amlogic/media/frame_sync/tsync.c b/drivers/amlogic/media/frame_sync/tsync.c index 5d5d26cbda87..34ed546ccdee 100644 --- a/drivers/amlogic/media/frame_sync/tsync.c +++ b/drivers/amlogic/media/frame_sync/tsync.c @@ -155,31 +155,23 @@ static bool dobly_avsync_test; static int slowsync_enable; pfun_tsdemux_pcrscr_valid tsdemux_pcrscr_valid_cb; -EXPORT_SYMBOL(tsdemux_pcrscr_valid_cb); pfun_tsdemux_pcrscr_get tsdemux_pcrscr_get_cb; -EXPORT_SYMBOL(tsdemux_pcrscr_get_cb); pfun_tsdemux_first_pcrscr_get tsdemux_first_pcrscr_get_cb; -EXPORT_SYMBOL(tsdemux_first_pcrscr_get_cb); pfun_tsdemux_pcraudio_valid tsdemux_pcraudio_valid_cb; -EXPORT_SYMBOL(tsdemux_pcraudio_valid_cb); pfun_tsdemux_pcrvideo_valid tsdemux_pcrvideo_valid_cb; -EXPORT_SYMBOL(tsdemux_pcrvideo_valid_cb); pfun_get_buf_by_type get_buf_by_type_cb; -EXPORT_SYMBOL(get_buf_by_type_cb); pfun_stbuf_level stbuf_level_cb; -EXPORT_SYMBOL(stbuf_level_cb); pfun_stbuf_space stbuf_space_cb; -EXPORT_SYMBOL(stbuf_space_cb); pfun_stbuf_size stbuf_size_cb; -EXPORT_SYMBOL(stbuf_size_cb); + /* *used to set player start sync mode, 0-none; 1-smoothsync; 2-droppcm; @@ -241,6 +233,58 @@ static int debug_apts; #define PTS_CACHED_HI_NORMAL_TIME (135000) #define PTS_CACHED_NORMAL_HI_TIME (180000) +int register_tsync_callbackfunc(enum tysnc_func_type_e ntype, void *pfunc) +{ + if (ntype >= TSYNC_FUNC_TYPE_MAX) { + pr_info("register_tync_func ntype is err.\n"); + return -1; + } + switch (ntype) { + case TSYNC_PCRSCR_VALID: + tsdemux_pcrscr_valid_cb = + (pfun_tsdemux_pcrscr_valid)pfunc; + break; + case TSYNC_PCRSCR_GET: + tsdemux_pcrscr_get_cb = + (pfun_tsdemux_pcrscr_get)pfunc; + break; + case TSYNC_FIRST_PCRSCR_GET: + tsdemux_first_pcrscr_get_cb = + (pfun_tsdemux_first_pcrscr_get)pfunc; + break; + case TSYNC_PCRAUDIO_VALID: + tsdemux_pcraudio_valid_cb = + (pfun_tsdemux_pcraudio_valid)pfunc; + break; + case TSYNC_PCRVIDEO_VALID: + tsdemux_pcrvideo_valid_cb = + (pfun_tsdemux_pcrvideo_valid)pfunc; + break; + case TSYNC_BUF_BY_BYTE: + get_buf_by_type_cb = + (pfun_get_buf_by_type)pfunc; + break; + case TSYNC_STBUF_LEVEL: + stbuf_level_cb = + (pfun_stbuf_level)pfunc; + break; + case TSYNC_STBUF_SPACE: + stbuf_space_cb = + (pfun_stbuf_space)pfunc; + break; + case TSYNC_STBUF_SIZE: + stbuf_size_cb = + (pfun_stbuf_size)pfunc; + break; + default: + break; + } + return 0; +} +EXPORT_SYMBOL(register_tsync_callbackfunc); + + + static void tsync_pcr_recover_with_audio(void) { #if 0 /* MESON_CPU_TYPE < MESON_CPU_TYPE_MESON6 */ diff --git a/include/linux/amlogic/media/frame_sync/tsync.h b/include/linux/amlogic/media/frame_sync/tsync.h index 8a5635d51a21..eaf9b1597ac6 100644 --- a/include/linux/amlogic/media/frame_sync/tsync.h +++ b/include/linux/amlogic/media/frame_sync/tsync.h @@ -44,6 +44,19 @@ enum tsync_mode_e { TSYNC_MODE_PCRMASTER, }; +enum tysnc_func_type_e { + TSYNC_PCRSCR_VALID, + TSYNC_PCRSCR_GET, + TSYNC_FIRST_PCRSCR_GET, + TSYNC_PCRAUDIO_VALID, + TSYNC_PCRVIDEO_VALID, + TSYNC_BUF_BY_BYTE, + TSYNC_STBUF_LEVEL, + TSYNC_STBUF_SPACE, + TSYNC_STBUF_SIZE, + TSYNC_FUNC_TYPE_MAX, +}; + extern bool disable_slow_sync; typedef u8 (*pfun_tsdemux_pcrscr_valid)(void); @@ -73,6 +86,9 @@ extern pfun_stbuf_space stbuf_space_cb; typedef u32 (*pfun_stbuf_size)(struct stream_buf_s *buf); extern pfun_stbuf_size stbuf_size_cb; +extern int register_tsync_callbackfunc( + enum tysnc_func_type_e ntype, void *pfunc); + #ifdef MODIFY_TIMESTAMP_INC_WITH_PLL extern void set_timestamp_inc_factor(u32 factor); #endif