source: svn/newcon3bcm2_21bu/magnum/syslib/synclib/7552/bsynclib_channel_priv.h

Last change on this file was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 11.2 KB
Line 
1/***************************************************************************
2*         Copyright (c) 2004-2012, Broadcom Corporation
3*         All Rights Reserved
4*         Confidential Property of Broadcom Corporation
5*
6*  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7*  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8*  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9*
10* $brcm_Workfile: bsynclib_channel_priv.h $
11* $brcm_Revision: Hydra_Software_Devel/12 $
12* $brcm_Date: 2/9/12 9:17p $
13*
14* Revision History:
15*
16* $brcm_Log: /magnum/syslib/synclib/noarch/bsynclib_channel_priv.h $
17*
18* Hydra_Software_Devel/12   2/9/12 9:17p bandrews
19* SW7358-219: really apply zero delay to sinks with mismatched rates
20*
21* Hydra_Software_Devel/11   11/15/11 7:07p bandrews
22* SW7425-1235: merge to main
23*
24* Hydra_Software_Devel/SW7425-1235/1   10/31/11 3:18p bandrews
25* SW7425-1235: need more timers for 6 audio channels
26*
27* Hydra_Software_Devel/10   7/8/11 2:40p bandrews
28* SW7405-3884: punch RMD settings through properly, hParent wasn't set
29* during create
30*
31* Hydra_Software_Devel/9   7/2/10 6:04p bandrews
32* SW7405-4436: added channel index to algo debug messages
33*
34* Hydra_Software_Devel/8   6/15/10 6:42p bandrews
35* SW7405-4471: only perform lipsync adjustments under correct conditions
36*
37* Hydra_Software_Devel/7   5/28/10 6:42p bandrews
38* SW7405-4436: print channel index in debug messages
39*
40* Hydra_Software_Devel/6   3/22/10 5:41p bandrews
41* sw7408-83: bump timer count; add summary comments to functions
42*
43* Hydra_Software_Devel/5   3/19/10 2:48p bandrews
44* SW7405-3774: merge mute control
45*
46* Hydra_Software_Devel/SW7405-3774/1   2/17/10 6:17p bandrews
47* SW7405-3774: attempt to fix early audio unmute then mute
48*
49* Hydra_Software_Devel/4   1/26/10 9:00p bandrews
50* SW7405-3774: added mute control support
51*
52* Hydra_Software_Devel/3   12/10/09 9:18p bandrews
53* SW7401-3634: adding PWC (now JTI) support to synclib
54*
55* Hydra_Software_Devel/2   11/26/08 5:10p bandrews
56* PR49294: Added precision lipsync flag
57*
58* Hydra_Software_Devel/1   3/24/08 3:09p bandrews
59* PR40865: Fixed
60*
61* Hydra_Software_Devel/6   2/26/08 10:21p bandrews
62* PR37951: Fixed units.  Implemented static rate mismatch detection.
63*
64* Hydra_Software_Devel/5   2/26/08 3:03p bandrews
65* PR37951: Added video delay requantization
66*
67* Hydra_Software_Devel/4   2/21/08 6:02p bandrews
68* PR37951: Default video source numbers to 45KHz domain.  Improved
69* handling of unsynchronized elements
70*
71* Hydra_Software_Devel/3   2/20/08 10:03p bandrews
72* PR37951: Updated based on feedback from usage
73*
74* Hydra_Software_Devel/2   1/3/08 5:17p bandrews
75* PR37951: Updated based on initial feedback
76*
77* Hydra_Software_Devel/1   12/12/07 2:53p bandrews
78* PR37951: Initial check-in
79***************************************************************************/
80
81#include "bstd.h"
82#include "bsyslib_list.h"
83#include "bsynclib.h"
84#include "bsynclib_audio_sink.h"
85#include "bsynclib_audio_source.h"
86#include "bsynclib_rate_mismatch_detector.h"
87#include "bsynclib_resource_pool.h"
88#include "bsynclib_state_machine.h"
89#include "bsynclib_timer.h"
90#include "bsynclib_video_sink.h"
91#include "bsynclib_video_source.h"
92
93#ifndef BSYNCLIB_CHANNEL_PRIV_H__
94#define BSYNCLIB_CHANNEL_PRIV_H__
95
96#define BSYNCLIB_TIMER_COUNT 18
97
98extern const unsigned int auiAudioSamplingRates[];
99
100typedef struct
101{
102        int TBD;
103} BSYNClib_Channel_Path_Data;
104
105typedef struct
106{
107        unsigned int uiMaxSourceDelay;
108        void * pvMaxDelaySource;
109
110    bool bInconsistentSinkDomains;
111        unsigned int uiMaxSinkDelay;
112        void * pvMaxDelaySink;
113
114        unsigned int uiMaxPathDelay;
115} BSYNClib_Channel_Path_Results;
116
117typedef struct
118{
119        BSYNClib_Channel_Handle hChn;
120        BSYSlib_List_Handle hSources;
121        unsigned int uiSourceCount;
122
123        BSYSlib_List_Handle hSinks;
124        unsigned int uiSinkCount;
125
126        BSYNClib_Channel_Path_Data sData;
127        BSYNClib_Channel_Path_Results sResults;
128} BSYNClib_Channel_Path;
129
130/*
131Summary:
132*/
133typedef struct
134{
135        bool bEnabled; 
136} BSYNClib_Channel_Data;
137
138/*
139Summary:
140*/
141typedef struct
142{
143        bool bSyncTaskScheduled;
144        bool bMuteTaskScheduled;
145
146        unsigned int uiMaxPathDelay;
147        BSYNClib_Channel_Path * psMaxDelayPath;
148} BSYNClib_Channel_Results;
149
150/*
151Summary:
152*/
153struct BSYNClib_Channel_Impl
154{
155        bool bEnabled;
156
157        bool bPrecisionLipsyncEnabled;
158
159        BSYNClib_Handle hParent;
160        BSYNClib_Channel_Settings sSettings;
161        BSYNClib_Channel_Config sConfig;
162        BSYNClib_Channel_Status sStatus;
163       
164        BSYNClib_Channel_Path sVideo;
165        BSYNClib_Channel_Path sAudio;
166
167        BSYNClib_Channel_Results sResults;
168
169        BSYNClib_ResourcePool * psTimers;
170
171        BSYNClib_Timer * psTaskTimer;
172        BSYNClib_Timer * psMuteControlTaskTimer;
173
174        BSYNClib_StateMachine_Handle hMachine;
175        BSYNClib_RateMismatchDetector_Handle hDetector;
176        int iIndex;
177};
178
179/*
180Summary:
181Opens an SYNC lib channel
182Description:
183*/
184BERR_Code BSYNClib_Channel_P_Create(
185        const BSYNClib_Settings * psLibSettings,
186        const BSYNClib_Channel_Settings * psSettings,
187        BSYNClib_Channel_Handle * phChn /* [out] */
188);
189
190/*
191Summary:
192Closes an SYNC lib channel
193Description:
194*/
195void BSYNClib_Channel_P_Destroy(
196        BSYNClib_Channel_Handle hChn
197);
198
199/*
200Summary:
201Returns the default configuration of a sync channel
202*/
203void BSYNClib_Channel_P_GetDefaultConfig(
204        BSYNClib_Channel_Config * psConfig
205);
206
207/*
208Summary:
209*/
210BERR_Code BSYNClib_Channel_P_StartTimer_isr(
211        BSYNClib_Channel_Handle hChn,
212        BSYNClib_Timer * psTimer, 
213        unsigned long ulTimeout,
214        BSYSlib_Timer_ExpiryHandler pfTimerExpired,
215        void * pvParm1,
216        int iParm2
217);
218
219BERR_Code BSYNClib_Channel_P_CancelTimer_isr(
220        BSYNClib_Channel_Handle hChn,
221        BSYNClib_Timer * psTimer
222);
223
224/*
225Summary:
226Handles expiry of a sync timer
227*/
228BERR_Code BSYNClib_Channel_P_TimerExpired(
229        BSYNClib_Channel_Handle hChn,
230        BSYSlib_Timer_Handle hTimer
231);
232
233/*
234Summary:
235*/
236BERR_Code BSYNClib_Channel_P_ProcessConfig(
237        BSYNClib_Channel_Handle hChn
238);
239
240/*
241Summary:
242*/
243bool BSYNClib_Channel_P_SyncCheck(
244        BSYNClib_Channel_Handle hChn
245);
246
247/*
248Summary:
249*/
250void BSYNClib_Channel_P_Snapshot_isr(
251        BSYNClib_Channel_Handle hChn
252);
253
254/*
255Summary:
256*/
257BERR_Code BSYNClib_Channel_P_Process(void * pvParm1, int iParm2);
258
259/*
260Summary:
261*/
262BERR_Code BSYNClib_Channel_P_ApplyDelays(BSYNClib_Channel_Handle hChn);
263
264/*
265Summary:
266*/
267bool BSYNClib_Channel_P_AudioVideoSyncCheck(BSYNClib_Channel_Handle hChn);
268
269/*
270Summary:
271*/
272bool BSYNClib_Channel_P_AudioAudioSyncCheck(BSYNClib_Channel_Handle hChn);
273
274/*
275Summary:
276*/
277bool BSYNClib_Channel_P_VideoVideoSyncCheck(BSYNClib_Channel_Handle hChn);
278
279/*
280Summary:
281*/
282BERR_Code BSYNClib_Channel_P_Synchronize(BSYNClib_Channel_Handle hChn);
283
284/*
285Summary:
286*/
287BERR_Code BSYNClib_Channel_P_GenerateCallbacks(BSYNClib_Channel_Handle hChn);
288
289/*
290Summary:
291*/
292BERR_Code BSYNClib_Channel_P_GenerateDelayCallback(BSYNClib_Channel_SetDelay pfSetDelay, void * pvParm1, int iParm2, unsigned int uiDeviceIndex, BSYNClib_DelayElement * psData);
293
294/*
295Summary:
296*/
297BERR_Code BSYNClib_Channel_P_GenerateDelayNotificationCallback(BSYNClib_Channel_SetDelayNotification pfSetDelayNotification, void * pvParm1, int iParm2, unsigned int uiDeviceIndex, BSYNClib_DelayElement * psData);
298
299/*
300Summary:
301*/
302BERR_Code BSYNClib_Channel_P_ScheduleTask_isr(BSYNClib_Channel_Handle hChn);
303
304/*
305Summary:
306*/
307BERR_Code BSYNClib_Channel_P_TaskTimerExpired(void * pvParm1, int iParm2, BSYSlib_Timer_Handle hTimer);
308
309/*
310Summary:
311*/
312bool BSYNClib_Channel_P_Enabled(
313        BSYNClib_Channel_Handle hChn
314);
315
316/*
317Summary:
318*/
319bool BSYNClib_Channel_P_Enabled_isr(
320        BSYNClib_Channel_Handle hChn
321);
322
323/*
324Summary:
325*/
326bool BSYNClib_Channel_P_PredictMadStateChange_isr(
327        BSYNClib_Channel_Handle hChn, 
328        BSYNClib_VideoSink * psSink
329);
330
331/*
332Summary:
333*/
334void BSYNClib_Channel_P_ResetVideoSourceJtiFactor_isr(
335        BSYNClib_Channel_Handle hChn
336);
337
338/*
339Summary:
340*/
341void BSYNClib_Channel_P_GetDefaultStatus(
342        BSYNClib_Channel_Status * psStatus
343);
344
345/*
346Summary:
347*/
348void BSYNClib_Channel_P_Stop(
349        BSYNClib_Channel_Handle hChn
350);
351
352#if 0
353void bsync_p_init(void);
354void bsync_p_uninit(void);
355void bsync_p_init_channel(bsync_t sync);
356void bsync_p_init_settings(bsync_settings * settings);
357void bsync_p_get(bsync_settings * settings);
358void bsync_p_set(bsync_settings * settings);
359
360#if B_N_DISPLAYS > 1
361void bsync_p_sync_simul_windows(bsync_t sync);
362#endif
363
364/* delay calculators */
365void bsync_p_calculate_max_pts_to_vsync_delay(bsync_t sync);
366void bsync_p_requantize_delay(bsync_t sync, unsigned int delay, unsigned int * p_requantized_delay);
367#if 0
368void bsync_p_calculate_max_vec_delay(bsync_t sync);
369#endif
370void bsync_p_calculate_current_post_proc_delay(bsync_t sync);
371void bsync_p_calculate_max_afb_delay(bsync_t sync);
372void bsync_p_calculate_current_rap_audio_path_delay(bsync_t sync, unsigned * p_audio_path_delay);
373void bsync_p_calculate_current_pts_to_vsync_delay(bsync_t sync);
374#if BSYNC_PASS_WINDOW_CORRECTION_SUPPORT
375void bsync_p_calculate_video_pass_window_correction_factor(bsync_t sync, unsigned int current_video_delay, int * p_correction_factor, unsigned int * p_additional_video_delay);
376#endif
377void bsync_p_calculate_current_xvd_video_path_delay(bsync_t sync, unsigned * p_video_path_delay);
378
379/* av offset mutators */
380void bsync_p_apply_rap_delay(bsync_t sync, long lRAPDelay);
381void bsync_p_apply_xvd_delay(bsync_t sync, long lXVDDelay);
382
383/* interrupt and event handlers */
384void bsync_p_config_changed_event_handler(void * sync_);
385void bsync_p_video_post_proc_delay_changed_event_handler(void * sync_);
386
387void bsync_p_video_post_proc_delay_notifier_isr(void * sync_, int iParm2, void * pvVdcData);
388#if BSYNC_XVD_PTS_STC_OFFSET_SUPPORT
389void bsync_p_xvd_phase_notifier_isr(void * sync_, int iParm1, void * pvParm2);
390void bsync_p_xvd_phase_accept(bsync_t sync);
391void bsync_p_xvd_tsm_lock_timer_event_handler(void * sync_);
392void bsync_p_xvd_phase_event_handler(void * sync_);
393void bsync_p_audio_unmute_timer_event_handler(void * sync_);
394void bsync_p_video_unmute_timer_event_handler(void * sync_);
395void bsync_p_source_to_display_rate_mismatch_detector(void * sync_);
396void bsync_p_rate_mismatch_detection_timer_event_handler(void * sync_);
397void bsync_p_video_rate_mismatch_detection_reset(bsync_t sync);
398#endif
399
400void bsync_p_idle_sync_task(void * sync_);
401
402bool bsync_p_sync_simul_check(bsync_t sync);
403
404#if BSYNC_UNCONDITIONAL_AUDIO_UNMUTE_SUPPORT
405void bsync_p_unconditional_audio_unmute_timer_event_handler(void * sync_);
406#endif
407
408void bsync_p_get_picture_info_isr(bvideo_format_settings * format, unsigned long height, unsigned long width, BAVC_FrameRateCode eFrameRateCode, bool bStreamProgressive);
409
410int bsync_p_find_window_index(bsync_t sync, bdecode_window_t window);
411bsync_t bsync_p_find_sync_by_window(bdecode_window_t window);
412int bsync_p_find_display_index(bsync_t sync, bdisplay_t display);
413bsync_t bsync_p_find_sync_by_display(bdisplay_t display);
414bsync_t bsync_p_find_sync_by_xvd_channel(struct b_base_xvd_channel * xvd_channel);
415bool bsync_p_predict_vdc_mad_state_change(bsync_t sync);
416bsync_t bsync_p_alloc_sync_channel();
417void bsync_p_free_sync_channel(bsync_t sync);
418void bsync_p_acquire(bsync_t sync, bdecode_t decode);
419void bsync_p_release(bdecode_t decode);
420void bsync_p_video_unmute(bsync_t sync);
421void bsync_p_audio_unmute(bsync_t sync);
422void bsync_p_video_picture_params_handler_isr(void * sync_, BXVD_PictureParameterInfo * info);
423void bsync_p_video_channel_started_handler(bsync_t sync);
424void bsync_p_video_channel_stopped_handler(bsync_t sync);
425void bsync_p_audio_channel_started_handler(bsync_t sync, bool primary);
426void bsync_p_audio_channel_stopped_handler(bsync_t sync, bool primary);
427
428#endif
429
430#endif /* BSYNCLIB_CHANNEL_PRIV_H__ */
431
Note: See TracBrowser for help on using the repository browser.