source: svn/newcon3bcm2_21bu/magnum/commonutils/xdm/bxdm_pp_dbg.c @ 74

Last change on this file since 74 was 74, checked in by phkim, 10 years ago
  1. phkim
  2. zasc
  3. 변경 내용
    • CT_ChMapUpdatePMTAC3AudioDescriptor 메모리 leak 버그 수정
  • Property svn:executable set to *
File size: 61.7 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-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: bxdm_pp_dbg.c $
11 * $brcm_Revision: Hydra_Software_Devel/36 $
12 * $brcm_Date: 3/1/12 2:06p $
13 *
14 * [File Description:]
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/commonutils/xdm/bxdm_pp_dbg.c $
19 *
20 * Hydra_Software_Devel/36   3/1/12 2:06p btosi
21 * SW7405-4736: added picture ID and bar data to MFD messages
22 *
23 * Hydra_Software_Devel/35   2/16/12 9:29a btosi
24 * SW7425-2255: bind the PTS offset to the picture when it is selected for
25 * display
26 *
27 * Hydra_Software_Devel/34   2/8/12 2:19p btosi
28 * SW7425-2253: added support for MFD.bChannelChange
29 *
30 * Hydra_Software_Devel/33   1/17/12 10:42a btosi
31 * SW7405-4736: added support for frame rate type and playback rate
32 *
33 * Hydra_Software_Devel/32   1/13/12 3:00p btosi
34 * SW7405-4736: added debug support for MFD.bLast and picture-less
35 * pictures
36 *
37 * Hydra_Software_Devel/31   12/5/11 9:56a btosi
38 * SW7405-4736: added ePictureHandlingMode to the BXDM_PPQM message
39 *
40 * Hydra_Software_Devel/30   11/28/11 3:21p btosi
41 * SW7405-4736: winnowed down the BXDM_PPQM and BXDM_PPDBG messages
42 *
43 * Hydra_Software_Devel/29   11/17/11 11:43a btosi
44 * SW7405-4736: modified PPQM message to print both the actual and virtual
45 * PTS when a picture is selected in vsync mode
46 *
47 * Hydra_Software_Devel/28   10/3/11 2:19p btosi
48 * SW7425-1264:  support for a SW STC internal to XDM
49 *
50 * Hydra_Software_Devel/27   7/27/11 2:01p btosi
51 * SWDTV-7795: added new protocols to the debug messages
52 *
53 * Hydra_Software_Devel/26   7/7/11 9:47a btosi
54 * SW7405-4736: include the SW PCR offset in the reported STC/PTS delta
55 *
56 * Hydra_Software_Devel/25   7/6/11 3:12p btosi
57 * SW7405-4736: added support for the SW PCR Offset
58 *
59 * Hydra_Software_Devel/24   6/27/11 10:56a btosi
60 * SW7425-764: print out the new elements in the MFD structure
61 *
62 * Hydra_Software_Devel/23   6/7/11 4:59p nilesh
63 * SW7425-44: Add support for BAVC_MFD_Picture.bStallStc
64 *
65 * Hydra_Software_Devel/22   5/10/11 1:41p btosi
66 * SW7405-4736: added range checking and debug messages for the input
67 * parameters
68 *
69 * Hydra_Software_Devel/21   5/2/11 9:36a btosi
70 * SW7405-4736: added warnings for unsupported 3D types
71 *
72 * Hydra_Software_Devel/20   5/2/11 9:14a btosi
73 * SW7405-4736: moved location of BXDM_PPDBG_P_PrintMFD
74 *
75 * Hydra_Software_Devel/19   4/28/11 1:53p nilesh
76 * SW7405-5057: New fixed point math library with proper support for -2^32
77 * to 2^32 values.
78 *
79 * Hydra_Software_Devel/18   4/26/11 1:00p btosi
80 * SW7405-4736: tweaked the base 10 conversion code
81 *
82 * Hydra_Software_Devel/17   4/25/11 1:11p btosi
83 * SW7405-4736: for BXDM_PPDBG, print fractional part of average STC delta
84 *
85 * Hydra_Software_Devel/16   4/22/11 8:37a btosi
86 * SW7405-4736: fixed warning for kernel build
87 *
88 * Hydra_Software_Devel/15   4/21/11 1:53p btosi
89 * SW7405-4736: moved BXDM_PPQM_P_PrintUnifiedPicture to bxdm_pp_dbg.c,
90 * tweaked the BXDM_PPQM message
91 *
92 * Hydra_Software_Devel/14   4/19/11 12:00p btosi
93 * SW7405-4736: print parsed fields instead of raw data
94 *
95 * Hydra_Software_Devel/13   4/15/11 12:53p btosi
96 * SW7405-4736: print enhanced picture for MFD1
97 *
98 * Hydra_Software_Devel/12   4/13/11 8:52a btosi
99 * SW7405-4736: modified MFD debug messages
100 *
101 * Hydra_Software_Devel/11   4/12/11 2:19p btosi
102 * SW7405-4736: added support for MFD debug messages
103 *
104 * Hydra_Software_Devel/10   4/5/11 2:26p btosi
105 * SW7405-4736: removed BXDM_PP_ENABLE_YUV_GRAB_MODE, grab is implemented
106 * in bxvd_decoder.c
107 *
108 * Hydra_Software_Devel/9   1/6/11 2:21p delkert
109 * SW7405-4736: Change STC display in BXDM_PPQM and BXDM_PPDBG logs to
110 * show original STC from decoder with marker indicating JTI application
111 * Add output of Playback vs Live indication in BXDM_PPDBG logs.
112 *
113 * Hydra_Software_Devel/8   12/21/10 4:24p delkert
114 * SW7405-5043: Split STC stored in local state into two parts: STC from
115 * decoder and STC after JTI adjustment
116 *
117 * Hydra_Software_Devel/7   9/23/10 3:09p btosi
118 * SW7405-4736: add support for a XDM instance ID to help debug multi-
119 * channel issues
120 *
121 * Hydra_Software_Devel/6   8/10/10 4:16p btosi
122 * SW7405-4736: added PPB index to debug messages
123 *
124 * Hydra_Software_Devel/5   8/4/10 1:43p btosi
125 * SWBLURAY-21565: to aid debug, added uiPPBIndex to debug messages
126 *
127 * Hydra_Software_Devel/4   7/12/10 8:05a delkert
128 * SW7335-781: Output warning when forcing picture selection override to
129 * allow easier detection of conditions such as drop@decode and pcr
130 * discontinuity
131 *
132 * Hydra_Software_Devel/3   3/15/10 3:28p btosi
133 * SW7405-3245: use BXDM_PPDBG_P_AppendChar routine instead of
134 * BXDM_PPDBG_P_APPEND_CHAR macro
135 *
136 * Hydra_Software_Devel/2   3/9/10 3:12p btosi
137 * SW7405-3245: build strings locally instead of calling BKNI_Vsnprintf,
138 * shaved ~140 usec off the ISR execution time
139 *
140 * Hydra_Software_Devel/1   2/16/10 10:51a nilesh
141 * SW7405-2993: Initial XDM version
142 *
143 ***************************************************************************/
144
145#include "bstd.h"
146#include "bkni.h"
147#include "bdbg.h"
148
149#include "bxdm_pp.h"
150#include "bxdm_pp_priv.h"
151#include "bxdm_pp_dbg.h"
152#include "bxdm_pp_qm.h"
153
154
155BDBG_MODULE(BXDM_PPDBG);
156BDBG_FILE_MODULE(BXDM_MFD1);
157BDBG_FILE_MODULE(BXDM_MFD2);
158BDBG_FILE_MODULE(BXDM_PPQM);
159BDBG_FILE_MODULE(BXDM_CFG);
160
161const char BXDM_PictureProvider_P_DISPMGR_DBG_NODE[]="DMDBG:\t""$brcm_Revision: Hydra_Software_Devel/36 $";
162
163#if BDBG_DEBUG_BUILD
164
165extern uint32_t BXDM_PPTMR_lutVsyncsPersSecond[];
166
167extern const char BXDM_PictureProvider_P_DISPMGR_V2_NODE[];
168extern const char BXDM_PictureProvider_P_DISPMGR_CALLBACK_NODE[];
169extern const char BXDM_PictureProvider_P_DISPMGR_DBG_NODE[];
170extern const char BXDM_PictureProvider_P_DISPMGR_FP_NODE[];
171extern const char BXDM_PictureProvider_P_DISPMGR_OUTPUT_NODE[];
172extern const char BXDM_PictureProvider_P_DISPMGR_QM_NODE[];
173extern const char BXDM_PictureProvider_P_DISPMGR_TSM_NODE[];
174extern const char BXDM_PictureProvider_P_DISPMGR_VTSM_NODE[];
175extern const char BXDM_PictureProvider_P_DISPMGR_CLIP_NODE[];
176extern const char BXDM_PictureProvider_P_DISPMGR_FRD_NODE[];
177extern const char BXDM_PictureProvider_P_DISPMGR_FIC_NODE[];
178extern const char BXDM_PictureProvider_P_DISPMGR_JRC_NODE[];
179extern const char BXDM_PictureProvider_P_DISPMGR_AVG_NODE[];
180extern const char BXDM_PictureProvider_P_DISPMGR_FIX33_NODE[];
181
182/*
183 * Lookup tables mapping variables to strings.
184 */
185static char sInterruptPolarityNameLUT[BAVC_Polarity_eFrame + 1] =
186{
187  't', /* BAVC_Polarity_eTopField */
188  'b', /* BAVC_Polarity_eBotField */
189  'f'  /* BAVC_Polarity_eFrame */
190};
191
192static char sPicturePolarityNameLUT[BXDM_PictureProvider_P_InterruptType_eMax][BAVC_Polarity_eFrame + 1] =
193{
194 /* BXDM_PictureProvider_P_InterruptType_eSingle */
195 {
196  'T', /* BAVC_Polarity_eTopField */
197  'B', /* BAVC_Polarity_eBotField */
198  'F'  /* BAVC_Polarity_eFrame */
199 },
200
201 /* BXDM_PictureProvider_P_InterruptType_eBase (or Primary) */
202 {
203  'p', /* BAVC_Polarity_eTopField */
204  'p', /* BAVC_Polarity_eBotField */
205  'p'  /* BAVC_Polarity_eFrame */
206 },
207
208 /* BXDM_PictureProvider_P_InterruptType_eDependent */
209 {
210  'd', /* BAVC_Polarity_eTopField */
211  'd', /* BAVC_Polarity_eBotField */
212  'd'  /* BAVC_Polarity_eFrame */
213 }
214};
215
216
217static char sHexToCharLUT[16] =
218{
219   '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
220};
221
222static char sSelectionLUT[BXDM_PPDBG_Selection_eMax] =
223{
224   '-', /* BXDM_PPDBG_Selection_ePPBNotFound */
225   '+', /* BXDM_PPDBG_Selection_ePPBFound */
226   'P', /* BXDM_PPDBG_Selection_ePass */
227   'F', /* BXDM_PPDBG_Selection_eForce */
228   'L', /* BXDM_PPDBG_Selection_eLate */
229   'W', /* BXDM_PPDBG_Selection_eWait */
230   'Z', /* BXDM_PPDBG_Selection_eFreeze */
231   'E', /* BXDM_PPDBG_Selection_eTooEarly */
232   'D', /* BXDM_PPDBG_Selection_eDrop */
233   'R', /* BXDM_PPDBG_Selection_eDelay */
234   'd', /* BXDM_PPDBG_Selection_eDependentPicture */
235
236   'b', /* BXDM_PPDBG_Selection_PolarityOverride_eBothField */
237   'p', /* BXDM_PPDBG_Selection_PolarityOverride_eProgressive */
238   '1', /* BXDM_PPDBG_Selection_PolarityOverride_e1stSlotRepeat */
239   '2', /* BXDM_PPDBG_Selection_PolarityOverride_e2ndSlotNextElement */
240   '2', /* BXDM_PPDBG_Selection_PolarityOverride_e2ndSlotNextPPB */
241   'i', /* BXDM_PPDBG_Selection_PolarityOverride_e2ndSlotInversion */
242   's', /* BXDM_PPDBG_Selection_PolarityOverride_eSelectPrevious */
243   'r', /* BXDM_PPDBG_Selection_PolarityOverride_eRepeatPrevious */
244   '0', /* BXDM_PPDBG_Selection_PolarityOverride_eFICReset */
245};
246
247
248static const char * s_aPolarityToStrLUT[BAVC_Polarity_eFrame+1] = 
249{
250   "T",  /* Top field */
251   "B",  /* Bottom field */
252   "F",  /* Progressive frame */
253};
254
255static const char * s_aBAVCFrameRateToStrLUT[BAVC_FrameRateCode_eMax] = 
256{
257   "ukn",      /* Unknown */
258   "23.97",    /* 23.976 */
259   "24",       /* 24 */
260   "25",       /* 25 */
261   "29.97",    /* 29.97 */
262   "30",       /* 30 */
263   "50",       /* 50 */
264   "59.94",    /* 59.94 */
265   "60",       /* 60 */
266   "14.98",    /* 14.985 */
267   "7.49"      /* 7.493 */
268};
269
270static const char * s_aFrameRateTypeToStrLUT[BXDM_PictureProvider_P_FrameRateType_eMax] = 
271{
272   "cod",   /* coded in the stream */
273   "def",   /* as specified by BXDM_PictureProvider_SetDefaultFrameRate_isr   */
274   "ovr",   /* as specified by BXDM_PictureProvider_SetFrameRateOverride_isr  */
275   "frd",   /* calculated in the FRD code using the PTS values                */ 
276   "hcd"    /* using the values hardcoded in BXDM_PPTSM_P_PtsCalculateParameters */
277};
278
279static const char * s_aOrientationToStrLUT[BFMT_Orientation_e3D_Right+1] =
280{
281   "2D",       /* 2D */
282   "LftRgt",   /* 3D left right */
283   "OvrUnd",   /* 3D over under */
284   "FF-Lf",    /* 3D left */
285   "FF-Rt"     /* 3D right */
286};
287
288static const char * s_aBAVCPictureCodingToStrLUT[BAVC_PictureCoding_eMax] = 
289{
290   "u",     /* Picture Coding Type Unknown */
291   "I",     /* Picture Coding Type I */
292   "P",     /* Picture Coding Type P */
293   "B"      /* Picture Coding Type B */
294};
295
296static const char * s_aBXDMPictureCodingToStrLUT[BXDM_Picture_Coding_eMax] = 
297{
298   "u",     /* BXDM_Picture_Coding_eUnknown */
299   "I",     /* BXDM_Picture_Coding_eI */
300   "P",     /* BXDM_Picture_Coding_eP */
301   "B"      /* BXDM_Picture_Coding_eB */
302};
303
304static const char * s_aAspectRatioToStrLUT[BFMT_AspectRatio_eSAR+1] = 
305{
306  "Ukn",    /* Unkown/Reserved */
307  "Sqr",    /* square pixel */
308  "4x3",    /* 4:3 */
309  "16x9",   /* 16:9 */
310  "221x1",  /* 2.21:1 */
311  "15x9",   /* 15:9 */
312  "SAR"     /* no DAR available, use SAR instead */
313};
314
315static const char * s_aMonitorRefreshRateToStrLUT[BXDM_PictureProvider_MonitorRefreshRate_eMax] = 
316{
317   "Ukn",      /* BXDM_PictureProvider_MonitorRefreshRate_eUnknown */
318   "23.97",    /* BXDM_PictureProvider_MonitorRefreshRate_e23_976Hz */
319   "24",       /* BXDM_PictureProvider_MonitorRefreshRate_e24Hz */
320   "25",       /* BXDM_PictureProvider_MonitorRefreshRate_e25Hz */
321   "29.97",    /* BXDM_PictureProvider_MonitorRefreshRate_e29_97Hz */
322   "30",       /* BXDM_PictureProvider_MonitorRefreshRate_e30Hz */
323   "50",       /* BXDM_PictureProvider_MonitorRefreshRate_e50Hz */
324   "59.94",    /* BXDM_PictureProvider_MonitorRefreshRate_e59_94Hz */
325   "60",       /* BXDM_PictureProvider_MonitorRefreshRate_e60Hz */
326   "48"        /* BXDM_PictureProvider_MonitorRefreshRate_e48Hz */
327};
328
329static const char * s_aSTCTrickModeToStrLUT[BXDM_PictureProvider_P_STCTrickMode_eMax] =
330{
331   "Off",   /* BXDM_PictureProvider_P_STCTrickMode_eOff */
332   "FstFwd",   /* BXDM_PictureProvider_P_STCTrickMode_eFastForward */
333   "SlwFwd",   /* BXDM_PictureProvider_P_STCTrickMode_eSlowMotion */
334   "Pause",   /* BXDM_PictureProvider_P_STCTrickMode_ePause */
335   "FstRwd",   /* BXDM_PictureProvider_P_STCTrickMode_eFastRewind */
336   "SlwRwd"    /* BXDM_PictureProvider_P_STCTrickMode_eSlowRewind */
337};
338
339static const char * s_aTSMResultToStrLUT[BXDM_PictureProvider_TSMResult_eMax] =
340{
341   "e",  /* BXDM_PictureProvider_TSMResult_eTooEarly */
342   "w",  /* BXDM_PictureProvider_TSMResult_eWait */
343   "p",  /* BXDM_PictureProvider_TSMResult_ePass */
344   "l",  /* BXDM_PictureProvider_TSMResult_eTooLate */
345   "d"   /* BXDM_PictureProvider_TSMResult_eDrop */
346};
347
348
349static char * s_aPullDownEnumToStrLUT[BXDM_Picture_PullDown_eMax] =
350{
351   "ukn",   /* x */
352   "T  ",   /* BXDM_Picture_PullDown_eTop */
353   "B  ",   /* BXDM_Picture_PullDown_eBottom*/
354   "TB ",   /* BXDM_Picture_PullDown_eTopBottom */
355   "BT ",   /* BXDM_Picture_PullDown_eBottomTop*/
356   "TBT",   /* BXDM_Picture_PullDown_eTopBottomTop */
357   "BTB",   /* BXDM_Picture_PullDown_eBottomTopBottom */
358   "X2 ",   /* BXDM_Picture_PullDown_eFrameX2 */
359   "X3 ",   /* BXDM_Picture_PullDown_eFrameX3 */
360   "X1 ",   /* BXDM_Picture_PullDown_eFrameX1 */
361   "X4 "    /* BXDM_Picture_PullDown_eFrameX4 */
362};
363
364static const char * s_aDisplayFieldModeToStrLUT[BXDM_PictureProvider_DisplayFieldMode_eMax]= 
365{
366   "both",     /* regular both field display */
367   "top ",     /* Display Top fld only */
368   "botm",     /* Display Bottom fld only */
369   "sing",     /* Display single field only. */
370   "auto"      /* either eSingleField or eBothField */ 
371};
372
373static const char * s_aPPOrientationToStrLUT[BXDM_PictureProvider_Orientation_eMax]=
374{
375   "2D",
376   "LfRt",
377   "OvUn",
378   "LRff",
379   "RLff"
380};
381
382static const char * s_aPulldownModeToStrLUT[BXDM_PictureProvider_PulldownMode_eMax] = 
383{
384   "TB",    /* BXDM_PictureProvider_PulldownMode_eTopBottom */
385   "BT",    /* BXDM_PictureProvider_PulldownMode_eBottomTop */
386   "En"     /* BXDM_PictureProvider_PulldownMode_eUseEncodedFormat */
387};
388
389static const char * s_aFrameAdvanceModeToStrLUT[BXDM_PictureProvider_FrameAdvanceMode_eMax]=
390{
391   "Off",      /* BXDM_PictureProvider_FrameAdvanceMode_eOff */
392   "Fld",      /* BXDM_PictureProvider_FrameAdvanceMode_eField */
393   "Frm",      /* BXDM_PictureProvider_FrameAdvanceMode_eFrame */
394   "FbF"       /* BXDM_PictureProvider_FrameAdvanceMode_eFrameByField */
395};
396
397#define BXDM_PPDBG_S_MAX_VIDEO_PROTOCOL 19
398
399static const char * s_aVideoCompressionStdToStrLUT[BXDM_PPDBG_S_MAX_VIDEO_PROTOCOL]=
400{
401   "H264",           /* H.264 */
402   "MPEG2",          /* MPEG-2 */
403   "H261",           /* H.261 */
404   "H263",           /* H.263 */
405   "VC1",            /* VC1 Advanced profile */
406   "MPEG1",          /* MPEG-1 */
407   "MPEG2DTV",       /* MPEG-2 DirecTV DSS ES */
408   "VC1SimpleMain",  /* VC1 Simple & Main profile */
409   "MPEG4Part2",     /* MPEG 4, Part 2. */
410   "AVS",            /* AVS Jinzhun profile. */
411   "MPEG2_DSS_PES",  /* MPEG-2 DirecTV DSS PES */
412   "SVC",            /* Scalable Video Codec */
413   "SVC_BL",         /* Scalable Video Codec Base Layer */
414   "MVC",            /* MVC Multi View Coding */
415   "VP6",            /* VP6 */
416   "VP7",            /* VP7 */
417   "VP8",            /* VP8 */
418   "RV9",            /* Real Video 9 */
419   "SPARK"           /* Sorenson Spark */
420};
421
422static const char * s_aTrickModeToStrLUT[BXDM_PictureProvider_TrickMode_eMax]=
423{
424   "auto",     /* BXDM_PictureProvider_TrickMode_eAuto */
425   "normal",   /* BXDM_PictureProvider_TrickMode_eNormal */
426   "sparse",   /* BXDM_PictureProvider_TrickMode_eSparsePictures */
427   "pause",    /* BXDM_PictureProvider_TrickMode_ePause */
428   "rew",      /* BXDM_PictureProvider_TrickMode_eRewind */
429   "ff"        /* BXDM_PictureProvider_TrickMode_eFastForward */
430
431};
432
433static const char * s_aFrameRateDetectionModeToStrLUT[BXDM_PictureProvider_FrameRateDetectionMode_eMax]=
434{
435   "off",   /* BXDM_PictureProvider_FrameRateDetectionMode_eOff */
436   "fast",  /* BXDM_PictureProvider_FrameRateDetectionMode_eFast */
437   "stable" /* BXDM_PictureProvider_FrameRateDetectionMode_eStable */
438};
439
440static const char * s_aErrorHandlingModeToStrLUT[BXDM_PictureProvider_ErrorHandlingMode_eMax]=
441{
442   "off",      /* BXDM_PictureProvider_ErrorHandlingMode_eOff */
443   "pic",      /* BXDM_PictureProvider_ErrorHandlingMode_ePicture */
444   "prog"      /* BXDM_PictureProvider_ErrorHandlingMode_ePrognostic */
445};
446
447static const char * s_aBFMTRefreshRateToStrLUT[BFMT_Vert_eLast]=
448{
449   "Ukn",      /* BFMT_Vert_eInvalid */
450   "23.97",    /* BFMT_Vert_e23_976Hz */
451   "24",       /* BFMT_Vert_e24Hz */
452   "25",       /* BFMT_Vert_e25Hz */
453   "29.97",    /* BFMT_Vert_e29_97Hz */
454   "30",       /* BFMT_Vert_e30Hz */
455   "48",       /* BFMT_Vert_e48Hz */
456   "50",       /* BFMT_Vert_e50Hz */
457   "59.94",    /* BFMT_Vert_e59_94Hz */
458   "60",       /* BFMT_Vert_e60Hz */
459};
460
461/*
462 * Functions
463 */
464static void BXDM_PPDBG_S_AppendChar(
465   BXDM_PPDBG_P_String * pstString,
466   uint32_t uiCount,
467   ...
468   )
469{
470   uint32_t i;
471
472   va_list args;
473
474   va_start(args, uiCount);
475
476   for( i=0; i < uiCount; i++ )
477   {
478      BXDM_PPDBG_P_APPEND_CHAR( pstString, va_arg(args, uint32_t) );
479   }
480
481   va_end(args);
482
483   return;
484}
485
486
487#if 0
488BERR_Code BXDM_PPDBG_P_ResetString(
489   BXDM_PPDBG_P_String *pStringInfo
490   )
491{
492   pStringInfo->szDebugStr[0] = '\0';
493   pStringInfo->uiDebugStrOffset = 0;
494
495   return BERR_SUCCESS;
496}
497
498BERR_Code BXDM_PPDBG_P_AppendString(
499   BXDM_PPDBG_P_String *pStringInfo,
500   const char *fmt,
501   ...
502   )
503{
504   BERR_Code rc = BERR_SUCCESS;
505
506   if (pStringInfo->uiDebugStrOffset < sizeof(pStringInfo->szDebugStr))
507   {
508      va_list args;
509
510      va_start(args, fmt);
511      pStringInfo->uiDebugStrOffset += BKNI_Vsnprintf(pStringInfo->szDebugStr +
512                                                     pStringInfo->uiDebugStrOffset,
513                                                     sizeof(pStringInfo->szDebugStr) -
514                                                     pStringInfo->uiDebugStrOffset,
515                                                     fmt,
516                                                     args);
517      va_end(args);
518   }
519   else
520   {
521      rc = BERR_OUT_OF_DEVICE_MEMORY;
522   }
523
524   return rc;
525}
526
527BERR_Code BXDM_PPDBG_P_PrintString(
528   const BXDM_PictureProvider_Handle hXdmPP,
529   BXDM_PPDBG_P_String *pStringInfo
530   )
531{
532   BERR_Code rc = BERR_SUCCESS;
533
534   BXVD_DBG_MSG(hXdmPP, ("%s", pStringInfo->szDebugStr));
535
536   if (pStringInfo->uiDebugStrOffset >= sizeof(pStringInfo->szDebugStr))
537   {
538      BXVD_DBG_ERR(hXdmPP, ("Debug Buffer Overflow!"));
539      rc = BERR_OUT_OF_DEVICE_MEMORY;
540   }
541
542   BXDM_PPDBG_P_ResetString(pStringInfo);
543
544   return rc;
545}
546#endif
547BERR_Code BXDM_PPDBG_P_OutputLog(
548   const BXDM_PictureProvider_Handle hXdmPP,
549   const BXDM_PictureProvider_P_LocalState *pLocalState,
550   const BAVC_MFD_Picture *pMFDPicture
551   )
552{
553   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
554   uint32_t uiPPBIndex;
555   char iInfoFlag;
556
557   /* Gather Stats for this VSYNC */
558   uiPPBIndex = hXdmPP->stDMState.stChannel.stSelectedPicture.stPicParms.uiPPBIndex & 0xFFF;
559
560   if (pMFDPicture->bMute)
561   {
562      iInfoFlag = 'M';
563   }
564   else if ((pMFDPicture->eInterruptPolarity != BAVC_Polarity_eFrame) &&
565            (pMFDPicture->eSourcePolarity != BAVC_Polarity_eFrame) &&
566            (pMFDPicture->eInterruptPolarity != pMFDPicture->eSourcePolarity) &&
567            (BXDM_PictureProvider_P_InterruptType_eSingle == pLocalState->eInterruptType)
568            )
569   {
570      iInfoFlag = '*';
571   }
572   else if (pMFDPicture->bPictureRepeatFlag)
573   {
574      iInfoFlag = 'R';
575   }
576   else
577   {
578      iInfoFlag = ' ';
579   }
580
581   if (pDebugInfo->uiVsyncCount == 0)
582   {
583      BKNI_Memset( &(pDebugInfo->stInterruptString), 0, sizeof( BXDM_PPDBG_P_String ) );
584      BXDM_PPDBG_S_AppendChar( &(pDebugInfo->stInterruptString), 4, 'P', 'S', ':', ' ' );
585   }
586
587   BXDM_PPDBG_S_AppendChar(
588         &(pDebugInfo->stInterruptString),
589         8,
590         sInterruptPolarityNameLUT[pMFDPicture->eInterruptPolarity],
591         sPicturePolarityNameLUT[pLocalState->eInterruptType][pMFDPicture->eSourcePolarity],
592         ':',
593         sHexToCharLUT[ (uiPPBIndex >> 8) & 0xF ],
594         sHexToCharLUT[ (uiPPBIndex >> 4) & 0xF ],
595         sHexToCharLUT[ uiPPBIndex & 0xF ],
596         iInfoFlag,
597         ' ' );
598
599   return BERR_SUCCESS;
600}
601
602BERR_Code BXDM_PPDBG_P_OutputSPOLog(
603   const BXDM_PictureProvider_Handle hXdmPP,
604   const uint32_t uiOverrideBits
605   )
606{
607   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
608   BXDM_PPDBG_P_String * pStr = &pDebugInfo->stSourcePolarityOverrideString;
609
610   if (pDebugInfo->uiVsyncCount == 0)
611   {
612      BKNI_Memset( pStr, 0, sizeof( BXDM_PPDBG_P_String ) );
613      BXDM_PPDBG_S_AppendChar( pStr, 4, 'O', 'V', ':', ' ' );
614   }
615
616   if ( uiOverrideBits )
617   {
618      BXDM_PPDBG_S_AppendChar(
619         pStr,
620         8,
621         sHexToCharLUT[ pDebugInfo->uiVsyncCount ],
622         ':',
623         sHexToCharLUT[ (uiOverrideBits >> 16) & 0xF ],
624         sHexToCharLUT[ (uiOverrideBits >> 12) & 0xF ],
625         sHexToCharLUT[ (uiOverrideBits >> 8) & 0xF ],
626         sHexToCharLUT[ (uiOverrideBits >> 4) & 0xF ],
627         sHexToCharLUT[ uiOverrideBits & 0xF ],
628         ' ' );
629   }
630   else
631   {
632      /* If none of the bits are set, print spaces to make it
633       * more obvious when something is set.
634       */
635      BXDM_PPDBG_S_AppendChar(
636         pStr,
637         8,
638         sHexToCharLUT[ pDebugInfo->uiVsyncCount ],
639         ':',
640         ' ' ,
641         ' ' ,
642         ' ' ,
643         ' ' ,
644         ' ' ,
645         ' ' );
646   }
647
648   if ( 0 != uiOverrideBits )
649   {
650      pDebugInfo->bPrintSPO = true;
651   }
652
653   return BERR_SUCCESS;
654}
655
656BERR_Code BXDM_PPDBG_P_SelectionLog(
657   const BXDM_PictureProvider_Handle hXdmPP,
658   BXDM_PPDBG_Selection eSelectionInfo
659   )
660{
661   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
662   BXDM_PPDBG_P_String * pStr = &pDebugInfo->stTSMString;
663
664   if (pDebugInfo->abSelectionLogHeader[pDebugInfo->uiVsyncCount] == false)
665   {
666      if (pDebugInfo->uiVsyncCount == 0)
667      {
668         BKNI_Memset( pStr, 0, sizeof( BXDM_PPDBG_P_String ) );
669         BXDM_PPDBG_S_AppendChar( pStr, 4, 'T', 'M', ':', ' ' );
670      }
671      else
672      {
673         BXDM_PPDBG_S_AppendChar( pStr, 1, ' ' );
674      }
675
676      BXDM_PPDBG_S_AppendChar(
677            pStr,
678            2,
679            sHexToCharLUT[ pDebugInfo->uiVsyncCount & 0xF ],
680            ':' );
681
682      pDebugInfo->abSelectionLogHeader[pDebugInfo->uiVsyncCount] = true;
683   }
684
685   BXDM_PPDBG_S_AppendChar( pStr, 1, sSelectionLUT[eSelectionInfo] );
686
687   return BERR_SUCCESS;
688}
689
690BERR_Code BXDM_PPDBG_P_CallbackTriggeredLog(
691   const BXDM_PictureProvider_Handle hXdmPP,
692   const uint32_t uiCallbackTriggeredBits
693   )
694{
695   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
696   BXDM_PPDBG_P_String * pStr = &pDebugInfo->stCallbackString;
697
698   if (pDebugInfo->uiVsyncCount == 0)
699   {
700      BKNI_Memset( pStr, 0, sizeof( BXDM_PPDBG_P_String ) );
701      BXDM_PPDBG_S_AppendChar( pStr, 4, 'C', 'B', ':', ' ' );
702   }
703
704
705   if ( uiCallbackTriggeredBits )
706   {
707      BXDM_PPDBG_S_AppendChar(
708         pStr,
709         8,
710         sHexToCharLUT[ pDebugInfo->uiVsyncCount ],
711         ':',
712         sHexToCharLUT[ (uiCallbackTriggeredBits >> 16) & 0xF ],
713         sHexToCharLUT[ (uiCallbackTriggeredBits >> 12) & 0xF ],
714         sHexToCharLUT[ (uiCallbackTriggeredBits >> 8) & 0xF ],
715         sHexToCharLUT[ (uiCallbackTriggeredBits >> 4) & 0xF ],
716         sHexToCharLUT[ uiCallbackTriggeredBits & 0xF ],
717         ' ' );
718   }
719   else
720   {
721      /* If none of the bits are set, print spaces to make
722       * it more obvious when something is set.
723       */
724      BXDM_PPDBG_S_AppendChar(
725         pStr,
726         8,
727         sHexToCharLUT[ pDebugInfo->uiVsyncCount ],
728         ':',
729         ' ' ,
730         ' ' ,
731         ' ' ,
732         ' ' ,
733         ' ' ,
734         ' ' );
735   }
736
737   if ( 0 != uiCallbackTriggeredBits )
738   {
739      pDebugInfo->bPrintCallbacks = true;
740   }
741
742   return BERR_SUCCESS;
743}
744
745BERR_Code BXDM_PPDBG_P_StateLog(
746   const BXDM_PictureProvider_Handle hXdmPP,
747   const uint32_t uiStateBits
748   )
749{
750   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
751   BXDM_PPDBG_P_String * pStr = &pDebugInfo->stStateString;
752
753   if (pDebugInfo->uiVsyncCount == 0)
754   {
755      BKNI_Memset( pStr, 0, sizeof( BXDM_PPDBG_P_String ) );
756      BXDM_PPDBG_S_AppendChar( pStr, 4, 'S', 'T', ':', ' ' );
757   }
758
759   BXDM_PPDBG_S_AppendChar(
760         pStr,
761         8,
762         sHexToCharLUT[ pDebugInfo->uiVsyncCount ],
763         ':',
764         sHexToCharLUT[ (uiStateBits >> 16) & 0xF ],
765         sHexToCharLUT[ (uiStateBits >> 12) & 0xF ],
766         sHexToCharLUT[ (uiStateBits >> 8) & 0xF ],
767         sHexToCharLUT[ (uiStateBits >> 4) & 0xF ],
768         sHexToCharLUT[ uiStateBits & 0xF ],
769         ' ' );
770
771   return BERR_SUCCESS;
772}
773
774BERR_Code BXDM_PPDBG_P_DecoderDropLog(
775   const BXDM_PictureProvider_Handle hXdmPP,
776   const uint32_t uiPendingDrop
777   )
778{
779   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
780   BXDM_PPDBG_P_String * pStr = &pDebugInfo->stPendingDropString;
781
782   if (pDebugInfo->uiVsyncCount == 0)
783   {
784      BKNI_Memset( pStr, 0, sizeof( BXDM_PPDBG_P_String ) );
785      BXDM_PPDBG_S_AppendChar( pStr, 4, 'D', 'R', ':', ' ' );
786   }
787
788   BXDM_PPDBG_S_AppendChar(
789         pStr,
790         8,
791         sHexToCharLUT[ pDebugInfo->uiVsyncCount ],
792         ':',
793         sHexToCharLUT[ (uiPendingDrop >> 16) & 0xF ],
794         sHexToCharLUT[ (uiPendingDrop >> 12) & 0xF ],
795         sHexToCharLUT[ (uiPendingDrop >> 8) & 0xF ],
796         sHexToCharLUT[ (uiPendingDrop >> 4) & 0xF ],
797         sHexToCharLUT[ uiPendingDrop & 0xF ],
798         ' ' );
799
800   return BERR_SUCCESS;
801}
802
803BERR_Code BXDM_PPDBG_P_Print(
804   const BXDM_PictureProvider_Handle hXdmPP,
805   const BXDM_PictureProvider_P_LocalState* pLocalState
806   )
807{
808   BXDM_PPDBG_P_Info *pDebugInfo = &hXdmPP->stDMState.stDecode.stDebug;
809
810   /* See if we need to print out stats */
811   if (pDebugInfo->uiVsyncCount == (BXDM_PPDBG_P_MAX_VSYNC_DEPTH - 1))
812   {
813      int32_t iAverageStcDelta;
814      uint32_t uiAverageFractionBase10;
815
816      BXDM_PictureProvider_MonitorRefreshRate eMonitorRefreshRate = hXdmPP->stDMConfig.eMonitorRefreshRate;
817
818      if ( eMonitorRefreshRate >= BXDM_PictureProvider_MonitorRefreshRate_eMax )
819      {
820         eMonitorRefreshRate = BXDM_PictureProvider_MonitorRefreshRate_eUnknown;
821      }
822
823      /* Figure out the STC delta (from the previous vsync) based on assorted state.
824       */
825      if ( true == hXdmPP->stDMConfig.stClockOverride.bEnableClockOverride )
826      {
827         iAverageStcDelta = hXdmPP->stDMConfig.stClockOverride.iStcDelta;
828         uiAverageFractionBase10 = 0;         
829      }
830      else if ( true == hXdmPP->stDMConfig.bSTCValid )
831      {
832         iAverageStcDelta = pLocalState->stDeltaSTCAvg.uiWhole;
833
834         /* Convert the fractional part of stDeltaSTCAvg to a base 10 value for display. */
835         BXDM_PPFP_P_FixPtBinaryFractionToBase10( 
836                  (BXDM_PPFP_P_DataType *)&(pLocalState->stDeltaSTCAvg), 
837                  2, 
838                  &(uiAverageFractionBase10) 
839                  );
840      }
841      else
842      {
843         iAverageStcDelta = pLocalState->stEffectiveSTCDelta[BXDM_PictureProvider_DisplayMode_eTSM].uiWhole;
844         uiAverageFractionBase10 = 0;
845      }
846
847
848      BXVD_DBG_MSG(hXdmPP, (" DM Log (ch:%01x stc:%08x%c mr:%sHz edSTC:%u adSTC:%d.%u pbr:%d%c tm:%s %s)",
849                                hXdmPP->stDMConfig.uiInstanceID & 0xF,
850                                pLocalState->uiStcSnapshot,
851                                (hXdmPP->stDMState.stDecode.iStcJitterCorrectionOffset != 0)?'*':' ',
852                                s_aMonitorRefreshRateToStrLUT[eMonitorRefreshRate],
853                                pLocalState->stSTCDelta.uiWhole,
854                                iAverageStcDelta,
855                                uiAverageFractionBase10,
856                                ( pLocalState->uiSlowMotionRate / BXDM_PICTUREPROVIDER_NORMAL_PLAYBACK_RATE_EXTRA_DECIMALS ),
857                                '%',
858                                s_aSTCTrickModeToStrLUT[pLocalState->eSTCTrickMode],
859                                hXdmPP->stDMConfig.bPlayback?"pb":"lv"
860                                ));
861
862      /* Print TSM Logs */
863      BXVD_DBG_MSG(hXdmPP, ("%s", &pDebugInfo->stTSMString.szDebugStr));
864
865      /* Print Decoder Drop Logs */
866/*      BXVD_DBG_MSG(hXdmPP, ("%s", &pDebugInfo->stPendingDropString.szDebugStr));*/
867
868      /* Print picture selecton log */
869      BXVD_DBG_MSG(hXdmPP, ("%s", &pDebugInfo->stInterruptString.szDebugStr));
870
871      /* Print stats for Source Polarity Override */
872      if ( true == pDebugInfo->bPrintSPO )
873      {
874         BXVD_DBG_MSG(hXdmPP, ("%s", &pDebugInfo->stSourcePolarityOverrideString.szDebugStr));
875      }
876
877      /* Print stats for Callbacks */
878      if ( true == pDebugInfo->bPrintCallbacks )
879      {
880         BXVD_DBG_MSG(hXdmPP, ("%s", &pDebugInfo->stCallbackString.szDebugStr));
881      }
882
883      /* Print State Logs: */
884      BXVD_DBG_MSG(hXdmPP, ("%s", &pDebugInfo->stStateString.szDebugStr));
885
886      BKNI_Memset(pDebugInfo, 0, sizeof(BXDM_PPDBG_P_Info));
887   }
888   else
889   {
890      pDebugInfo->uiVsyncCount++;
891   }
892
893   return BERR_SUCCESS;
894}
895
896void BXDM_PPDBG_P_PrintNodes(
897   const BXDM_PictureProvider_Handle hXdmPP
898   )
899{
900   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_V2_NODE));
901   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_CALLBACK_NODE));
902   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_DBG_NODE));
903   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_FP_NODE));
904   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_OUTPUT_NODE));
905   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_QM_NODE));
906   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_TSM_NODE));
907   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_VTSM_NODE));
908   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_CLIP_NODE));
909   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_FRD_NODE));
910   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_FIC_NODE));
911   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_JRC_NODE));
912   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_AVG_NODE));
913   BXVD_DBG_MSG(hXdmPP, (BXDM_PictureProvider_P_DISPMGR_FIX33_NODE));
914}
915
916/*
917** SW7335-781: Output warning when forcing picture selection override
918** Output Selection Mode override message only once, if:
919** an override to vTSM mode occurred
920** the override was not the same as the previous Override
921** function assumes new selection mode is VSYNC (vTSM) mode
922*/
923void BXDM_PPDBG_P_PrintSelectionModeOverride(
924   char *pMsg,
925   const BXDM_PictureProvider_Handle hXdmPP,
926   BXDM_PictureProvider_P_Picture_Context *pPicture)
927{
928   BXDM_PictureProvider_P_State_Decode *pDecode = &hXdmPP->stDMState.stDecode;
929   BXDM_PPDBG_P_Info *pDebug = &pDecode->stDebug;
930
931   if ((BXDM_PictureProvider_DisplayMode_eVirtualTSM != pPicture->stPicParms.stTSM.stDynamic.eSelectionMode)
932     && (BXDM_PictureProvider_DisplayMode_eVirtualTSM != pDecode->eLastSelectionModeOverride))
933   {
934      BXVD_DBG_WRN(hXdmPP, (" %x:[%01x.%03x] %s: Selection Mode Override (TSM -> vTSM)",
935                              pDebug->uiVsyncCount,
936                              hXdmPP->stDMConfig.uiInstanceID & 0xF,
937                              pPicture->stPicParms.uiPPBIndex & 0xFFF,
938                              pMsg));
939
940      /* prevent repeated override messages */
941      pDecode->eLastSelectionModeOverride = BXDM_PictureProvider_DisplayMode_eVirtualTSM;
942   }
943}
944
945/*
946** SW7335-781: Output warning when forcing picture selection override
947** Indicate when the override transitions back to TSM mode
948*/
949void BXDM_PPDBG_P_PrintEndSelectionModeOverride(
950   const BXDM_PictureProvider_Handle hXdmPP,
951   BXDM_PictureProvider_P_Picture_Context *pPicture)
952{
953   BXDM_PictureProvider_P_State_Decode *pDecode = &hXdmPP->stDMState.stDecode;
954   BXDM_PPDBG_P_Info *pDebug = &pDecode->stDebug;
955
956   /* if selected picture's selection mode was TSM and last selection mode override was VSYNC
957      then output the selection mode change message */
958   if ((BXDM_PictureProvider_DisplayMode_eTSM == pPicture->stPicParms.stTSM.stDynamic.eSelectionMode)
959      && (BXDM_PictureProvider_DisplayMode_eVirtualTSM == pDecode->eLastSelectionModeOverride))
960   {
961      BXVD_DBG_WRN(hXdmPP, (" %x:[%01x.%03x] Selection Mode Override: Return to TSM",
962                                 pDebug->uiVsyncCount,
963                                 hXdmPP->stDMConfig.uiInstanceID & 0xF,
964                                 pPicture->stPicParms.uiPPBIndex & 0xFFF
965                                 ));
966
967      pDecode->eLastSelectionModeOverride = BXDM_PictureProvider_DisplayMode_eTSM;
968   }
969}
970
971/*
972 * SW7405-4736: conditionally print the MFD structure.
973 */
974void BXDM_PPDBG_P_PrintMFD(
975   BXDM_PictureProvider_Handle hXdmPP,
976   BXDM_PictureProvider_P_LocalState* pLocalState,
977   BAVC_MFD_Picture* pMFDPicture
978   )
979{
980   BAVC_MFD_Picture * pMFD;
981   BXDM_PPDBG_P_Info * pDebug;
982   BXDM_PictureProvider_P_Picture_Context * pstSelectedPicture;
983   int32_t  i=0;
984   char cBarDataType;
985
986   BDBG_ENTER( BXDM_PPDBG_P_PrintMFD );
987
988   BDBG_ASSERT( hXdmPP );   
989   BDBG_ASSERT( pLocalState );   
990   BDBG_ASSERT( pMFDPicture );   
991
992   pMFD = pMFDPicture;
993   pDebug = &(hXdmPP->stDMState.stDecode.stDebug);
994   pstSelectedPicture = &(hXdmPP->stDMState.stChannel.stSelectedPicture);
995
996
997   while ( NULL != pMFD )
998   {
999      BFMT_AspectRatio eAspectRatio=BFMT_AspectRatio_eUnknown;
1000
1001      /* Range check */
1002
1003      if ( pMFD->eAspectRatio <= BFMT_AspectRatio_eSAR )
1004      {
1005         eAspectRatio = pMFD->eAspectRatio;
1006      }
1007
1008      BDBG_MODULE_MSG( BXDM_MFD1, ("%c%x:[%01x.%03x] id:%03x pts:%08x %s->%s %dx%d->%dx%d %s:%dx%d AQP:%02d fr:%s mr:%s %s %s %s %s %s %s %s %s %s",
1009                                 ( pMFD->bMute ) ? 'M' : ' ',
1010                                 pDebug->uiVsyncCount,
1011                                 hXdmPP->stDMConfig.uiInstanceID & 0xF,
1012                                 pstSelectedPicture->stPicParms.uiPPBIndex & 0xFFF,
1013                                 pMFD->ulDecodePictureId,
1014                                 pMFD->ulOrigPTS,
1015                                 s_aPolarityToStrLUT[ pMFD->eSourcePolarity ],
1016                                 s_aPolarityToStrLUT[ pMFD->eInterruptPolarity ],
1017                                 pMFD->ulSourceHorizontalSize,
1018                                 pMFD->ulSourceVerticalSize,
1019                                 pMFD->ulDisplayHorizontalSize,
1020                                 pMFD->ulDisplayVerticalSize,
1021                                 s_aAspectRatioToStrLUT[ eAspectRatio ],
1022                                 pMFD->uiSampleAspectRatioX,
1023                                 pMFD->uiSampleAspectRatioY,
1024                                 pMFD->ulAdjQp,
1025                                 s_aBAVCFrameRateToStrLUT[ pMFD->eFrameRateCode ],
1026                                 s_aBFMTRefreshRateToStrLUT[ pMFD->eInterruptRefreshRate],
1027                                 s_aOrientationToStrLUT[ pMFD->eOrientation ],
1028                                 ( pMFD->bPictureRepeatFlag ) ? "rp" : " ",
1029                                 ( pMFD->bRepeatField ) ? "rf" : " ",
1030                                 ( pMFD->bIgnoreCadenceMatch ) ? "ic" : " ",
1031                                 ( pMFD->bIgnorePicture ) ? "ip" : " ",
1032                                 ( pMFD->bStallStc ) ? "ss" : " ",
1033                                 ( pMFD->bLast ) ? "lst" : " ",
1034                                 ( pMFD->bChannelChange) ? "chg" : " ",
1035                                 ( 0 != i ) ? "en" : " "
1036                                 ));
1037
1038      pMFD = pMFD->pEnhanced;
1039      i++;
1040   }
1041
1042   pMFD = pMFDPicture; /* reset to the orignal value. */
1043
1044   /* SW7405-4736: Ideally the following would be printed out once per second or when any of the values
1045    * change, this would save extraneous prints to the console.  The values could be tracked by keeping
1046    * a local version of the MFD structure, but that would involve copying the data an extra time. 
1047    * The memory pointed to by pMFD is allocated by XDM, i.e. "hXdmPP->astMFDPicture"; essentially XDM
1048    * already has a local copy.  However the "astMFDPicture" elements are set throughout
1049    * "BXDM_PPOUT_P_CalculateVdcData".  The code to check for a change in value would have to be added
1050    * in multiple locations, a task for another day.
1051    */
1052
1053   switch( pMFD->eBarDataType )
1054   {
1055      case BAVC_BarDataType_eTopBottom:   cBarDataType = 'T';     break;
1056      case BAVC_BarDataType_eLeftRight:   cBarDataType = 'L';     break;
1057      default:                            cBarDataType = 'i';     break;
1058   }
1059
1060   BDBG_MODULE_MSG( BXDM_MFD2, (" %x:[%01x.%03x] clp:%dx%d afd:%d(%d) bar:%dx%d(%c) pan:%dx%d loc:%d ci:%s cp:%d tc:%d %s %s %s",
1061                                 pDebug->uiVsyncCount,
1062                                 hXdmPP->stDMConfig.uiInstanceID & 0xF,
1063                                 pstSelectedPicture->stPicParms.uiPPBIndex & 0xFFF,
1064                                 pMFD->ulSourceClipLeft,
1065                                 pMFD->ulSourceClipTop,
1066                                 pMFD->ulAfd,
1067                                 pMFD->bValidAfd,
1068                                 pMFD->ulTopLeftBarValue,
1069                                 pMFD->ulBotRightBarValue,
1070                                 cBarDataType,
1071                                 pMFD->i32_HorizontalPanScan,
1072                                 pMFD->i32_VerticalPanScan,
1073                                 pMFD->eMpegType,
1074                                 ( pMFD->eChrominanceInterpolationMode ) ? "Fr" : "Fld",
1075                                 pMFD->eColorPrimaries,
1076                                 pMFD->eTransferCharacteristics,
1077                                 s_aBAVCPictureCodingToStrLUT[ pMFD->ePictureType ],
1078                                 ( pMFD->bFrameProgressive ) ? "fp" : " ",
1079                                 ( pMFD->bStreamProgressive ) ? "sp" : " "
1080                                 ));
1081
1082
1083   BDBG_LEAVE( BXDM_PPDBG_P_PrintMFD );
1084
1085   return;
1086   
1087}  /* end of BXDM_PPDBG_P_PrintMFD */
1088
1089void BXDM_PPDBG_P_PrintUnifiedPicture(
1090   BXDM_PictureProvider_Handle hXdmPP,
1091   BXDM_PictureProvider_P_LocalState * pLocalState,
1092   BXDM_PictureProvider_P_Picture_Context * pstPicture
1093   )
1094{
1095   BXDM_PictureProvider_P_Picture_Context *  pstSelectedPicture;
1096   const BXDM_Picture * pstUnified;
1097   const BXDM_Picture * pstSelectedUnified;
1098
1099   bool  bPrintAdditional;
1100   BXDM_Picture_Coding eCoding;
1101   BXDM_Picture_PullDown ePulldown; 
1102   char  cSourceFormat, cProgressiveSequence, cSelectionMode;
1103
1104   BDBG_ENTER( BXDM_PPDBG_P_PrintUnifiedPicture );
1105
1106   BSTD_UNUSED(pLocalState);
1107
1108   pstSelectedPicture = &(hXdmPP->stDMState.stChannel.stSelectedPicture);
1109   pstSelectedUnified = pstSelectedPicture->pstUnifiedPicture;
1110
1111   pstUnified = pstPicture->pstUnifiedPicture;
1112
1113   /* SW7405-4736: now that this routine is called from BXDM_PP_S_SelectPicture, there is a
1114    * need to verify that the unified picture is still available.  In the scenario where a
1115    * picture is being redisplayed while subsequent ones are dropped, "pstSelectedUnified"
1116    * will be valid and "pstUnified" can be NULL.  This can occur when playing a DVD clip
1117    * where video data continues after the clip stop time.  The picture just prior to the
1118    * clip stop time will be repeated, the pictures after the clip stop time will be dropped.
1119    */
1120   if ( NULL == pstUnified )
1121   {
1122      goto Done;
1123   }
1124
1125   /* Print once per second or when any of the parameters change. */
1126
1127   bPrintAdditional = ( hXdmPP->stDMState.stDecode.uiVsyncCountQM >= BXDM_PPTMR_lutVsyncsPersSecond[ hXdmPP->stDMConfig.eMonitorRefreshRate ] );
1128
1129   if ( pstSelectedUnified && true == pstSelectedPicture->bValidated )
1130   {
1131      bPrintAdditional |= ( pstUnified->stBufferInfo.stSource.uiWidth != pstSelectedUnified->stBufferInfo.stSource.uiWidth ) ;
1132      bPrintAdditional |= ( pstUnified->stBufferInfo.stSource.uiHeight != pstSelectedUnified->stBufferInfo.stSource.uiHeight ) ;
1133      bPrintAdditional |= ( pstUnified->stProtocol.eProtocol != pstSelectedUnified->stProtocol.eProtocol ) ;
1134      bPrintAdditional |= ( pstUnified->stFrameRate.stRate.uiNumerator != pstSelectedUnified->stFrameRate.stRate.uiNumerator ) ;
1135      bPrintAdditional |= ( pstUnified->stFrameRate.stRate.uiDenominator != pstSelectedUnified->stFrameRate.stRate.uiDenominator ) ;
1136      bPrintAdditional |= ( pstPicture->stPicParms.stTSM.stStatic.eFrameRateXVD != pstSelectedPicture->stPicParms.stTSM.stStatic.eFrameRateXVD ) ;
1137      bPrintAdditional |= ( pstUnified->stAspectRatio.eAspectRatio != pstSelectedUnified->stAspectRatio.eAspectRatio ) ;
1138      bPrintAdditional |= ( pstUnified->stAspectRatio.uiSampleAspectRatioX != pstSelectedUnified->stAspectRatio.uiSampleAspectRatioX ) ;
1139      bPrintAdditional |= ( pstUnified->stAspectRatio.uiSampleAspectRatioY != pstSelectedUnified->stAspectRatio.uiSampleAspectRatioY ) ;
1140      bPrintAdditional |= ( hXdmPP->stDMStatus.stCurrentPTS.uiSwPcrOffset != hXdmPP->stDMConfig.uiSoftwarePCROffset );
1141   }
1142   else
1143   {
1144      /* Results in printing the parameters for the first picture after start decode. */
1145      bPrintAdditional = true;
1146   }
1147
1148   if ( true == bPrintAdditional )
1149   {
1150      bool bProtocolValid;
1151      BAVC_FrameRateCode eFrameRate = BAVC_FrameRateCode_eUnknown;
1152      BFMT_AspectRatio eAspectRatio = BFMT_AspectRatio_eUnknown;
1153
1154      /* Range check the variables used to index lookup tables. */
1155     
1156      bProtocolValid = ( pstUnified->stProtocol.eProtocol < BXDM_PPDBG_S_MAX_VIDEO_PROTOCOL ) ? true : false ;
1157
1158      if ( pstPicture->stPicParms.stTSM.stStatic.eFrameRateXVD < BAVC_FrameRateCode_eMax )
1159      {
1160         eFrameRate = pstPicture->stPicParms.stTSM.stStatic.eFrameRateXVD;
1161      }
1162
1163      if (  pstUnified->stAspectRatio.eAspectRatio <= BFMT_AspectRatio_eSAR )
1164      {
1165         eAspectRatio =  pstUnified->stAspectRatio.eAspectRatio;
1166      }
1167
1168      hXdmPP->stDMState.stDecode.uiVsyncCountQM = 0;
1169
1170      BDBG_MODULE_MSG( BXDM_PPQM, (" %x:[%01x.%03x] %4dx%4d %s,cfr:%d/%d afr:%sHz(%s),ar:%s(%d,%d)(%d) swOff:%08x",
1171                             hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1172                             hXdmPP->stDMConfig.uiInstanceID & 0xF,
1173                             pstPicture->stPicParms.uiPPBIndex & 0xFFF,
1174                             pstUnified->stBufferInfo.stSource.uiWidth,
1175                             pstUnified->stBufferInfo.stSource.uiHeight,
1176                             ( bProtocolValid ) ? s_aVideoCompressionStdToStrLUT[ pstUnified->stProtocol.eProtocol ] : "ukn" ,
1177                             pstUnified->stFrameRate.stRate.uiNumerator,
1178                             pstUnified->stFrameRate.stRate.uiDenominator,
1179                             s_aBAVCFrameRateToStrLUT[ eFrameRate ],
1180                             s_aFrameRateTypeToStrLUT[ pstPicture->stPicParms.stTSM.stStatic.eFrameRateType ],
1181                             s_aAspectRatioToStrLUT[ eAspectRatio ],
1182                             pstUnified->stAspectRatio.uiSampleAspectRatioX,
1183                             pstUnified->stAspectRatio.uiSampleAspectRatioY,
1184                             pstUnified->stAspectRatio.bValid,
1185                             hXdmPP->stDMConfig.uiSoftwarePCROffset
1186                             ));
1187   }
1188
1189
1190   /* The following values from the Unified Picture are set outside of XDM.  Range check the values to avoid
1191    * stepping off the end of lookup tables, i.e. "s_aXXXToStrLUT[]"
1192    */
1193   eCoding = ( pstUnified->stPictureType.eCoding < BXDM_Picture_Coding_eMax ) ? pstUnified->stPictureType.eCoding : BXDM_Picture_Coding_eUnknown ;
1194
1195   ePulldown = ( pstUnified->stBufferInfo.ePulldown < BXDM_Picture_PullDown_eMax ) ? pstUnified->stBufferInfo.ePulldown : 0 ;
1196
1197
1198   switch ( pstUnified->stBufferInfo.eSourceFormat )
1199   {
1200      case BXDM_Picture_SourceFormat_eInterlaced:     cSourceFormat = 'I';    break;
1201      case BXDM_Picture_SourceFormat_eProgressive:    cSourceFormat = 'P';    break;
1202      case BXDM_Picture_SourceFormat_eUnknown:
1203      default:                                        cSourceFormat = 'U';    break;
1204   }
1205
1206
1207   switch ( pstUnified->stPictureType.eSequence )
1208   {
1209      case BXDM_Picture_Sequence_eInterlaced:   cProgressiveSequence = 'I';    break;
1210      case BXDM_Picture_Sequence_eProgressive:  cProgressiveSequence = 'P';    break;
1211      case BXDM_Picture_Sequence_eUnknown:
1212      default:                                  cProgressiveSequence = 'U';    break;
1213   }
1214
1215   switch ( pstPicture->stPicParms.stTSM.stDynamic.ePictureHandlingMode )
1216   {
1217      case BXDM_PictureProvider_PictureHandlingMode_eHonorPTS:    cSelectionMode = 'h';   break;
1218      case BXDM_PictureProvider_PictureHandlingMode_eIgnorePTS:   cSelectionMode = 'i';   break;
1219      case BXDM_PictureProvider_PictureHandlingMode_eDrop:        cSelectionMode = 'd';   break;
1220      case BXDM_PictureProvider_PictureHandlingMode_eWait:
1221         cSelectionMode = (BXDM_PictureProvider_DisplayMode_eTSM == pstPicture->stPicParms.stTSM.stDynamic.eSelectionMode) ? 'w' : 'v' ;
1222         break;
1223
1224      case BXDM_PictureProvider_PictureHandlingMode_eDefault:
1225      default:
1226         if ( BXDM_PictureProvider_DisplayMode_eTSM == pstPicture->stPicParms.stTSM.stDynamic.eSelectionMode )
1227         {
1228            cSelectionMode = ( pstPicture->stPicParms.stTSM.stDynamic.bEvaluatedWithSwStc ) ? 's' : 't';
1229         }
1230         else
1231         {
1232            cSelectionMode = 'v' ;
1233         }
1234         break;
1235   }
1236
1237   /* A picture-less picture, it will simply be dropped. */
1238   if ( false == pstPicture->pstUnifiedPicture->stBufferInfo.bValid )
1239   {
1240      cSelectionMode = 'x';
1241   }
1242
1243   if ( BXDM_PictureProvider_DisplayMode_eTSM == pstPicture->stPicParms.stTSM.stDynamic.eSelectionMode )
1244   {
1245      uint32_t uiPcrOffset;
1246      uint32_t uiDisplayOffset;
1247      bool     bPcrOffsetValid;
1248      bool     bPcrOffsetDiscontinuity;
1249
1250      BXDM_PPQM_P_GetCookedPcrOffset( hXdmPP, pstPicture, &uiPcrOffset );
1251
1252      BXDM_PPQM_P_GetPtsOffset( hXdmPP, pstPicture, &uiDisplayOffset );
1253
1254      if (( false == hXdmPP->stDMConfig.bUseHardwarePCROffset )
1255            || ( true == hXdmPP->stDMConfig.bPlayback))
1256      {
1257         bPcrOffsetValid = true;
1258         bPcrOffsetDiscontinuity = false;
1259      }
1260      else
1261      {
1262         bPcrOffsetValid = pstPicture->stPicParms.stTSM.stStatic.stPCROffsetXDM.bValidOverloaded;
1263         bPcrOffsetDiscontinuity = pstPicture->stPicParms.stTSM.stStatic.stPCROffsetXDM.bDiscontinuityOverloaded;
1264      }
1265
1266      BDBG_MODULE_MSG( BXDM_PPQM, (" %x:[%01x.%03x]%c%c:%s,%s,fs:%c%c %s,pts:%08x(%d),off:%04x,j:%3d,pcr:%08x(%d,%d),stc:%08x%c,d:%08x",
1267                             hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1268                             hXdmPP->stDMConfig.uiInstanceID & 0xF,
1269                             pstPicture->stPicParms.uiPPBIndex & 0xFFF,
1270                             pstUnified->stError.bThisPicture ? 'E' : ' ',
1271                             cSelectionMode,
1272                             s_aTSMResultToStrLUT[ pstPicture->stPicParms.stTSM.stDynamic.eTsmResult],
1273                             s_aPullDownEnumToStrLUT[ ePulldown ],
1274                             cSourceFormat,
1275                             cProgressiveSequence,
1276                             s_aBXDMPictureCodingToStrLUT[ eCoding ],
1277                             pstUnified->stPTS.uiValue,
1278                             pstUnified->stPTS.bValid,
1279                             uiDisplayOffset,
1280                             pstPicture->stPicParms.stTSM.stStatic.iPTSJitterCorrection,
1281                             uiPcrOffset,
1282                             bPcrOffsetValid,
1283                             bPcrOffsetDiscontinuity,
1284                             pLocalState->uiStcSnapshot,
1285                             (hXdmPP->stDMState.stDecode.iStcJitterCorrectionOffset != 0)?'*':' ',
1286                             pstPicture->stPicParms.stTSM.stDynamic.iStcPtsDifferenceActual
1287                             ));
1288   }
1289   else
1290   {
1291      uint32_t    uiVirtualStc;
1292      uint32_t    uiDisplayOffset;
1293     
1294      BXDM_PPFP_P_DataType stVirtualPts;
1295
1296      BXDM_PPQM_P_GetPtsOffset( hXdmPP, pstPicture, &uiDisplayOffset );
1297
1298      BXDM_PPVTSM_P_VirtualStcGet( hXdmPP, &uiVirtualStc );
1299
1300      BXDM_PPQM_P_GetPtsWithFrac( 
1301            pstPicture, 
1302            BXDM_PictureProvider_P_PTSIndex_eVirtual, 
1303            pstPicture->stPicParms.stDisplay.stDynamic.uiSelectedElement, 
1304            &stVirtualPts
1305            );
1306
1307      BDBG_MODULE_MSG( BXDM_PPQM, (" %x:[%01x.%03x]%c%c:%s,%s,fs:%c%c %s,pts:%08x(%d),off:%04x,j:   ,vpts:%08x   ,vstc:%08x ,d:%08x",
1308                             hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1309                             hXdmPP->stDMConfig.uiInstanceID & 0xF,
1310                             pstPicture->stPicParms.uiPPBIndex & 0xFFF,
1311                             pstUnified->stError.bThisPicture ? 'E' : ' ',
1312                             cSelectionMode,
1313                             s_aTSMResultToStrLUT[ pstPicture->stPicParms.stTSM.stDynamic.eTsmResult],
1314                             s_aPullDownEnumToStrLUT[ ePulldown ],
1315                             cSourceFormat,
1316                             cProgressiveSequence,
1317                             s_aBXDMPictureCodingToStrLUT[ eCoding ],
1318                             pstUnified->stPTS.uiValue,
1319                             pstUnified->stPTS.bValid,
1320                             uiDisplayOffset,
1321                             stVirtualPts.uiWhole,
1322                             uiVirtualStc,
1323                             pstPicture->stPicParms.stTSM.stDynamic.iStcPtsDifferenceActual
1324                             ));
1325
1326   }
1327
1328Done:
1329
1330   BDBG_LEAVE( BXDM_PPDBG_P_PrintUnifiedPicture );
1331
1332   return;
1333
1334}  /* end of BXDM_PPDBG_P_PrintUnifiedPicture */
1335
1336void BXDM_PPDBG_P_PrintDMConfig(
1337   BXDM_PictureProvider_Handle hXdmPP,
1338   BXDM_PictureProvider_P_LocalState * pLocalState,
1339   bool bLastCall
1340   )
1341{
1342   BDBG_ENTER( BXDM_PPDBG_P_PrintDMConfig );
1343
1344   BSTD_UNUSED(pLocalState);
1345
1346   /* Print when any of the parameters change. */
1347
1348   if (  hXdmPP->stDMConfig.uiDirtyBits_1 || hXdmPP->stDMConfig.uiDirtyBits_2 )
1349   {
1350      uint32_t uiDirtyBitsGroup_1_1, uiDirtyBitsGroup_2_1, uiDirtyBitsGroup_3_1, uiDirtyBitsGroup_4_1;
1351      uint32_t uiDirtyBitsGroup_1_2, uiDirtyBitsGroup_2_2;
1352     
1353      uiDirtyBitsGroup_1_1 = uiDirtyBitsGroup_2_1 = uiDirtyBitsGroup_3_1 = uiDirtyBitsGroup_4_1 = hXdmPP->stDMConfig.uiDirtyBits_1;
1354
1355      uiDirtyBitsGroup_1_2 = uiDirtyBitsGroup_2_2 = hXdmPP->stDMConfig.uiDirtyBits_2;
1356
1357      uiDirtyBitsGroup_1_1 &= BXDM_PictureProvider_P_DIRTY_1_STC_VALID
1358                              | BXDM_PictureProvider_P_DIRTY_1_PTS_OFFSET
1359                              | BXDM_PictureProvider_P_DIRTY_1_SOFTWARE_PCR_OFFSET
1360                              | BXDM_PictureProvider_P_DIRTY_1_USE_HW_PCR_OFFSET
1361                              | BXDM_PictureProvider_P_DIRTY_1_PLAYBACK_RATE
1362                              | BXDM_PictureProvider_P_DIRTY_1_DISPLAY_FIELD_MODE;
1363
1364      uiDirtyBitsGroup_1_2 &= BXDM_PictureProvider_P_DIRTY_2_MUTE;
1365
1366      if ( uiDirtyBitsGroup_1_1 || uiDirtyBitsGroup_1_2 )
1367      {
1368         BDBG_MODULE_MSG( BXDM_CFG, ("%c%x:[%01x]%c stc:%c(%d) PTSoff:%08x(%d) STCoff:%08x(%d) usePCR:%c(%d) pbr:%d/%d(%d) dfm:%s(%d)",
1369                  ( bLastCall ) ? '*' : ' ',
1370                  hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1371                  hXdmPP->stDMConfig.uiInstanceID & 0xF,
1372                  ( hXdmPP->stDMConfig.bMute == true ) ? 'M' : ' ',
1373/*                  ( hXdmPP->stDMConfig.uiDirtyBits_2 & BXDM_PictureProvider_P_DIRTY_2_MUTE ) ? 1 : 0,*/
1374                  ( hXdmPP->stDMConfig.bSTCValid == true ) ? 'v' : 'i',
1375                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_STC_VALID ) ? 1 : 0,
1376                  hXdmPP->stDMConfig.uiPTSOffset,
1377                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_PTS_OFFSET ) ? 1 : 0,
1378                  hXdmPP->stDMConfig.uiSoftwarePCROffset,
1379                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_SOFTWARE_PCR_OFFSET ) ? 1 : 0,
1380                  ( hXdmPP->stDMConfig.bUseHardwarePCROffset == true) ? 't' : 'f',
1381                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_USE_HW_PCR_OFFSET ) ? 1 : 0,
1382                  hXdmPP->stDMConfig.stPlaybackRate.uiNumerator,
1383                  hXdmPP->stDMConfig.stPlaybackRate.uiDenominator,
1384                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_PLAYBACK_RATE ) ? 1 : 0,
1385                  s_aDisplayFieldModeToStrLUT[ hXdmPP->stDMConfig.eDisplayFieldMode ],
1386                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_DISPLAY_FIELD_MODE ) ? 1 : 0
1387                  ));
1388                 
1389      }     /* end of  if ( uiDirtyBitsGroup_1_1 || uiDirtyBitsGroup_1_2 ) */
1390
1391
1392      uiDirtyBitsGroup_2_1 &= BXDM_PictureProvider_P_DIRTY_1_PLAYBACK
1393                              | BXDM_PictureProvider_P_DIRTY_1_PROTOCOL
1394                              | BXDM_PictureProvider_P_DIRTY_1_MONITOR_REFRESH_RATE
1395                              | BXDM_PictureProvider_P_DIRTY_1_DEFAULT_FRAME_RATE
1396                              | BXDM_PictureProvider_P_DIRTY_1_FRAMERATE_OVERRIDE
1397                              | BXDM_PictureProvider_P_DIRTY_1_TRICK_MODE
1398                              | BXDM_PictureProvider_P_DIRTY_1_FREEZE ;
1399
1400      uiDirtyBitsGroup_2_2 &= BXDM_PictureProvider_P_DIRTY_2_DISPLAY_MODE;
1401
1402      if ( uiDirtyBitsGroup_2_1 || uiDirtyBitsGroup_2_2 )
1403      {
1404
1405         BDBG_MODULE_MSG( BXDM_CFG, ("%c%x:[%01x] %s(%d) %s(%d) %s(%d) mr:%s(%d) dfr:%s(%d) fro:%d/%d(%d,%d)(%d) tm:%s(%d) frz:%c(%d)",
1406                  ( bLastCall ) ? '*' : ' ',
1407                  hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1408                  hXdmPP->stDMConfig.uiInstanceID & 0xF,
1409                  ( hXdmPP->stDMConfig.eDisplayMode == BXDM_PictureProvider_DisplayMode_eTSM ) ? "TSM" : "vsync",
1410                  ( hXdmPP->stDMConfig.uiDirtyBits_2 & BXDM_PictureProvider_P_DIRTY_2_DISPLAY_MODE ) ? 1 : 0,
1411                  ( hXdmPP->stDMConfig.bPlayback == true ) ? "pb" : "lv",
1412                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_PLAYBACK ) ? 1 : 0,
1413                  s_aVideoCompressionStdToStrLUT[ hXdmPP->stDMConfig.eProtocol ],
1414                  ( hXdmPP->stDMConfig.uiDirtyBits_2 & BXDM_PictureProvider_P_DIRTY_1_PROTOCOL ) ? 1 : 0,
1415                  s_aMonitorRefreshRateToStrLUT[ hXdmPP->stDMConfig.eMonitorRefreshRate ],
1416                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_MONITOR_REFRESH_RATE ) ? 1 : 0,
1417                  s_aBAVCFrameRateToStrLUT[ hXdmPP->stDMConfig.eDefaultFrameRate ],
1418                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_DEFAULT_FRAME_RATE ) ? 1 : 0,                 
1419                  hXdmPP->stDMConfig.stFrameRateOverride.stRate.uiNumerator,
1420                  hXdmPP->stDMConfig.stFrameRateOverride.stRate.uiDenominator,
1421                  hXdmPP->stDMConfig.stFrameRateOverride.bValid,
1422                  hXdmPP->stDMConfig.stFrameRateOverride.bTreatAsSingleElement,
1423                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_FRAMERATE_OVERRIDE ) ? 1 : 0, 
1424                  s_aTrickModeToStrLUT[ hXdmPP->stDMConfig.eTrickMode ],
1425                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_TRICK_MODE ) ? 1 : 0,
1426                  ( hXdmPP->stDMConfig.bFreeze == true ) ? 't' : 'f',
1427                  ( hXdmPP->stDMConfig.uiDirtyBits_2 & BXDM_PictureProvider_P_DIRTY_1_FREEZE ) ? 1 : 0
1428                  ));
1429
1430      } /* end of if ( uiDirtyBitsGroup_2_1 || uiDirtyBitsGroup_2_2 ) */
1431
1432
1433      uiDirtyBitsGroup_3_1 &= BXDM_PictureProvider_P_DIRTY_1_SRC_FORMAT_OVERRIDE       
1434                              | BXDM_PictureProvider_P_DIRTY_1_SCAN_MODE_OVERRIDE
1435                              | BXDM_PictureProvider_P_DIRTY_1_1080P_SCAN_MODE
1436                              | BXDM_PictureProvider_P_DIRTY_1_PICTURE_DROP_MODE
1437                              | BXDM_PictureProvider_P_DIRTY_1_480P_PULLDOWN_MODE
1438                              | BXDM_PictureProvider_P_DIRTY_1_1080P_PULLDOWN_MODE
1439                              | BXDM_PictureProvider_P_DIRTY_1_240I_SCAN_MODE
1440                              | BXDM_PictureProvider_P_DIRTY_1_HORIZON_OVERSCAN_MODE;
1441
1442
1443      if ( uiDirtyBitsGroup_3_1 )
1444      {
1445         char cSFO, cSMO;
1446
1447         switch( hXdmPP->stDMConfig.eSourceFormatOverride )
1448         {
1449            case BXDM_PictureProvider_SourceFormatOverride_eInterlaced:    cSFO = 'P';    break;
1450            case BXDM_PictureProvider_SourceFormatOverride_eProgressive:   cSFO = 'I';    break;
1451            case BXDM_PictureProvider_SourceFormatOverride_eDefault:
1452            default:                                                       cSFO = 'D';    break;
1453         }
1454
1455         switch( hXdmPP->stDMConfig.eScanModeOverride )
1456         {
1457            case BXDM_PictureProvider_ScanModeOverride_eInterlaced:     cSMO = 'P';    break;
1458            case BXDM_PictureProvider_ScanModeOverride_eProgressive:    cSMO = 'I';    break;
1459            case BXDM_PictureProvider_ScanModeOverride_eDefault:
1460            default:                                                    cSMO = 'D';    break;
1461         }
1462
1463         BDBG_MODULE_MSG( BXDM_CFG, ("%c%x:[%01x] sfo:%c(%d) smo:%c(%d) 1080sm:%c(%d) pdm:%s(%d) 480pdm:%s(%d) 1080pdm:%s(%d) 240sm:%s(%d) hom:%s(%d)",
1464                  ( bLastCall ) ? '*' : ' ',
1465                  hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1466                  hXdmPP->stDMConfig.uiInstanceID & 0xF,
1467                  cSFO,
1468                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_SRC_FORMAT_OVERRIDE ) ? 1 : 0,
1469                  cSMO,
1470                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_SCAN_MODE_OVERRIDE ) ? 1 : 0,
1471                  ( hXdmPP->stDMConfig.e1080pScanMode == BXDM_PictureProvider_1080pScanMode_eDefault ) ? 'D' : 'A' ,
1472                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_1080P_SCAN_MODE ) ? 1 : 0,
1473                  ( hXdmPP->stDMConfig.ePictureDropMode == BXDM_PictureProvider_PictureDropMode_eField ) ? "fld" : "Frm" ,
1474                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_PICTURE_DROP_MODE ) ? 1 : 0,
1475                  s_aPulldownModeToStrLUT[ hXdmPP->stDMConfig.e480pPulldownMode ],
1476                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_480P_PULLDOWN_MODE ) ? 1 : 0,
1477                  s_aPulldownModeToStrLUT[ hXdmPP->stDMConfig.e1080pPulldownMode ],
1478                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_1080P_PULLDOWN_MODE ) ? 1 : 0,
1479                  ( hXdmPP->stDMConfig.e240iScanMode == BXDM_PictureProvider_240iScanMode_eForceProgressive ) ? "fp" : "en" ,
1480                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_240I_SCAN_MODE ) ? 1 : 0,
1481                  ( hXdmPP->stDMConfig.eHorizontalOverscanMode == BXDM_PictureProvider_HorizontalOverscanMode_eAuto ) ? "auto" : "dis" ,
1482                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_HORIZON_OVERSCAN_MODE ) ? 1 : 0
1483                  ));
1484
1485      }     /* end of if ( uiDirtyBitsGroup_3_1 ) */
1486
1487
1488      uiDirtyBitsGroup_4_1 &= BXDM_PictureProvider_P_DIRTY_1_FRAME_ADVANCE_MODE
1489                              | BXDM_PictureProvider_P_DIRTY_1_REVERSE_FIELDS
1490                              | BXDM_PictureProvider_P_DIRTY_1_AUTO_VALIDATE_ON_PAUSE
1491                              | BXDM_PictureProvider_P_DIRTY_1_3D_SETTINGS       
1492                              | BXDM_PictureProvider_P_DIRTY_1_JITTER_TOLERANCE
1493                              | BXDM_PictureProvider_P_DIRTY_1_FRAME_RATE_DETECTION_MODE
1494                              | BXDM_PictureProvider_P_DIRTY_1_ERROR_HANDLING_MODE
1495                              | BXDM_PictureProvider_P_DIRTY_1_ATSM_MODE
1496                              | BXDM_PictureProvider_P_DIRTY_1_VTSM_ON_PCR_DISCON ;
1497
1498      if ( uiDirtyBitsGroup_4_1 )
1499      {
1500         BDBG_MODULE_MSG( BXDM_CFG, ("%c%x:[%01x] fra:%s(%d) rvf:%c(%d) avop:%c(%d) 3Do:%s(%d)(%d) jti:%s(%d) frd:%s(%d) ehm:%s(%d) astm:%c(%d) avsync:%c(%d) ",
1501                  ( bLastCall ) ? '*' : ' ',
1502                  hXdmPP->stDMState.stDecode.stDebug.uiVsyncCount,
1503                  hXdmPP->stDMConfig.uiInstanceID & 0xF,
1504                  s_aFrameAdvanceModeToStrLUT[hXdmPP->stDMConfig.eFrameAdvanceMode],
1505                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_FRAME_ADVANCE_MODE ) ? 1 : 0,
1506                  ( hXdmPP->stDMConfig.bReverseFields == true ) ? 't' : 'f' ,
1507                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_REVERSE_FIELDS ) ? 1 : 0,
1508                  ( hXdmPP->stDMConfig.bAutoValidateStcOnPause == true ) ? 't' : 'f' ,
1509                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_AUTO_VALIDATE_ON_PAUSE ) ? 1 : 0,
1510                  s_aPPOrientationToStrLUT[ hXdmPP->stDMConfig.st3DSettings.eOrientation ],
1511                  hXdmPP->stDMConfig.st3DSettings.bOverrideOrientation,
1512                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_3D_SETTINGS ) ? 1 : 0,
1513                  ( hXdmPP->stDMConfig.bJitterToleranceImprovement == true ) ? "on" : "off" ,
1514                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_JITTER_TOLERANCE ) ? 1 : 0,
1515                  s_aFrameRateDetectionModeToStrLUT[ hXdmPP->stDMConfig.eFrameRateDetectionMode ],
1516                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_FRAME_RATE_DETECTION_MODE ) ? 1 : 0,
1517                  s_aErrorHandlingModeToStrLUT[ hXdmPP->stDMConfig.eErrorHandlingMode ],
1518                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_ERROR_HANDLING_MODE ) ? 1 : 0,
1519                  ( hXdmPP->stDMConfig.bAstmMode == true ) ? 't' : 'f' ,
1520                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_ATSM_MODE ) ? 1 : 0,
1521                  ( hXdmPP->stDMConfig.bVirtualTSMOnPCRDiscontinuity == true ) ? 't' : 'f' ,
1522                  ( hXdmPP->stDMConfig.uiDirtyBits_1 & BXDM_PictureProvider_P_DIRTY_1_VTSM_ON_PCR_DISCON ) ? 1 : 0
1523                  ));
1524
1525      }     /* end of if ( uiDirtyBitsGroup_4_1 ) */
1526
1527      /* The following are not currently printed.
1528       *
1529       * uint32_t uiRemovalDelay;
1530       * BXDM_Picture_Rate stPreRollRate;
1531       * uint32_t uiMaxHeightSupportedByDeinterlacer;
1532       * BXDM_PictureProvider_TSMThresholdSettings stTSMThresholdSettings;
1533       * uint32_t uiSTCIndex;
1534       * BXDM_PictureProvider_ClipTimeSettings stClipTimeSettings;
1535       */
1536
1537      hXdmPP->stDMConfig.uiDirtyBits_1 = BXDM_PictureProvider_P_DIRTY_NONE;
1538      hXdmPP->stDMConfig.uiDirtyBits_2 = BXDM_PictureProvider_P_DIRTY_NONE;
1539     
1540   }       /* end of  if ( hXdmPP->stDMConfig.uiDirtyBits_1 || hXdmPP->stDMConfig.uiDirtyBits_2 ) */
1541
1542   BDBG_LEAVE( BXDM_PPDBG_P_PrintDMConfig );
1543
1544   return;
1545
1546}  /* end of BXDM_PPDBG_P_PrintDMConfig */
1547
1548
1549#endif
Note: See TracBrowser for help on using the repository browser.