av.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:20k
源码类别:

DVD

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "gendef.h"
  4. #include "dmx.h"
  5. #include "vid.h"
  6. #include "osp.h"
  7. #include "aud.h"
  8. #include "avslot.h"
  9. #include "errors.h"
  10. #include "evt.h"
  11. #include "av.h"
  12. #include "vtg.h"
  13. #include "denc.h"
  14. #include "timer.h"
  15. #include "stvid.h"
  16. #include "staudlt.h"
  17. #include "stpti_hal.h"
  18. #include "staud.h"
  19. #include "regevent.h"
  20. #include "vmix.h"
  21. #include "layer.h"
  22. #include "db.h"
  23. #define PLAYING 0
  24. #define STOPPED 1
  25. #define PAUSED 2
  26. static U16 attenuation_table[KB_AV_MAX_VOLUME] = 
  27. {
  28.     63, 62, 60, 58, 
  29.     54, 49, 44, 42,
  30.     38, 36, 30, 29, 
  31.     27, 25, 23, 22, 
  32.     20, 18, 17, 16,
  33.     15, 14, 13, 10, 
  34.     8,   6,  5,  4,  
  35.     3,   2,  1,  0
  36. };
  37. static UINT32 gnAvInitFlag = FALSE;
  38. static UINT32 gnAvVolume;
  39. static UINT32 gnAvMuteStatus;
  40. //added by whale 07/06/26 start
  41. static UINT32 gnAvMode;
  42. static UINT32 gnAvRatio;
  43. //added by whale 07/06/26 end
  44. static KB_DBTRACK gnAvChannel;
  45. static INT32  gnAvVideoEnabled;
  46. static INT32  gnAvVideoIframeEnabled;
  47. static UINT32 avTimer = KB_TIMER_INVALID_ID ;
  48. static void AVHandleTimer(void);
  49. static KB_AVPlayStartCallback s_ptCallback = NULL;
  50. static BOOL  s_bPlaySuccess = TRUE;
  51. static KB_AVPID gtAvCurrentPid;
  52. static INT32 nSavedLeft;
  53. static INT32 nSavedTop;
  54. static INT32 nSavedRight;
  55. static INT32 nSavedBottom;
  56. static BOOL gFullFlag;
  57. extern BOOL  SET_ENTRY_BROD_PutFullScreen_FLAGS;
  58. #define MP2A_SAMPLING_FREQUENCY 44100
  59. INT32 KB_AVInit(void)
  60. {
  61.     ST_ErrorCode_t ST_ErrorCode = ST_NO_ERROR;
  62.     
  63.     if (gnAvInitFlag == FALSE)
  64.     {   
  65.         ST_ErrorCode = AVSlotInit();    
  66.         if (ST_ErrorCode != ST_NO_ERROR)
  67.         {
  68.             Print("error init AVSlotInit n");
  69.             return RETFIAL1;
  70.         }
  71.         
  72.         ST_ErrorCode = VID_Setup();
  73.         if (ST_ErrorCode != ST_NO_ERROR)
  74.         {
  75.          Print("error init VID_Setup n");
  76.          return RETFIAL1;
  77.         }
  78.         ST_ErrorCode = AUD_Setup( SERVICE_MODE_DVB );
  79.         if (ST_ErrorCode != ST_NO_ERROR)
  80.         {
  81.          Print("error init AUD_Setup n");
  82.          return RETFIAL1;
  83.         }                
  84.         STAUD_SetStereoOutput(AUD_Handle, STAUD_STEREO_DUAL_LEFT);
  85. RegisterEvents();
  86.         gnAvVolume = 0;
  87.         gnAvMuteStatus = FALSE;
  88.         gnAvInitFlag = TRUE;
  89.         gnAvChannel = LEFT_TRACK;
  90.         gnAvVideoEnabled = FALSE;
  91.         gnAvVideoIframeEnabled = FALSE;
  92.         
  93.         memset(&gtAvCurrentPid, 0, sizeof(KB_AVPID));
  94.     if(avTimer == KB_TIMER_INVALID_ID )
  95.     {
  96.         avTimer = KB_TimerCreate(KB_TIMER_REPEAT , (KB_TIMER_FUNC_POINTER)AVHandleTimer,NULL);
  97.     }
  98.     }
  99.     gFullFlag = TRUE;    
  100. KB_AVGetWindow(&nSavedLeft, &nSavedTop, &nSavedRight, &nSavedBottom);    
  101. return RETOK;
  102. }
  103. INT32 KB_AVPlay(UINT32 nVideoPid, UINT32 nAudioPid, UINT32 nPcrPid)
  104. {
  105.     ST_ErrorCode_t ST_ErrorCode;
  106.     STAUD_StartParams_t AUDStartParams;
  107.     STVID_StartParams_t VIDStartParams;
  108.     KB_AVStop();    
  109.     if (nAudioPid > 0 && nAudioPid < 8191)
  110.     {
  111.         StartAud((UINT16)nAudioPid);    
  112.         gtAvCurrentPid.nAudioPid = nAudioPid;
  113.         
  114.         AUDStartParams.StreamContent     = STAUD_STREAM_CONTENT_MPEG2;
  115.         AUDStartParams.SamplingFrequency = MP2A_SAMPLING_FREQUENCY;
  116.         AUDStartParams.StreamType = STAUD_STREAM_TYPE_PES;
  117.         AUDStartParams.StreamID = STAUD_IGNORE_ID;
  118.         ST_ErrorCode = STAUD_Start(AUD_Handle, &AUDStartParams);
  119.         STTBX_Print(("%s,%d,Ignore)=%sn",
  120.         AUDStartParams.StreamContent == STAUD_STREAM_CONTENT_MPEG1 ? "MPEG1":"MPEG2",
  121.         AUDStartParams.SamplingFrequency, KB_ErrorGetText(ST_ErrorCode) ));
  122.         #ifdef DISABLE_AVSYNC_FOR_DVB
  123.             ST_ErrorCode = STAUD_DisableSynchronisation(AUD_Handle);
  124.             if ( ST_ErrorCode != ST_NO_ERROR )
  125.                 {
  126.                     STTBX_Print(("STAUD_DisableSyncronisation()=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  127.                 }
  128.             #else
  129.                 ST_ErrorCode = STAUD_EnableSynchronisation(AUD_Handle);
  130.                 if ( ST_ErrorCode != ST_NO_ERROR )
  131.                 {
  132.                     STTBX_Print(("STAUD_EnableSyncronisation()=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  133.                 }
  134.         #endif
  135.     }
  136.     if (nVideoPid > 0 && nVideoPid < 8191)
  137.     {
  138.         StartVid((UINT16)nVideoPid);
  139.         gtAvCurrentPid.nVideoPid = nVideoPid;
  140.         
  141.       #if defined(STVID_ERROR_RECOVERY_MODE_NONE)
  142.        {
  143.        ST_ErrorCode = STVID_SetErrorRecoveryMode(VID_Handle, STVID_ERROR_RECOVERY_NONE);
  144.        if ( ST_ErrorCode != ST_NO_ERROR )
  145.        {
  146.            STTBX_Print(("STVID_SetErrorRecoveryMode()Failed 0x%08x n", ST_ErrorCode ));
  147.        }
  148.        else
  149.        {
  150.            STTBX_Print(("STVID_SetErrorRecoveryMode()= STVID_ERROR_RECOVERY_NONE n" ));
  151.        }
  152.        }
  153.        #endif /* end of STVID_ERROR_RECOVERY_MODE_NONE */
  154.         VIDStartParams.RealTime      = TRUE;
  155.         VIDStartParams.UpdateDisplay = TRUE;
  156.         VIDStartParams.StreamID      = STVID_IGNORE_ID;
  157.         VIDStartParams.DecodeOnce    = FALSE;
  158.         VIDStartParams.StreamType    = STVID_STREAM_TYPE_PES;
  159.         VIDStartParams.BrdCstProfile = STVID_BROADCAST_DVB;
  160.         ST_ErrorCode = STVID_Start(VID_Handle, &VIDStartParams);
  161.         STTBX_Print(("STVID_Start %sn", KB_ErrorGetText(ST_ErrorCode) ));
  162.         
  163.         #ifdef DISABLE_AVSYNC_FOR_DVB
  164.             ST_ErrorCode = STVID_DisableSynchronisation(VID_Handle);
  165.             if ( ST_ErrorCode != ST_NO_ERROR )
  166.             {
  167.                  STTBX_Print(("STVID_DisableSyncronisation()=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  168.             }
  169.         #else
  170.             ST_ErrorCode = STVID_EnableSynchronisation(VID_Handle);
  171.             if ( ST_ErrorCode != ST_NO_ERROR )
  172.             {
  173.                 STTBX_Print(("STVID_EnableSyncronisation()=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  174.             }
  175.         #endif /* end of DISABLE_AVSYNC_FOR_DVB */
  176.     }
  177.     if (nPcrPid > 0 && nPcrPid < 8192)
  178.     {
  179.         StartPCR((UINT16)nPcrPid);  
  180.         gtAvCurrentPid.nPcrPid = nPcrPid;
  181.     }
  182.     s_bPlaySuccess = TRUE;
  183.     KB_TimerEnable(avTimer, 4000);
  184. return RETOK;
  185. }
  186. INT32 KB_AVStop(void)
  187. {
  188.     STAUD_Fade_t    Fade;
  189.     ST_ErrorCode_t error;
  190.     STVID_Stop_t    StopMode = STVID_STOP_NOW;
  191.     STVID_Freeze_t  Freeze;    
  192.     if (gtAvCurrentPid.nAudioPid != 0)
  193.     {
  194.         StopAud();   
  195.         gtAvCurrentPid.nAudioPid = 0;
  196.         
  197.         Fade.FadeType = STAUD_FADE_SOFT_MUTE;
  198.         error = STAUD_Stop(AUD_Handle, STAUD_STOP_NOW, &Fade);
  199.         if ( error != ST_NO_ERROR )
  200.         {
  201.             STTBX_Print(("STAUD_Stop=%sn", KB_ErrorGetText(error)));
  202.         }
  203.     }
  204.     if (gtAvCurrentPid.nVideoPid != 0)
  205.     {
  206.         StopVid();
  207.         gtAvCurrentPid.nVideoPid = 0;
  208.         
  209.         if (gnAvVideoIframeEnabled == FALSE)
  210.         {
  211.             Freeze.Field = STVID_FREEZE_FIELD_TOP;
  212.             Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;    
  213.             DBGPrint("gnAvVideoIframeEnabled = %dn", (int)gnAvVideoIframeEnabled);
  214.             
  215.             STVID_DisableOutputWindow(VID_ViewPortHandle);
  216.             gnAvVideoEnabled = FALSE;
  217.             
  218.             error = STVID_Stop(VID_Handle, StopMode, &Freeze);
  219.             if ( error != ST_NO_ERROR )
  220.             {
  221.                 STTBX_Print(("STVID_Stop=%sn", KB_ErrorGetText(error)));
  222.             }        
  223.         }
  224.     }
  225.     if (gtAvCurrentPid.nPcrPid != 0)
  226.     {
  227.         StopPCR();
  228.         gtAvCurrentPid.nPcrPid = 0;
  229.     }
  230.     
  231.     KB_TimerDisable(avTimer);
  232.     
  233. return RETOK;
  234. }
  235. INT32 AVStop_A(void)
  236. {
  237.     STAUD_Fade_t    Fade;
  238.     ST_ErrorCode_t error;
  239.     //STVID_Stop_t    StopMode = STVID_STOP_NOW;
  240.     //STVID_Freeze_t  Freeze;    
  241.     if (gtAvCurrentPid.nAudioPid != 0)
  242.     {
  243.         gtAvCurrentPid.nAudioPid = 0;
  244.         
  245.         Fade.FadeType = STAUD_FADE_SOFT_MUTE;
  246.         error = STAUD_Stop(AUD_Handle, STAUD_STOP_NOW, &Fade);
  247.     }
  248.     if (gtAvCurrentPid.nPcrPid != 0)
  249.     {
  250.         StopPCR();
  251.         gtAvCurrentPid.nPcrPid = 0;
  252.     }
  253.     
  254.     KB_TimerDisable(avTimer);
  255. return RETOK;
  256. }
  257. INT32 AVStop_V(void)
  258. {
  259.     //STAUD_Fade_t    Fade;
  260.     ST_ErrorCode_t error;
  261.     STVID_Stop_t    StopMode = STVID_STOP_NOW;
  262.     STVID_Freeze_t  Freeze;    
  263.     if (gtAvCurrentPid.nVideoPid != 0)
  264.     {
  265.         StopVid();
  266.         gtAvCurrentPid.nVideoPid = 0;
  267.         
  268.         if (gnAvVideoIframeEnabled == FALSE)
  269.         {
  270.             Freeze.Field = STVID_FREEZE_FIELD_TOP;
  271.             Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;    
  272.             STVID_DisableOutputWindow(VID_ViewPortHandle);
  273.             gnAvVideoEnabled = FALSE;
  274.             
  275.             error = STVID_Stop(VID_Handle, StopMode, &Freeze);
  276.         }
  277.     }
  278.     if (gtAvCurrentPid.nPcrPid != 0)
  279.     {
  280.         StopPCR();
  281.         gtAvCurrentPid.nPcrPid = 0;
  282.     }
  283.     
  284.     KB_TimerDisable(avTimer);
  285. return RETOK;
  286. }
  287. INT32 KB_AVPause(void)
  288. {       
  289.     STAUD_Fade_t   Fade;
  290.     STVID_Freeze_t Freeze;    
  291.     ST_ErrorCode_t ST_ErrorCode;
  292.     
  293.     Fade.FadeType = STAUD_FADE_SOFT_MUTE;
  294.     ST_ErrorCode = STAUD_Pause(AUD_Handle, &Fade);
  295.     if (ST_ErrorCode != ST_NO_ERROR)
  296.     {
  297.         STTBX_Print(("STAUD_Pause()=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  298.     }
  299.     Freeze.Field = STVID_FREEZE_FIELD_TOP;
  300.     Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;    
  301.     ST_ErrorCode = STVID_Pause(VID_Handle, &Freeze);
  302.     if (ST_ErrorCode != ST_NO_ERROR)
  303.     {
  304.         STTBX_Print(("STVID_Pause()=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  305.     }
  306.     
  307. return RETOK;
  308. }
  309. INT32 KB_AVSetWindow(INT32 nLeft, INT32 nTop, INT32 nRight, INT32 nBottom)
  310. {
  311. ST_ErrorCode_t ErrCode = ST_NO_ERROR;
  312.     STGXOBJ_Rectangle_t OutputRectangle;
  313.     BOOL AutoMode;
  314.     STVID_WindowParams_t WinParams;
  315.     if (nLeft == 0 && nTop == 0 && nRight == 720 && nBottom == 576)
  316.         gFullFlag = TRUE;
  317.     else  
  318.     gFullFlag = FALSE;
  319.        nSavedLeft   = nLeft;
  320.      nSavedTop    = nTop;
  321.      nSavedRight  = nRight;
  322.      nSavedBottom = nBottom;
  323.     if (nLeft % 2 == 0)
  324.     {
  325.         OutputRectangle.PositionX = (S32)nLeft;
  326.     }
  327.     else
  328.     {
  329.         OutputRectangle.PositionX = (S32)nLeft + 1;
  330.     }
  331.     if (nTop % 2 == 0)
  332.     {
  333.         OutputRectangle.PositionY = (S32)nTop;
  334.     }
  335.     else
  336.     {
  337.         OutputRectangle.PositionY = (S32)nTop + 1;
  338.     }
  339.     OutputRectangle.Width     = (U32)(nRight - nLeft);
  340.     OutputRectangle.Height    = (U32)(nBottom - nTop);
  341.     if ( OutputRectangle.Width == 0 )
  342.          OutputRectangle.Width = g_KB_VtgModeParams.ActiveAreaWidth;
  343.     if ( OutputRectangle.Height == 0 )
  344.             OutputRectangle.Height = g_KB_VtgModeParams.ActiveAreaHeight;
  345.     
  346.     STVID_GetOutputWindowMode(VID_ViewPortHandle, &AutoMode, &WinParams);
  347.     STVID_SetOutputWindowMode(VID_ViewPortHandle, FALSE, &WinParams);
  348.     ErrCode = STVID_SetIOWindows(VID_ViewPortHandle, 0, 0, 0, 0,
  349.                                  OutputRectangle.PositionX,
  350.                                  OutputRectangle.PositionY,
  351.                                  OutputRectangle.Width,
  352.                                  OutputRectangle.Height);
  353.     if ( ErrCode != ST_NO_ERROR )
  354.     {
  355.         STTBX_Print(("STVID_SetIOWindows()=%sn", KB_ErrorGetText(ErrCode)));
  356. return RETFIAL1;
  357.     }
  358. return RETOK;
  359. }
  360. INT32 KB_AVGetWindow(INT32 *pLeft, INT32 *pTop, INT32 *pRight, INT32 *pBottom)
  361. {   
  362. ST_ErrorCode_t    ErrCode;
  363.     S32 InputWinPositionX;
  364.     S32 InputWinPositionY;
  365.     U32 InputWinWidth;
  366.     U32 InputWinHeight;
  367.     S32 OutputWinPositionX;
  368.     S32 OutputWinPositionY;
  369.     U32 OutputWinWidth;
  370.     U32 OutputWinHeight;
  371. if( (pLeft == NULL) || (pTop == NULL)
  372. || (pRight == NULL) || (pBottom == NULL) ) return RETFAIL3;
  373.     if (( ErrCode = STVID_GetIOWindows( VID_ViewPortHandle,
  374.                                         &InputWinPositionX,  &InputWinPositionY,
  375.                                         &InputWinWidth,      &InputWinHeight,
  376.                                         &OutputWinPositionX, &OutputWinPositionY,
  377.                                         &OutputWinWidth,     &OutputWinHeight )) != ST_NO_ERROR)
  378.     {
  379.         STTBX_Print(("STVID_GetIOWindows()=%sn", KB_ErrorGetText(ErrCode)));
  380. return RETFIAL1;
  381.     }
  382. *pLeft = (INT32)OutputWinPositionX;
  383. *pTop = (INT32)OutputWinPositionY;
  384. *pRight = (INT32)(OutputWinPositionX + (INT32)OutputWinWidth);
  385. *pBottom= (INT32)(OutputWinPositionY + (INT32)OutputWinHeight);
  386. return RETOK;
  387. }
  388. INT32 KB_AVChangeWindow(BOOL bFull)
  389. {
  390. if(bFull)
  391. KB_AVSetWindow(0,0,720,576);
  392. else
  393. KB_AVSetWindow(nSavedLeft,nSavedTop,nSavedRight,nSavedBottom);
  394.        gFullFlag = bFull;
  395. return RETOK;
  396. }
  397. BOOL  KB_AVGetWindowFlag(void)
  398. {
  399. return gFullFlag;
  400. }
  401. INT32 KB_AVSetMute(BOOL bisMute)
  402. {
  403.     ST_ErrorCode_t ST_ErrorCode;
  404.     gnAvMuteStatus = bisMute;
  405. if(bisMute)
  406.     ST_ErrorCode = STAUD_Mute(AUD_Handle, TRUE, TRUE);
  407. else
  408. ST_ErrorCode = STAUD_Mute(AUD_Handle, FALSE, FALSE);
  409.     if ( ST_ErrorCode != ST_NO_ERROR )
  410.     {
  411.         STTBX_Print(("STAUD_Mute(TRUE)=%sn", KB_ErrorGetText(ST_ErrorCode) ));
  412.     }    
  413.     
  414. return RETOK;
  415. }
  416. INT32 KB_AVGetMuteFlag(void)
  417. {
  418.     return gnAvMuteStatus;
  419. }
  420. INT32 KB_AVSetPrgTrack(KB_DBTRACK nTrack)
  421. {
  422.     STAUD_Stereo_t nMode;
  423.     
  424.     if (nTrack > STEREO_TRACK)
  425.     {        
  426.         return RETFAIL3;
  427.     }
  428.     else
  429.     {
  430.         if (gnAvChannel == nTrack)
  431.         {
  432.             return RETOK;           
  433.         }
  434.         
  435.         switch (nTrack)
  436.         {
  437.         case LEFT_TRACK:
  438.             nMode = STAUD_STEREO_DUAL_LEFT;
  439.             break;
  440.             
  441.         case RIGHT_TRACK:
  442.             nMode = STAUD_STEREO_DUAL_RIGHT;
  443.             break;
  444.         case STEREO_TRACK:
  445.             nMode = STAUD_STEREO_STEREO;
  446.             break;
  447.         default:
  448.             nMode = STAUD_STEREO_DUAL_LEFT;
  449.             break;
  450.         }
  451.         
  452.         STAUD_SetStereoOutput(AUD_Handle, nMode);
  453.         gnAvChannel = nTrack;
  454.     return RETOK;
  455.     }
  456. }
  457. KB_DBTRACK KB_AVGetTrack(void)
  458. {
  459. return gnAvChannel;
  460. }
  461. INT32 KB_AVSetVolume(INT32 nVolume)
  462. {
  463.     STAUD_Attenuation_t Attenuation;
  464.     U16 left_volume, right_volume;
  465.     
  466.     if (nVolume < 0 || nVolume > KB_AV_MAX_VOLUME - 1)
  467.     {
  468.         return RETFAIL3;
  469.     }
  470.     gnAvVolume = nVolume;
  471.     memset(&Attenuation, 0, sizeof(STAUD_Attenuation_t));
  472.     
  473.     left_volume = right_volume = (U16)nVolume;
  474.     Attenuation.Left = attenuation_table[left_volume];
  475.     Attenuation.Right = attenuation_table[right_volume];
  476.     STAUD_SetAttenuation(AUD_Handle, Attenuation);
  477.     
  478. return RETOK;
  479. }
  480. INT32 KB_AVGetVolume(void)
  481. {
  482. return gnAvVolume;
  483. }
  484. void AVHandleNewVideoFrame(STEVT_CallReason_t Reason, 
  485.                              STEVT_EventConstant_t Event, 
  486.                              const void *EventData)
  487. {
  488.     ST_ErrorCode_t ErrCode;
  489.     STVID_PictureInfos_t PictureInfo;
  490.     static U32 FrameRate = 25000;
  491.     ErrCode = ST_NO_ERROR;
  492. if((Event == STVID_NEW_PICTURE_TO_BE_DISPLAYED_EVT) && gnAvVideoEnabled == FALSE)
  493.    {        
  494.         PictureInfo = *((STVID_PictureInfos_t*) EventData);
  495.         STTBX_Print(("FRAME_RATE = %dn", PictureInfo.VideoParams.FrameRate));
  496. if(FrameRate != PictureInfo.VideoParams.FrameRate)
  497. {
  498. STTBX_Print(("New FRAME_RATE detected = %dn", PictureInfo.VideoParams.FrameRate));
  499. FrameRate = PictureInfo.VideoParams.FrameRate;
  500. }
  501. STVID_EnableOutputWindow(VID_ViewPortHandle);  
  502.         gnAvVideoEnabled = TRUE;
  503.     }
  504.     
  505.     return;
  506. }
  507. static void AVHandleTimer(void)
  508. {
  509. static U32 oldVideoCount = 0;
  510. static U32 oldAudioCount = 0;
  511. BOOL bVideo = TRUE;
  512. if(oldVideoCount == VideoEvent_STVID_NEW_PICTURE_TO_BE_DISPLAYED_EVT_Count)
  513. {
  514. bVideo = FALSE;
  515. }
  516. else
  517. {
  518. oldVideoCount = VideoEvent_STVID_NEW_PICTURE_TO_BE_DISPLAYED_EVT_Count;
  519. }
  520. if(oldAudioCount == AudioEvent_STAUD_NEW_FRAME_EVT_Count)
  521. {
  522. if(!bVideo)
  523. {
  524. s_bPlaySuccess = FALSE;
  525. if(s_ptCallback != NULL)
  526. {
  527. s_ptCallback(FALSE, 0, 0, 0);
  528. }
  529. }
  530. }
  531. else
  532. {
  533. oldAudioCount = AudioEvent_STAUD_NEW_FRAME_EVT_Count;
  534. if(!s_bPlaySuccess)
  535. {
  536. s_bPlaySuccess = TRUE;
  537. if(s_ptCallback != NULL)
  538. {
  539. s_ptCallback(TRUE, 0, 0, 0);
  540. }
  541. }
  542. }
  543. }
  544. BOOL KB_AVGetIFrameFlag(void)
  545. {
  546.     return (BOOL)gnAvVideoIframeEnabled;
  547. }
  548. INT32 KB_AVPlayIFrame(UINT8 *pInData, INT32 nDataSize)
  549. {
  550.     Switch2Iframe(pInData, (int)nDataSize);
  551.     gnAvVideoIframeEnabled = TRUE;
  552.     return RETOK;
  553. }
  554. INT32 KB_AVStopIFrame(void)
  555. {
  556.     Switch2Live();
  557.     gnAvVideoEnabled = FALSE;
  558.     gnAvVideoIframeEnabled = FALSE;
  559.     return RETOK;
  560. }
  561. KB_AVPlayStartCallback KB_AVHandlePlayState(KB_AVPlayStartCallback ptCallback)
  562. {
  563. KB_AVPlayStartCallback oldCallBack = s_ptCallback;
  564. s_ptCallback = ptCallback;
  565. return oldCallBack;
  566. }
  567. #if 0
  568. extern STVID_ViewPortHandle_t  VID_ViewPortHandle_Multiple[VIDEO_USED]; /* j_vid.c */
  569. int KB_AVSetTVAspectRatioAndMatchMode(KB_AVAspectRatio nAspectRatio, 
  570.                             STVID_DisplayAspectRatioConversion_t nMatchMode)
  571. {
  572. STVMIX_ScreenParams_t ScreenParams;
  573. STLAYER_LayerParams_t LayerParams;
  574. STVID_DisplayAspectRatioConversion_t STVID_darc = STVID_DISPLAY_AR_CONVERSION_IGNORE;
  575.     STVID_WindowParams_t  WindowParams;
  576. ST_ErrorCode_t        ErrCode = ST_NO_ERROR;
  577.     WindowParams.Size  = STVID_WIN_SIZE_DONT_CARE;
  578.     WindowParams.Align = STVID_WIN_ALIGN_VCENTRE_HCENTRE;
  579.     ErrCode  = STLAYER_GetLayerParams(g_KB_LayerHandle[LAYER_VIDEO], &LayerParams);
  580.     ErrCode |= STVMIX_GetScreenParams(g_KB_VmixHandle, &ScreenParams);
  581. if (ErrCode == ST_NO_ERROR)
  582. {
  583. switch (nAspectRatio)
  584. {
  585. case KB_AV_ASPECT_RATIO_16TO9:
  586.             LayerParams.AspectRatio  = STGXOBJ_ASPECT_RATIO_16TO9;
  587.             ScreenParams.AspectRatio = STGXOBJ_ASPECT_RATIO_16TO9;
  588. break;
  589. case KB_AV_ASPECT_RATIO_4TO3:
  590.         LayerParams.AspectRatio  = STGXOBJ_ASPECT_RATIO_4TO3;
  591.         ScreenParams.AspectRatio = STGXOBJ_ASPECT_RATIO_4TO3;
  592. break;
  593. default:
  594.     ErrCode = ST_ERROR_BAD_PARAMETER;
  595. break;
  596. }
  597. }
  598.         
  599. if (ErrCode == ST_NO_ERROR)
  600. {
  601. ErrCode = STLAYER_SetLayerParams(g_KB_LayerHandle[LAYER_VIDEO], &LayerParams);
  602. }
  603. if (ErrCode == ST_NO_ERROR)
  604. {
  605. ErrCode = STVMIX_SetScreenParams(g_KB_VmixHandle, &ScreenParams);
  606. }
  607. if (ErrCode != ST_NO_ERROR)
  608. {
  609. return RETFIAL1;
  610. }
  611.  
  612.     STVID_darc = nMatchMode;
  613.  
  614.     
  615.     ErrCode = STVID_SetDisplayAspectRatioConversion(VID_ViewPortHandle_Multiple[VIDEO_USED-1], STVID_darc);
  616.     if (ErrCode != ST_NO_ERROR)
  617.     {
  618.         STTBX_Print(("[VID]: SetDisplayAspectRatioConversion()=%d err=0x%x n",
  619.              KB_ErrorGetText(ErrCode), ErrCode));
  620.     }
  621.  
  622.     STVID_SetOutputWindowMode(VID_ViewPortHandle_Multiple[VIDEO_USED-1], TRUE, &WindowParams );
  623.  
  624.     return RETOK;
  625. }
  626. #else
  627. int KB_AVSetAspectRatio(KB_AVAspectRatio nAspectRatio)
  628. {
  629. ST_ErrorCode_t ErrCode = ST_NO_ERROR;
  630. //STGXOBJ_AspectRatio_t *nRatio;
  631. if (gnAvRatio != nAspectRatio)
  632. {
  633. gnAvRatio = nAspectRatio;
  634. switch (nAspectRatio)
  635. {
  636. case KB_AV_ASPECT_RATIO_16TO9:
  637. ErrCode = KB_VmixSetAspectRatio(STGXOBJ_ASPECT_RATIO_16TO9);
  638. break;
  639. case KB_AV_ASPECT_RATIO_4TO3:
  640. ErrCode = KB_VmixSetAspectRatio(STGXOBJ_ASPECT_RATIO_4TO3);
  641. break;
  642. default:
  643.      ErrCode = ST_ERROR_BAD_PARAMETER;
  644. break;
  645. }
  646. }
  647. if (ErrCode != ST_NO_ERROR)
  648. {
  649. Print("KB_AVSetAspectRatio=%sn", KB_ErrorGetText(ErrCode));
  650. return RETFIAL1;
  651. }
  652.         KB_DBSaveVideoAspectRatio((UINT8)nAspectRatio);
  653.      return RETOK;
  654. }
  655. #endif
  656. int KB_AVSetMode(KB_AVVideoDisplayMode nMode)
  657. {
  658. ST_ErrorCode_t ErrCode = ST_NO_ERROR;
  659. if (gnAvMode != nMode)
  660. {
  661. gnAvMode = nMode;
  662. switch(nMode)
  663. {
  664. case KB_AV_VIDEO_DISPLAY_PAL:
  665. ErrCode = KB_DENCSetMode( STDENC_MODE_PALBDGHI );
  666. ErrCode |= KB_VtgSetMode( STDENC_MODE_PALBDGHI );
  667. break;
  668. case KB_AV_VIDEO_DISPLAY_NTSC:
  669. ErrCode = KB_DENCSetMode( STDENC_MODE_NTSCM );
  670. ErrCode |= KB_VtgSetMode( STDENC_MODE_NTSCM );
  671. break;
  672. case KB_AV_VIDEO_DISPLAY_SECAM:
  673. ErrCode = KB_DENCSetMode( STDENC_MODE_SECAM );
  674. ErrCode |= KB_VtgSetMode( STDENC_MODE_SECAM );
  675. break;
  676. default:
  677. ErrCode = ST_ERROR_BAD_PARAMETER;
  678. break;
  679. }
  680. }
  681. if (ErrCode != ST_NO_ERROR)
  682. {
  683. Print("KB_AVSetMode=%sn", KB_ErrorGetText(ErrCode));
  684. return RETFIAL1;
  685. }
  686.  
  687. //added by yyj 2007.6.29
  688. KB_DBSaveVideoDispMode((UINT8)nMode);
  689.      return RETOK;
  690. }
  691. /* EOF */