⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fbm_api.c

📁 tuner扫描
💻 C
📖 第 1 页 / 共 5 页
字号:
      return(MV_FBM_NOT_OK);
   }

} /* End MV_FBM_set_error_concealment_copy */

/*MPF=======================================================================*/
/*
    FUNCTION NAME: MV_FBM_set_error_concealment_freeze	

    DESCRIPTION:
                  

    RETURNS:
        MV_FBM_OK
	MV_FBM_NOT_OK

    CALLING SEQUENCE:
*/
int
MV_FBM_set_error_concealment_freeze(
USHORT    in_error_case
)
/*EMP=======================================================================*/
{
   /****************-----------------------------------------------!*********
   ****************!      Variable declarations                    !*********
  ****************!-----------------------------------------------*********/

   BOOLEAN lv_valid_input_parameter = TRUE;

   /****************-----------------------------------------------!*********
  ****************!      Execution				  !*********
  ****************!------------------------------------------------********/

   switch (in_error_case)
   {
      case MV_FBM_MEDIUM_FLAGED_ERROR:
         MV_drv_set_medium_flaged_error_lock(MV_BIT_ON);
         break;

      case MV_FBM_LOW_FLAGED_ERROR:
         MV_drv_set_low_flaged_error_lock(MV_BIT_ON);
         break;

      case MV_FBM_VLC_COEF_ERROR:
         MV_drv_set_vlc_coef_error_lock(MV_BIT_ON);
         break;

      case MV_FBM_VLC_EOB_MISS_ERROR:
         MV_drv_set_vlc_eob_miss_error_lock(MV_BIT_ON);
         break;

      case MV_FBM_VLC_MB_ERROR:
         MV_drv_set_vlc_mb_error_lock(MV_BIT_ON);
         break;

      case MV_FBM_VECT_ERROR:
         MV_drv_set_vect_error_lock(MV_BIT_ON);
         break;

      default:
         lv_valid_input_parameter = FALSE;
         break;

   } /* End switch */
  
  
   if(lv_valid_input_parameter == TRUE)
   {
      return(MV_FBM_OK);
   }
   else
   {
      return(MV_FBM_NOT_OK);
   }

} /* End MV_FBM_set_error_concealment_freeze */

/*MPF=======================================================================*/
/*
    FUNCTION NAME: MV_FBM_video_in_sync_handler	

    DESCRIPTION:
    Informs FBM-tasks after occurance of the video-in-sync interrupt
        
    RETURNS:

    CALLING SEQUENCE:
*/
extern void 
MV_FBM_video_in_sync_handler(
void
)
/*EMP=======================================================================*/
{
   DV_DBG_STORE_EVENT(IPVD_DBG_EV_ISR, IPVD_DBG_ISR_BEGIN_LEVEL,IPVD_IN_SYNC_ISR, 0, 0, 0);

   if (GV_MV_DEC_status.dec_sync_mode == MV_DEC_SYNC_MODE_DTS_FREE_RUNNING)
   {
      MV_drv_set_video_synchronisation_mode(MV_VIDEO_BUF_CTRL_START);
   } 

   MV_FBM_in_sync_notification();

   DV_DBG_STORE_EVENT(IPVD_DBG_EV_ISR, IPVD_DBG_ISR_END_LEVEL,IPVD_IN_SYNC_ISR, 0, 0, 0);
}

/*MPF=======================================================================*/
/*
    FUNCTION NAME: MV_FBM_init	

    DESCRIPTION:
    Perform initialization of FBM driver
        
    RETURNS:
        MV_FBM_OK
	MV_FBM_NOT_OK

    CALLING SEQUENCE:
*/
extern int
MV_FBM_init(
MV_DEC_BUFFERS *in_buffers /* In: application allocated buffers */ 
)
/*EMP=======================================================================*/
{
   
   /****************-----------------------------------------------!*********
    ****************!      Variable declarations                    !*********
    ****************!-----------------------------------------------*********/

   /* Declarations for starting the fbm task */
#ifndef FBM_IN_ISR_ONLY 
   unsigned long   FBM_tid;
#endif

   /* Declaration for the 'fbm' message queue */

   unsigned long   q_size;
   tmErrorCode_t lv_return_value;
   
   /* Declaration for interrupts */

   BOOLEAN         it_enable;

   /****************-----------------------------------------------!*********
    ****************!      Execution				  !*********
    ****************!------------------------------------------------********/

   /*---------------------------------------------------------------------*/
   /* set store_hrz_size_nxt and setup_buffer_number from ipvd_cfg.h      */
   /*---------------------------------------------------------------------*/

   MV_drv_set_store_hrz_size_nxt(GV_MV_DEC_config_status.dec_bufcfg.max_hor_dec_picture);

   if(GV_MV_DEC_config_status.dec_bufcfg.tv_standard == MV_DEC_STANDARD_60HZ)
   {
      MV_drv_set_setup_buffer_number(MV_DEC_SETUP_BUFFER_NUMBER_60HZ);
   }
   else
   {
      if(GV_MV_DEC_config_status.dec_bufcfg.fs_memory_mapping == MV_DEC_FS_MAPPING_2_6)
      {
         MV_drv_set_setup_buffer_number(MV_DEC_SETUP_BUFFER_NUMBER_50HZ_2_6FS);
      }
      else
      {
         MV_drv_set_setup_buffer_number(MV_DEC_SETUP_BUFFER_NUMBER_50HZ_3_0FS);
      }
   }
   
   

   /*---------------------------------------------------------------------*/
   /* anchored status structure on his pointer                            */
   /*---------------------------------------------------------------------*/

   LV_fbm_status_ptr = &LV_fbm_status;

   /*---------------------------------------------------------------------*/
   /* Create a message queue                                              */
   /*---------------------------------------------------------------------*/

   q_size = 30;                    /* Max of messages in the queue */

   lv_return_value = tmosalQueueCreate(q_size, sizeof(FBM_QUEUE_MSG), &GV_fbm_qid, tmosalQueueCreateFlagNone);

   if (lv_return_value != TM_OK)
   {
      DV_DBG_STORE_EVENT(IPVD_DBG_EV_TMOSAL_ERROR,
                         IPVD_DBG_MAJOR_BEHAVIOR_LEVEL,
                         IPVD_QUEUE_CREATE, lv_return_value, 0, 0); // Log the error
   }

   /*---------------------------------------------------------------------*/
   /* Create and start fbm task                                           */
   /*---------------------------------------------------------------------*/

#ifndef FBM_IN_ISR_ONLY
   lv_return_value = tmosalTaskCreate (LF_FBM_task, Null,
                                       FBM_PRIOR,
                                       USTK,
                                       &GV_FbmTaskHandle,
                                       FBM_NAME,
                                       FBM_FLAGS);

   if (lv_return_value != TM_OK)
   {
      DV_DBG_STORE_EVENT(IPVD_DBG_EV_TMOSAL_ERROR,
                         IPVD_DBG_MAJOR_BEHAVIOR_LEVEL,
                         IPVD_TASK_CREATE, lv_return_value, 0, 0); // Log the error
   }
   
#endif

   /*---------------------------------------------------------------------*/
   /* Install the event handler                                           */
   /*---------------------------------------------------------------------*/

   /* Install FBM_fbm_event_handler and FBM_fbm_error_handler */

   it_enable = TRUE;

   MV_ITV_install_isr(LF_FBM_event_handler, MV_ITV_FBM_EVENT, it_enable);
   MV_ITV_install_isr(LF_FBM_error_handler, MV_ITV_ERROR_EVENT, it_enable);
   MV_ITV_install_isr(MV_FBM_video_in_sync_handler, MV_ITV_VIDEO_INSYNC, it_enable);

   /* Hook-up on the VSYNC the function LF_FBM_Vs_handler */
   DV_DBG_STORE_EVENT(IPVD_DBG_EV_CALL_EXTERNAL_API, IPVD_DBG_CALL_BEGIN_LEVEL,IPVD_CALL_SYNC, 0, 0, 0);
   DV_SYN_link_callback(DV_SYN_CALLBACK_POS_VBI_START,LF_FBM_Vs_handler, DV_SYN_CALLBACK_PRIORITY_HIGH);
   DV_DBG_STORE_EVENT(IPVD_DBG_EV_CALL_EXTERNAL_API, IPVD_DBG_CALL_END_LEVEL,IPVD_CALL_SYNC, 0, 0, 0);
   
   MV_ITV_install_isr(LF_FBM_eoph_handler, MV_ITV_END_OF_PICTURE_HEADER, it_enable);
   MV_ITV_install_isr(LF_FBM_eopd_handler, MV_ITV_END_OF_PICTURE_DECODING, it_enable);
   
   /*---------------------------------------------------------------------*/
   /* Progran Frame store base address per data type and per field */
   /*---------------------------------------------------------------------*/
   
   {
      /*------------------------------------------------------------*/
      /* Set the data zone: Yo, Ye, Co, Ce, of the FS0 */
      /*------------------------------------------------------------*/
      LV_fbm_status_ptr->frame_store_y_odd_add[FS0] =
         (unsigned long)((unsigned long)in_buffers->FS0_y_odd_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_y_even_add[FS0] =
         (unsigned long)((unsigned long)in_buffers->FS0_y_even_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_c_odd_add[FS0] =
         (unsigned long)((unsigned long)in_buffers->FS0_c_odd_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_c_even_add[FS0] =
         (unsigned long)((unsigned long)in_buffers->FS0_c_even_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
     
      /*------------------------------------------------------------*/
      /* Set the data zone: Yo, Ye, Co, Ce, of the FS1 */
      /*------------------------------------------------------------*/
      LV_fbm_status_ptr->frame_store_y_odd_add[FS1] =
         (unsigned long)((unsigned long)in_buffers->FS1_y_odd_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_y_even_add[FS1] =
         (unsigned long)((unsigned long)in_buffers->FS1_y_even_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_c_odd_add[FS1] =
         (unsigned long)((unsigned long)in_buffers->FS1_c_odd_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_c_even_add[FS1] =
         (unsigned long)((unsigned long)in_buffers->FS1_c_even_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);


      /*------------------------------------------------------------*/
      /* set FS2 data zone accordingly */
      /*------------------------------------------------------------*/
      LV_fbm_status_ptr->frame_store_y_odd_add[FS2] =
         (unsigned long)((unsigned long)in_buffers->FS2_y_odd_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_y_even_add[FS2] =
         (unsigned long)((unsigned long)in_buffers->FS2_y_even_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_c_odd_add[FS2] =
         (unsigned long)((unsigned long)in_buffers->FS2_c_odd_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
      LV_fbm_status_ptr->frame_store_c_even_add[FS2] =
         (unsigned long)((unsigned long)in_buffers->FS2_c_even_buf_addr -
                         (unsigned long)in_buffers->SDRAM_base_addr);
  
      /*------------------------------------------------------------*/
      /* set FS3 data zone accordingly */
      /*------------------------------------------------------------*/
      if(GV_MV_DEC_config_status.dec_bufcfg.fs_memory_mapping == MV_DEC_FS_MAPPING_4_0)
      {
         LV_fbm_status_ptr->frame_store_y_odd_add[FS3] =
            (unsigned long)((unsigned long)in_buffers->FS3_y_odd_buf_addr -
                            (unsigned long)in_buffers->SDRAM_base_addr);
         LV_fbm_status_ptr->frame_store_y_even_add[FS3] =
            (unsigned long)((unsigned long)in_buffers->FS3_y_even_buf_addr -
                            (unsigned long)in_buffers->SDRAM_base_addr);
         LV_fbm_status_ptr->frame_store_c_odd_add[FS3] =
            (unsigned long)((unsigned long)in_buffers->FS3_c_odd_buf_addr -
                            (unsigned long)in_buffers->SDRAM_base_addr);
         LV_fbm_status_ptr->frame_store_c_even_add[FS3] =
            (unsigned long)((unsigned long)in_buffers->FS3_c_even_buf_addr -
                            (unsigned long)in_buffers->SDRAM_base_addr);
      }
      else
      {
         LV_fbm_status_ptr->frame_store_y_odd_add[FS3] = 0;
         LV_fbm_status_ptr->frame_store_y_even_add[FS3] = 0;
         LV_fbm_status_ptr->frame_store_c_odd_add[FS3] = 0;
         LV_fbm_status_ptr->frame_store_c_even_add[FS3] = 0;         
      }
   }

   if(GV_MV_DEC_config_status.dec_bufcfg.dec_to_disp == 2)
   {
      MV_FBM_dec_to_disp(MV_DEC_TO_DISP_N2);      
   }
   else
   {
      MV_FBM_dec_to_disp(MV_DEC_TO_DISP_N1);
   }

   return(MV_FBM_OK);
    
} /* End MV_FBM_init */

/*MPF=======================================================================*/
/*
    FUNCTION NAME: MV_FBM_release_resources	

    DESCRIPTION:
    Release all the resoources used by the FBM package
        
    RETURNS:
        MV_FBM_OK
	MV_FBM_NOT_OK

    CALLING SEQUENCE:
*/
extern int
MV_FBM_release_resources(
void
)
/*EMP=======================================================================*/
{
   /****************-----------------------------------------------!*********
    ****************!      Variable declarations                    !*********
  ****************!-----------------------------------------------*********/
#  ifndef FBM_IN_ISR_ONLY
   Int32            lv_timeout = MV_CFG_QUEUE_TIMEOUT;
   FBM_QUEUE_MSG    lv_msg;
   tmErrorCode_t returnVal;
#  endif 

   /****************-----------------------------------------------!*********
  ****************!      Execution				  !*********
  ****************!------------------------------------------------********/

  /* Disable all the interupts from fbm_error */
   MV_drv_set_error_event_enable(0);

   /* Disable all the interupts from fbm_event */
   MV_drv_set_fbm_event_enable(0);

   /* DE-Install FBM_fbm_event_handler, 
     FBM_fbm_error_handler, MV_FBM_video_in_sync_handler,
     LF_FBM_Vs_handler,
     LF_FBM_eoph_handler, LF_FBM_eopd_handler */

   MV_ITV_deinstall_isr(MV_ITV_FBM_EVENT);
   MV_ITV_deinstall_isr(MV_ITV_ERROR_EVENT);
   MV_ITV_deinstall_isr(MV_ITV_VIDEO_INSYNC);
   DV_SYN_unlink_callback(DV_SYN_CALLBACK_POS_VBI_START,LF_FBM_Vs_handler);
   MV_ITV_deinstall_isr(MV_ITV_END_OF_PICTURE_HEADER);
   MV_ITV_deinstall_isr(MV_ITV_END_OF_PICTURE_DECODING);

#  ifndef FBM_IN_ISR_ONLY

   /* Send FBM_MSG_RELEASE_RESOURCES message to FBM task */

   lv_msg[0] = FBM_MSG_RELEASE_RESOURCES;

   returnVal = tmosalQueueSend(GV_fbm_qid, lv_msg, sizeof(FBM_QUEUE_MSG), &lv_timeout, tmosalQueueSendFlagNone);

   if (returnVal != TM_OK)
   {
      switch (returnVal)
      {
         case TMOSAL_ERR_QUE_TIMEOUT:
            DV_DBG_STORE_EVENT(IPVD_DBG_EV_TIMEOUT, IPVD_DBG_QUEUE_TIMEOUT_LEVEL,1, 0,0,0);
            break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -