source: svn/trunk/newcon3bcm2_21bu/magnum/commonutils/xdm/bxdm_pp.c @ 2

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

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 73.7 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2003-2012, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bxdm_pp.c $
11 * $brcm_Revision: Hydra_Software_Devel/22 $
12 * $brcm_Date: 3/16/12 11:56a $
13 *
14 * [File Description:]
15 *
16 * Revision History:
17 *
18 * $brcm_Log: /magnum/commonutils/xdm/bxdm_pp.c $
19 *
20 * Hydra_Software_Devel/22   3/16/12 11:56a btosi
21 * SW7425-2536: added support for displayInterruptStatus_isr
22 *
23 * Hydra_Software_Devel/21   3/1/12 1:28p btosi
24 * SW7405-4736: removed BERR_TRACE from
25 * BXDM_PictureProvider_GetNextPTSInfo_isr
26 *
27 * Hydra_Software_Devel/20   2/1/12 1:56p btosi
28 * SW7425-2270: add support for IgnoreNRTUnderflow
29 *
30 * Hydra_Software_Devel/19   1/19/12 11:12a btosi
31 * SW7425-1264: BXDM_PictureProvider_SetClockOverride_isr, print the new
32 * STC value in hex
33 *
34 * Hydra_Software_Devel/18   10/3/11 2:19p btosi
35 * SW7425-1264:  support for a SW STC internal to XDM
36 *
37 * Hydra_Software_Devel/17   5/10/11 1:40p btosi
38 * SW7405-4736: added range checking and debug messages for the input
39 * parameters
40 *
41 * Hydra_Software_Devel/16   12/16/10 9:12a btosi
42 * SW7422-72: fixed warnings
43 *
44 * Hydra_Software_Devel/15   11/17/10 9:37a btosi
45 * SW7422-72: added new BXVD and XDM 3D API's
46 *
47 * Hydra_Software_Devel/14   10/21/10 6:20p davidp
48 * SWBLURAY-23012: Add NULL handle test in
49 * BXDM_PictureProvider_GetMonitorRefreshRate_isr.
50 *
51 * Hydra_Software_Devel/13   10/1/10 2:50p btosi
52 * SWDEPRECATED-1003: added support for bTreatAsSingleElement
53 *
54 * Hydra_Software_Devel/12   9/23/10 3:09p btosi
55 * SW7405-4736: add support for a XDM instance ID to help debug multi-
56 * channel issues
57 *
58 * Hydra_Software_Devel/11   9/15/10 12:06p btosi
59 * SWDEPRECATED-1003: added BXDM_PictureProvider_SetFrameRateOverride_isr
60 * and supporting logic
61 *
62 * Hydra_Software_Devel/10   9/14/10 11:56a btosi
63 * SWDEPRECATED-1003: added BXDM_PictureProvider_SetTrickMode_isr to
64 * primarily disable the FIC logic when receiving video with sparse
65 * pictures
66 *
67 * Hydra_Software_Devel/9   8/5/10 8:29a delkert
68 * SW7405-4703: Add HorizontalOverscanMode to allow bypass of Overscan
69 * calculation.  Added appropriate Get/Set APIs
70 *
71 * Hydra_Software_Devel/8   8/3/10 2:03p btosi
72 * SW7400-2870: added BXVD_[Set/Get]PlaybackRate(_isr)
73 *
74 * Hydra_Software_Devel/7   5/11/10 1:33p btosi
75 * SW7405-4117: added usage note
76 *
77 * Hydra_Software_Devel/6   4/29/10 10:47a btosi
78 * SW7405-4117: added support for ...DisplayFieldMode_eAuto
79 *
80 * Hydra_Software_Devel/5   3/1/10 10:12a nilesh
81 * SW7405-2993: Fixed compiler warnings for unused parameters
82 *
83 * Hydra_Software_Devel/4   2/24/10 11:56a nilesh
84 * SW7405-2993: Fixed BDBG_MSG printout
85 *
86 * Hydra_Software_Devel/3   2/19/10 2:40p nilesh
87 * SW7405-2993: Removed warning BERR_TRACE around return code for
88 * BXDM_PictureProvider_GetCurrentPicture_isr
89 *
90 * Hydra_Software_Devel/2   2/19/10 11:09a nilesh
91 * SW7405-2993: Made the DIH handle a property of the picture provider so
92 * that the PDR callback can persist over a stop/start decode
93 *
94 * Hydra_Software_Devel/1   2/16/10 10:51a nilesh
95 * SW7405-2993: Initial XDM version
96 *
97 ***************************************************************************/
98
99#include "bstd.h"
100#include "bkni.h"
101#include "btmr.h"
102
103#include "bxdm_pp.h"
104#include "bxdm_pp_priv.h"
105
106BDBG_MODULE(BXDM_PP);
107
108BERR_Code
109BXDM_PictureProvider_SetDecoderInterface_isr(
110         BXDM_PictureProvider_Handle hXdmPP,
111         BXDM_Decoder_Interface *pstDecoderInterface,
112         void *pPrivateContext
113         )
114{
115   BERR_Code rc = BERR_SUCCESS;
116   BDBG_ENTER(BXDM_PictureProvider_SetDecoderInterface_isr);
117
118   BDBG_ASSERT( hXdmPP );
119   BDBG_ASSERT( pstDecoderInterface );
120
121   BDBG_MSG(("BXDM_PictureProvider_SetDecoderInterface_isr(%p, 0x%08x, 0x%08x)",
122               hXdmPP,
123               pstDecoderInterface,
124               pPrivateContext
125               ));
126
127   hXdmPP->stDMConfig.stDecoderInterface = *pstDecoderInterface;
128   hXdmPP->stDMConfig.pDecoderPrivateContext = pPrivateContext;
129
130   BDBG_LEAVE(BXDM_PictureProvider_SetDecoderInterface_isr);
131   return BERR_TRACE( rc );
132}
133
134BERR_Code
135BXDM_PictureProvider_GetDefaultDecoderInterface_isr(
136         BXDM_Decoder_Interface *pstDecoderInterface
137         )
138{
139   BERR_Code rc = BERR_SUCCESS;
140   BDBG_ENTER(BXDM_PictureProvider_GetDefaultDecoderInterface_isr);
141
142   BDBG_ASSERT( pstDecoderInterface );
143
144   BDBG_MSG(("BXDM_PictureProvider_GetDefaultDecoderInterface_isr(0x%08x)",
145               pstDecoderInterface
146               ));
147
148   BKNI_Memset( pstDecoderInterface, 0, sizeof( BXDM_Decoder_Interface ) );
149
150   BDBG_LEAVE(BXDM_PictureProvider_GetDefaultDecoderInterface_isr);
151   return BERR_TRACE( rc );
152}
153
154BERR_Code
155BXDM_PictureProvider_GetDefaultChannelChangeSettings(
156         BXDM_PictureProvider_Handle hXdmPP,
157         BXDM_PictureProvider_ChannelChangeSettings *pstChannelChangeSettings
158         )
159{
160   BERR_Code rc = BERR_SUCCESS;
161   BDBG_ENTER(BXDM_PictureProvider_GetDefaultChannelChangeSettings_isr);
162
163   BDBG_ASSERT( hXdmPP );
164   BDBG_ASSERT( pstChannelChangeSettings );
165
166   BSTD_UNUSED( hXdmPP );
167
168   BKNI_Memset(pstChannelChangeSettings, 0, sizeof ( BXDM_PictureProvider_ChannelChangeSettings ));
169
170   BDBG_LEAVE(BXDM_PictureProvider_GetDefaultChannelChangeSettings_isr);
171   return BERR_TRACE( rc );
172}
173
174BERR_Code
175BXDM_PictureProvider_SetChannelChangeSettings_isr(
176         BXDM_PictureProvider_Handle hXdmPP,
177         const BXDM_PictureProvider_ChannelChangeSettings *pstChannelChangeSettings
178         )
179{
180   BERR_Code rc = BERR_SUCCESS;
181   BDBG_ENTER(BXDM_PictureProvider_SetChannelChangeSettings_isr);
182
183   BDBG_ASSERT( hXdmPP );
184   BDBG_ASSERT( pstChannelChangeSettings );
185
186   BDBG_MSG(("BXDM_PictureProvider_SetChannelChangeSettings_isr(%p, hlp:%d, fpp: %d)",
187                  hXdmPP,
188                  pstChannelChangeSettings->bHoldLastPicture,
189                  pstChannelChangeSettings->bFirstPicturePreview
190                  ));
191
192   hXdmPP->stDMConfig.stChannelChangeSettings = *pstChannelChangeSettings;
193
194   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_CHANNEL_CHANGE_SETTINGS;
195
196   BDBG_LEAVE(BXDM_PictureProvider_SetChannelChangeSettings_isr);
197   return BERR_TRACE( rc );
198}
199
200BERR_Code
201BXDM_PictureProvider_GetChannelChangeSettings_isr(
202         BXDM_PictureProvider_Handle hXdmPP,
203         BXDM_PictureProvider_ChannelChangeSettings *pstChannelChangeSettings
204         )
205{
206   BERR_Code rc = BERR_SUCCESS;
207   BDBG_ENTER(BXDM_PictureProvider_GetChannelChangeSettings_isr);
208
209   BDBG_ASSERT( hXdmPP );
210   BDBG_ASSERT( pstChannelChangeSettings );
211
212   *pstChannelChangeSettings = hXdmPP->stDMConfig.stChannelChangeSettings;
213
214   BDBG_LEAVE(BXDM_PictureProvider_GetChannelChangeSettings_isr);
215   return BERR_TRACE( rc );
216}
217
218BERR_Code
219BXDM_PictureProvider_SetMuteMode_isr(
220         BXDM_PictureProvider_Handle hXdmPP,
221         bool bEnable
222         )
223{
224   BERR_Code rc = BERR_SUCCESS;
225   BDBG_ENTER(BXDM_PictureProvider_SetMuteMode_isr);
226
227   BDBG_ASSERT( hXdmPP );
228
229   BDBG_MSG(("BXDM_PictureProvider_SetMuteMode_isr(%p, %d)",
230                  hXdmPP,
231                  bEnable
232                  ));
233
234   hXdmPP->stDMConfig.bMute = bEnable;
235
236   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_MUTE;
237
238   BDBG_LEAVE(BXDM_PictureProvider_SetMuteMode_isr);
239   return BERR_TRACE( rc );
240}
241
242BERR_Code
243BXDM_PictureProvider_GetMuteMode_isr(
244         BXDM_PictureProvider_Handle hXdmPP,
245         bool *pbEnable
246         )
247{
248   BERR_Code rc = BERR_SUCCESS;
249   BDBG_ENTER(BXDM_PictureProvider_GetMuteMode_isr);
250
251   BDBG_ASSERT( hXdmPP );
252   BDBG_ASSERT( pbEnable );
253
254   *pbEnable = hXdmPP->stDMConfig.bMute;
255
256   BDBG_LEAVE(BXDM_PictureProvider_GetMuteMode_isr);
257   return BERR_TRACE( rc );
258}
259
260BERR_Code
261BXDM_PictureProvider_SetDisplayFieldMode_isr(
262         BXDM_PictureProvider_Handle hXdmPP,
263         BXDM_PictureProvider_DisplayFieldMode eDisplayFieldMode
264         )
265{
266   BERR_Code rc = BERR_SUCCESS;
267   BDBG_ENTER(BXDM_PictureProvider_SetDisplayFieldMode_isr);
268
269   BDBG_ASSERT( hXdmPP );
270
271   BDBG_MSG(("BXDM_PictureProvider_SetDisplayFieldMode_isr(%p, %d)",
272                  hXdmPP,
273                  eDisplayFieldMode
274                  ));
275
276   if ( eDisplayFieldMode >= BXDM_PictureProvider_DisplayFieldMode_eMax )
277   {
278      BDBG_WRN(("BXDM_PictureProvider_SetDisplayFieldMode_isr:: eDisplayFieldMode value of %d is out of range", eDisplayFieldMode ));
279      rc = BERR_INVALID_PARAMETER;
280   }
281   else
282   {
283      hXdmPP->stDMConfig.eDisplayFieldMode = eDisplayFieldMode;
284
285      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_DISPLAY_FIELD_MODE;
286   }
287
288   BDBG_LEAVE(BXDM_PictureProvider_SetDisplayFieldMode_isr);
289   return BERR_TRACE( rc );
290}
291
292BERR_Code
293BXDM_PictureProvider_GetDisplayFieldMode_isr(
294         BXDM_PictureProvider_Handle hXdmPP,
295         BXDM_PictureProvider_DisplayFieldMode *peDisplayFieldMode
296         )
297{
298   BERR_Code rc = BERR_SUCCESS;
299   BDBG_ENTER(BXDM_PictureProvider_GetDisplayFieldMode_isr);
300
301   BDBG_ASSERT( hXdmPP );
302   BDBG_ASSERT( peDisplayFieldMode );
303
304   *peDisplayFieldMode = hXdmPP->stDMConfig.eDisplayFieldMode;
305
306   BDBG_LEAVE(BXDM_PictureProvider_GetDisplayFieldMode_isr);
307   return BERR_TRACE( rc );
308}
309
310BERR_Code
311BXDM_PictureProvider_SetSourceFormatOverride_isr(
312         BXDM_PictureProvider_Handle hXdmPP,
313         BXDM_PictureProvider_SourceFormatOverride eSourceFormatOverride
314         )
315{
316   BERR_Code rc = BERR_SUCCESS;
317   BDBG_ENTER(BXDM_PictureProvider_SetSourceFormatOverride_isr);
318
319   BDBG_ASSERT( hXdmPP );
320
321   BDBG_MSG(("BXDM_PictureProvider_SetSourceFormatOverride_isr(%p, %d)",
322                  hXdmPP,
323                  eSourceFormatOverride
324                  ));
325
326   if ( eSourceFormatOverride >= BXDM_PictureProvider_SourceFormatOverride_eMax )
327   {
328      BDBG_WRN(("BXDM_PictureProvider_SetSourceFormatOverride_isr:: eSourceFormatOverride value of %d is out of range", eSourceFormatOverride ));
329      rc = BERR_INVALID_PARAMETER;
330   }
331   else
332   {
333      hXdmPP->stDMConfig.eSourceFormatOverride = eSourceFormatOverride;
334
335      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_SRC_FORMAT_OVERRIDE;
336   }
337
338   BDBG_LEAVE(BXDM_PictureProvider_SetSourceFormatOverride_isr);
339   return BERR_TRACE( rc );
340}
341
342BERR_Code
343BXDM_PictureProvider_GetSourceFormatOverride_isr(
344         BXDM_PictureProvider_Handle hXdmPP,
345         BXDM_PictureProvider_SourceFormatOverride *peSourceFormatOverride
346         )
347{
348   BERR_Code rc = BERR_SUCCESS;
349   BDBG_ENTER(BXDM_PictureProvider_GetSourceFormatOverride_isr);
350
351   BDBG_ASSERT( hXdmPP );
352   BDBG_ASSERT( peSourceFormatOverride );
353
354   *peSourceFormatOverride = hXdmPP->stDMConfig.eSourceFormatOverride;
355
356   BDBG_LEAVE(BXDM_PictureProvider_GetSourceFormatOverride_isr);
357   return BERR_TRACE( rc );
358}
359
360BERR_Code
361BXDM_PictureProvider_SetScanModeOverride_isr(
362         BXDM_PictureProvider_Handle hXdmPP,
363         BXDM_PictureProvider_ScanModeOverride eScanModeOverride
364         )
365{
366   BERR_Code rc = BERR_SUCCESS;
367   BDBG_ENTER(BXDM_PictureProvider_SetScanModeOverride_isr);
368
369   BDBG_ASSERT( hXdmPP );
370
371   BDBG_MSG(("BXDM_PictureProvider_SetScanModeOverride_isr(%p, %d)",
372                  hXdmPP,
373                  eScanModeOverride
374                  ));
375
376   if ( eScanModeOverride >= BXDM_PictureProvider_ScanModeOverride_eMax )
377   {
378      BDBG_WRN(("BXDM_PictureProvider_SetScanModeOverride_isr:: eScanModeOverride value of %d is out of range", eScanModeOverride ));
379      rc = BERR_INVALID_PARAMETER;
380   }
381   else
382   {
383      hXdmPP->stDMConfig.eScanModeOverride = eScanModeOverride;
384
385      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_SCAN_MODE_OVERRIDE;
386   }
387
388   BDBG_LEAVE(BXDM_PictureProvider_SetScanModeOverride_isr);
389   return BERR_TRACE( rc );
390}
391
392BERR_Code
393BXDM_PictureProvider_GetScanModeOverride_isr(
394         BXDM_PictureProvider_Handle hXdmPP,
395         BXDM_PictureProvider_ScanModeOverride *peScanModeOverride
396         )
397{
398   BERR_Code rc = BERR_SUCCESS;
399   BDBG_ENTER(BXDM_PictureProvider_GetScanModeOverride_isr);
400
401   BDBG_ASSERT( hXdmPP );
402   BDBG_ASSERT( peScanModeOverride );
403
404   *peScanModeOverride = hXdmPP->stDMConfig.eScanModeOverride;
405
406   BDBG_LEAVE(BXDM_PictureProvider_GetScanModeOverride_isr);
407   return BERR_TRACE( rc );
408}
409
410BERR_Code
411BXDM_PictureProvider_SetFreeze_isr(
412         BXDM_PictureProvider_Handle hXdmPP,
413         bool bEnable
414         )
415{
416   BERR_Code rc = BERR_SUCCESS;
417   BDBG_ENTER(BXDM_PictureProvider_SetFreeze_isr);
418
419   BDBG_ASSERT( hXdmPP );
420
421   BDBG_MSG(("BXDM_PictureProvider_SetFreeze_isr(%p, %d)",
422                  hXdmPP,
423                  bEnable
424                  ));
425
426   hXdmPP->stDMConfig.bFreeze = bEnable;
427
428   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_FREEZE;
429
430   BDBG_LEAVE(BXDM_PictureProvider_SetFreeze_isr);
431   return BERR_TRACE( rc );
432}
433
434BERR_Code
435BXDM_PictureProvider_GetFreeze_isr(
436         BXDM_PictureProvider_Handle hXdmPP,
437         bool *pbEnable
438         )
439{
440   BERR_Code rc = BERR_SUCCESS;
441   BDBG_ENTER(BXDM_PictureProvider_GetFreeze_isr);
442
443   BDBG_ASSERT( hXdmPP );
444   BDBG_ASSERT( pbEnable );
445
446   *pbEnable = hXdmPP->stDMConfig.bFreeze;
447
448   BDBG_LEAVE(BXDM_PictureProvider_GetFreeze_isr);
449   return BERR_TRACE( rc );
450}
451
452BERR_Code
453BXDM_PictureProvider_Set240iScanMode_isr(
454         BXDM_PictureProvider_Handle hXdmPP,
455         BXDM_PictureProvider_240iScanMode e240iScanMode
456         )
457{
458   BERR_Code rc = BERR_SUCCESS;
459   BDBG_ENTER(BXDM_PictureProvider_Set240iScanMode_isr);
460
461   BDBG_ASSERT( hXdmPP );
462
463   BDBG_MSG(("BXDM_PictureProvider_Set240iScanMode_isr(%p, %d)",
464                  hXdmPP,
465                  e240iScanMode
466                  ));
467   if ( e240iScanMode >= BXDM_PictureProvider_240iScanMode_eMax )
468   {
469      BDBG_WRN(("BXDM_PictureProvider_Set240iScanMode_isr:: e240iScanMode value of %d is out of range", e240iScanMode ));
470      rc = BERR_INVALID_PARAMETER;
471   }
472   else
473   {
474      hXdmPP->stDMConfig.e240iScanMode = e240iScanMode;
475
476      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_240I_SCAN_MODE;
477   }
478
479   BDBG_LEAVE(BXDM_PictureProvider_Set240iScanMode_isr);
480   return BERR_TRACE( rc );
481}
482
483BERR_Code
484BXDM_PictureProvider_Get240iScanMode_isr(
485         BXDM_PictureProvider_Handle hXdmPP,
486         BXDM_PictureProvider_240iScanMode *pe240iScanMode
487         )
488{
489   BERR_Code rc = BERR_SUCCESS;
490   BDBG_ENTER(BXDM_PictureProvider_Get240iScanMode_isr);
491
492   BDBG_ASSERT( hXdmPP );
493   BDBG_ASSERT( pe240iScanMode );
494
495   *pe240iScanMode = hXdmPP->stDMConfig.e240iScanMode;
496
497   BDBG_LEAVE(BXDM_PictureProvider_Get240iScanMode_isr);
498   return BERR_TRACE( rc );
499}
500
501BERR_Code
502BXDM_PictureProvider_Set480pPulldownMode_isr(
503         BXDM_PictureProvider_Handle hXdmPP,
504         BXDM_PictureProvider_PulldownMode ePulldownMode
505         )
506{
507   BERR_Code rc = BERR_SUCCESS;
508   BDBG_ENTER(BXDM_PictureProvider_Set480pPulldownMode_isr);
509
510   BDBG_ASSERT( hXdmPP );
511
512   BDBG_MSG(("BXDM_PictureProvider_Set480pPulldownMode_isr(%p, %d)",
513                  hXdmPP,
514                  ePulldownMode
515                  ));
516
517   if ( ePulldownMode >= BXDM_PictureProvider_PulldownMode_eMax )
518   {
519      BDBG_WRN(("BXDM_PictureProvider_Set480pPulldownMode_isr:: ePulldownMode value of %d is out of range", ePulldownMode ));
520      rc = BERR_INVALID_PARAMETER;
521   }
522   else
523   {
524      hXdmPP->stDMConfig.e480pPulldownMode = ePulldownMode;
525
526      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_480P_PULLDOWN_MODE;
527   }
528
529   BDBG_LEAVE(BXDM_PictureProvider_Set480pPulldownMode_isr);
530   return BERR_TRACE( rc );
531}
532
533BERR_Code
534BXDM_PictureProvider_Get480pPulldownMode_isr(
535         BXDM_PictureProvider_Handle hXdmPP,
536         BXDM_PictureProvider_PulldownMode *pePulldownMode
537         )
538{
539   BERR_Code rc = BERR_SUCCESS;
540   BDBG_ENTER(BXDM_PictureProvider_Get480pPulldownMode_isr);
541
542   BDBG_ASSERT( hXdmPP );
543   BDBG_ASSERT( pePulldownMode );
544
545   *pePulldownMode = hXdmPP->stDMConfig.e480pPulldownMode;
546
547   BDBG_LEAVE(BXDM_PictureProvider_Get480pPulldownMode_isr);
548   return BERR_TRACE( rc );
549}
550
551BERR_Code
552BXDM_PictureProvider_Set1080pPulldownMode_isr(
553         BXDM_PictureProvider_Handle hXdmPP,
554         BXDM_PictureProvider_PulldownMode ePulldownMode
555         )
556{
557   BERR_Code rc = BERR_SUCCESS;
558   BDBG_ENTER(BXDM_PictureProvider_Set1080pPulldownMode_isr);
559
560   BDBG_ASSERT( hXdmPP );
561
562   BDBG_MSG(("BXDM_PictureProvider_Set1080pPulldownMode_isr(%p, %d)",
563                  hXdmPP,
564                  ePulldownMode
565                  ));
566
567   if ( ePulldownMode >= BXDM_PictureProvider_PulldownMode_eMax )
568   {
569      BDBG_WRN(("BXDM_PictureProvider_Set1080pPulldownMode_isr:: ePulldownMode value of %d is out of range", ePulldownMode ));
570      rc = BERR_INVALID_PARAMETER;
571   }
572   else
573   {
574      hXdmPP->stDMConfig.e1080pPulldownMode = ePulldownMode;
575
576      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_1080P_PULLDOWN_MODE;
577   }
578
579   BDBG_LEAVE(BXDM_PictureProvider_Set1080pPulldownMode_isr);
580   return BERR_TRACE( rc );
581}
582
583BERR_Code
584BXDM_PictureProvider_Get1080pPulldownMode_isr(
585         BXDM_PictureProvider_Handle hXdmPP,
586         BXDM_PictureProvider_PulldownMode *pePulldownMode
587         )
588{
589   BERR_Code rc = BERR_SUCCESS;
590   BDBG_ENTER(BXDM_PictureProvider_Get1080pPulldownMode_isr);
591
592   BDBG_ASSERT( hXdmPP );
593   BDBG_ASSERT( pePulldownMode );
594
595   *pePulldownMode = hXdmPP->stDMConfig.e1080pPulldownMode;
596
597   BDBG_LEAVE(BXDM_PictureProvider_Get1080pPulldownMode_isr);
598   return BERR_TRACE( rc );
599}
600
601BERR_Code
602BXDM_PictureProvider_SetPTSOffset_isr(
603         BXDM_PictureProvider_Handle hXdmPP,
604         uint32_t uiOffset
605         )
606{
607   BERR_Code rc = BERR_SUCCESS;
608   BDBG_ENTER(BXDM_PictureProvider_SetPTSOffset_isr);
609
610   BDBG_ASSERT( hXdmPP );
611
612   BDBG_MSG(("BXDM_PictureProvider_SetPTSOffset_isr(%p, 0x%08x)",
613                  hXdmPP,
614                  uiOffset
615                  ));
616
617   hXdmPP->stDMConfig.uiPTSOffset = uiOffset;
618
619   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_PTS_OFFSET;
620
621   BDBG_LEAVE(BXDM_PictureProvider_SetPTSOffset_isr);
622   return BERR_TRACE( rc );
623}
624
625BERR_Code
626BXDM_PictureProvider_GetPTSOffset_isr(
627         BXDM_PictureProvider_Handle hXdmPP,
628         uint32_t *puiOffset
629         )
630{
631   BERR_Code rc = BERR_SUCCESS;
632   BDBG_ENTER(BXDM_PictureProvider_GetPTSOffset_isr);
633
634   BDBG_ASSERT( hXdmPP );
635   BDBG_ASSERT( puiOffset );
636
637   *puiOffset = hXdmPP->stDMConfig.uiPTSOffset;
638
639   BDBG_LEAVE(BXDM_PictureProvider_GetPTSOffset_isr);
640   return BERR_TRACE( rc );
641}
642
643BERR_Code
644BXDM_PictureProvider_SetDisplayMode_isr(
645         BXDM_PictureProvider_Handle hXdmPP,
646         BXDM_PictureProvider_DisplayMode eDisplayMode
647         )
648{
649   BERR_Code rc = BERR_SUCCESS;
650   BDBG_ENTER(BXDM_PictureProvider_SetDisplayMode_isr);
651
652   BDBG_ASSERT( hXdmPP );
653
654   BDBG_MSG(("BXDM_PictureProvider_SetDisplayMode_isr(%p, %d)",
655                  hXdmPP,
656                  eDisplayMode
657                  ));
658
659   if ( eDisplayMode >= BXDM_PictureProvider_DisplayMode_eMax )
660   {
661      BDBG_WRN(("BXDM_PictureProvider_SetDisplayMode_isr:: eDisplayMode value of %d is out of range", eDisplayMode ));
662      rc = BERR_INVALID_PARAMETER;
663   }
664   else
665   {
666      hXdmPP->stDMConfig.eDisplayMode = eDisplayMode;
667
668      hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_DISPLAY_MODE;
669   }
670
671   BDBG_LEAVE(BXDM_PictureProvider_SetDisplayMode_isr);
672   return BERR_TRACE( rc );
673}
674
675BERR_Code
676BXDM_PictureProvider_GetDisplayMode_isr(
677         BXDM_PictureProvider_Handle hXdmPP,
678         BXDM_PictureProvider_DisplayMode *peDisplayMode
679         )
680{
681   BERR_Code rc = BERR_SUCCESS;
682   BDBG_ENTER(BXDM_PictureProvider_GetDisplayMode_isr);
683
684   BDBG_ASSERT( hXdmPP );
685   BDBG_ASSERT( peDisplayMode );
686
687   *peDisplayMode = hXdmPP->stDMConfig.eDisplayMode;
688
689   BDBG_LEAVE(BXDM_PictureProvider_GetDisplayMode_isr);
690   return BERR_TRACE( rc );
691}
692
693BERR_Code
694BXDM_PictureProvider_GetDefaultTSMThresholdSettings(
695         BXDM_PictureProvider_Handle hXdmPP,
696         BXDM_PictureProvider_TSMThresholdSettings *pstTSMThresholdSettings
697         )
698{
699   BERR_Code rc = BERR_SUCCESS;
700   BDBG_ENTER(BXDM_PictureProvider_GetDefaultTSMThresholdSettings_isr);
701
702   BDBG_ASSERT( hXdmPP );
703   BDBG_ASSERT( pstTSMThresholdSettings );
704
705   BSTD_UNUSED( hXdmPP );
706
707   BKNI_Memset(pstTSMThresholdSettings, 0, sizeof ( BXDM_PictureProvider_TSMThresholdSettings ));
708
709   BDBG_LEAVE(BXDM_PictureProvider_GetDefaultTSMThresholdSettings_isr);
710   return BERR_TRACE( rc );
711}
712
713BERR_Code
714BXDM_PictureProvider_SetTSMThresholdSettings_isr(
715         BXDM_PictureProvider_Handle hXdmPP,
716         const BXDM_PictureProvider_TSMThresholdSettings *pstTSMThresholdSettings
717         )
718{
719   BERR_Code rc = BERR_SUCCESS;
720   BDBG_ENTER(BXDM_PictureProvider_SetTSMThresholdSettings_isr);
721
722   BDBG_ASSERT( hXdmPP );
723   BDBG_ASSERT( pstTSMThresholdSettings );
724
725   BDBG_MSG(("BXDM_PictureProvider_SetTSMThresholdSettings_isr(%p, e:0x%08x, l:0x%08x, d:0x%08x)",
726                  hXdmPP,
727                  pstTSMThresholdSettings->uiTooEarlyThreshold,
728                  pstTSMThresholdSettings->uiTooLateThreshold,
729                  pstTSMThresholdSettings->uiDeltaStcPtsDiffThreshold
730                  ));
731
732   hXdmPP->stDMConfig.stTSMThresholdSettings = *pstTSMThresholdSettings;
733
734   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_TSM_THRESHOLD;
735
736   BDBG_LEAVE(BXDM_PictureProvider_SetTSMThresholdSettings_isr);
737   return BERR_TRACE( rc );
738}
739
740BERR_Code
741BXDM_PictureProvider_GetTSMThresholdSettings_isr(
742         BXDM_PictureProvider_Handle hXdmPP,
743         BXDM_PictureProvider_TSMThresholdSettings *pstTSMThresholdSettings
744         )
745{
746   BERR_Code rc = BERR_SUCCESS;
747   BDBG_ENTER(BXDM_PictureProvider_GetTSMThresholdSettings_isr);
748
749   BDBG_ASSERT( hXdmPP );
750   BDBG_ASSERT( pstTSMThresholdSettings );
751
752   *pstTSMThresholdSettings = hXdmPP->stDMConfig.stTSMThresholdSettings;
753
754   BDBG_LEAVE(BXDM_PictureProvider_GetTSMThresholdSettings_isr);
755   return BERR_TRACE( rc );
756}
757
758BERR_Code
759BXDM_PictureProvider_SetSTCValid_isr(
760         BXDM_PictureProvider_Handle hXdmPP,
761         bool bValid
762         )
763{
764   BERR_Code rc = BERR_SUCCESS;
765   BDBG_ENTER(BXDM_PictureProvider_SetSTCValid_isr);
766
767   BDBG_ASSERT( hXdmPP );
768
769   BDBG_MSG(("BXDM_PictureProvider_SetSTCValid_isr(%p, %d)",
770                  hXdmPP,
771                  bValid
772                  ));
773
774   hXdmPP->stDMConfig.bSTCValid = bValid;
775
776   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_STC_VALID;
777
778   BDBG_LEAVE(BXDM_PictureProvider_SetSTCValid_isr);
779   return BERR_TRACE( rc );
780}
781
782BERR_Code
783BXDM_PictureProvider_GetSTCValid_isr(
784         BXDM_PictureProvider_Handle hXdmPP,
785         bool *pbValid
786         )
787{
788   BERR_Code rc = BERR_SUCCESS;
789   BDBG_ENTER(BXDM_PictureProvider_GetSTCValid_isr);
790
791   BDBG_ASSERT( hXdmPP );
792   BDBG_ASSERT( pbValid );
793
794   *pbValid = hXdmPP->stDMConfig.bSTCValid;
795
796   BDBG_LEAVE(BXDM_PictureProvider_GetSTCValid_isr);
797   return BERR_TRACE( rc );
798}
799
800BERR_Code
801BXDM_PictureProvider_GetDefaultClipTimeSettings(
802         BXDM_PictureProvider_Handle hXdmPP,
803         BXDM_PictureProvider_ClipTimeSettings *pstClipTimeSettings
804         )
805{
806   BERR_Code rc = BERR_SUCCESS;
807   BDBG_ENTER(BXDM_PictureProvider_GetDefaultClipTimeSettings_isr);
808
809   BDBG_ASSERT( hXdmPP );
810   BDBG_ASSERT( pstClipTimeSettings );
811
812   BSTD_UNUSED( hXdmPP );
813
814   BKNI_Memset(pstClipTimeSettings, 0, sizeof ( BXDM_PictureProvider_ClipTimeSettings ));
815
816   BDBG_LEAVE(BXDM_PictureProvider_GetDefaultClipTimeSettings_isr);
817   return BERR_TRACE( rc );
818}
819
820BERR_Code
821BXDM_PictureProvider_SetClipTimeSettings_isr(
822         BXDM_PictureProvider_Handle hXdmPP,
823         const BXDM_PictureProvider_ClipTimeSettings *pstClipTimeSettings
824         )
825{
826   BERR_Code rc = BERR_SUCCESS;
827   BDBG_ENTER(BXDM_PictureProvider_SetClipTimeSettings_isr);
828
829   BDBG_ASSERT( hXdmPP );
830   BDBG_ASSERT( pstClipTimeSettings );
831
832   BDBG_MSG(("BXDM_PictureProvider_SetClipTimeSettings_isr(%p, v: %d, t:%d, 0x%08x-0x%08x, id:0x%08x)",
833                  hXdmPP,
834                  pstClipTimeSettings->bValid,
835                  pstClipTimeSettings->eType,
836                  pstClipTimeSettings->uiStart,
837                  pstClipTimeSettings->uiStop,
838                  pstClipTimeSettings->uiId
839                  ));
840
841   hXdmPP->stDMConfig.stClipTimeSettings = *pstClipTimeSettings;
842
843   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_CLIP_TIMING;
844
845   BDBG_LEAVE(BXDM_PictureProvider_SetClipTimeSettings_isr);
846   return BERR_TRACE( rc );
847}
848
849BERR_Code
850BXDM_PictureProvider_SetSoftwarePCROffset_isr(
851         BXDM_PictureProvider_Handle hXdmPP,
852         uint32_t uiOffset
853         )
854{
855   BERR_Code rc = BERR_SUCCESS;
856   BDBG_ENTER(BXDM_PictureProvider_SetSoftwarePCROffset_isr);
857
858   BDBG_ASSERT( hXdmPP );
859
860   BDBG_MSG(("BXDM_PictureProvider_SetSoftwarePCROffset_isr(%p, 0x%08x)",
861                  hXdmPP,
862                  uiOffset
863                  ));
864
865   hXdmPP->stDMConfig.uiSoftwarePCROffset = uiOffset;
866
867   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_SOFTWARE_PCR_OFFSET;
868
869   BDBG_LEAVE(BXDM_PictureProvider_SetSoftwarePCROffset_isr);
870   return BERR_TRACE( rc );
871}
872
873BERR_Code
874BXDM_PictureProvider_GetSoftwarePCROffset_isr(
875         BXDM_PictureProvider_Handle hXdmPP,
876         uint32_t *puiOffset
877         )
878{
879   BERR_Code rc = BERR_SUCCESS;
880   BDBG_ENTER(BXDM_PictureProvider_GetSoftwarePCROffset_isr);
881
882   BDBG_ASSERT( hXdmPP );
883   BDBG_ASSERT( puiOffset );
884
885   *puiOffset = hXdmPP->stDMConfig.uiSoftwarePCROffset;
886
887   BDBG_LEAVE(BXDM_PictureProvider_GetSoftwarePCROffset_isr);
888   return BERR_TRACE( rc );
889}
890
891BERR_Code
892BXDM_PictureProvider_SetHardwarePCROffsetMode_isr(
893         BXDM_PictureProvider_Handle hXdmPP,
894         bool bEnable
895         )
896{
897   BERR_Code rc = BERR_SUCCESS;
898   BDBG_ENTER(BXDM_PictureProvider_SetHardwarePCROffsetMode_isr);
899
900   BDBG_ASSERT( hXdmPP );
901
902   BDBG_MSG(("BXDM_PictureProvider_SetHardwarePCROffsetMode_isr(%p, %d)",
903                  hXdmPP,
904                  bEnable
905                  ));
906
907   hXdmPP->stDMConfig.bUseHardwarePCROffset = bEnable;
908
909   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_USE_HW_PCR_OFFSET;
910
911   BDBG_LEAVE(BXDM_PictureProvider_SetHardwarePCROffsetMode_isr);
912   return BERR_TRACE( rc );
913}
914
915BERR_Code
916BXDM_PictureProvider_GetHardwarePCROffsetMode_isr(
917         BXDM_PictureProvider_Handle hXdmPP,
918         bool *pbEnable
919         )
920{
921   BERR_Code rc = BERR_SUCCESS;
922   BDBG_ENTER(BXDM_PictureProvider_GetHardwarePCROffsetMode_isr);
923
924   BDBG_ASSERT( hXdmPP );
925   BDBG_ASSERT( pbEnable );
926
927   *pbEnable = hXdmPP->stDMConfig.bUseHardwarePCROffset;
928
929   BDBG_LEAVE(BXDM_PictureProvider_GetHardwarePCROffsetMode_isr);
930   return BERR_TRACE( rc );
931}
932
933BERR_Code
934BXDM_PictureProvider_SetPlaybackRate_isr(
935         BXDM_PictureProvider_Handle hXdmPP,
936         const BXDM_Picture_Rate *pstPlaybackRate
937         )
938{
939   BERR_Code rc = BERR_SUCCESS;
940   BDBG_ENTER(BXDM_PictureProvider_SetPlaybackRate_isr);
941
942   BDBG_ASSERT( hXdmPP );
943   BDBG_ASSERT( pstPlaybackRate );
944
945   BDBG_MSG(("BXDM_PictureProvider_SetPlaybackRate_isr(%p, %d/%d)",
946                  hXdmPP,
947                  pstPlaybackRate->uiNumerator,
948                  pstPlaybackRate->uiDenominator
949                  ));
950
951   /* Prevent a divide by '0'.*/
952   if ( 0 == pstPlaybackRate->uiDenominator )
953   {
954      BDBG_WRN(("BXDM_PictureProvider_SetPlaybackRate_isr:: uiDenominator == 0!"));
955      rc = BERR_INVALID_PARAMETER;
956   }
957   else
958   {
959      hXdmPP->stDMConfig.stPlaybackRate = *pstPlaybackRate;
960
961      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_PLAYBACK_RATE;
962   }
963
964   BDBG_LEAVE(BXDM_PictureProvider_SetPlaybackRate_isr);
965   return BERR_TRACE( rc );
966}
967
968BERR_Code
969BXDM_PictureProvider_GetPlaybackRate_isr(
970         BXDM_PictureProvider_Handle hXdmPP,
971         BXDM_Picture_Rate *pstPlaybackRate
972         )
973{
974   BERR_Code rc = BERR_SUCCESS;
975   BDBG_ENTER(BXDM_PictureProvider_GetPlaybackRate_isr);
976
977   BDBG_ASSERT( hXdmPP );
978   BDBG_ASSERT( pstPlaybackRate );
979
980   *pstPlaybackRate = hXdmPP->stDMConfig.stPlaybackRate;
981
982   BDBG_LEAVE(BXDM_PictureProvider_GetPlaybackRate_isr);
983   return BERR_TRACE( rc );
984}
985
986BERR_Code
987BXDM_PictureProvider_SetPictureDropMode_isr(
988         BXDM_PictureProvider_Handle hXdmPP,
989         BXDM_PictureProvider_PictureDropMode ePictureDropMode
990         )
991{
992   BERR_Code rc = BERR_SUCCESS;
993   BDBG_ENTER(BXDM_PictureProvider_SetPictureDropMode_isr);
994
995   BDBG_ASSERT( hXdmPP );
996
997   BDBG_MSG(("BXDM_PictureProvider_SetPictureDropMode_isr(%p, %d)",
998                  hXdmPP,
999                  ePictureDropMode
1000                  ));
1001   if ( ePictureDropMode >= BXDM_PictureProvider_PictureDropMode_eMax )
1002   {
1003      BDBG_WRN(("BXDM_PictureProvider_SetPictureDropMode_isr:: ePictureDropMode value of %d is out of range", ePictureDropMode ));
1004      rc = BERR_INVALID_PARAMETER;
1005   }
1006   else
1007   {
1008      hXdmPP->stDMConfig.ePictureDropMode = ePictureDropMode;
1009
1010      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_PICTURE_DROP_MODE;
1011   }
1012   
1013   BDBG_LEAVE(BXDM_PictureProvider_SetPictureDropMode_isr);
1014   return BERR_TRACE( rc );
1015}
1016
1017BERR_Code
1018BXDM_PictureProvider_GetPictureDropMode_isr(
1019         BXDM_PictureProvider_Handle hXdmPP,
1020         BXDM_PictureProvider_PictureDropMode *pePictureDropMode
1021         )
1022{
1023   BERR_Code rc = BERR_SUCCESS;
1024   BDBG_ENTER(BXDM_PictureProvider_GetPictureDropMode_isr);
1025
1026   BDBG_ASSERT( hXdmPP );
1027   BDBG_ASSERT( pePictureDropMode );
1028
1029   *pePictureDropMode = hXdmPP->stDMConfig.ePictureDropMode;
1030
1031   BDBG_LEAVE(BXDM_PictureProvider_GetPictureDropMode_isr);
1032   return BERR_TRACE( rc );
1033}
1034
1035BERR_Code
1036BXDM_PictureProvider_GetCounters_isr(
1037         BXDM_PictureProvider_Handle hXdmPP,
1038         BXDM_PictureProvider_Counters *pstCounters
1039         )
1040{
1041   BERR_Code rc = BERR_SUCCESS;
1042   BDBG_ENTER(BXDM_PictureProvider_GetCounters_isr);
1043
1044   BDBG_ASSERT( hXdmPP );
1045   BDBG_ASSERT( pstCounters );
1046
1047   *pstCounters = hXdmPP->stDMStatus.stCounters;
1048
1049   BDBG_LEAVE(BXDM_PictureProvider_GetCounters_isr);
1050   return BERR_TRACE( rc );
1051}
1052
1053BERR_Code
1054BXDM_PictureProvider_GetCurrentPTSInfo_isr(
1055         BXDM_PictureProvider_Handle hXdmPP,
1056         BXDM_PictureProvider_PTSInfo *pPTSInfo
1057         )
1058{
1059   BERR_Code rc = BERR_SUCCESS;
1060   BDBG_ENTER(BXDM_PictureProvider_GetCurrentPTSInfo_isr);
1061
1062   BDBG_ASSERT( hXdmPP );
1063   BDBG_ASSERT( pPTSInfo );
1064
1065   *pPTSInfo = hXdmPP->stDMStatus.stCurrentPTS;
1066
1067   BDBG_LEAVE(BXDM_PictureProvider_GetCurrentPTSInfo_isr);
1068   return BERR_TRACE( rc );
1069}
1070
1071BERR_Code
1072BXDM_PictureProvider_GetLastCodedPTSInfo_isr(
1073         BXDM_PictureProvider_Handle hXdmPP,
1074         BXDM_PictureProvider_PTSInfo *pPTSInfo
1075         )
1076{
1077   BERR_Code rc = BERR_SUCCESS;
1078   BDBG_ENTER(BXDM_PictureProvider_GetLastCodedPTSInfo_isr);
1079
1080   BDBG_ASSERT( hXdmPP );
1081   BDBG_ASSERT( pPTSInfo );
1082
1083   *pPTSInfo = hXdmPP->stDMStatus.stCodedPTS;
1084
1085   BDBG_LEAVE(BXDM_PictureProvider_GetLastCodedPTSInfo_isr);
1086   return BERR_TRACE( rc );
1087}
1088
1089BERR_Code
1090BXDM_PictureProvider_GetNextPTSInfo_isr(
1091         BXDM_PictureProvider_Handle hXdmPP,
1092         BXDM_PictureProvider_PTSInfo *pPTSInfo
1093         )
1094{
1095   BERR_Code rc = BERR_SUCCESS;
1096   BDBG_ENTER(BXDM_PictureProvider_GetNextPTSInfo_isr);
1097
1098   BDBG_ASSERT( hXdmPP );
1099   BDBG_ASSERT( pPTSInfo );
1100
1101   if ( true == hXdmPP->stDMStatus.bNextPTSInfoValid )
1102   {
1103      *pPTSInfo = hXdmPP->stDMStatus.stNextPTS;
1104      rc = BERR_SUCCESS;
1105   }
1106   else
1107   {
1108      rc = BERR_UNKNOWN;
1109   }
1110
1111   BDBG_LEAVE(BXDM_PictureProvider_GetNextPTSInfo_isr);
1112   return rc;
1113}
1114
1115BERR_Code
1116BXDM_PictureProvider_GetIPictureFoundStatus_isr(
1117         BXDM_PictureProvider_Handle hXdmPP,
1118         bool *pbFound
1119         )
1120{
1121   BERR_Code rc = BERR_SUCCESS;
1122   BDBG_ENTER(BXDM_PictureProvider_GetIPictureFoundStatus_isr);
1123
1124   BDBG_ASSERT( hXdmPP );
1125   BDBG_ASSERT( pbFound );
1126
1127   *pbFound = hXdmPP->stDMStatus.bIPictureFound;
1128
1129   BDBG_LEAVE(BXDM_PictureProvider_GetIPictureFoundStatus_isr);
1130   return BERR_TRACE( rc );
1131}
1132
1133BERR_Code
1134BXDM_PictureProvider_GetPictureTag_isr(
1135         BXDM_PictureProvider_Handle hXdmPP,
1136         uint32_t *puiValue
1137         )
1138{
1139   BERR_Code rc = BERR_SUCCESS;
1140   BDBG_ENTER(BXDM_PictureProvider_GetPictureTag_isr);
1141
1142   BDBG_ASSERT( hXdmPP );
1143   BDBG_ASSERT( puiValue );
1144
1145   *puiValue = hXdmPP->stDMStatus.uiPictureTag;
1146
1147   BDBG_LEAVE(BXDM_PictureProvider_GetPictureTag_isr);
1148   return BERR_TRACE( rc );
1149}
1150
1151BERR_Code
1152BXDM_PictureProvider_GetCurrentTimeCode_isr(
1153         BXDM_PictureProvider_Handle hXdmPP,
1154         BXDM_Picture_GopTimeCode *pstTimeCode
1155         )
1156{
1157   BERR_Code rc = BERR_SUCCESS;
1158   BDBG_ENTER(BXDM_PictureProvider_GetCurrentTimeCode_isr);
1159
1160   BDBG_ASSERT( hXdmPP );
1161   BDBG_ASSERT( pstTimeCode );
1162
1163   *pstTimeCode = hXdmPP->stDMStatus.stGOPTimeCode;
1164
1165   BDBG_LEAVE(BXDM_PictureProvider_GetCurrentTimeCode_isr);
1166   return BERR_TRACE( rc );
1167}
1168
1169BERR_Code
1170BXDM_PictureProvider_GetCurrentPicture_isr(
1171         BXDM_PictureProvider_Handle hXdmPP,
1172         BXDM_Picture *pPicture
1173         )
1174{
1175   BERR_Code rc = BERR_SUCCESS;
1176   BDBG_ENTER(BXDM_PictureProvider_GetCurrentPicture_isr);
1177
1178   BDBG_ASSERT( hXdmPP );
1179   BDBG_ASSERT( pPicture );
1180
1181   if ( true == hXdmPP->stDMStatus.bCurrentPPBParameterInfoValid )
1182   {
1183      *pPicture = hXdmPP->stDMStatus.stCurrentPPBParameterInfo;
1184      rc = BERR_SUCCESS;
1185   }
1186   else
1187   {
1188      rc = BERR_UNKNOWN;
1189   }
1190
1191   BDBG_LEAVE(BXDM_PictureProvider_GetCurrentPicture_isr);
1192   return rc;
1193}
1194
1195BERR_Code
1196BXDM_PictureProvider_SetFrameAdvanceMode_isr(
1197         BXDM_PictureProvider_Handle hXdmPP,
1198         BXDM_PictureProvider_FrameAdvanceMode eFrameAdvanceMode
1199      )
1200{
1201   BERR_Code rc = BERR_SUCCESS;
1202   BDBG_ENTER(BXDM_PictureProvider_SetFrameAdvanceMode_isr);
1203
1204   BDBG_ASSERT( hXdmPP );
1205
1206   BDBG_MSG(("BXDM_PictureProvider_SetFrameAdvanceMode_isr(%p, %d)",
1207                  hXdmPP,
1208                  eFrameAdvanceMode
1209                  ));
1210   if ( eFrameAdvanceMode >= BXDM_PictureProvider_FrameAdvanceMode_eMax )
1211   {
1212      BDBG_WRN(("BXDM_PictureProvider_SetFrameAdvanceMode_isr:: eFrameAdvanceMode value of %d is out of range", eFrameAdvanceMode ));
1213      rc = BERR_INVALID_PARAMETER;
1214   }
1215   else
1216   {
1217      hXdmPP->stDMConfig.eFrameAdvanceMode = eFrameAdvanceMode;
1218
1219      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_FRAME_ADVANCE_MODE;
1220   }
1221
1222   BDBG_LEAVE(BXDM_PictureProvider_SetFrameAdvanceMode_isr);
1223   return BERR_TRACE( rc );
1224}
1225
1226BERR_Code
1227BXDM_PictureProvider_GetDefaultPreserveStateSettings(
1228         BXDM_PictureProvider_Handle hXdmPP,
1229         BXDM_PictureProvider_PreserveStateSettings *pstPreserveStateSettings
1230         )
1231{
1232   BERR_Code rc = BERR_SUCCESS;
1233   BDBG_ENTER(BXDM_PictureProvider_GetDefaultPreserveStateSettings);
1234
1235   BDBG_ASSERT( hXdmPP );
1236   BDBG_ASSERT( pstPreserveStateSettings );
1237
1238   BSTD_UNUSED( hXdmPP );
1239
1240   BKNI_Memset(pstPreserveStateSettings, 0, sizeof ( BXDM_PictureProvider_PreserveStateSettings ));
1241
1242   BDBG_LEAVE(BXDM_PictureProvider_GetDefaultPreserveStateSettings);
1243   return BERR_TRACE( rc );
1244}
1245
1246BERR_Code
1247BXDM_PictureProvider_SetPreserveStateSettings_isr(
1248         BXDM_PictureProvider_Handle hXdmPP,
1249         const BXDM_PictureProvider_PreserveStateSettings *pstPreserveStateSettings
1250         )
1251{
1252   BERR_Code rc = BERR_SUCCESS;
1253   BDBG_ENTER(BXDM_PictureProvider_SetPreserveStateSettings_isr);
1254
1255   BDBG_ASSERT( hXdmPP );
1256   BDBG_ASSERT( pstPreserveStateSettings );
1257
1258   BDBG_MSG(("BXDM_PictureProvider_SetPreserveStateSettings_isr(%p, d:%d, c:%d)",
1259                  hXdmPP,
1260                  pstPreserveStateSettings->bDisplay,
1261                  pstPreserveStateSettings->bCounters
1262                  ));
1263
1264   hXdmPP->stDMConfig.stPreserveStateSettings = *pstPreserveStateSettings;
1265
1266   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_PRESERVE_SETTINGS;
1267
1268   BDBG_LEAVE(BXDM_PictureProvider_SetPreserveStateSettings_isr);
1269   return BERR_TRACE( rc );
1270}
1271
1272BERR_Code
1273BXDM_PictureProvider_GetPreserveStateSettings_isr(
1274         BXDM_PictureProvider_Handle hXdmPP,
1275         BXDM_PictureProvider_PreserveStateSettings *pstPreserveStateSettings
1276         )
1277{
1278   BERR_Code rc = BERR_SUCCESS;
1279   BDBG_ENTER(BXDM_PictureProvider_GetPreserveStateSettings_isr);
1280
1281   BDBG_ASSERT( hXdmPP );
1282   BDBG_ASSERT( pstPreserveStateSettings );
1283
1284   *pstPreserveStateSettings = hXdmPP->stDMConfig.stPreserveStateSettings;
1285
1286   BDBG_LEAVE(BXDM_PictureProvider_GetPreserveStateSettings_isr);
1287   return BERR_TRACE( rc );
1288}
1289
1290BERR_Code
1291BXDM_PictureProvider_SetReverseFieldsMode_isr(
1292         BXDM_PictureProvider_Handle hXdmPP,
1293         bool bEnable
1294         )
1295{
1296   BERR_Code rc = BERR_SUCCESS;
1297   BDBG_ENTER(BXDM_PictureProvider_SetReverseFieldsMode_isr);
1298
1299   BDBG_ASSERT( hXdmPP );
1300
1301   BDBG_MSG(("BXDM_PictureProvider_SetReverseFieldsMode_isr(%p, %d)",
1302                  hXdmPP,
1303                  bEnable
1304                  ));
1305
1306   hXdmPP->stDMConfig.bReverseFields = bEnable;
1307
1308   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_REVERSE_FIELDS;
1309
1310   BDBG_LEAVE(BXDM_PictureProvider_SetReverseFieldsMode_isr);
1311   return BERR_TRACE( rc );
1312}
1313
1314BERR_Code
1315BXDM_PictureProvider_GetReverseFieldsMode_isr(
1316         BXDM_PictureProvider_Handle hXdmPP,
1317         bool *pbEnable
1318         )
1319{
1320   BERR_Code rc = BERR_SUCCESS;
1321   BDBG_ENTER(BXDM_PictureProvider_GetReverseFieldsMode_isr);
1322
1323   BDBG_ASSERT( hXdmPP );
1324   BDBG_ASSERT( pbEnable );
1325
1326   *pbEnable = hXdmPP->stDMConfig.bReverseFields;
1327
1328   BDBG_LEAVE(BXDM_PictureProvider_GetReverseFieldsMode_isr);
1329   return BERR_TRACE( rc );
1330}
1331
1332BERR_Code
1333BXDM_PictureProvider_SetAutoValidateStcOnPauseMode_isr(
1334         BXDM_PictureProvider_Handle hXdmPP,
1335         bool bEnable
1336      )
1337{
1338   BERR_Code rc = BERR_SUCCESS;
1339   BDBG_ENTER(BXDM_PictureProvider_SetAutoValidateStcOnPauseMode_isr);
1340
1341   BDBG_ASSERT( hXdmPP );
1342
1343   BDBG_MSG(("BXDM_PictureProvider_SetAutoValidateStcOnPauseMode_isr(%p, %d",
1344                  hXdmPP,
1345                  bEnable
1346                  ));
1347
1348   hXdmPP->stDMConfig.bAutoValidateStcOnPause = bEnable;
1349
1350   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_AUTO_VALIDATE_ON_PAUSE;
1351
1352   BDBG_LEAVE(BXDM_PictureProvider_SetAutoValidateStcOnPauseMode_isr);
1353   return BERR_TRACE( rc );
1354}
1355
1356BERR_Code
1357BXDM_PictureProvider_GetAutoValidateStcOnPauseMode_isr(
1358         BXDM_PictureProvider_Handle hXdmPP,
1359         bool *pbEnable
1360      )
1361{
1362   BERR_Code rc = BERR_SUCCESS;
1363   BDBG_ENTER(BXDM_PictureProvider_GetAutoValidateStcOnPauseMode_isr);
1364
1365   BDBG_ASSERT( hXdmPP );
1366   BDBG_ASSERT( pbEnable );
1367
1368   *pbEnable = hXdmPP->stDMConfig.bAutoValidateStcOnPause;
1369
1370   BDBG_LEAVE(BXDM_PictureProvider_GetAutoValidateStcOnPauseMode_isr);
1371   return BERR_TRACE( rc );
1372}
1373
1374BERR_Code
1375BXDM_PictureProvider_SetProtocol_isr(
1376         BXDM_PictureProvider_Handle hXdmPP,
1377         BAVC_VideoCompressionStd eProtocol
1378         )
1379{
1380   BERR_Code rc = BERR_SUCCESS;
1381   BDBG_ENTER(BXDM_PictureProvider_SetProtocol_isr);
1382
1383   BDBG_ASSERT( hXdmPP );
1384
1385   BDBG_MSG(("BXDM_PictureProvider_SetProtocol_isr(%p, %d)",
1386                  hXdmPP,
1387                  eProtocol
1388                  ));
1389
1390   if ( eProtocol >= BAVC_VideoCompressionStd_eMax )
1391   {
1392      BDBG_WRN(("BXDM_PictureProvider_SetProtocol_isr:: eProtocol value of %d is out of range", eProtocol ));
1393      rc = BERR_INVALID_PARAMETER;
1394   }
1395   else
1396   {
1397      hXdmPP->stDMConfig.eProtocol = eProtocol;
1398
1399      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_PROTOCOL;
1400   }
1401
1402   BDBG_LEAVE(BXDM_PictureProvider_SetProtocol_isr);
1403   return BERR_TRACE( rc );
1404}
1405
1406BERR_Code
1407BXDM_PictureProvider_GetProtocol_isr(
1408         BXDM_PictureProvider_Handle hXdmPP,
1409         BAVC_VideoCompressionStd *peProtocol
1410         )
1411{
1412   BERR_Code rc = BERR_SUCCESS;
1413   BDBG_ENTER(BXDM_PictureProvider_GetProtocol_isr);
1414
1415   BDBG_ASSERT( hXdmPP );
1416   BDBG_ASSERT( peProtocol );
1417
1418   *peProtocol = hXdmPP->stDMConfig.eProtocol;
1419
1420   BDBG_LEAVE(BXDM_PictureProvider_GetProtocol_isr);
1421   return BERR_TRACE( rc );
1422}
1423
1424BERR_Code
1425BXDM_PictureProvider_SetJitterToleranceImprovementMode_isr(
1426         BXDM_PictureProvider_Handle hXdmPP,
1427         bool bEnable
1428         )
1429{
1430   BERR_Code rc = BERR_SUCCESS;
1431   BDBG_ENTER(BXDM_PictureProvider_SetJitterToleranceImprovementMode_isr);
1432
1433   BDBG_ASSERT( hXdmPP );
1434
1435   BDBG_MSG(("BXDM_PictureProvider_SetJitterToleranceImprovementMode_isr(%p, %d)",
1436                  hXdmPP,
1437                  bEnable
1438                  ));
1439
1440   hXdmPP->stDMConfig.bJitterToleranceImprovement = bEnable;
1441
1442   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_JITTER_TOLERANCE;
1443
1444   BDBG_LEAVE(BXDM_PictureProvider_SetJitterToleranceImprovementMode_isr);
1445   return BERR_TRACE( rc );
1446}
1447
1448BERR_Code
1449BXDM_PictureProvider_GetJitterToleranceImprovementMode_isr(
1450         BXDM_PictureProvider_Handle hXdmPP,
1451         bool *pbEnable
1452         )
1453{
1454   BERR_Code rc = BERR_SUCCESS;
1455   BDBG_ENTER(BXDM_PictureProvider_GetJitterToleranceImprovementMode_isr);
1456
1457   BDBG_ASSERT( hXdmPP );
1458   BDBG_ASSERT( pbEnable );
1459
1460   *pbEnable = hXdmPP->stDMConfig.bJitterToleranceImprovement;
1461
1462   BDBG_LEAVE(BXDM_PictureProvider_GetJitterToleranceImprovementMode_isr);
1463   return BERR_TRACE( rc );
1464}
1465
1466BERR_Code
1467BXDM_PictureProvider_SetMonitorRefreshRate_isr(
1468         BXDM_PictureProvider_Handle hXdmPP,
1469         BXDM_PictureProvider_MonitorRefreshRate eMonitorRefreshRate
1470         )
1471{
1472   BERR_Code rc = BERR_SUCCESS;
1473   BDBG_ENTER(BXDM_PictureProvider_SetMonitorRefreshRate_isr);
1474
1475   BDBG_ASSERT( hXdmPP );
1476
1477   BDBG_MSG(("BXDM_PictureProvider_SetMonitorRefreshRate_isr(%p, %d)",
1478                  hXdmPP,
1479                  eMonitorRefreshRate
1480                  ));
1481
1482   /* Determine the monitor refresh rate */
1483   if ( eMonitorRefreshRate == BXDM_PictureProvider_MonitorRefreshRate_eUnknown
1484         || eMonitorRefreshRate >= BXDM_PictureProvider_MonitorRefreshRate_eMax
1485      )
1486   {
1487      BXVD_DBG_WRN(hXdmPP,("Monitor Refresh Rate Override: Unsupported(%d->%d)", eMonitorRefreshRate, BXDM_PictureProvider_MonitorRefreshRate_e59_94Hz));
1488      hXdmPP->stDMConfig.eMonitorRefreshRate = BXDM_PictureProvider_MonitorRefreshRate_e59_94Hz;
1489   }
1490   else
1491   {
1492      hXdmPP->stDMConfig.eMonitorRefreshRate = eMonitorRefreshRate;
1493   }
1494
1495   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_MONITOR_REFRESH_RATE;
1496
1497   BDBG_LEAVE(BXDM_PictureProvider_SetMonitorRefreshRate_isr);
1498   return BERR_TRACE( rc );
1499}
1500
1501BERR_Code
1502BXDM_PictureProvider_GetMonitorRefreshRate_isr(
1503         BXDM_PictureProvider_Handle hXdmPP,
1504         BXDM_PictureProvider_MonitorRefreshRate *peMonitorRefreshRate
1505         )
1506{
1507   BERR_Code rc = BERR_SUCCESS;
1508   BDBG_ENTER(BXDM_PictureProvider_GetMonitorRefreshRate_isr);
1509
1510   BDBG_ASSERT( hXdmPP );
1511   BDBG_ASSERT( peMonitorRefreshRate );
1512
1513   /* Check for NULL handle */
1514   if (hXdmPP != NULL)
1515   {
1516      *peMonitorRefreshRate = hXdmPP->stDMConfig.eMonitorRefreshRate;
1517   }
1518   else
1519   {
1520      rc = BERR_INVALID_PARAMETER;
1521   } 
1522
1523   BDBG_LEAVE(BXDM_PictureProvider_GetMonitorRefreshRate_isr);
1524   return BERR_TRACE( rc );
1525}
1526
1527BERR_Code
1528BXDM_PictureProvider_Set1080pScanMode_isr(
1529         BXDM_PictureProvider_Handle hXdmPP,
1530         BXDM_PictureProvider_1080pScanMode eScanMode
1531         )
1532{
1533   BERR_Code rc = BERR_SUCCESS;
1534   BDBG_ENTER(BXDM_PictureProvider_Set1080pScanMode_isr);
1535
1536   BDBG_ASSERT( hXdmPP );
1537
1538   BDBG_MSG(("BXDM_PictureProvider_Set1080pScanMode_isr(%p, %d)",
1539                  hXdmPP,
1540                  eScanMode
1541                  ));
1542
1543   if ( eScanMode >= BXDM_PictureProvider_1080pScanMode_eMax )
1544   {
1545      BDBG_WRN(("BXDM_PictureProvider_Set1080pScanMode_isr:: eScanMode value of %d is out of range", eScanMode ));
1546      rc = BERR_INVALID_PARAMETER;
1547   }
1548   else
1549   {
1550      hXdmPP->stDMConfig.e1080pScanMode = eScanMode;
1551
1552      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_1080P_SCAN_MODE;
1553   }
1554
1555   BDBG_LEAVE(BXDM_PictureProvider_Set1080pScanMode_isr);
1556   return BERR_TRACE( rc );
1557}
1558
1559BERR_Code
1560BXDM_PictureProvider_Get1080pScanMode_isr(
1561         BXDM_PictureProvider_Handle hXdmPP,
1562         BXDM_PictureProvider_1080pScanMode *peScanMode
1563         )
1564{
1565   BERR_Code rc = BERR_SUCCESS;
1566   BDBG_ENTER(BXDM_PictureProvider_Get1080pScanMode_isr);
1567
1568   BDBG_ASSERT( hXdmPP );
1569   BDBG_ASSERT( peScanMode );
1570
1571   *peScanMode = hXdmPP->stDMConfig.e1080pScanMode;
1572
1573   BDBG_LEAVE(BXDM_PictureProvider_Get1080pScanMode_isr);
1574   return BERR_TRACE( rc );
1575}
1576
1577BERR_Code
1578BXDM_PictureProvider_SetSTCIndex_isr(
1579         BXDM_PictureProvider_Handle hXdmPP,
1580         uint32_t uiValue
1581         )
1582{
1583   BERR_Code rc = BERR_SUCCESS;
1584   BDBG_ENTER(BXDM_PictureProvider_SetSTCIndex_isr);
1585
1586   BDBG_ASSERT( hXdmPP );
1587
1588   BDBG_MSG(("BXDM_PictureProvider_SetSTCIndex_isr(%p, 0x%08x)",
1589                  hXdmPP,
1590                  uiValue
1591                  ));
1592
1593   hXdmPP->stDMConfig.uiSTCIndex = uiValue;
1594
1595   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_STC_INDEX;
1596
1597   BDBG_LEAVE(BXDM_PictureProvider_SetSTCIndex_isr);
1598   return BERR_TRACE( rc );
1599}
1600
1601BERR_Code
1602BXDM_PictureProvider_GetSTCIndex_isr(
1603         BXDM_PictureProvider_Handle hXdmPP,
1604         uint32_t *puiValue
1605         )
1606{
1607   BERR_Code rc = BERR_SUCCESS;
1608   BDBG_ENTER(BXDM_PictureProvider_GetSTCIndex_isr);
1609
1610   BDBG_ASSERT( hXdmPP );
1611   BDBG_ASSERT( puiValue );
1612
1613   *puiValue = hXdmPP->stDMConfig.uiSTCIndex;
1614
1615   BDBG_LEAVE(BXDM_PictureProvider_GetSTCIndex_isr);
1616   return BERR_TRACE( rc );
1617}
1618
1619BERR_Code
1620BXDM_PictureProvider_SetCRCMode_isr(
1621         BXDM_PictureProvider_Handle hXdmPP,
1622         bool bEnable
1623         )
1624{
1625   BERR_Code rc = BERR_SUCCESS;
1626   BDBG_ENTER(BXDM_PictureProvider_SetCRCMode_isr);
1627
1628   BDBG_ASSERT( hXdmPP );
1629
1630   BDBG_MSG(("BXDM_PictureProvider_SetCRCMode_isr(%p, %d)",
1631                  hXdmPP,
1632                  bEnable
1633                  ));
1634
1635   hXdmPP->stDMConfig.bCRCMode= bEnable;
1636
1637   BDBG_LEAVE(BXDM_PictureProvider_SetCRCMode_isr);
1638   return BERR_TRACE( rc );
1639}
1640
1641BERR_Code
1642BXDM_PictureProvider_GetCRCMode_isr(
1643         BXDM_PictureProvider_Handle hXdmPP,
1644         bool *pbEnable
1645         )
1646{
1647   BERR_Code rc = BERR_SUCCESS;
1648   BDBG_ENTER(BXDM_PictureProvider_GetCRCMode_isr);
1649
1650   BDBG_ASSERT( hXdmPP );
1651   BDBG_ASSERT( pbEnable );
1652
1653   *pbEnable = hXdmPP->stDMConfig.bCRCMode;
1654
1655   BDBG_LEAVE(BXDM_PictureProvider_GetCRCMode_isr);
1656   return BERR_TRACE( rc );
1657}
1658
1659BERR_Code
1660BXDM_PictureProvider_SetRemovalDelay_isr(
1661         BXDM_PictureProvider_Handle hXdmPP,
1662         uint32_t uiValue
1663         )
1664{
1665   BERR_Code rc = BERR_SUCCESS;
1666   BDBG_ENTER(BXDM_PictureProvider_SetRemovalDelay_isr);
1667
1668   BDBG_ASSERT( hXdmPP );
1669
1670   BDBG_MSG(("BXDM_PictureProvider_SetRemovalDelay_isr(%p, 0x%08x)",
1671                  hXdmPP,
1672                  uiValue
1673                  ));
1674
1675   hXdmPP->stDMConfig.uiRemovalDelay = uiValue;
1676
1677   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_REMOVAL_DELAY;
1678   
1679   BDBG_LEAVE(BXDM_PictureProvider_SetRemovalDelay_isr);
1680   return BERR_TRACE( rc );
1681}
1682
1683BERR_Code
1684BXDM_PictureProvider_GetRemovalDelay_isr(
1685         BXDM_PictureProvider_Handle hXdmPP,
1686         uint32_t *puiValue
1687         )
1688{
1689   BERR_Code rc = BERR_SUCCESS;
1690   BDBG_ENTER(BXDM_PictureProvider_GetRemovalDelay_isr);
1691
1692   BDBG_ASSERT( hXdmPP );
1693   BDBG_ASSERT( puiValue );
1694
1695   *puiValue = hXdmPP->stDMConfig.uiRemovalDelay;
1696
1697   BDBG_LEAVE(BXDM_PictureProvider_GetRemovalDelay_isr);
1698   return BERR_TRACE( rc );
1699}
1700
1701BERR_Code
1702BXDM_PictureProvider_SetPreRollRate_isr(
1703         BXDM_PictureProvider_Handle hXdmPP,
1704         const BXDM_Picture_Rate *pstPreRollRate
1705         )
1706{
1707   BERR_Code rc = BERR_SUCCESS;
1708   BDBG_ENTER(BXDM_PictureProvider_SetPreRollRate_isr);
1709
1710   BDBG_ASSERT( hXdmPP );
1711   BDBG_ASSERT( pstPreRollRate );
1712
1713   BDBG_MSG(("BXDM_PictureProvider_SetPreRollRate_isr(%p, %d/%d)",
1714                  hXdmPP,
1715                  pstPreRollRate->uiNumerator,
1716                  pstPreRollRate->uiDenominator
1717                  ));
1718
1719   if ( 0 == pstPreRollRate->uiDenominator )
1720   {
1721      BDBG_WRN(("BXDM_PictureProvider_SetPreRollRate_isr:: uiDenominator == 0!"));
1722      rc = BERR_INVALID_PARAMETER;
1723   }
1724   else
1725   {
1726      hXdmPP->stDMConfig.stPreRollRate = *pstPreRollRate;
1727
1728      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_PRE_ROLL_RATE;
1729   }
1730
1731   BDBG_LEAVE(BXDM_PictureProvider_SetPreRollRate_isr);
1732   return BERR_TRACE( rc );
1733}
1734
1735BERR_Code
1736BXDM_PictureProvider_GetPreRollRate_isr(
1737         BXDM_PictureProvider_Handle hXdmPP,
1738         BXDM_Picture_Rate *pstPreRollRate
1739         )
1740{
1741   BERR_Code rc = BERR_SUCCESS;
1742   BDBG_ENTER(BXDM_PictureProvider_GetPreRollRate_isr);
1743
1744   BDBG_ASSERT( hXdmPP );
1745   BDBG_ASSERT( pstPreRollRate );
1746
1747   *pstPreRollRate = hXdmPP->stDMConfig.stPreRollRate;
1748
1749   BDBG_LEAVE(BXDM_PictureProvider_GetPreRollRate_isr);
1750   return BERR_TRACE( rc );
1751}
1752
1753BERR_Code
1754BXDM_PictureProvider_SetPlaybackMode_isr(
1755         BXDM_PictureProvider_Handle hXdmPP,
1756         bool bEnable
1757         )
1758{
1759   BERR_Code rc = BERR_SUCCESS;
1760   BDBG_ENTER(BXDM_PictureProvider_SetPlaybackMode_isr);
1761
1762   BDBG_ASSERT( hXdmPP );
1763
1764   BDBG_MSG(("BXDM_PictureProvider_SetPlaybackMode_isr(%p, %d)",
1765                  hXdmPP,
1766                  bEnable
1767                  ));
1768
1769   hXdmPP->stDMConfig.bPlayback = bEnable;
1770
1771   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_PLAYBACK;
1772   
1773   BDBG_LEAVE(BXDM_PictureProvider_SetPlaybackMode_isr);
1774   return BERR_TRACE( rc );
1775}
1776
1777BERR_Code
1778BXDM_PictureProvider_GetPlaybackMode_isr(
1779         BXDM_PictureProvider_Handle hXdmPP,
1780         bool *pbEnable
1781         )
1782{
1783   BERR_Code rc = BERR_SUCCESS;
1784   BDBG_ENTER(BXDM_PictureProvider_GetPlaybackMode_isr);
1785
1786   BDBG_ASSERT( hXdmPP );
1787   BDBG_ASSERT( pbEnable );
1788
1789   *pbEnable = hXdmPP->stDMConfig.bPlayback;
1790
1791   BDBG_LEAVE(BXDM_PictureProvider_GetPlaybackMode_isr);
1792   return BERR_TRACE( rc );
1793}
1794
1795BERR_Code
1796BXDM_PictureProvider_SetDefaultFrameRate_isr(
1797         BXDM_PictureProvider_Handle hXdmPP,
1798         BAVC_FrameRateCode eFrameRate
1799         )
1800{
1801   BERR_Code rc = BERR_SUCCESS;
1802   BDBG_ENTER(BXDM_PictureProvider_SetDefaultFrameRate_isr);
1803
1804   BDBG_ASSERT( hXdmPP );
1805
1806   BDBG_MSG(("BXDM_PictureProvider_SetDefaultFrameRate_isr(%p, %d)",
1807                  hXdmPP,
1808                  eFrameRate
1809                  ));
1810   if ( eFrameRate >= BAVC_FrameRateCode_eMax )
1811   {
1812      BDBG_WRN(("BXDM_PictureProvider_SetDefaultFrameRate_isr:: eFrameRate value of %d is out of range", eFrameRate ));
1813      rc = BERR_INVALID_PARAMETER;
1814   }
1815   else
1816   {
1817      hXdmPP->stDMConfig.eDefaultFrameRate = eFrameRate;
1818
1819      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_DEFAULT_FRAME_RATE;
1820   }
1821   
1822   BDBG_LEAVE(BXDM_PictureProvider_SetDefaultFrameRate_isr);
1823   return BERR_TRACE( rc );
1824}
1825
1826BERR_Code
1827BXDM_PictureProvider_GetDefaultFrameRate_isr(
1828         BXDM_PictureProvider_Handle hXdmPP,
1829         BAVC_FrameRateCode *peFrameRate
1830         )
1831{
1832   BERR_Code rc = BERR_SUCCESS;
1833   BDBG_ENTER(BXDM_PictureProvider_GetDefaultFrameRate_isr);
1834
1835   BDBG_ASSERT( hXdmPP );
1836   BDBG_ASSERT( peFrameRate );
1837
1838   *peFrameRate = hXdmPP->stDMConfig.eDefaultFrameRate;
1839
1840   BDBG_LEAVE(BXDM_PictureProvider_GetDefaultFrameRate_isr);
1841   return BERR_TRACE( rc );
1842}
1843BERR_Code
1844BXDM_PictureProvider_SetFrameRateDetectionMode_isr(
1845         BXDM_PictureProvider_Handle hXdmPP,
1846         BXDM_PictureProvider_FrameRateDetectionMode eFrameRateDetectionMode
1847         )
1848{
1849   BERR_Code rc = BERR_SUCCESS;
1850   BDBG_ENTER(BXDM_PictureProvider_SetFrameRateDetectionMode_isr);
1851
1852   BDBG_ASSERT( hXdmPP );
1853
1854   BDBG_MSG(("BXDM_PictureProvider_SetFrameRateDetectionMode_isr(%p, %d)",
1855                  hXdmPP,
1856                  eFrameRateDetectionMode
1857                  ));
1858
1859   if ( eFrameRateDetectionMode >= BXDM_PictureProvider_FrameRateDetectionMode_eMax )
1860   {
1861      BDBG_WRN(("BXDM_PictureProvider_SetFrameRateDetectionMode_isr:: eFrameRateDetectionMode value of %d is out of range", eFrameRateDetectionMode ));
1862      rc = BERR_INVALID_PARAMETER;
1863   }
1864   else
1865   {
1866      hXdmPP->stDMConfig.eFrameRateDetectionMode = eFrameRateDetectionMode;
1867
1868      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_FRAME_RATE_DETECTION_MODE;
1869   }
1870
1871   BDBG_LEAVE(BXDM_PictureProvider_SetFrameRateDetectionMode_isr);
1872   return BERR_TRACE( rc );
1873}
1874
1875BERR_Code
1876BXDM_PictureProvider_GetFrameRateDetection_isr(
1877         BXDM_PictureProvider_Handle hXdmPP,
1878         BXDM_PictureProvider_FrameRateDetectionMode *peFrameRateDetectionMode
1879         )
1880{
1881   BERR_Code rc = BERR_SUCCESS;
1882   BDBG_ENTER(BXDM_PictureProvider_GetFrameRateDetection_isr);
1883
1884   BDBG_ASSERT( hXdmPP );
1885   BDBG_ASSERT( peFrameRateDetectionMode );
1886
1887   *peFrameRateDetectionMode = hXdmPP->stDMConfig.eFrameRateDetectionMode;
1888
1889   BDBG_LEAVE(BXDM_PictureProvider_GetFrameRateDetection_isr);
1890   return BERR_TRACE( rc );
1891}
1892
1893BERR_Code
1894BXDM_PictureProvider_SetASTMMode_isr(
1895         BXDM_PictureProvider_Handle hXdmPP,
1896         bool bEnable
1897         )
1898{
1899   BERR_Code rc = BERR_SUCCESS;
1900   BDBG_ENTER(BXDM_PictureProvider_SetASTMMode_isr);
1901
1902   BDBG_ASSERT( hXdmPP );
1903
1904   BDBG_MSG(("BXDM_PictureProvider_SetASTMMode_isr(%p, %d)",
1905                  hXdmPP,
1906                  bEnable
1907                  ));
1908
1909   hXdmPP->stDMConfig.bAstmMode = bEnable;
1910
1911   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_ATSM_MODE;
1912   
1913   BDBG_LEAVE(BXDM_PictureProvider_SetASTMMode_isr);
1914   return BERR_TRACE( rc );
1915}
1916
1917BERR_Code
1918BXDM_PictureProvider_GetASTMMode_isr(
1919         BXDM_PictureProvider_Handle hXdmPP,
1920         bool *pbEnable
1921         )
1922{
1923   BERR_Code rc = BERR_SUCCESS;
1924   BDBG_ENTER(BXDM_PictureProvider_GetASTMMode_isr);
1925
1926   BDBG_ASSERT( hXdmPP );
1927   BDBG_ASSERT( pbEnable );
1928
1929   *pbEnable = hXdmPP->stDMConfig.bAstmMode;
1930
1931   BDBG_LEAVE(BXDM_PictureProvider_GetASTMMode_isr);
1932   return BERR_TRACE( rc );
1933}
1934
1935BERR_Code
1936BXDM_PictureProvider_SetVirtualTSMOnPCRDiscontinuityMode_isr(
1937         BXDM_PictureProvider_Handle hXdmPP,
1938         bool bEnable
1939         )
1940{
1941   BERR_Code rc = BERR_SUCCESS;
1942   BDBG_ENTER(BXDM_PictureProvider_SetVirtualTSMOnPCRDiscontinuityMode_isr);
1943
1944   BDBG_ASSERT( hXdmPP );
1945
1946   BDBG_MSG(("BXDM_PictureProvider_SetVirtualTSMOnPCRDiscontinuityMode_isr(%p, %d)",
1947                  hXdmPP,
1948                  bEnable
1949                  ));
1950
1951   hXdmPP->stDMConfig.bVirtualTSMOnPCRDiscontinuity = bEnable;
1952
1953   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_VTSM_ON_PCR_DISCON;
1954   
1955   BDBG_LEAVE(BXDM_PictureProvider_SetVirtualTSMOnPCRDiscontinuityMode_isr);
1956   return BERR_TRACE( rc );
1957}
1958
1959BERR_Code
1960BXDM_PictureProvider_GetVirtualTSMOnPCRDiscontinuityMode_isr(
1961         BXDM_PictureProvider_Handle hXdmPP,
1962         bool *pbEnable
1963         )
1964{
1965   BERR_Code rc = BERR_SUCCESS;
1966   BDBG_ENTER(BXDM_PictureProvider_GetVirtualTSMOnPCRDiscontinuityMode_isr);
1967
1968   BDBG_ASSERT( hXdmPP );
1969   BDBG_ASSERT( pbEnable );
1970
1971   *pbEnable = hXdmPP->stDMConfig.bVirtualTSMOnPCRDiscontinuity;
1972
1973   BDBG_LEAVE(BXDM_PictureProvider_GetVirtualTSMOnPCRDiscontinuityMode_isr);
1974   return BERR_TRACE( rc );
1975}
1976
1977BERR_Code
1978BXDM_PictureProvider_SetErrorHandlingMode_isr(
1979         BXDM_PictureProvider_Handle hXdmPP,
1980         BXDM_PictureProvider_ErrorHandlingMode eErrorHandlingMode
1981         )
1982{
1983   BERR_Code rc = BERR_SUCCESS;
1984   BDBG_ENTER(BXDM_PictureProvider_SetErrorHandlingMode_isr);
1985
1986   BDBG_ASSERT( hXdmPP );
1987
1988   BDBG_MSG(("BXDM_PictureProvider_SetErrorHandlingMode_isr(%p, %d)",
1989                  hXdmPP,
1990                  eErrorHandlingMode
1991                  ));
1992
1993   if ( eErrorHandlingMode >= BXDM_PictureProvider_ErrorHandlingMode_eMax )
1994   {
1995      BDBG_WRN(("BXDM_PictureProvider_SetErrorHandlingMode_isr:: eErrorHandlingMode value of %d is out of range", eErrorHandlingMode ));
1996      rc = BERR_INVALID_PARAMETER;
1997   }
1998   else
1999   {
2000      hXdmPP->stDMConfig.eErrorHandlingMode = eErrorHandlingMode;
2001
2002      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_ERROR_HANDLING_MODE;
2003   }
2004   
2005   BDBG_LEAVE(BXDM_PictureProvider_SetErrorHandlingMode_isr);
2006   return BERR_TRACE( rc );
2007}
2008
2009BERR_Code
2010BXDM_PictureProvider_GetErrorHandlingMode_isr(
2011         BXDM_PictureProvider_Handle hXdmPP,
2012         BXDM_PictureProvider_ErrorHandlingMode *peErrorHandlingMode
2013         )
2014{
2015   BERR_Code rc = BERR_SUCCESS;
2016   BDBG_ENTER(BXDM_PictureProvider_GetErrorHandlingMode_isr);
2017
2018   BDBG_ASSERT( hXdmPP );
2019   BDBG_ASSERT( peErrorHandlingMode );
2020
2021   *peErrorHandlingMode = hXdmPP->stDMConfig.eErrorHandlingMode;
2022
2023   BDBG_LEAVE(BXDM_PictureProvider_GetErrorHandlingMode_isr);
2024   return BERR_TRACE( rc );
2025}
2026
2027BERR_Code
2028BXDM_PictureProvider_SetTimerHandle_isr(
2029         BXDM_PictureProvider_Handle hXdmPP,
2030         BTMR_TimerHandle hTimer
2031         )
2032{
2033   BERR_Code rc = BERR_SUCCESS;
2034   BDBG_ENTER(BXDM_PictureProvider_SetTimerHandle_isr);
2035
2036   BDBG_ASSERT(hXdmPP);
2037
2038   BDBG_MSG(("BXDM_PictureProvider_SetTimerHandle_isr(%p, h:%p)",
2039                  hXdmPP,
2040                  hTimer
2041                  ));
2042
2043   hXdmPP->hTimer = hTimer;
2044
2045   BDBG_LEAVE(BXDM_PictureProvider_SetTimerHandle_isr);
2046   return BERR_TRACE( rc );
2047}
2048
2049BERR_Code
2050BXDM_PictureProvider_GetTimerHandle_isr(
2051         BXDM_PictureProvider_Handle hXdmPP,
2052         BTMR_TimerHandle *phTimer
2053         )
2054{
2055   BERR_Code rc = BERR_SUCCESS;
2056   BDBG_ENTER(BXDM_PictureProvider_GetTimerHandle_isr);
2057
2058   BDBG_ASSERT(hXdmPP);
2059   BDBG_ASSERT(phTimer);
2060
2061   *phTimer = hXdmPP->hTimer;
2062
2063   BDBG_LEAVE(BXDM_PictureProvider_GetTimerHandle_isr);
2064   return BERR_TRACE( rc );
2065}
2066
2067BERR_Code
2068BXDM_PictureProvider_SetChannelSyncMode_isr(
2069         BXDM_PictureProvider_Handle hXdmPP,
2070         bool bEnable
2071         )
2072{
2073   BERR_Code rc = BERR_SUCCESS;
2074   BDBG_ENTER(BXDM_PictureProvider_SetChannelSyncMode_isr);
2075
2076   BDBG_ASSERT(hXdmPP);
2077
2078   BDBG_MSG(("BXDM_PictureProvider_SetChannelSyncMode_isr(%p, %d)",
2079                  hXdmPP,
2080                  bEnable
2081                  ));
2082
2083   hXdmPP->stDMConfig.bChannelSyncMode = bEnable;
2084
2085   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_CHANNEL_SYNC_MODE;   
2086
2087   BDBG_LEAVE(BXDM_PictureProvider_SetChannelSyncMode_isr);
2088   return BERR_TRACE( rc );
2089}
2090
2091BERR_Code
2092BXDM_PictureProvider_GetChannelSyncMode_isr(
2093         BXDM_PictureProvider_Handle hXdmPP,
2094         bool *pbEnable
2095         )
2096{
2097   BERR_Code rc = BERR_SUCCESS;
2098   BDBG_ENTER(BXDM_PictureProvider_GetChannelSyncMode_isr);
2099
2100   BDBG_ASSERT(hXdmPP);
2101   BDBG_ASSERT(pbEnable);
2102
2103   *pbEnable = hXdmPP->stDMConfig.bChannelSyncMode;
2104
2105   BDBG_LEAVE(BXDM_PictureProvider_GetChannelSyncMode_isr);
2106   return BERR_TRACE( rc );
2107}
2108
2109BERR_Code
2110BXDM_PictureProvider_SetDIH(
2111         BXDM_PictureProvider_Handle hXdmPP,
2112         BXDM_DisplayInterruptHandler_Handle hXdmDih
2113         )
2114{
2115   BDBG_ENTER( BXDM_PictureProvider_SetDIH );
2116
2117   BDBG_ASSERT(hXdmPP);
2118   BDBG_ASSERT(hXdmDih);
2119
2120   hXdmPP->stDMState.stChannel.hXdmDih = hXdmDih;
2121   
2122   BDBG_LEAVE( BXDM_PictureProvider_SetDIH );
2123
2124   return BERR_TRACE( BERR_SUCCESS );
2125}
2126
2127
2128BERR_Code
2129BXDM_PictureProvider_GetDIH(
2130         BXDM_PictureProvider_Handle hXdmPP,
2131         BXDM_DisplayInterruptHandler_Handle *phXdmDih
2132         )
2133{
2134   BDBG_ENTER( BXDM_PictureProvider_GetDIH );
2135
2136   BDBG_ASSERT(hXdmPP);
2137   BDBG_ASSERT(phXdmDih);
2138
2139   *phXdmDih = hXdmPP->stDMState.stChannel.hXdmDih;
2140   
2141   BDBG_LEAVE( BXDM_PictureProvider_GetDIH );
2142
2143   return BERR_TRACE( BERR_SUCCESS );
2144}
2145
2146/* SW7405-4117: uiMaxHeightSupportedByDeinterlacer is used in conjuction with
2147 * BXDM_PictureProvider_DisplayFieldMode_eAuto to choose either eSingleField or eBothField
2148 * based on the steam height during slow motion (and preroll).
2149 */
2150BERR_Code
2151BXDM_PictureProvider_SetDeinterlacerMaxHeight(
2152         BXDM_PictureProvider_Handle hXdmPP,
2153         uint32_t uiMaxHeight
2154         )
2155{
2156   BERR_Code rc = BERR_SUCCESS;
2157   BDBG_ENTER(BXDM_PictureProvider_SetDeinterlacerMaxHeight);
2158
2159   BDBG_ASSERT(hXdmPP);
2160
2161   BDBG_MSG(("BXDM_PictureProvider_SetDeinterlacerMaxHeight(%p, %d)",
2162                  hXdmPP,
2163                  uiMaxHeight
2164                  ));
2165
2166   hXdmPP->stDMConfig.uiMaxHeightSupportedByDeinterlacer = uiMaxHeight;
2167
2168   hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_MAX_DEINT_HEIGHT;
2169
2170   BDBG_LEAVE(BXDM_PictureProvider_SetDeinterlacerMaxHeight);
2171   return BERR_TRACE( rc );
2172}
2173
2174BERR_Code
2175BXDM_PictureProvider_GetDeinterlacerMaxHeight(
2176         BXDM_PictureProvider_Handle hXdmPP,
2177         uint32_t * puiMaxHeight
2178         )
2179{
2180   BERR_Code rc = BERR_SUCCESS;
2181   BDBG_ENTER(BXDM_PictureProvider_GetDeinterlacerMaxHeight);
2182
2183   BDBG_ASSERT(hXdmPP);
2184   BDBG_ASSERT(puiMaxHeight);
2185
2186   *puiMaxHeight = hXdmPP->stDMConfig.uiMaxHeightSupportedByDeinterlacer;
2187
2188   BDBG_LEAVE(BXDM_PictureProvider_GetDeinterlacerMaxHeight);
2189   return BERR_TRACE( rc );
2190}
2191
2192/* SW7405-4703: API to allow bypass of BXDM_PPOUT_S_CalculateHorizontalOverscan */
2193BERR_Code BXDM_PictureProvider_SetHorizontalOverscanMode_isr(
2194   BXDM_PictureProvider_Handle hXdmPP,
2195   BXDM_PictureProvider_HorizontalOverscanMode eHorizOverscanMode)
2196{
2197   BERR_Code rc = BERR_SUCCESS;
2198   BDBG_ENTER(BXDM_PictureProvider_SetHorizontalOverscanMode_isr);
2199
2200   BDBG_ASSERT(hXdmPP);
2201
2202   BDBG_MSG(("BXDM_PictureProvider_SetHorizontalOverscanMode_isr(%p, %d)",
2203                  hXdmPP,
2204                  eHorizOverscanMode
2205                  ));
2206
2207   if ( eHorizOverscanMode >= BXDM_PictureProvider_HorizontalOverscanMode_eMax )
2208   {
2209      BDBG_WRN(("BXDM_PictureProvider_SetHorizontalOverscanMode_isr:: eHorizOverscanMode value of %d is out of range", eHorizOverscanMode ));
2210      rc = BERR_INVALID_PARAMETER;
2211   }
2212   else
2213   {
2214      hXdmPP->stDMConfig.eHorizontalOverscanMode = eHorizOverscanMode;
2215
2216      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_HORIZON_OVERSCAN_MODE;
2217   }
2218   
2219   BDBG_LEAVE(BXDM_PictureProvider_SetHorizontalOverscanMode_isr);
2220   return BERR_TRACE( rc );
2221}
2222
2223BERR_Code
2224BXDM_PictureProvider_GetHorizontalOverscanMode_isr(
2225   BXDM_PictureProvider_Handle hXdmPP,
2226   BXDM_PictureProvider_HorizontalOverscanMode *peHorizOverscanMode)
2227{
2228   BERR_Code rc = BERR_SUCCESS;
2229   BDBG_ENTER(BXDM_PictureProvider_GetHorizontalOverscanMode_isr);
2230
2231   BDBG_ASSERT(hXdmPP);
2232   BDBG_ASSERT(peHorizOverscanMode);
2233
2234   *peHorizOverscanMode = hXdmPP->stDMConfig.eHorizontalOverscanMode;
2235
2236   BDBG_LEAVE(BXDM_PictureProvider_GetHorizontalOverscanMode_isr);
2237   return BERR_TRACE( rc );
2238}
2239
2240/* SWDEPRECATED-1003: needed to turn off the FIC logic during certain trick modes
2241 */
2242BERR_Code BXDM_PictureProvider_SetTrickMode_isr(
2243   BXDM_PictureProvider_Handle hXdmPP,
2244   BXDM_PictureProvider_TrickMode eTrickMode
2245   )
2246{
2247   BERR_Code rc = BERR_SUCCESS;
2248   BDBG_ENTER(BXDM_PictureProvider_SetTrickMode_isr);
2249
2250   BDBG_ASSERT(hXdmPP);
2251
2252   BDBG_MSG(("BXDM_PictureProvider_SetTrickMode_isr(%p, %d)",
2253                  hXdmPP,
2254                  eTrickMode
2255                  ));
2256   if ( eTrickMode >= BXDM_PictureProvider_TrickMode_eMax )
2257   {
2258      BDBG_WRN(("BXDM_PictureProvider_SetTrickMode_isr:: eTrickMode value of %d is out of range", eTrickMode ));
2259      rc = BERR_INVALID_PARAMETER;
2260   }
2261   else
2262   {
2263      hXdmPP->stDMConfig.eTrickMode = eTrickMode;
2264
2265      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_TRICK_MODE;
2266   }
2267
2268   BDBG_LEAVE(BXDM_PictureProvider_SetTrickMode_isr);
2269   return BERR_TRACE( rc );
2270}
2271
2272BERR_Code
2273BXDM_PictureProvider_GetTrickMode_isr(
2274   BXDM_PictureProvider_Handle hXdmPP,
2275   BXDM_PictureProvider_TrickMode *peTrickMode
2276   )
2277{
2278   BERR_Code rc = BERR_SUCCESS;
2279   BDBG_ENTER(BXDM_PictureProvider_GetTrickMode_isr);
2280
2281   BDBG_ASSERT(hXdmPP);
2282   BDBG_ASSERT(peTrickMode);
2283
2284   *peTrickMode = hXdmPP->stDMConfig.eTrickMode;
2285
2286   BDBG_LEAVE(BXDM_PictureProvider_GetTrickMode_isr);
2287   return BERR_TRACE( rc );
2288}
2289
2290/* SWDEPRECATED-1003: provide an API to override the frame rate during trick modes.
2291*/
2292BERR_Code
2293BXDM_PictureProvider_SetFrameRateOverride_isr(
2294         BXDM_PictureProvider_Handle hXdmPP,
2295         const BXDM_Picture_FrameRateOverride *pstFrameRateOverride
2296         )
2297{
2298   BERR_Code rc = BERR_SUCCESS;
2299   BDBG_ENTER(BXDM_PictureProvider_SetFrameRateOverride_isr);
2300
2301   BDBG_ASSERT( hXdmPP );
2302   BDBG_ASSERT( pstFrameRateOverride );
2303
2304   BDBG_MSG(("BXDM_PictureProvider_SetFrameRateOverride_isr(%p, valid:%d %d/%d)",
2305                  hXdmPP,
2306                  pstFrameRateOverride->bValid,
2307                  pstFrameRateOverride->stRate.uiNumerator,
2308                  pstFrameRateOverride->stRate.uiDenominator
2309                  ));
2310
2311   /* Prevent a divide by '0'.*/
2312   if ( ( true == pstFrameRateOverride->bValid )
2313         && ( 0 == pstFrameRateOverride->stRate.uiDenominator ) )
2314   {
2315      hXdmPP->stDMConfig.stFrameRateOverride.bValid = false;
2316      BDBG_WRN(("BXDM_PictureProvider_SetFrameRateOverride_isr:: uiDenominator == 0!"));
2317      rc = BERR_INVALID_PARAMETER;
2318   }
2319   else
2320   {
2321      hXdmPP->stDMConfig.stFrameRateOverride = *pstFrameRateOverride;
2322
2323      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_FRAMERATE_OVERRIDE;
2324   }
2325
2326   BDBG_LEAVE(BXDM_PictureProvider_SetFrameRateOverride_isr);
2327   return BERR_TRACE( rc );
2328}
2329
2330BERR_Code
2331BXDM_PictureProvider_GetFrameRateOverride_isr(
2332         BXDM_PictureProvider_Handle hXdmPP,
2333         BXDM_Picture_FrameRateOverride *pstFrameRateOverride
2334         )
2335{
2336   BERR_Code rc = BERR_SUCCESS;
2337   BDBG_ENTER(BXDM_PictureProvider_GetFrameRateOverride_isr);
2338
2339   BDBG_ASSERT( hXdmPP );
2340   BDBG_ASSERT( pstFrameRateOverride );
2341
2342   *pstFrameRateOverride = hXdmPP->stDMConfig.stFrameRateOverride;
2343
2344   BDBG_LEAVE(BXDM_PictureProvider_GetFrameRateOverride_isr);
2345   return BERR_TRACE( rc );
2346}
2347
2348/* SW7405-4736: Set the XDM instance ID. This is to help debug multi channel issues,
2349 * i.e. PIP and mosaic mode.  Many of the BXVD_DBG_MSG statements will print this ID
2350 * to help associate messages with a particular channel.  This can be set to any value,
2351 * perhaps what makes the most sense is to set it equal to the VDC rectangle number.
2352 */
2353BERR_Code
2354BXDM_PictureProvider_SetInstanceID_isr(
2355         BXDM_PictureProvider_Handle hXdmPP,
2356         uint32_t uiInstanceID
2357         )
2358{
2359   BERR_Code rc = BERR_SUCCESS;
2360   BDBG_ENTER(BXDM_PictureProvider_SetInstanceID_isr);
2361
2362   BDBG_ASSERT(hXdmPP);
2363
2364   BDBG_MSG(("BXDM_PictureProvider_SetInstanceID(%p, %d)",
2365                  hXdmPP,
2366                  uiInstanceID
2367                  ));
2368
2369   hXdmPP->stDMConfig.uiInstanceID = uiInstanceID;
2370
2371   BDBG_LEAVE(BXDM_PictureProvider_SetInstanceID_isr);
2372   return BERR_TRACE( rc );
2373}
2374
2375BERR_Code
2376BXDM_PictureProvider_GetInstanceID_isr(
2377         BXDM_PictureProvider_Handle hXdmPP,
2378         uint32_t * puiInstanceID
2379         )
2380{
2381   BERR_Code rc = BERR_SUCCESS;
2382   BDBG_ENTER(BXDM_PictureProvider_GetInstanceID_isr);
2383
2384   BDBG_ASSERT(hXdmPP);
2385   BDBG_ASSERT(puiInstanceID);
2386
2387   *puiInstanceID = hXdmPP->stDMConfig.uiInstanceID;
2388
2389   BDBG_LEAVE(BXDM_PictureProvider_GetInstanceID_isr);
2390   return BERR_TRACE( rc );
2391}
2392
2393/* SW7422-72: API's to allow the middleware/application to specify an
2394 * orientation for each picture.
2395 */
2396
2397BERR_Code
2398BXDM_PictureProvider_Set3D_isr(
2399   BXDM_PictureProvider_Handle hXdmPP,
2400   const BXDM_PictureProvider_3DSettings * pst3DSettings
2401   )
2402{
2403   BERR_Code rc = BERR_SUCCESS;
2404   BDBG_ENTER(BXDM_PictureProvider_Set3D_isr);
2405
2406   BDBG_ASSERT(hXdmPP);
2407   BDBG_ASSERT(pst3DSettings);
2408
2409   if ( true == pst3DSettings->bOverrideOrientation
2410         && pst3DSettings->eOrientation >= BXDM_PictureProvider_Orientation_eMax
2411      )
2412   {
2413      BDBG_WRN(("BXDM_PictureProvider_Set3D_isr:: bOverrideOrientation is out of range %d", pst3DSettings->bOverrideOrientation ));
2414      rc = BERR_INVALID_PARAMETER;
2415   }
2416   else
2417   {
2418      hXdmPP->stDMConfig.st3DSettings = *pst3DSettings;
2419
2420      hXdmPP->stDMConfig.uiDirtyBits_1 |= BXDM_PictureProvider_P_DIRTY_1_3D_SETTINGS;
2421   }
2422
2423   BDBG_LEAVE(BXDM_PictureProvider_Set3D_isr);
2424   return BERR_TRACE( rc );
2425}
2426
2427BERR_Code
2428BXDM_PictureProvider_Get3D_isr(
2429   BXDM_PictureProvider_Handle hXdmPP,
2430   BXDM_PictureProvider_3DSettings * pst3DSettings
2431   )
2432{
2433   BERR_Code rc = BERR_SUCCESS;
2434   BDBG_ENTER(BXDM_PictureProvider_Get3D_isr);
2435
2436   BDBG_ASSERT(hXdmPP);
2437   BDBG_ASSERT(pst3DSettings);
2438
2439   *pst3DSettings = hXdmPP->stDMConfig.st3DSettings;
2440
2441   BDBG_LEAVE(BXDM_PictureProvider_Get3D_isr);
2442   return BERR_TRACE( rc );
2443}
2444
2445BERR_Code
2446BXDM_PictureProvider_GetDefault3D(
2447   BXDM_PictureProvider_Handle hXdmPP,
2448   BXDM_PictureProvider_3DSettings * pst3DSettings
2449   )
2450{
2451   BERR_Code rc = BERR_SUCCESS;
2452   BDBG_ENTER(BXDM_PictureProvider_GetDefault3D);
2453
2454   BSTD_UNUSED(hXdmPP);
2455   BDBG_ASSERT(pst3DSettings);
2456
2457   BKNI_Memset( pst3DSettings, 0, sizeof( BXDM_PictureProvider_3DSettings ));
2458
2459   BDBG_LEAVE(BXDM_PictureProvider_GetDefault3D);
2460   return BERR_TRACE( rc );
2461}
2462
2463/*
2464 * SW7425-1264: support for a synthesized STC; can create a clock that run backwards.
2465 */
2466BERR_Code
2467BXDM_PictureProvider_SetClockOverride_isr(
2468   BXDM_PictureProvider_Handle hXdmPP,
2469   const BXDM_PictureProvider_ClockOverride * pstClockOverride
2470   )
2471{
2472   BERR_Code rc = BERR_SUCCESS;
2473   BDBG_ENTER(BXDM_PictureProvider_SetClockOverride_isr);
2474
2475   BDBG_ASSERT( hXdmPP );
2476   BDBG_ASSERT( pstClockOverride );
2477
2478   BDBG_MSG(("BXDM_PictureProvider_SetClockOverride_isr(%p) Enable:%d  initialValue:%08x  load:%d stcDelta:%d)",
2479                  hXdmPP,
2480                  pstClockOverride->bEnableClockOverride,
2481                  pstClockOverride->uiStcValue,
2482                  pstClockOverride->bLoadSwStc,
2483                  pstClockOverride->iStcDelta
2484                  ));
2485
2486   hXdmPP->stDMConfig.stClockOverride = *pstClockOverride;
2487
2488   /* Effectively a one-shot load.  Whenever called with this flag set,
2489    * SW STC will be reloaded.
2490    */
2491   hXdmPP->stDMConfig.bInitializeSwStc = pstClockOverride->bLoadSwStc;
2492
2493   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_CLOCK_OVERRIDE;
2494 
2495   BDBG_LEAVE(BXDM_PictureProvider_SetClockOverride_isr);
2496   return BERR_TRACE( rc );
2497}
2498
2499BERR_Code
2500BXDM_PictureProvider_GetClockOverride_isr(
2501   BXDM_PictureProvider_Handle hXdmPP,
2502   BXDM_PictureProvider_ClockOverride * pstClockOverride
2503   )
2504{
2505   BERR_Code rc = BERR_SUCCESS;
2506   BDBG_ENTER(BXDM_PictureProvider_GetClockOverride_isr);
2507
2508   BDBG_ASSERT( hXdmPP );
2509   BDBG_ASSERT( pstClockOverride );
2510
2511   *pstClockOverride = hXdmPP->stDMConfig.stClockOverride;
2512
2513   BDBG_LEAVE(BXDM_PictureProvider_GetClockOverride_isr);
2514   return BERR_TRACE( rc );
2515}
2516
2517/* SW7425-2270:
2518 * The application will call SetIgnoreNRTUnderflow when it determines that an NRT underflow
2519 * is actually a gap in the content (e.g. slideshow or end of stream) and the repeated picture
2520 * should actually be encoded.
2521 *
2522 * When SetIgnoreNRTUnderflow=true, the "decoder underflow" scenario should be ignored until either:
2523 * - the underflow condition ends
2524 * - the app explicitly sets SetIgnoreNRTUnderflow=false
2525 *
2526 * Note: only the "decoder underflow" condition is ignored. All other NRT scenarios
2527 * (e.g. "Other Transcode Stalled", "FIC Stall", etc) are still in effect.
2528 */
2529BERR_Code
2530BXDM_PictureProvider_SetIgnoreNRTUnderflow_isr(
2531   BXDM_PictureProvider_Handle hXdmPP,
2532   bool bIgnoreNRTUnderflow
2533   )
2534{
2535   BERR_Code rc = BERR_SUCCESS;
2536   BDBG_ENTER(BXDM_PictureProvider_SetIgnoreNRTUnderflow_isr);
2537
2538   BDBG_ASSERT( hXdmPP );
2539
2540   BDBG_MSG(("BXDM_PictureProvider_SetIgnoreNRTUnderflow_isr(%p) bIgnoreNRTUnderflow:%d",
2541                  hXdmPP,
2542                  bIgnoreNRTUnderflow
2543                  ));
2544
2545   hXdmPP->stDMConfig.bIgnoreNRTUnderflow = bIgnoreNRTUnderflow;
2546
2547   /* If "bIgnoreNRTUnderflow" has been disabled, blindly clear "bIgnoringUnderflow"
2548    * just in case the system was currently ignoring underflows.
2549    */
2550   if ( false == hXdmPP->stDMConfig.bIgnoreNRTUnderflow )
2551   {
2552      hXdmPP->stDMState.stDecode.stNonRealTime.bIgnoringUnderflow = false;
2553   }
2554
2555   hXdmPP->stDMConfig.uiDirtyBits_2 |= BXDM_PictureProvider_P_DIRTY_2_IGNORE_NRT_UNDERFLOW;
2556 
2557   BDBG_LEAVE(BXDM_PictureProvider_SetIgnoreNRTUnderflow_isr);
2558   return BERR_TRACE( rc );
2559}
2560
2561BERR_Code
2562BXDM_PictureProvider_GetIgnoreNRTUnderflow_isr(
2563   BXDM_PictureProvider_Handle hXdmPP,
2564   bool * pbIgnoreNRTUnderflow
2565   )
2566{
2567   BERR_Code rc = BERR_SUCCESS;
2568   BDBG_ENTER(BXDM_PictureProvider_GetIgnoreNRTUnderflow_isr);
2569
2570   BDBG_ASSERT( hXdmPP );
2571   BDBG_ASSERT( pbIgnoreNRTUnderflow );
2572
2573   *pbIgnoreNRTUnderflow = hXdmPP->stDMConfig.bIgnoreNRTUnderflow;
2574
2575   BDBG_LEAVE(BXDM_PictureProvider_GetIgnoreNRTUnderflow_isr);
2576   return BERR_TRACE( rc );
2577}
2578
2579/* Callback */
2580BERR_Code
2581BXDM_PictureProvider_Callback_SetEnable_isr(
2582         BXDM_PictureProvider_Handle hXdmPP,
2583         BXDM_PictureProvider_Callback ePictureProviderCallback,
2584         bool bEnable
2585         )
2586{
2587   BERR_Code rc = BERR_SUCCESS;
2588   BDBG_ENTER(BXDM_PictureProvider_Callback_SetEnable_isr);
2589
2590   BDBG_ASSERT(hXdmPP);
2591
2592   BDBG_MSG(("BXDM_PictureProvider_Callback_SetEnable_isr(%p, cb:%d, e:%d)",
2593                  hXdmPP,
2594                  ePictureProviderCallback,
2595                  bEnable
2596                  ));
2597
2598   hXdmPP->stCallbacks[ePictureProviderCallback].bEnable = bEnable;
2599
2600   BDBG_LEAVE(BXDM_PictureProvider_Callback_SetEnable_isr);
2601   return BERR_TRACE( rc );
2602}
2603
2604BERR_Code
2605BXDM_PictureProvider_Callback_GetEnable_isr(
2606         BXDM_PictureProvider_Handle hXdmPP,
2607         BXDM_PictureProvider_Callback ePictureProviderCallback,
2608         bool *pbEnable
2609         )
2610{
2611   BERR_Code rc = BERR_SUCCESS;
2612   BDBG_ENTER(BXDM_PictureProvider_Callback_GetEnable_isr);
2613
2614   BDBG_ASSERT(hXdmPP);
2615   BDBG_ASSERT(pbEnable);
2616
2617   *pbEnable = hXdmPP->stCallbacks[ePictureProviderCallback].bEnable;
2618
2619   BDBG_LEAVE(BXDM_PictureProvider_Callback_GetEnable_isr);
2620   return BERR_TRACE( rc );
2621}
2622
2623#define BXDM_PP_CALLBACK_ENTRY(_name)\
2624BERR_Code \
2625BXDM_PictureProvider_Callback_Install_##_name##_isr(\
2626         BXDM_PictureProvider_Handle hXdmPP,\
2627         BXDM_PictureProvider_Callback_##_name##_isr fCallback,\
2628         void *pPrivateContext,\
2629         int32_t iPrivateParam\
2630)\
2631{\
2632   BERR_Code rc = BERR_SUCCESS;\
2633   BXDM_PictureProvider_Callback ePictureProviderCallback = BXDM_PictureProvider_Callback_e##_name;\
2634   BDBG_ENTER(BXDM_PictureProvider_Callback_Install_##_name##_isr);\
2635   BDBG_ASSERT(hXdmPP);\
2636   BDBG_MSG(("BXDM_PictureProvider_Callback_Install_"#_name"_isr(%p, f:%p, pp:%p, pi:%d)",\
2637                  hXdmPP,\
2638                  fCallback,\
2639                  pPrivateContext,\
2640                  iPrivateParam\
2641                  ));\
2642   hXdmPP->stCallbacks[ePictureProviderCallback].stFunction.f##_name = fCallback;\
2643   hXdmPP->stCallbacks[ePictureProviderCallback].pPrivateContext = pPrivateContext;\
2644   hXdmPP->stCallbacks[ePictureProviderCallback].iPrivateParam = iPrivateParam;\
2645   BDBG_LEAVE(BXDM_PictureProvider_Callback_Install_##_name##_isr);\
2646   return BERR_TRACE( rc );\
2647}
2648#include "bxdm_pp_callback.def"
2649
2650#define BXDM_PP_CALLBACK_ENTRY(_name)\
2651BERR_Code \
2652BXDM_PictureProvider_Callback_UnInstall_##_name##_isr(\
2653         BXDM_PictureProvider_Handle hXdmPP\
2654         )\
2655{\
2656   BERR_Code rc = BERR_SUCCESS;\
2657   BXDM_PictureProvider_Callback ePictureProviderCallback = BXDM_PictureProvider_Callback_e##_name;\
2658   BDBG_ENTER(BXDM_PictureProvider_Callback_Install_##_name##_isr);\
2659   BDBG_ASSERT(hXdmPP);\
2660   BDBG_MSG(("BXDM_PictureProvider_Callback_UnInstall_"#_name"_isr(%p)",\
2661                  hXdmPP\
2662                  ));\
2663   hXdmPP->stCallbacks[ePictureProviderCallback].stFunction.f##_name = NULL;\
2664   hXdmPP->stCallbacks[ePictureProviderCallback].pPrivateContext = NULL;\
2665   hXdmPP->stCallbacks[ePictureProviderCallback].iPrivateParam = 0;\
2666   BDBG_LEAVE(BXDM_PictureProvider_Callback_Install_##_name##_isr);\
2667   return BERR_TRACE( rc );\
2668}
2669
2670#include "bxdm_pp_callback.def"
Note: See TracBrowser for help on using the repository browser.