source: svn/trunk/newcon3bcm2_21bu/magnum/commonutils/vdb/3548/A0/bvdb_priv.c

Last change on this file was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 57.4 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-2008, 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: bvdb_priv.c $
11 * $brcm_Revision: Hydra_Software_Devel/6 $
12 * $brcm_Date: 9/3/08 5:48p $
13 *
14 * Module Description:
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/commonutils/vdb/3548/A0/bvdb_priv.c $
19 *
20 * Hydra_Software_Devel/6   9/3/08 5:48p jessem
21 * PR 45196, PR 43098, PR 43946:
22 * 1. Added XGA support.
23 * 2. Reorganized 1400x1050@75 and 1600x1200@60 groups to 1024_768_PC,
24 * 1280_768_PC, 1400_1050_PC, and 1600_1200_PC format groups to meet new
25 * tolerance/bias requirements.
26 * 3. Added 1024x76 OSD.
27 * 4. Updated ANR blockout values in RTS tables.
28 * 5. Updated RTS for SD source displayed as PIG for config 1.
29 *
30 * Hydra_Software_Devel/5   8/19/08 11:13a jessem
31 * PR 43098: Added new PC formats to comply with new tolerance and bias
32 * requirements fro config 4.
33 *
34 * Hydra_Software_Devel/4   8/4/08 11:46a jessem
35 * PR 45385: Increased RTS table size to 100. Added RTS 0 (baseline RTS
36 * settings).
37 *
38 * Hydra_Software_Devel/3   8/1/08 9:56a jessem
39 * PR 43946, PR 44528, PR 44303:
40 * 1. Modified existing RTS tables and renamed using numbers instead of
41 * letters.
42 * 2. Added 3 RTS tables - 16, 17, 18
43 * 3. Modified configs 1 and 4 to reflect new RTS tables and naming
44 * convention.
45 *
46 * Hydra_Software_Devel/2   7/18/08 4:56p jessem
47 * PR 44254:1. Added VGA inputs to  NTSC,  PAL,  480p, 576p, 720p @ 50,
48 * and 720p @ 60.
49 * 2. Added PIP_0 video display mode.
50 *
51 * Hydra_Software_Devel/1   6/18/08 12:30p jessem
52 * PR 43759: Initial version.
53 *
54 ***************************************************************************/ 
55#include <stdio.h>
56#include <stdlib.h>
57#include <string.h>
58
59#include "bstd.h"
60#include "berr.h"
61#include "bkni.h"
62#include "bdbg.h"
63#include "bvdb.h"
64#include "bvdb_priv.h"
65#include "bvdb_viddispmode_priv.h"
66
67BDBG_MODULE(BVDB);
68
69
70bool BVDB_P_IsSd
71        (BVDB_SourceFormatSet       eSrcFmtSet )
72{
73        bool bIsSd = false;
74
75        switch (eSrcFmtSet)
76        {
77                case BVDB_SrcFmtSet_eNtsc:
78                case BVDB_SrcFmtSet_ePal:
79                case BVDB_SrcFmtSet_ePal_60:
80                case BVDB_SrcFmtSet_e544_576i_50:
81                case BVDB_SrcFmtSet_e544_480i_60:                       
82                        bIsSd = true;
83                        break; 
84                default:               
85                        bIsSd = false;
86                        break;
87        }
88
89        return bIsSd;
90}
91
92bool BVDB_P_IsSourceProgressive
93        ( BVDB_SourceFormatSet      eSrcFmtSet )
94{
95        bool bProgressive = false;
96        switch (eSrcFmtSet)
97        {
98                case BVDB_SrcFmtSet_e480p:
99                case BVDB_SrcFmtSet_e576p:
100                case BVDB_SrcFmtSet_e720p_50:
101                case BVDB_SrcFmtSet_e720p_60:
102                case BVDB_SrcFmtSet_e1080p_24:
103                case BVDB_SrcFmtSet_e1080p_25:
104                case BVDB_SrcFmtSet_e1080p_30:
105                case BVDB_SrcFmtSet_e1080p_50:
106                case BVDB_SrcFmtSet_e1080p_60:
107                case BVDB_SrcFmtSet_e720p_24:
108                case BVDB_SrcFmtSet_e720p_25:
109                case BVDB_SrcFmtSet_e720p_30:                   
110                case BVDB_SrcFmtSet_e1440_1080p_25:
111                case BVDB_SrcFmtSet_e1440_1080p_30:
112                case BVDB_SrcFmtSet_e1440_1080p_24:                     
113                case BVDB_SrcFmtSet_e1024_768_PC:
114                case BVDB_SrcFmtSet_e1280_768_PC:
115                case BVDB_SrcFmtSet_e1400_1050_PC:                     
116                case BVDB_SrcFmtSet_e1600_1200_PC:
117                case BVDB_SrcFmtSet_eJpeg:                     
118                        bProgressive = true;
119                        break;
120                default:
121                        bProgressive = false;
122        }
123
124        return bProgressive;
125}
126
127uint32_t BVDB_P_GetConfigId
128        ( char                   *pcStr )
129{
130        char *pcToken, *pcTemp;
131        char acId[20];
132        uint32_t ulConfigId;
133
134        strcpy(acId, pcStr);
135        pcToken = strtok_r(acId, ".", &pcTemp);
136       
137        ulConfigId = strtoul(pcToken, NULL, 0);
138
139        return ulConfigId;
140}
141
142BVDB_DispModeType BVDB_P_GetVideoDisplayModeType
143        ( BVDB_VideoDisplayMode  *pstVidDispMode )
144{
145        uint32_t ulModes;
146        BVDB_DispModeType eType;
147
148        ulModes = *(uint32_t*)pstVidDispMode;
149       
150        if (BVDB_DISP_MODE_IS_FULL(&ulModes))
151        {
152                eType = BVDB_ModeType_eFull;
153        }
154        else if (BVDB_DISP_MODE_IS_PIG(&ulModes))
155        {
156                eType = BVDB_ModeType_ePig;
157        }
158        else if (BVDB_DISP_MODE_IS_VCR(&ulModes))
159        {
160                eType = BVDB_ModeType_eVcr;
161        }
162        else if (BVDB_DISP_MODE_IS_PIP(&ulModes))
163        {
164                eType = BVDB_ModeType_ePip;
165        }
166        else
167        {
168                eType = BVDB_ModeType_eInvalid;
169        }
170
171        return eType;
172}
173
174BERR_Code BVDB_P_GetSourceFormatSetId
175        ( BVDB_SourceFormatSet  eSrcFmtSet,
176          char                 *pcId )
177{
178        BERR_Code err = BERR_SUCCESS;
179       
180        switch (eSrcFmtSet)
181        {
182                case BVDB_SrcFmtSet_eNtsc:
183                        strcpy((void *)pcId, "1");
184                        break;
185                case BVDB_SrcFmtSet_ePal:
186                        strcpy((void *)pcId, "2");
187                        break;
188                case BVDB_SrcFmtSet_e480p:
189                        strcpy((void *)pcId, "3");
190                        break;
191                case BVDB_SrcFmtSet_e576p:
192                        strcpy((void *)pcId, "4");
193                        break;
194                case BVDB_SrcFmtSet_e720p_50:
195                        strcpy((void *)pcId, "5");
196                        break;
197                case BVDB_SrcFmtSet_e720p_60:
198                        strcpy((void *)pcId, "6");
199                        break;
200                case BVDB_SrcFmtSet_e1080i_50:
201                        strcpy((void *)pcId, "7");
202                        break;
203                case BVDB_SrcFmtSet_e1080i_60:                         
204                        strcpy((void *)pcId, "8");
205                        break;
206                case BVDB_SrcFmtSet_e1080p_24:
207                        strcpy((void *)pcId, "9");
208                        break;
209                case BVDB_SrcFmtSet_e1080p_25:
210                        strcpy((void *)pcId, "10");
211                        break;
212                case BVDB_SrcFmtSet_e1080p_30:
213                        strcpy((void *)pcId, "11");
214                        break;
215                case BVDB_SrcFmtSet_e1080p_50:
216                        strcpy((void *)pcId, "12");
217                        break;
218                case BVDB_SrcFmtSet_e1080p_60:
219                        strcpy((void *)pcId, "13");
220                        break;
221                case BVDB_SrcFmtSet_ePal_60:
222                        strcpy((void *)pcId, "14");
223                        break;
224                case BVDB_SrcFmtSet_e720p_24:
225                        strcpy((void *)pcId, "15");
226                        break;
227                case BVDB_SrcFmtSet_e720p_25:
228                        strcpy((void *)pcId, "16");
229                        break;
230                case BVDB_SrcFmtSet_e720p_30:
231                        strcpy((void *)pcId, "17");
232                        break;
233                case BVDB_SrcFmtSet_e544_576i_50:
234                        strcpy((void *)pcId, "20");
235                        break;                 
236                case BVDB_SrcFmtSet_e1440_1080i_50:
237                        strcpy((void *)pcId, "21");
238                        break;
239                case BVDB_SrcFmtSet_e1440_1080p_25:
240                        strcpy((void *)pcId, "22");
241                        break; 
242                case BVDB_SrcFmtSet_e544_480i_60:
243                        strcpy((void *)pcId, "23");
244                        break;                 
245                case BVDB_SrcFmtSet_e1440_1080i_60:
246                        strcpy((void *)pcId, "24");
247                        break;
248                case BVDB_SrcFmtSet_e1440_1080p_30:
249                        strcpy((void *)pcId, "25");
250                        break;
251                case BVDB_SrcFmtSet_e1440_1080p_24:
252                        strcpy((void *)pcId, "26");
253                        break;                                                 
254                case BVDB_SrcFmtSet_e1024_768_PC:
255                        strcpy((void *)pcId, "30");
256                        break;
257                case BVDB_SrcFmtSet_e1280_768_PC:
258                        strcpy((void *)pcId, "31");
259                        break; 
260                case BVDB_SrcFmtSet_e1400_1050_PC:
261                        strcpy((void *)pcId, "32");
262                        break;
263                case BVDB_SrcFmtSet_e1600_1200_PC:
264                        strcpy((void *)pcId, "33");
265                        break; 
266                case BVDB_SrcFmtSet_eAdcCalibration:
267                        strcpy((void *)pcId, "40");
268                        break;
269                case BVDB_SrcFmtSet_eJpeg:
270                        strcpy((void *)pcId, "41");
271                        break;
272                case BVDB_SrcFmtSet_eInvalid:
273                default:
274                        err = BERR_INVALID_PARAMETER;
275                        break;
276        }
277
278        return err;
279}
280
281BERR_Code BVDB_P_CreateId
282        ( BVDB_P_Context           *pVdb,
283          BVDB_UsageMode           *pstUsageMode )
284{
285        BERR_Code err = BERR_SUCCESS;
286        char acStr[8];
287        BVDB_DispModeType eType;
288
289        BDBG_ASSERT(pstUsageMode);
290
291        if (strncmp(pstUsageMode->acId, "", 1) == 0)
292        {
293                BDBG_ERR(("Missing configuration ID."));
294                err = BERR_INVALID_PARAMETER;
295                return err;
296        }
297
298        /* Config # */
299        strcat(pstUsageMode->acId, ".");
300
301    /* get display */
302        switch(pstUsageMode->eDisplay)
303        {
304                case BVDB_Display_ePrimary48:
305                        strcat(pstUsageMode->acId, "4.");
306                        break;
307                case BVDB_Display_ePrimary50:
308                        strcat(pstUsageMode->acId, "1.");
309                        break;
310                case BVDB_Display_ePrimary60:
311                        strcat(pstUsageMode->acId, "0.");
312                        break;
313                case BVDB_Display_eSecondary50:
314                        strcat(pstUsageMode->acId, "3.");
315                        break;
316                case BVDB_Display_eSecondary60:
317                        strcat(pstUsageMode->acId, "2.");
318                        break;
319                case BVDB_Display_eInvalid:
320                default: 
321                        err = BERR_INVALID_PARAMETER;
322                        break;
323        }
324
325        /* get window */
326        eType  = BVDB_P_GetVideoDisplayModeType(&pstUsageMode->stDisplayMode);
327       
328        switch(eType)
329        {
330                case BVDB_ModeType_eFull:
331                        strcat(pstUsageMode->acId, "0.");
332                        break;
333                case BVDB_ModeType_ePig:
334                        strcat(pstUsageMode->acId, "1.");
335                        break;
336                case BVDB_ModeType_ePip:
337                        strcat(pstUsageMode->acId, "2.");
338                        break;
339                case BVDB_ModeType_eVcr:
340                        strcat(pstUsageMode->acId, "3.");
341                        break;
342                case BVDB_ModeType_eInvalid:
343                default:
344                        err = BERR_INVALID_PARAMETER;
345                        break;
346        }
347
348        /* get source format */
349        if (BVDB_P_GetSourceFormatSetId(pstUsageMode->eSrcFmtSet, acStr) == 0)
350        {
351                strcat(pstUsageMode->acId, acStr);
352                strcat(pstUsageMode->acId, ".");
353        }
354        else
355                err = BERR_INVALID_PARAMETER;
356
357        /* get input type */
358        switch(pstUsageMode->eInput)
359        {
360                case BVDB_Input_eCvbsSvidIfd:
361                        strcat(pstUsageMode->acId, "1.");
362                        break;
363                case BVDB_Input_eComponent:
364                        strcat(pstUsageMode->acId, "2.");
365                        break;
366                case BVDB_Input_eHdDvi:
367                        strcat(pstUsageMode->acId, "3.");
368                        break;
369                case BVDB_Input_eMfd:
370                        strcat(pstUsageMode->acId, "4.");
371                        break;
372                case BVDB_Input_eVga:
373                        strcat(pstUsageMode->acId, "5.");
374                        break;
375                case BVDB_Input_e656:
376                        strcat(pstUsageMode->acId, "6.");
377                        break;
378                case BVDB_Input_eInvalid:
379                default: 
380                        err = BERR_INVALID_PARAMETER;
381                        break;
382
383        }
384
385        /* get gfx mode */
386        switch(pstUsageMode->eOsd)
387        {
388                case BVDB_Osd_eNone:
389                case BVDB_Osd_eInvalid:
390                        strcat(pstUsageMode->acId, "0");
391                        break;
392                case BVDB_Osd_e1080p_32bpp:
393                case BVDB_Osd_e1366_768p_32bpp:
394                case BVDB_Osd_e1024_768p_32bpp:
395                        strcat(pstUsageMode->acId, "1");
396                        break;
397                case BVDB_Osd_e480i_8bpp:
398                case BVDB_Osd_e576i_8bpp:
399                        strcat(pstUsageMode->acId, "2");
400                        break;
401                default: 
402                        err = BERR_INVALID_PARAMETER;
403                        break;
404        }
405
406        /* check for ID uniqueness if VDB already exists */
407        if (pVdb && !BLST_CQ_EMPTY(pVdb))
408        {
409                BVDB_UsageMode *pMode;
410               
411                pMode = BLST_CQ_FIRST(pVdb);
412
413                do
414                {
415                        if (strcmp(pstUsageMode->acId, pMode->acId) == 0)
416                        {
417                                BDBG_ERR(("Entry with ID %s already exists.", pstUsageMode->acId));
418                                err = BERR_INVALID_PARAMETER;
419                                return err;
420                        }
421                        pMode = BVDB_P_UsageMode_GetNextNode(pMode);   
422                } while (pMode != BLST_CQ_FIRST(pVdb));
423        }       
424
425        if (err != BERR_SUCCESS)
426                BDBG_ERR(("Failed to create ID due to invalid parameters"));
427        else
428                BDBG_ERR(("Created ID %s", pstUsageMode->acId));
429       
430        return err;
431}
432
433BERR_Code BVDB_P_ValidateId
434        ( BVDB_P_Context           *pVdb,
435          BVDB_UsageMode           *pstUsageMode )
436{
437        BERR_Code err = BERR_SUCCESS;
438        char *pcToken, *pcTemp;
439        char acId[20];
440        int iDig;
441
442        strcpy(acId, pstUsageMode->acId); 
443        /* ignore config digit */
444        pcToken = strtok_r(acId, ".", &pcTemp);
445
446        /* display */
447        pcToken = strtok_r(NULL, ".", &pcTemp);
448        iDig = atoi(pcToken);
449        switch (iDig)
450        {
451                case 0:
452                        if (pstUsageMode->eDisplay != BVDB_Display_ePrimary60)
453                                err = BERR_INVALID_PARAMETER;
454                        break;
455                case 1:
456                        if (pstUsageMode->eDisplay != BVDB_Display_ePrimary50)
457                                err = BERR_INVALID_PARAMETER;
458                        break;
459                case 2:
460                        if (pstUsageMode->eDisplay != BVDB_Display_eSecondary60)
461                                err = BERR_INVALID_PARAMETER;
462                        break;
463                case 3:
464                        if (pstUsageMode->eDisplay != BVDB_Display_eSecondary50)
465                                err = BERR_INVALID_PARAMETER;
466                        break;
467                case 4:
468                        if (pstUsageMode->eDisplay != BVDB_Display_ePrimary48)
469                                err = BERR_INVALID_PARAMETER;
470                        break;
471                default:
472                        err = BERR_INVALID_PARAMETER;
473        }
474
475        if (err!= BERR_SUCCESS)
476                BDBG_ERR(("Bad display value = %d", iDig));
477       
478        /* window */
479        pcToken = strtok_r(NULL, ".", &pcTemp);
480        iDig = atoi(pcToken);
481        switch(iDig)
482        {
483                case 0:
484                        if (pstUsageMode->eWindow != BVDB_Window_eMain)
485                                err = BERR_INVALID_PARAMETER;
486                        break;
487                case 1: /* PIG */
488                        if ((pstUsageMode->eWindow != BVDB_Window_eMain) && 
489                                !(BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode)))
490                                err = BERR_INVALID_PARAMETER;
491                        break;
492                case 2:
493                        if (pstUsageMode->eWindow != BVDB_Window_ePip)
494                                err = BERR_INVALID_PARAMETER;
495                        break;
496                case 3:
497                        if (pstUsageMode->eWindow != BVDB_Window_eVcr)
498                                err = BERR_INVALID_PARAMETER;
499                        break;
500                case 4
501                        if (pstUsageMode->eWindow != BVDB_Display_eSecondary50)
502                                err = BERR_INVALID_PARAMETER;
503                        break;
504                default:
505                        err = BERR_INVALID_PARAMETER;
506        }
507
508        if (err!= BERR_SUCCESS)
509                BDBG_ERR(("Bad window value = %d", iDig));
510
511        /* src format */               
512        pcToken = strtok_r(NULL, ".", &pcTemp);
513        iDig = atoi(pcToken);
514        switch (iDig)
515        {
516                case 1:
517                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_eNtsc)
518                                err = BERR_INVALID_PARAMETER;
519                        break;
520                case 2:
521                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_ePal)
522                                err = BERR_INVALID_PARAMETER;
523                        break;
524                case 3:
525                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e480p)
526                                err = BERR_INVALID_PARAMETER;
527                        break;
528                case 4:
529                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e576p)
530                                err = BERR_INVALID_PARAMETER;
531                        break;
532                case 5:
533                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e720p_50)
534                                err = BERR_INVALID_PARAMETER;
535                        break;
536                case 6:
537                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e720p_60)
538                                err = BERR_INVALID_PARAMETER;
539                        break;
540                case 7:
541                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080i_50)
542                                err = BERR_INVALID_PARAMETER;
543                        break;
544                case 8:
545                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080i_60)
546                                err = BERR_INVALID_PARAMETER;
547                        break;
548                case 9:
549                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080p_24)
550                                err = BERR_INVALID_PARAMETER;
551                        break;
552                case 10:
553                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080p_25)
554                                err = BERR_INVALID_PARAMETER;
555                        break;
556                case 11:
557                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080p_30)
558                                err = BERR_INVALID_PARAMETER;
559                        break;
560                case 12:
561                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080p_50)
562                                err = BERR_INVALID_PARAMETER;
563                        break;
564                case 13:
565                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1080p_60)
566                                err = BERR_INVALID_PARAMETER;
567                        break;
568                case 14:
569                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_ePal_60)
570                                err = BERR_INVALID_PARAMETER;
571                        break;
572                case 15:
573                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e720p_24)
574                                err = BERR_INVALID_PARAMETER;
575                        break;
576                case 16:
577                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e720p_25)
578                                err = BERR_INVALID_PARAMETER;
579                        break;
580                case 17:
581                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e720p_30)
582                                err = BERR_INVALID_PARAMETER;
583                        break;
584                case 20:
585                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e544_576i_50)
586                                err = BERR_INVALID_PARAMETER;
587                        break;
588                case 21:
589                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1440_1080i_50)
590                                err = BERR_INVALID_PARAMETER;
591                        break;
592                case 22:
593                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1440_1080p_25)
594                                err = BERR_INVALID_PARAMETER;
595                        break; 
596                case 23:
597                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e544_480i_60)
598                                err = BERR_INVALID_PARAMETER;
599                        break;
600                case 24:
601                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1440_1080i_60)
602                                err = BERR_INVALID_PARAMETER;
603                        break;
604                case 25:
605                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1440_1080p_30)
606                                err = BERR_INVALID_PARAMETER;
607                        break;
608                case 26:
609                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1440_1080p_24)
610                                err = BERR_INVALID_PARAMETER;
611                        break;                                                 
612                case 30:
613                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1024_768_PC)
614                                err = BERR_INVALID_PARAMETER;
615                        break;
616                case 31:
617                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1280_768_PC)
618                                err = BERR_INVALID_PARAMETER;
619                        break; 
620                case 32:
621                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1400_1050_PC)
622                                err = BERR_INVALID_PARAMETER;
623                        break;
624                case 33:
625                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_e1600_1200_PC)
626                                err = BERR_INVALID_PARAMETER;
627                        break; 
628                case 40:
629                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_eAdcCalibration)
630                                err = BERR_INVALID_PARAMETER;
631                        break;
632                case 41:
633                        if (pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_eJpeg)
634                                err = BERR_INVALID_PARAMETER;
635                        break;
636                default:
637                        err = BERR_INVALID_PARAMETER;
638                        break;
639        }
640       
641        if (err!= BERR_SUCCESS)
642                BDBG_ERR(("Bad src format value = %d", iDig));
643
644        /* input type */       
645        pcToken = strtok_r(NULL, ".", &pcTemp);
646        iDig = atoi(pcToken);
647        switch (iDig)
648        {
649                case 1:
650                        if (pstUsageMode->eInput != BVDB_Input_eCvbsSvidIfd)           
651                                err = BERR_INVALID_PARAMETER;
652                        break;
653                case 2:
654                        if (pstUsageMode->eInput != BVDB_Input_eComponent)
655                                err = BERR_INVALID_PARAMETER;
656                        break;
657                case 3:
658                        if (pstUsageMode->eInput != BVDB_Input_eHdDvi)
659                                err = BERR_INVALID_PARAMETER;
660                        break;
661                case 4
662                        if (pstUsageMode->eInput != BVDB_Input_eMfd)
663                                err = BERR_INVALID_PARAMETER;
664                        break;
665                case 5
666                        if (pstUsageMode->eInput != BVDB_Input_eVga)
667                                err = BERR_INVALID_PARAMETER;
668                        break;
669                case 6
670                        if (pstUsageMode->eInput != BVDB_Input_e656)
671                                err = BERR_INVALID_PARAMETER;
672                        break;
673                default:
674                        err = BERR_INVALID_PARAMETER;   
675        }                       
676
677        if (err!= BERR_SUCCESS)
678                BDBG_ERR(("Bad input value = %d", iDig));
679
680        /* gfx mode */ 
681        pcToken = strtok_r(NULL, ".", &pcTemp);
682        iDig = atoi(pcToken);
683        switch(iDig)
684        {
685                case 0:
686                        if (!(pstUsageMode->eOsd == BVDB_Osd_eInvalid ||
687                                  pstUsageMode->eOsd == BVDB_Osd_eNone))
688                                err = BERR_INVALID_PARAMETER;
689                        break;
690                case 1:
691                        if (!(pstUsageMode->eOsd == BVDB_Osd_e1080p_32bpp ||
692                                pstUsageMode->eOsd == BVDB_Osd_e1366_768p_32bpp ||
693                                pstUsageMode->eOsd == BVDB_Osd_e1024_768p_32bpp))
694                                err = BERR_INVALID_PARAMETER;
695                        break;
696                case 2:
697                        if (!(pstUsageMode->eOsd != BVDB_Osd_e480i_8bpp || 
698                                pstUsageMode->eOsd != BVDB_Osd_e576i_8bpp))
699                                err = BERR_INVALID_PARAMETER;
700                        break;
701                default:
702                        err = BERR_INVALID_PARAMETER;   
703        }
704
705        if (err!= BERR_SUCCESS)
706        {
707                BDBG_ERR(("Bad OSD value = %d", iDig));
708        }
709
710        /* check for ID uniqueness if VDB already exists */
711        if (pVdb && !BLST_CQ_EMPTY(pVdb))
712        {
713                BVDB_UsageMode *pStart, *pMode;
714               
715                /* search for usage mode node to be checked to serve as starting point of comparison */
716                pStart = BLST_CQ_FIRST(pVdb);
717                do 
718                {
719                        if (strcmp(pstUsageMode->acId, pStart->acId) == 0)
720                                break;
721                        pStart = BVDB_P_UsageMode_GetNextNode(pStart);
722                } while (pstUsageMode != pStart);
723
724                /* compare */
725                pMode = pStart;
726                do
727                {
728                        pMode = BVDB_P_UsageMode_GetNextNode(pMode);
729                        if (strcmp(pstUsageMode->acId, pMode->acId) == 0)
730                        {
731                                BDBG_ERR(("Duplicate ID: %s", pstUsageMode->acId));
732                                err = BERR_INVALID_PARAMETER;
733                        }
734                } while (pMode != BVDB_P_UsageMode_GetPrevNode(pStart));
735        }
736       
737        return err;
738}
739
740BERR_Code BVDB_P_ValidateOsd
741        (  BVDB_UsageMode           *pstUsageMode )
742{
743        BERR_Code err = BERR_SUCCESS;
744        uint32_t  ulConfigId = BVDB_P_GetConfigId(pstUsageMode->acId);
745
746
747        /* check for OSD/Gfx and ANR settings for 1080i sources */
748        if ((ulConfigId == 1 || ulConfigId == 4 || ulConfigId == 5) && 
749                 (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
750          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
751                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
752                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50))
753        {
754                if ((pstUsageMode->stAnr.eState == BVDB_State_eYes) && 
755                        (pstUsageMode->eOsd != BVDB_Osd_eNone || BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode)))
756                {
757                        BDBG_ERR(("Invalid mode for %s. ANR and OSD or GFX shouldn't be enabled together for config %d.",
758                                           pstUsageMode->acId, ulConfigId));
759                        err = BERR_INVALID_PARAMETER;
760                        return err;
761                }
762        }
763       
764        if (pstUsageMode->eWindow == BVDB_Window_ePip &&
765                pstUsageMode->eOsd != BVDB_Osd_eInvalid)
766        {
767                BDBG_ERR(("Invalid mode for %s. OSD is not applicable to PIP."));
768                err = BERR_INVALID_PARAMETER;
769                return err;
770        }
771
772        if (pstUsageMode->eDisplay == BVDB_Display_eSecondary60 &&
773                !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration ||
774                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eJpeg) &&
775                pstUsageMode->eOsd != BVDB_Osd_e480i_8bpp)
776        {
777                BDBG_ERR(("Maximum OSD for secondary display @ 60 Hz should be 480@8bpp for %s", 
778                        pstUsageMode->acId));
779                err = BERR_INVALID_PARAMETER;
780                return err;
781        }
782
783        if (pstUsageMode->eDisplay == BVDB_Display_eSecondary50 &&
784                !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration ||
785                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eJpeg) &&
786                pstUsageMode->eOsd != BVDB_Osd_e576i_8bpp)
787        {
788                BDBG_ERR(("Maximum OSD for secondary display @ 50 Hz should be 576@8bpp for %s", 
789                        pstUsageMode->acId));
790                err = BERR_INVALID_PARAMETER;
791                return err;
792        }
793
794        if ((pstUsageMode->eDisplay == BVDB_Display_ePrimary48 ||
795                 pstUsageMode->eDisplay == BVDB_Display_ePrimary50 ||
796                 pstUsageMode->eDisplay == BVDB_Display_ePrimary60) &&
797                 pstUsageMode->eWindow != BVDB_Window_ePip &&
798                (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
799          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
800                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
801                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50) &&
802                  pstUsageMode->stAnr.eState == BVDB_State_eNo)
803        {
804                if (ulConfigId == 1 && 
805                        pstUsageMode->eOsd != BVDB_Osd_e1080p_32bpp)
806                {
807                        BDBG_ERR(("Maximum primary display OSD for config 1 should be 1920x1080@32bpp for %s", 
808                                pstUsageMode->acId));
809                        err = BERR_INVALID_PARAMETER;
810                        return err;
811                }
812
813                if (ulConfigId == 4 &&
814                        pstUsageMode->eOsd != BVDB_Osd_e1366_768p_32bpp )
815                {
816                        BDBG_ERR(("Maximum primary display OSD for config 4 should be 1366x768@32bpp for %s", 
817                                pstUsageMode->acId));
818                        err = BERR_INVALID_PARAMETER;
819                        return err;
820                }
821
822                if (ulConfigId == 5 &&
823                        pstUsageMode->eOsd != BVDB_Osd_e1024_768p_32bpp )
824                {
825                        BDBG_ERR(("Maximum primary display OSD for config 5 should be 1024x768@32bpp for %s", 
826                                pstUsageMode->acId));
827                        err = BERR_INVALID_PARAMETER;
828                        return err;
829                }               
830        }
831        return err;     
832}
833
834BERR_Code BVDB_P_Validate3dComb
835        (  BVDB_UsageMode           *pstUsageMode )
836{
837        BERR_Code err = BERR_SUCCESS;
838       
839        /* check for 3d comb. Only applies to SD formats and CVBS/s-video/IFD inputs */
840        if (!((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal ||
841                   pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal_60 ||
842                   pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eNtsc) &&
843                   pstUsageMode->eInput == BVDB_Input_eCvbsSvidIfd) &&
844                   pstUsageMode->e3dComb != BVDB_State_eNotApplicable)
845        {
846                BDBG_ERR(("Invalid mode for %s. 3D comb only applies to SD formats and CVBS/S-video/IFD inputs.",
847                                pstUsageMode->acId));
848                err = BERR_INVALID_PARAMETER;
849                return err;
850        }
851
852        if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal ||
853                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal_60 ||
854                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eNtsc) &&
855                 pstUsageMode->eInput == BVDB_Input_eCvbsSvidIfd &&
856                 pstUsageMode->e3dComb == BVDB_State_eNo)
857        {
858                BDBG_ERR(("Invalid mode for %s. 3D comb must be enabled for SD formats and CVBS/S-video/IFD inputs.",
859                                pstUsageMode->acId));
860                err = BERR_INVALID_PARAMETER;
861                return err;
862        }
863
864        return err;     
865
866}
867
868BERR_Code BVDB_P_ValidateOversample
869        (  BVDB_UsageMode           *pstUsageMode )
870{
871        BERR_Code err = BERR_SUCCESS;
872
873        /* check for oversampling */
874        if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal ||
875                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal_60 ||
876                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eNtsc || 
877                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e480p || 
878                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e576p) &&
879                (pstUsageMode->eInput == BVDB_Input_eCvbsSvidIfd ||
880                 pstUsageMode->eInput == BVDB_Input_eComponent) &&
881                 pstUsageMode->eOversample != BVDB_State_eYes)
882        {
883                BDBG_ERR(("Invalid mode for %s. Oversampling must be enabled with SD, 480p and 576p sources and CVBS/S-video/IFD and CMP inputs.",
884                                pstUsageMode->acId));
885                err = BERR_INVALID_PARAMETER;
886                return err;
887        }
888
889        if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal ||
890                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal_60 ||
891                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eNtsc || 
892                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e480p || 
893                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e576p ||
894                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_50|| 
895                 pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_60) &&
896                !(pstUsageMode->eInput == BVDB_Input_eCvbsSvidIfd ||
897                 pstUsageMode->eInput == BVDB_Input_eComponent) &&
898                 pstUsageMode->eOversample != BVDB_State_eNotApplicable)
899        {
900                BDBG_ERR(("Invalid mode for %s. Oversampling does not apply to SD, 480p, 576p and 720p sources with non-analog inputs.",
901                                pstUsageMode->acId));
902                err = BERR_INVALID_PARAMETER;
903                return err;
904        }       
905
906        if ( BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) &&
907                 pstUsageMode->eInput == BVDB_Input_eMfd &&
908                 pstUsageMode->eOversample != BVDB_State_eNotApplicable)
909        {
910                BDBG_ERR(("Invalid mode for %s. Oversampling is not applicable to progressive sources fed through MFD.",
911                                pstUsageMode->acId));
912                err = BERR_INVALID_PARAMETER;
913                return err;
914        }
915
916        if ( (BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) &&
917                  !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e480p || 
918                        pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e576p)) &&
919                 pstUsageMode->eInput == BVDB_Input_eComponent &&
920                 pstUsageMode->eOversample != BVDB_State_eNo)
921        {
922                BDBG_ERR(("Invalid mode for %s. Oversampling must be disabled for progressive sources with Component inputs.",
923                                pstUsageMode->acId));
924                err = BERR_INVALID_PARAMETER;
925                return err;
926        }
927
928        if (pstUsageMode->eInput == BVDB_Input_eVga && 
929                !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eNtsc ||
930                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal ||
931                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e480p ||
932                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e576p ||
933                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_50 ||
934                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_60) &&
935                pstUsageMode->eOversample != BVDB_State_eNo)
936        {
937                BDBG_ERR(("Invalid mode for %s. Oversampling must be disabled for VGA inputs.",
938                                pstUsageMode->acId));
939                err = BERR_INVALID_PARAMETER;
940                return err;
941        }
942        return err;     
943}
944
945BERR_Code BVDB_P_ValidateMnrBnr
946        (  BVDB_UsageMode           *pstUsageMode )
947{
948        BERR_Code err = BERR_SUCCESS;
949       
950        /* check for MNR and BNR. Only applied to MFD sources */
951        if (pstUsageMode->eInput != BVDB_Input_eMfd && pstUsageMode->eMnrBnr == BVDB_State_eYes)
952        {
953                BDBG_ERR(("Invalid mode for %s. MNR and BNR only apply to MFD sources.",
954                                pstUsageMode->acId));
955                err = BERR_INVALID_PARAMETER;
956                return err;
957        }
958
959        if (pstUsageMode->eInput == BVDB_Input_eMfd && pstUsageMode->eMnrBnr != BVDB_State_eYes)
960        {
961                BDBG_ERR(("Invalid mode for %s. MNR and BNR must be enabled for MFD sources.",
962                                pstUsageMode->acId));
963                err = BERR_INVALID_PARAMETER;
964                return err;
965        }       
966
967        return err;     
968}
969
970BERR_Code BVDB_P_ValidateDcr
971        (  BVDB_UsageMode           *pstUsageMode )
972{
973        BERR_Code err = BERR_SUCCESS;
974       
975        /* check for DCR. Applied to all sources */
976        if (pstUsageMode->eDcr != BVDB_State_eYes)
977        {
978                BDBG_ERR(("Invalid mode for %s. DCR must be enabled for all sources.",
979                                pstUsageMode->acId));
980                err = BERR_INVALID_PARAMETER;
981                return err;
982        }       
983
984        return err;     
985}
986
987BERR_Code BVDB_P_ValidateAnr
988        (  BVDB_UsageMode           *pstUsageMode )
989{
990        BERR_Code err = BERR_SUCCESS;
991        uint32_t  ulConfigId = BVDB_P_GetConfigId(pstUsageMode->acId);
992
993        /* If secondary display, ANR shouldn't be enabled */
994        if ((pstUsageMode->eDisplay == BVDB_Display_eSecondary50 ||
995                 pstUsageMode->eDisplay == BVDB_Display_eSecondary60) && 
996                 pstUsageMode->stAnr.eState == BVDB_State_eYes)
997        {
998                BDBG_ERR(("Invalid mode for %s. ANR shouldn't enabled for progressive sources or for the secondary path.",
999                                pstUsageMode->acId));
1000                err = BERR_INVALID_PARAMETER;
1001                return err;     
1002        }
1003
1004        /* check for OSD/Gfx and ANR settings for 1080i sources */
1005        if ((ulConfigId == 1 || ulConfigId == 4) && 
1006                 (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1007          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1008                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1009                  pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50))
1010        {
1011                if ((pstUsageMode->stAnr.eState == BVDB_State_eYes) && 
1012                        (pstUsageMode->eOsd != BVDB_Osd_eNone || BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode)))
1013                {
1014                        BDBG_ERR(("Invalid mode for %s. ANR and OSD or GFX shouldn't be enabled together for config %d.",
1015                                           pstUsageMode->acId, ulConfigId));
1016                        err = BERR_INVALID_PARAMETER;
1017                        return err;     
1018                }
1019        }
1020
1021        return err;
1022}
1023
1024BERR_Code BVDB_P_ValidateCapVfd
1025        (  BVDB_UsageMode           *pstUsageMode )
1026{
1027        BERR_Code err = BERR_SUCCESS;
1028
1029        if (pstUsageMode->eInput != BVDB_Input_eMfd &&
1030                pstUsageMode->stCapVfd.eState != BVDB_State_eYes)
1031        {
1032                BDBG_ERR(("Invalid mode for %s. CAP/VFD must be enabled for non-MFD sources",
1033                        pstUsageMode->acId));
1034                err = BERR_INVALID_PARAMETER;
1035                return err;
1036        }
1037
1038        if (pstUsageMode->eInput == BVDB_Input_eVga &&
1039                (pstUsageMode->eDisplay == BVDB_Display_ePrimary48 ||
1040                 pstUsageMode->eDisplay == BVDB_Display_ePrimary50 ||
1041                 pstUsageMode->eDisplay == BVDB_Display_ePrimary60) &&
1042                 !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eNtsc ||
1043                   pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_ePal ||
1044                   pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1045                   pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60) &&
1046                   pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration &&
1047                pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e10Bit444)
1048        {
1049                BDBG_ERR(("Invalid mode for %s. Capture buffer pixel format must be 10-bit 444 for VGA inputs and PC sources.",
1050                        pstUsageMode->acId));
1051                err = BERR_INVALID_PARAMETER;
1052                return err;
1053        }
1054
1055        if (pstUsageMode->eWindow == BVDB_Window_ePip)
1056        {
1057                if ((pstUsageMode->eInput == BVDB_Input_eCvbsSvidIfd ||
1058                         pstUsageMode->eInput == BVDB_Input_eComponent ||
1059                         pstUsageMode->eInput == BVDB_Input_eHdDvi) &&
1060                         !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1024_768_PC ||
1061                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1280_768_PC ||
1062                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1400_1050_PC ||
1063                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1600_1200_PC) &&
1064                        pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e10Bit422)
1065                {
1066                        BDBG_ERR(("Invalid mode for %s. Capture buffer pixel format must be 10-bit 422 for PIP with VDEC and HDDVI inputs.",
1067                                pstUsageMode->acId));
1068                        err = BERR_INVALID_PARAMETER;
1069                        return err;
1070
1071                }
1072                else if (pstUsageMode->eInput == BVDB_Input_eMfd &&
1073                                 pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e8Bit422)
1074                {
1075                        BDBG_ERR(("Invalid mode for %s. Capture buffer pixel format must be 8-bit 422 for PIP with MFD.",
1076                                pstUsageMode->acId));
1077                        err = BERR_INVALID_PARAMETER;
1078                        return err;
1079                }
1080                else if (pstUsageMode->eInput == BVDB_Input_eVga &&
1081                                 pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e10Bit444)
1082                {
1083                        BDBG_ERR(("Invalid mode for %s. Capture buffer pixel format must be 10-bit 444 for PIP with VGA.",
1084                                pstUsageMode->acId));
1085                        err = BERR_INVALID_PARAMETER;
1086                        return err;
1087                }
1088        }
1089
1090        if (pstUsageMode->eInput != BVDB_Input_eMfd && 
1091                  !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1024_768_PC ||
1092                        pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1280_768_PC ||
1093                        pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1400_1050_PC ||
1094                        pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1600_1200_PC ||
1095                    pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration) &&
1096                  !(pstUsageMode->eDisplay == BVDB_Display_eSecondary50 ||
1097                    pstUsageMode->eDisplay == BVDB_Display_eSecondary60) &&
1098                    pstUsageMode->eWindow != BVDB_Window_ePip &&
1099                  !((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e480p ||
1100                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e576p ||
1101                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_50 ||
1102                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_60 ||
1103                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_50 ||
1104                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_60 ) &&
1105                     pstUsageMode->eInput == BVDB_Input_eVga) &&
1106                pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e10Bit422)
1107        {
1108                BDBG_ERR(("Invalid mode for %s. Capture buffer pixel format must be 10-bit 422 for main window",
1109                        pstUsageMode->acId));
1110                err = BERR_INVALID_PARAMETER;
1111                return err;
1112        }
1113       
1114        if ((pstUsageMode->eDisplay == BVDB_Display_eSecondary50 ||
1115                 pstUsageMode->eDisplay == BVDB_Display_eSecondary60) &&
1116                 pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e8Bit422)
1117        {
1118                BDBG_ERR(("Invalid mode for %s. Capture buffer pixel format must be 8-bit 422 for secondary path",
1119                        pstUsageMode->acId));
1120                err = BERR_INVALID_PARAMETER;
1121                return err;
1122        }
1123
1124        return err;     
1125}
1126
1127BERR_Code BVDB_P_ValidateMad
1128        (  BVDB_UsageMode           *pstUsageMode )
1129{
1130        BERR_Code err = BERR_SUCCESS;
1131       
1132        /* If source is progressive and if display is not primary,
1133         * MAD shouldn't be enabled.
1134         * Also, if window is PIP, MAD shouldn't be enabled.*/
1135        if ((((pstUsageMode->eDisplay == BVDB_Display_eSecondary50 ||
1136                    pstUsageMode->eDisplay == BVDB_Display_eSecondary60) &&
1137                    BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet)) || 
1138                    pstUsageMode->eWindow == BVDB_Window_ePip) &&
1139                    pstUsageMode->stMad.eState == BVDB_State_eYes)
1140        {
1141                BDBG_ERR(("Invalid mode for %s. MAD shouldn't enabled for progressive sources, PIP and for the secondary path.",
1142                                pstUsageMode->acId));
1143                err = BERR_INVALID_PARAMETER;
1144                return err;
1145        }
1146
1147        /* MAD should be enabled */
1148        if (!(pstUsageMode->eDisplay == BVDB_Display_eSecondary50 ||
1149                  pstUsageMode->eDisplay == BVDB_Display_eSecondary60) &&
1150                 !BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) &&
1151                 pstUsageMode->eSrcFmtSet != BVDB_SrcFmtSet_eAdcCalibration &&
1152                 pstUsageMode->stCapVfd.ePixelFormat != BVDB_PixelFmt_e10Bit444 &&
1153                 pstUsageMode->eWindow != BVDB_Window_ePip &&
1154                 pstUsageMode->stMad.eState != BVDB_State_eYes)
1155        {
1156                BDBG_ERR(("Invalid mode for ID %s. MAD should be enabled.", pstUsageMode->acId));
1157                err = BERR_INVALID_PARAMETER;
1158                return err;
1159        }
1160
1161        /* If capture is 10-bit 444, MAD shoudln't be enabled */
1162        if (pstUsageMode->stCapVfd.ePixelFormat == BVDB_PixelFmt_e10Bit444 &&
1163                pstUsageMode->stMad.eState == BVDB_State_eYes )
1164        {
1165                BDBG_ERR(("Invalid mode for ID %s. MAD should either be disabled or not applicable with 10-bit 444.", pstUsageMode->acId));
1166                err = BERR_INVALID_PARAMETER;
1167                return err;
1168
1169        }
1170       
1171       
1172        return err;     
1173}
1174
1175
1176BERR_Code BVDB_P_ValidateRtsSet
1177        ( BVDB_UsageMode         *pstUsageMode )
1178{
1179        BERR_Code err = BERR_SUCCESS;
1180        uint32_t ulConfigId;
1181        BVDB_RtsSet eCorrectRts = BVDB_RtsSet_eNotApplicable;
1182       
1183        BDBG_ASSERT(pstUsageMode);
1184
1185        ulConfigId = BVDB_P_GetConfigId(pstUsageMode->acId);
1186
1187        if (pstUsageMode->eWindow == BVDB_Window_eVcr)
1188        {
1189                if (pstUsageMode->eRtsSet != BVDB_RtsSet_eNotApplicable)
1190                {
1191                        eCorrectRts = BVDB_RtsSet_eNotApplicable;
1192                        err = BERR_INVALID_PARAMETER;
1193                        goto done;
1194                }
1195        }
1196        else
1197        {
1198                if (ulConfigId == 1)
1199                {
1200                        if (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eJpeg)
1201                        {
1202                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e5)
1203                                {
1204                                        eCorrectRts = BVDB_RtsSet_e5;
1205                                        err = BERR_INVALID_PARAMETER;
1206                                        goto done;
1207                                }
1208                        }
1209                        else if (BVDB_P_IsSd(pstUsageMode->eSrcFmtSet) &&
1210                                         pstUsageMode->eWindow == BVDB_Window_eMain && 
1211                                         BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode))
1212                        {
1213                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e17)
1214                                {
1215                                        eCorrectRts = BVDB_RtsSet_e17;
1216                                        err = BERR_INVALID_PARAMETER;
1217                                        goto done;
1218                                }
1219                        }
1220                        else if (((pstUsageMode->eInput == BVDB_Input_eMfd) &&
1221                                         (((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1222                                       pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1223                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1224                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50) &&
1225                                           pstUsageMode->eWindow == BVDB_Window_eMain && 
1226                                           BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode)) ||
1227                                         (BVDB_P_IsSd(pstUsageMode->eSrcFmtSet) &&
1228                                          pstUsageMode->eWindow == BVDB_Window_eMain && 
1229                                          BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode)))) ||
1230                                        (pstUsageMode->eInput != BVDB_Input_eMfd && 
1231                                           BVDB_P_IsSd(pstUsageMode->eSrcFmtSet)))
1232                        {
1233                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e4)
1234                                {
1235                                        eCorrectRts = BVDB_RtsSet_e4;
1236                                        err = BERR_INVALID_PARAMETER;
1237                                        goto done;
1238                                }
1239                        }
1240                        else if ((pstUsageMode->stCapVfd.ePixelFormat == BVDB_PixelFmt_e10Bit444) ||
1241                                         (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration))
1242                        {
1243                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e3)
1244                                {
1245                                        eCorrectRts = BVDB_RtsSet_e3;
1246                                        err = BERR_INVALID_PARAMETER;
1247                                        goto done;
1248                                }
1249                        }
1250                        else if (pstUsageMode->eInput == BVDB_Input_eMfd &&
1251                                     (BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) && 
1252                                          (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_24 ||
1253                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_25 ||
1254                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_30 ||
1255                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080p_24 ||
1256                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080p_25 ||
1257                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080p_30)))
1258                        {
1259                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e6)
1260                                {
1261                                        eCorrectRts = BVDB_RtsSet_e6;
1262                                        err = BERR_INVALID_PARAMETER;
1263                                        goto done;
1264                                }
1265                        }
1266                        else if (pstUsageMode->eInput == BVDB_Input_eMfd &&
1267                                     (BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) && 
1268                                          (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_24 ||
1269                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_25 ||
1270                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_30 ||
1271                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_50 ||
1272                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e720p_60 ||
1273                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e576p ||
1274                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e480p)))
1275                        {
1276                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e16)
1277                                {
1278                                        eCorrectRts = BVDB_RtsSet_e16;
1279                                        err = BERR_INVALID_PARAMETER;
1280                                        goto done;
1281                                }
1282                        }                       
1283                        else if (BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) && 
1284                                         pstUsageMode->eInput != BVDB_Input_eMfd)
1285                        {
1286                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e2)
1287                                {
1288                                        eCorrectRts = BVDB_RtsSet_e2;
1289                                        err = BERR_INVALID_PARAMETER;
1290                                        goto done;
1291                                }
1292                        }
1293                        else if (pstUsageMode->eInput == BVDB_Input_eMfd &&
1294                                        ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1295                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1296                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1297                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50) &&
1298                                          pstUsageMode->eWindow == BVDB_Window_eMain && 
1299                                          BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode))) 
1300                        {
1301                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e1)
1302                                {
1303                                        eCorrectRts = BVDB_RtsSet_e1;
1304                                        err = BERR_INVALID_PARAMETER;
1305                                        goto done;
1306                                }
1307                        }
1308                }
1309                else if (ulConfigId == 4)
1310                {
1311                        if (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eJpeg)
1312                        {
1313                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e12)
1314                                {
1315                                        eCorrectRts = BVDB_RtsSet_e12;
1316                                        err = BERR_INVALID_PARAMETER;
1317                                        goto done;
1318                                }
1319                        }
1320                        else if (pstUsageMode->eWindow == BVDB_Window_ePip &&
1321                                          pstUsageMode->stCapVfd.ePixelFormat == BVDB_PixelFmt_e8Bit422)
1322                        {
1323                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e13)
1324                                {
1325                                        eCorrectRts = BVDB_RtsSet_e13;
1326                                        err = BERR_INVALID_PARAMETER;
1327                                        goto done;
1328                                }
1329                        }
1330                        else if (pstUsageMode->eWindow == BVDB_Window_ePip &&
1331                                          pstUsageMode->stCapVfd.ePixelFormat == BVDB_PixelFmt_e10Bit444)
1332                        {
1333                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e14)
1334                                {
1335                                        eCorrectRts = BVDB_RtsSet_e14;
1336                                        err = BERR_INVALID_PARAMETER;
1337                                        goto done;
1338                                }
1339                        }
1340                        else if ((pstUsageMode->stCapVfd.ePixelFormat == BVDB_PixelFmt_e10Bit444 &&
1341                                          pstUsageMode->eWindow == BVDB_Window_eMain) ||
1342                                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration)
1343                        {
1344                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e9)
1345                                {
1346                                        eCorrectRts = BVDB_RtsSet_e9;
1347                                        err = BERR_INVALID_PARAMETER;
1348                                        goto done;
1349                                }
1350                        }
1351                        else if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_50 ||
1352                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_60) &&
1353                                          pstUsageMode->eWindow == BVDB_Window_eMain)
1354                        {
1355                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e7)
1356                                {
1357                                        eCorrectRts = BVDB_RtsSet_e7;
1358                                        err = BERR_INVALID_PARAMETER;
1359                                        goto done;
1360                                }
1361                        }
1362                        else if (BVDB_P_IsSd(pstUsageMode->eSrcFmtSet) && 
1363                                         pstUsageMode->eWindow == BVDB_Window_eMain && 
1364                                         BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode))
1365                        {
1366                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e15)
1367                                {
1368                                        eCorrectRts = BVDB_RtsSet_e15;
1369                                        err = BERR_INVALID_PARAMETER;
1370                                        goto done;
1371                                }
1372                        }
1373                        else if (BVDB_P_IsSd(pstUsageMode->eSrcFmtSet) && 
1374                                         pstUsageMode->eWindow == BVDB_Window_eMain && 
1375                                         BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode))
1376                        {
1377                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e18)
1378                                {
1379                                        eCorrectRts = BVDB_RtsSet_e18;
1380                                        err = BERR_INVALID_PARAMETER;
1381                                        goto done;
1382                                }
1383                        }
1384                        else if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1385                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1386                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1387                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50) &&
1388                                          pstUsageMode->eWindow == BVDB_Window_eMain && 
1389                                          BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode))
1390                        {                               
1391                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e8)
1392                                {
1393                                        eCorrectRts = BVDB_RtsSet_e8;
1394                                        err = BERR_INVALID_PARAMETER;
1395                                        goto done;
1396                                }
1397                        }
1398                        else if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1399                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1400                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1401                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50) &&
1402                                          pstUsageMode->eWindow == BVDB_Window_eMain && 
1403                                          BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode))
1404                        {
1405                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e10)
1406                                {
1407                                        eCorrectRts = BVDB_RtsSet_e10;
1408                                        err = BERR_INVALID_PARAMETER;
1409                                        goto done;
1410                                }
1411                        }
1412                        else if (BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) &&
1413                                        !(pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_50 ||
1414                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080p_60) &&
1415                                          pstUsageMode->eWindow != BVDB_Window_ePip)
1416                        {
1417                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e11)
1418                                {
1419                                        eCorrectRts = BVDB_RtsSet_e11;
1420                                        err = BERR_INVALID_PARAMETER;
1421                                        goto done;
1422                                }
1423                        }
1424                }
1425                else if (ulConfigId == 5)
1426                {
1427                        if (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eJpeg)
1428                        {
1429                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e5)
1430                                {
1431                                        eCorrectRts = BVDB_RtsSet_e5;
1432                                        err = BERR_INVALID_PARAMETER;
1433                                        goto done;
1434                                }
1435                        }
1436                        else if ((pstUsageMode->stCapVfd.ePixelFormat == BVDB_PixelFmt_e10Bit444 &&
1437                                          pstUsageMode->eWindow == BVDB_Window_eMain) ||
1438                                     pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_eAdcCalibration)
1439                        {
1440                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e22)
1441                                {
1442                                        eCorrectRts = BVDB_RtsSet_e22;
1443                                        err = BERR_INVALID_PARAMETER;
1444                                        goto done;
1445                                }
1446                        }
1447                        else if (BVDB_P_IsSd(pstUsageMode->eSrcFmtSet) &&
1448                                         pstUsageMode->eInput == BVDB_Input_eMfd &&
1449                                         BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode))
1450                        {
1451                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e25)
1452                                {
1453                                        eCorrectRts = BVDB_RtsSet_e25;
1454                                        err = BERR_INVALID_PARAMETER;
1455                                        goto done;
1456                                }
1457                        }
1458                        else if ((pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1459                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1460                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1461                                          pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50) &&
1462                                          pstUsageMode->eWindow == BVDB_Window_eMain && 
1463                                          BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode))
1464                        {
1465                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e21)
1466                                {
1467                                        eCorrectRts = BVDB_RtsSet_e21;
1468                                        err = BERR_INVALID_PARAMETER;
1469                                        goto done;
1470                                }
1471                        }
1472                        else if (BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) &&
1473                                         (pstUsageMode->eInput == BVDB_Input_eMfd ||
1474                                          (pstUsageMode->eInput != BVDB_Input_eMfd &&
1475                                            BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode))))                     
1476                        {
1477                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e24)
1478                                {
1479                                        eCorrectRts = BVDB_RtsSet_e24;
1480                                        err = BERR_INVALID_PARAMETER;
1481                                        goto done;
1482                                }
1483                        }
1484                        else if (BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode) &&
1485                                          ((pstUsageMode->eInput == BVDB_Input_eMfd &&
1486                                          (pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_60 || 
1487                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1080i_50 ||
1488                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_60 ||
1489                                           pstUsageMode->eSrcFmtSet == BVDB_SrcFmtSet_e1440_1080i_50)) ||
1490                                          (pstUsageMode->eInput != BVDB_Input_eMfd && 
1491                                           BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet))))
1492                        {
1493                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e23)
1494                                {
1495                                        eCorrectRts = BVDB_RtsSet_e23;
1496                                        err = BERR_INVALID_PARAMETER;
1497                                        goto done;
1498                                }
1499                        }
1500                        else if (!BVDB_P_IsSourceProgressive(pstUsageMode->eSrcFmtSet) &&
1501                                        ((BVDB_P_IsSd(pstUsageMode->eSrcFmtSet) && 
1502                                         BVDB_DISP_MODE_IS_FULL(&pstUsageMode->stDisplayMode)) ||
1503                                        (pstUsageMode->eInput != BVDB_Input_eMfd &&
1504                                         BVDB_DISP_MODE_IS_PIG(&pstUsageMode->stDisplayMode))))
1505                        {
1506                                if (pstUsageMode->eRtsSet != BVDB_RtsSet_e20)
1507                                {
1508                                        eCorrectRts = BVDB_RtsSet_e20;
1509                                        err = BERR_INVALID_PARAMETER;
1510                                        goto done;
1511                                }
1512                        }
1513                               
1514                }
1515        }
1516
1517done:
1518        if (err == BERR_INVALID_PARAMETER)
1519        {
1520                char acRts[3];
1521                BVDB_P_GetRtsSetStr(eCorrectRts, acRts);
1522
1523                BDBG_ERR(("Invalid RTS set for usage mode %s. RTS set should be %s", 
1524                        pstUsageMode->acId, acRts));
1525        }
1526        return err;
1527}
1528
1529BERR_Code BVDB_P_ValidateVdbEntry
1530        ( BVDB_P_Context           *pVdb,
1531          BVDB_UsageMode           *pstUsageMode )
1532{
1533        BERR_Code err = BERR_SUCCESS;
1534
1535        BDBG_ASSERT(pstUsageMode);
1536
1537        err = BVDB_P_ValidateId(pVdb, pstUsageMode);
1538        if (err != BERR_SUCCESS)
1539        {
1540                BDBG_ERR(("Invalid ID %s", pstUsageMode->acId));
1541                return err;
1542        }
1543
1544        err |= BVDB_P_ValidateOsd(pstUsageMode);
1545
1546        err |= BVDB_P_Validate3dComb(pstUsageMode);
1547
1548        err |= BVDB_P_ValidateOversample(pstUsageMode);
1549
1550        err |= BVDB_P_ValidateMnrBnr(pstUsageMode);     
1551       
1552        err |= BVDB_P_ValidateDcr(pstUsageMode);
1553
1554        err |= BVDB_P_ValidateAnr(pstUsageMode);
1555
1556        err |= BVDB_P_ValidateCapVfd(pstUsageMode);
1557
1558        err |= BVDB_P_ValidateMad(pstUsageMode);
1559
1560        err |= BVDB_P_ValidateRtsSet(pstUsageMode);
1561       
1562        return err;
1563}
1564
1565BERR_Code BVDB_P_ValidateVdb
1566        ( BVDB_P_Context           *pVdb )
1567{
1568        BERR_Code err = BERR_SUCCESS;
1569        BVDB_UsageMode *pMode;
1570
1571        BDBG_ASSERT(pVdb);
1572
1573        pMode = BLST_CQ_FIRST(pVdb);
1574        do 
1575        {
1576                err |= BVDB_P_ValidateVdbEntry(pVdb, pMode);
1577                pMode = BVDB_P_UsageMode_GetNextNode(pMode);
1578        } while (pMode != BLST_CQ_FIRST(pVdb));
1579
1580        return err;
1581}
1582
1583void BVDB_P_GetSourceFormatSetStr
1584        ( BVDB_SourceFormatSet  eSrcFmtSet,
1585          char                 *pcStr )
1586{
1587        switch (eSrcFmtSet)
1588        {
1589                case BVDB_SrcFmtSet_eNtsc:
1590                        strcpy((void *)pcStr, "NTSC");
1591                        break;
1592                case BVDB_SrcFmtSet_ePal:
1593                        strcpy((void *)pcStr, "PAL");
1594                        break;
1595                case BVDB_SrcFmtSet_e480p:
1596                        strcpy((void *)pcStr, "480p");
1597                        break;
1598                case BVDB_SrcFmtSet_e576p:
1599                        strcpy((void *)pcStr, "576p");
1600                        break;
1601                case BVDB_SrcFmtSet_e720p_50:
1602                        strcpy((void *)pcStr, "720p@50");
1603                        break;
1604                case BVDB_SrcFmtSet_e720p_60:
1605                        strcpy((void *)pcStr, "720p@60");
1606                        break;
1607                case BVDB_SrcFmtSet_e1080i_50:
1608                        strcpy((void *)pcStr, "1080i@50");
1609                        break;
1610                case BVDB_SrcFmtSet_e1080i_60:                         
1611                        strcpy((void *)pcStr, "1080i@60");
1612                        break;
1613                case BVDB_SrcFmtSet_e1080p_24:
1614                        strcpy((void *)pcStr, "1080p@24");
1615                        break;
1616                case BVDB_SrcFmtSet_e1080p_25:
1617                        strcpy((void *)pcStr, "1080p@25");
1618                        break;
1619                case BVDB_SrcFmtSet_e1080p_30:
1620                        strcpy((void *)pcStr, "1080p@30");
1621                        break;
1622                case BVDB_SrcFmtSet_e1080p_50:
1623                        strcpy((void *)pcStr, "1080p@50");
1624                        break;
1625                case BVDB_SrcFmtSet_e1080p_60:
1626                        strcpy((void *)pcStr, "1080p@60");
1627                        break;
1628                case BVDB_SrcFmtSet_ePal_60:
1629                        strcpy((void *)pcStr, "PAL-60");
1630                        break;
1631                case BVDB_SrcFmtSet_e720p_24:
1632                        strcpy((void *)pcStr, "720p@24");
1633                        break;
1634                case BVDB_SrcFmtSet_e720p_25:
1635                        strcpy((void *)pcStr, "720p@25");
1636                        break;
1637                case BVDB_SrcFmtSet_e720p_30:
1638                        strcpy((void *)pcStr, "720p@30");
1639                        break;
1640                case BVDB_SrcFmtSet_e544_576i_50:
1641                        strcpy((void *)pcStr, "544x576i@50_Group");
1642                        break;
1643                case BVDB_SrcFmtSet_e1440_1080i_50:
1644                        strcpy((void *)pcStr, "1440x1080i@50_Group");
1645                        break;
1646                case BVDB_SrcFmtSet_e1440_1080p_25:
1647                        strcpy((void *)pcStr, "1440x1080p@25_Group");
1648                        break; 
1649                case BVDB_SrcFmtSet_e544_480i_60:
1650                        strcpy((void *)pcStr, "544x480i@50_Group");
1651                        break;
1652                case BVDB_SrcFmtSet_e1440_1080i_60:
1653                        strcpy((void *)pcStr, "1440x1080i@60_Group");
1654                        break;
1655                case BVDB_SrcFmtSet_e1440_1080p_30:
1656                        strcpy((void *)pcStr, "1440x1080p@30_Group");
1657                        break;
1658                case BVDB_SrcFmtSet_e1440_1080p_24:
1659                        strcpy((void *)pcStr, "1440x1080p@24_Group");
1660                        break;                                                 
1661                case BVDB_SrcFmtSet_e1024_768_PC:
1662                        strcpy((void *)pcStr, "1024x768_PC@60_Group");
1663                        break;
1664                case BVDB_SrcFmtSet_e1280_768_PC:
1665                        strcpy((void *)pcStr, "1280x768_PC@85_Group");
1666                        break;
1667                case BVDB_SrcFmtSet_e1400_1050_PC:
1668                        strcpy((void *)pcStr, "1400x1050_PC@75_Group");
1669                        break;                         
1670                case BVDB_SrcFmtSet_e1600_1200_PC:
1671                        strcpy((void *)pcStr, "1600x1200_PC@60_Group");
1672                        break;
1673                case BVDB_SrcFmtSet_eAdcCalibration:
1674                        strcpy((void *)pcStr, "ADC_Calibration");
1675                        break;
1676                case BVDB_SrcFmtSet_eJpeg:
1677                        strcpy((void *)pcStr, "JPEG");
1678                        break;
1679                case BVDB_SrcFmtSet_eInvalid:
1680                default:
1681                        break;
1682        }
1683}
1684
1685void BVDB_P_GetDisplayStr
1686        ( BVDB_Display        eDisplay,
1687          char               *pcStr )
1688{
1689        switch (eDisplay)
1690        {
1691                case BVDB_Display_ePrimary48:
1692                        strcpy((void *)pcStr, "Primary@48");
1693                        break;
1694                case BVDB_Display_ePrimary50:
1695                        strcpy((void *)pcStr, "Primary@50");
1696                        break;
1697                case BVDB_Display_ePrimary60:
1698                        strcpy((void *)pcStr, "Primary@60");
1699                        break;
1700                case BVDB_Display_eSecondary50:
1701                        strcpy((void *)pcStr, "Secondary@50");
1702                        break;
1703                case BVDB_Display_eSecondary60:
1704                        strcpy((void *)pcStr, "Secondary@60");
1705                        break;
1706                case BVDB_Display_eInvalid:
1707                default:
1708                        break;
1709        }
1710}
1711
1712void BVDB_P_GetWindowStr
1713        ( BVDB_Window         eWin,
1714          char               *pcStr )
1715{
1716        switch (eWin)
1717        {
1718                case BVDB_Window_eMain:
1719                        strcpy((void *)pcStr, "Main");
1720                        break;
1721                case BVDB_Window_ePip:
1722                        strcpy((void *)pcStr, "PIP");
1723                        break;
1724                case BVDB_Window_eVcr:
1725                        strcpy((void *)pcStr, "VCR_out");
1726                        break;
1727                case BVDB_Window_eInvalid:
1728                default:
1729                        break;         
1730        }
1731}
1732
1733void BVDB_P_GetInputStr
1734        ( BVDB_Input          eInput,
1735          char               *pcStr )
1736{
1737        switch (eInput)
1738        {
1739                case BVDB_Input_eCvbsSvidIfd:
1740                        strcpy((void *)pcStr, "CVBS/S-video/IFD");
1741                        break;
1742                case BVDB_Input_eComponent:
1743                        strcpy((void *)pcStr, "Component");
1744                        break;
1745                case BVDB_Input_eMfd:
1746                        strcpy((void *)pcStr, "MFD");
1747                        break;
1748                case BVDB_Input_eHdDvi:
1749                        strcpy((void *)pcStr, "HD-DVI");
1750                        break;
1751                case BVDB_Input_eVga:
1752                        strcpy((void *)pcStr, "VGA");
1753                        break;
1754                case BVDB_Input_e656:
1755                        strcpy((void *)pcStr, "656");
1756                        break;
1757                case BVDB_Input_eInvalid:
1758                default:
1759                        break;
1760        }
1761}
1762
1763void BVDB_P_GetVideoDisplayModeStr
1764        ( BVDB_VideoDisplayMode  *pstVidDispMode,
1765          char                   *pcStr )
1766{
1767        bool bStrEmpty = true;
1768        uint32_t ulModes;
1769
1770        ulModes = *(uint32_t*)pstVidDispMode;
1771       
1772        if (BVDB_DISP_MODE_IS_FULL(&ulModes) == BVDB_P_DISPLAY_MODE_ALL_FULL_MODES_MASK)
1773        {
1774                strcpy(pcStr, "all_FULL_modes");
1775        }
1776        else if (BVDB_DISP_MODE_IS_PIG(&ulModes) == BVDB_P_DISPLAY_MODE_ALL_PIG_MODES_MASK)
1777        {
1778                strcpy(pcStr, "all_PIG_modes");
1779        }
1780        else if (BVDB_DISP_MODE_IS_PIP(&ulModes) == BVDB_P_DISPLAY_MODE_ALL_PIP_MODES_MASK)
1781        {
1782                strcpy(pcStr, "all_PIP_modes");
1783        }
1784        else if (BVDB_DISP_MODE_IS_VCR(&ulModes) == BVDB_P_DISPLAY_MODE_ALL_VCR_MODES_MASK)
1785        {
1786                strcpy(pcStr, "all_VCR_modes");
1787        }
1788        else 
1789        {
1790                uint32_t ulCount = 0;
1791                do 
1792                {
1793                        if (ulModes & 0x1)
1794                        {
1795                                switch (ulCount)
1796                                {
1797                                        case 0: /* FULL 1 */
1798                                                if (bStrEmpty)
1799                                                {
1800                                                        strcpy(pcStr, "FULL_1");
1801                                                        bStrEmpty = false;
1802                                                }
1803                                                else
1804                                                        strcat(pcStr, ",FULL_1");
1805                                                break;
1806                                        case 1: /* FULL 2 */
1807                                                if (bStrEmpty)
1808                                                {
1809                                                        strcpy(pcStr, "FULL_2");
1810                                                        bStrEmpty = false;
1811                                                }
1812                                                else
1813                                                        strcat(pcStr, ",FULL_2");
1814                                                break;
1815                                        case 2: /* FULL 3 */
1816                                                if (bStrEmpty)
1817                                                {
1818                                                        strcpy(pcStr, "FULL_3");
1819                                                        bStrEmpty = false;
1820                                                }
1821                                                else
1822                                                        strcat(pcStr, ",FULL_3");
1823                                                break;
1824                                        case 3: /* FULL 4 */
1825                                                if (bStrEmpty)
1826                                                {
1827                                                        strcpy(pcStr, "FULL_4");
1828                                                        bStrEmpty = false;
1829                                                }
1830                                                else
1831                                                        strcat(pcStr, ",FULL_4");
1832                                                break;
1833                                        case 4: /* FULL 5 */
1834                                                if (bStrEmpty)
1835                                                {
1836                                                        strcpy(pcStr, "FULL_5");
1837                                                        bStrEmpty = false;
1838                                                }
1839                                                else
1840                                                        strcat(pcStr, ",FULL_5");
1841                                                break;
1842                                        case 5: /* FULL 6 */
1843                                                if (bStrEmpty)
1844                                                {
1845                                                        strcpy(pcStr, "FULL_6");
1846                                                        bStrEmpty = false;
1847                                                }
1848                                                else
1849                                                        strcat(pcStr, ",FULL_6");
1850                                                break;
1851                                        case 6: /* PIG 1 */
1852                                                if (bStrEmpty)
1853                                                {
1854                                                        strcpy(pcStr, "PIG_1");
1855                                                        bStrEmpty = false;
1856                                                }
1857                                                else
1858                                                        strcat(pcStr, ",PIG_1");
1859                                                break;
1860                                        case 7: /* PIG 2 */
1861                                                if (bStrEmpty)
1862                                                {
1863                                                        strcpy(pcStr, "PIG_2");
1864                                                        bStrEmpty = false;
1865                                                }
1866                                                else
1867                                                        strcat(pcStr, ",PIG_2");
1868                                                break;
1869                                        case 8: /* PIG 3 */
1870                                                if (bStrEmpty)
1871                                                {
1872                                                        strcpy(pcStr, "PIG_3");
1873                                                        bStrEmpty = false;
1874                                                }
1875                                                else
1876                                                        strcat(pcStr, ",PIG_3");
1877                                                break;
1878                                        case 9: /* PIG 4 */
1879                                                if (bStrEmpty)
1880                                                {
1881                                                        strcpy(pcStr, "PIG_4");
1882                                                        bStrEmpty = false;
1883                                                }
1884                                                else
1885                                                        strcat(pcStr, ",PIG_4");
1886                                                break;
1887                                        case 10: /* PIG 5 */
1888                                                if (bStrEmpty)
1889                                                {
1890                                                        strcpy(pcStr, "PIG_5");
1891                                                        bStrEmpty = false;
1892                                                }
1893                                                else
1894                                                        strcat(pcStr, ",PIG_5");
1895                                                break;
1896                                        case 11: /* PIG 6 */
1897                                                if (bStrEmpty)
1898                                                {
1899                                                        strcpy(pcStr, "PIG_6");
1900                                                        bStrEmpty = false;
1901                                                }
1902                                                else
1903                                                        strcat(pcStr, ",PIG_6");
1904                                                break;
1905                                        case 12: /* PIP */
1906                                                if (bStrEmpty)
1907                                                {
1908                                                        strcpy(pcStr, "PIP_1");
1909                                                        bStrEmpty = false;
1910                                                }
1911                                                else
1912                                                        strcat(pcStr, ",PIP_1");
1913                                                break;
1914                                        case 13: /* PBP */
1915                                                if (bStrEmpty)
1916                                                {
1917                                                        strcpy(pcStr, "PIP_2");
1918                                                        bStrEmpty = false;
1919                                                }
1920                                                else
1921                                                        strcat(pcStr, ",PIP_2");
1922                                                break;
1923                                        case 14: /* PIP (no clip)*/
1924                                                if (bStrEmpty)
1925                                                {
1926                                                        strcpy(pcStr, "PIP_3");
1927                                                        bStrEmpty = false;
1928                                                }
1929                                                else
1930                                                        strcat(pcStr, ",PIP_3");
1931                                                break;                                         
1932                                        case 15: /* VCR 1 */
1933                                                if (bStrEmpty)
1934                                                {
1935                                                        strcpy(pcStr, "VCR_1");
1936                                                        bStrEmpty = false;
1937                                                }
1938                                                else
1939                                                        strcat(pcStr, ",VCR_1");
1940                                                break;
1941                                        case 16: /* VCR 2 */
1942                                                if (bStrEmpty)
1943                                                {
1944                                                        strcpy(pcStr, "VCR_2");
1945                                                        bStrEmpty = false;
1946                                                }
1947                                                else
1948                                                        strcat(pcStr, ",VCR_2");
1949                                                break;
1950                                        case 17: /* Unknown */
1951                                                break;
1952                                        default:
1953                                                break;
1954                                }
1955                        }
1956                        ulModes >>= 1;
1957                        ulCount++;
1958                } while (ulCount < 18);
1959        }
1960}
1961
1962void BVDB_P_GetOsdStr
1963        ( BVDB_Osd            eOsd,
1964          char               *pcStr )
1965{
1966        switch (eOsd)
1967        {
1968                case BVDB_Osd_e1080p_32bpp:
1969                        strcpy((void *)pcStr, "1920x1080@32bpp");
1970                        break;
1971                case BVDB_Osd_e1366_768p_32bpp:
1972                        strcpy((void *)pcStr, "1366x768@32bpp");
1973                        break;
1974                case BVDB_Osd_e1024_768p_32bpp:
1975                        strcpy((void *)pcStr, "1024x768@32bpp");
1976                        break;
1977                case BVDB_Osd_e480i_8bpp:
1978                        strcpy((void *)pcStr, "480@8bpp");
1979                        break;
1980                case BVDB_Osd_e576i_8bpp:
1981                        strcpy((void *)pcStr, "576@8bpp");
1982                        break;
1983                case BVDB_Osd_eNone:
1984                        strcpy((void *)pcStr, "none");
1985                        break;                 
1986                case BVDB_Osd_eInvalid:
1987                        strcpy((void *)pcStr, "n/a");
1988                        break;
1989                default:
1990                        break;
1991        }
1992}
1993
1994void BVDB_P_GetPixelFormatStr
1995        ( BVDB_PixelFormat    ePxlFormat,
1996          BVDB_State          eState,
1997          char               *pcStr )
1998{
1999        switch (ePxlFormat)
2000        {
2001                case BVDB_PixelFmt_e8Bit422:
2002                        strcpy((void *)pcStr, "8-bit 422");
2003                        break;
2004                case BVDB_PixelFmt_e10Bit422:
2005                        strcpy((void *)pcStr, "10-bit 422");
2006                        break;
2007                case BVDB_PixelFmt_e10Bit444:
2008                        strcpy((void *)pcStr, "10-bit 444");
2009                        break;
2010                case BVDB_PixelFmt_eInvalid:
2011                        if (eState == BVDB_State_eNo)
2012                                strcpy((void *)pcStr, "no\tno");
2013                        else 
2014                                strcpy((void *)pcStr, "n/a\tn/a");
2015                default:
2016                        break;
2017        }
2018}
2019
2020void BVDB_P_GetFieldStoreCntStr
2021        ( BVDB_DeinterlacerFieldStore     eFieldStore,
2022          char                           *pcStr )
2023{
2024        switch (eFieldStore)
2025        {
2026                case BVDB_FieldStore_e3Fields:
2027                        strcpy((void *)pcStr, "3-field");
2028                        break;
2029                case BVDB_FieldStore_e4Fields:
2030                        strcpy((void *)pcStr, "4-field");
2031                        break;
2032                case BVDB_FieldStore_e5Fields:
2033                        strcpy((void *)pcStr, "5-field");
2034                        break;
2035                case BVDB_FieldStore_eNotApplicable:
2036                        strcpy((void *)pcStr, "n/a");
2037                        break;         
2038        }
2039}
2040
2041void BVDB_P_GetRtsSetStr
2042        ( BVDB_RtsSet         eRtsSet,
2043          char               *pcStr )
2044{
2045        switch (eRtsSet)
2046        {
2047                case BVDB_RtsSet_eNotApplicable:
2048                        strcpy(pcStr, "n/a");
2049                        break;
2050                case BVDB_RtsSet_eTBD:
2051                        strcpy(pcStr, "TBD");
2052                        break;
2053                case BVDB_RtsSet_e0:
2054                        strcpy(pcStr, "0");
2055                        break;
2056                case BVDB_RtsSet_e1:
2057                        strcpy(pcStr, "1");
2058                        break;
2059                case BVDB_RtsSet_e2:
2060                        strcpy(pcStr, "2");
2061                        break;
2062                case BVDB_RtsSet_e3:
2063                        strcpy(pcStr, "3");
2064                        break;
2065                case BVDB_RtsSet_e4:
2066                        strcpy(pcStr, "4");
2067                        break;
2068                case BVDB_RtsSet_e5:           
2069                        strcpy(pcStr, "5");
2070                        break;         
2071                case BVDB_RtsSet_e6:
2072                        strcpy(pcStr, "6");
2073                        break;                 
2074                case BVDB_RtsSet_e7:
2075                        strcpy(pcStr, "7");
2076                        break;         
2077                case BVDB_RtsSet_e8:
2078                        strcpy(pcStr, "8");
2079                        break;                 
2080                case BVDB_RtsSet_e9:
2081                        strcpy(pcStr, "9");
2082                        break;                 
2083                case BVDB_RtsSet_e10:
2084                        strcpy(pcStr, "10");
2085                        break;                 
2086                case BVDB_RtsSet_e11:
2087                        strcpy(pcStr, "11");
2088                        break;                 
2089                case BVDB_RtsSet_e12:
2090                        strcpy(pcStr, "12");
2091                        break;                 
2092                case BVDB_RtsSet_e13:
2093                        strcpy(pcStr, "13");
2094                        break;                 
2095                case BVDB_RtsSet_e14:
2096                        strcpy(pcStr, "14");
2097                        break;                 
2098                case BVDB_RtsSet_e15:
2099                        strcpy(pcStr, "15");
2100                        break;                 
2101                case BVDB_RtsSet_e16:
2102                        strcpy(pcStr, "16");
2103                        break;                 
2104                case BVDB_RtsSet_e17:
2105                        strcpy(pcStr, "17");
2106                        break;                 
2107                case BVDB_RtsSet_e18:
2108                        strcpy(pcStr, "18");
2109                        break;                                 
2110                case BVDB_RtsSet_e19:
2111                        strcpy(pcStr, "19");
2112                        break;                 
2113                case BVDB_RtsSet_e20:
2114                        strcpy(pcStr, "20");
2115                        break;                 
2116                case BVDB_RtsSet_e21:
2117                        strcpy(pcStr, "21");
2118                        break;                 
2119                case BVDB_RtsSet_e22:
2120                        strcpy(pcStr, "22");
2121                        break;                 
2122                case BVDB_RtsSet_e23:
2123                        strcpy(pcStr, "23");
2124                        break;                 
2125                case BVDB_RtsSet_e24:
2126                        strcpy(pcStr, "24");
2127                        break;                 
2128                case BVDB_RtsSet_e25:
2129                        strcpy(pcStr, "25");
2130                        break;         
2131                }
2132}
2133
2134void BVDB_P_GetStateStr
2135        ( BVDB_State         eState,
2136          char              *pcStr )
2137{
2138        switch (eState)
2139        {
2140                case BVDB_State_eNo:
2141                        strcpy(pcStr, "no");
2142                        break;
2143                case BVDB_State_eYes:
2144                        strcpy(pcStr, "yes");
2145                        break;
2146                case BVDB_State_eNotApplicable:
2147                        strcpy(pcStr, "n/a");
2148                        break; 
2149        }
2150}
2151
2152void BVDB_P_GetSclCapBiasStr
2153        ( BVDB_ScalerCaptureBias  eBias,
2154          char                   *pcStr )
2155{
2156        switch (eBias)
2157        {
2158                case BVDB_SclCapBias_eAuto:
2159                        strcpy(pcStr, "auto");
2160                        break;
2161                case BVDB_SclCapBias_eSclCap:
2162                        strcpy(pcStr, "scl-cap");
2163                        break;
2164                case BVDB_SclCapBias_eCapScl:
2165                        strcpy(pcStr, "cap-scl");
2166                        break;
2167                default:
2168                        break;
2169        }
2170}
2171
2172
2173
2174#if 0
2175BERR_Code BVDB_P_ValidateSourceFormat
2176        BFMT_VideoFmt       eSourceFmt,
2177        BVDB_UsageMode     *pstUsageMode )
2178{
2179       
2180       
2181        return err;
2182}
2183#endif
2184
Note: See TracBrowser for help on using the repository browser.