Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.55 KB | None | 0 0
  1. #include "tdp.h"
  2.  
  3.  
  4. static pthread_cond_t cv = PTHREAD_COND_INITIALIZER;
  5. static pthread_mutex_t mp = PTHREAD_MUTEX_INITIALIZER;
  6. static pthread_cond_t cv1 = PTHREAD_COND_INITIALIZER;
  7. static pthread_mutex_t mp1 = PTHREAD_MUTEX_INITIALIZER;
  8. static PatTable *patTable;
  9. static PmtTable *pmtTable;
  10. uint8_t filterPID = 0;
  11. uint8_t tableId = 0;
  12. static ServiceInfo services[20];
  13. static uint8_t serviceNum = 0;
  14. uint32_t pHandle;
  15. uint32_t sHandle;
  16. uint32_t fHandle;
  17. uint32_t stVHandle;
  18. uint32_t stAHandle;
  19.  
  20. int32_t demux_callback(uint8_t *buffer)
  21. {
  22.  
  23.     if (tableId == 0) {
  24.  
  25.         if(parsePatTable(buffer, patTable) == TABLES_PARSE_OK)  {
  26.                     printPatTable(patTable);
  27.  
  28.                         pthread_mutex_lock(&mp1);
  29.                         pthread_cond_signal(&cv1);
  30.                         pthread_mutex_unlock(&mp1);    
  31.                 }
  32.  
  33.                 return 0;
  34.         }
  35.     else if (tableId == 2) {
  36.  
  37.                 if(parsePmtTable(buffer, pmtTable,services,serviceNum) == TABLES_PARSE_OK)  {
  38.                     printPmtTable(pmtTable);
  39.  
  40.                         pthread_mutex_lock(&mp1);
  41.                         pthread_cond_signal(&cv1);
  42.                         pthread_mutex_unlock(&mp1);    
  43.                 }
  44.  
  45.           return 0;
  46.         }
  47.  
  48. }
  49.  
  50. int32_t tuner_callback(t_LockStatus status)
  51. {
  52.     if (status == 0)
  53.     {
  54.     printf("STATUS_ERROR\n");
  55.     }
  56.     else
  57.     {
  58.     printf("STATUS_LOCKED\n");
  59.         pthread_mutex_lock(&mp);
  60.         pthread_cond_signal(&cv);
  61.         pthread_mutex_unlock(&mp);
  62.     }
  63.  
  64.     return status;
  65. }
  66.  
  67.  
  68. t_Error tdpInit()
  69. {
  70.     t_Error err;
  71.  
  72.     err = Tuner_Init();
  73.         if(err != NO_ERROR)
  74.         {
  75.             printf("Tuner ERROR\n");
  76.             return ERROR;
  77.         }
  78.  
  79.  
  80.     err = Tuner_Register_Status_Callback(tuner_callback);
  81.         if(err != NO_ERROR)
  82.         {
  83.             printf("Tuner_Register_Status_Callback ERROR\n");
  84.             return ERROR;
  85.         }
  86.  
  87.     err = Tuner_Lock_To_Frequency(DESIRED_FREQUENCY,BANDWIDTH,DVB_T);
  88.         if(err != NO_ERROR)
  89.         {
  90.             printf("Tuner_Lock_To_Frequency ERROR\n");
  91.             return ERROR;
  92.         }
  93.  
  94.     pthread_mutex_lock(&mp);  
  95.     pthread_cond_wait(&cv,&mp);
  96.         pthread_mutex_unlock(&mp);
  97.  
  98.     err = Player_Init(&pHandle);
  99.         if(err != NO_ERROR)
  100.         {
  101.             printf("Player_Init ERROR\n");
  102.             return ERROR;
  103.         }
  104.  
  105.     err = Player_Source_Open(pHandle, &sHandle);
  106.         if(err != NO_ERROR)
  107.         {
  108.             printf("Player_Source_Open ERROR\n");
  109.             return ERROR;
  110.         }
  111.  
  112.     return NO_ERROR;
  113.    
  114.    
  115. }
  116.  
  117. t_Error startChannelScan()
  118. {
  119.     t_Error err;
  120.     uint8_t i = 0;
  121.  
  122.     patTable=(PatTable*)malloc(sizeof(PatTable));
  123.     if(patTable==NULL)
  124.     {
  125.             printf("\n%s : ERROR Cannot allocate memory\n", __FUNCTION__);
  126.             return -1;
  127.         }  
  128.      memset(patTable, 0, sizeof(PatTable));
  129.  
  130.         pmtTable=(PmtTable*)malloc(sizeof(PmtTable));
  131.         if(pmtTable==NULL)
  132.     {
  133.             printf("\n%s : ERROR Cannot allocate memory\n", __FUNCTION__);
  134.             return -1;
  135.      }  
  136.         memset(pmtTable, 0, sizeof(PmtTable));
  137.  
  138.     err = Demux_Register_Section_Filter_Callback(demux_callback);
  139.         if(err != NO_ERROR)
  140.         {
  141.             printf("Demux_Register_Section_Filter_Callback ERROR\n");
  142.             return ERROR;
  143.         }
  144.     err = Demux_Set_Filter(pHandle,tableId,filterPID,&fHandle);
  145.         if(err != NO_ERROR)
  146.         {
  147.             printf("Demux_Set_Filter ERROR\n");
  148.             return ERROR;
  149.         }
  150.  
  151.     pthread_mutex_lock(&mp1);  
  152.     pthread_cond_wait(&cv1,&mp1);
  153.         pthread_mutex_unlock(&mp1);
  154.  
  155.     err = Demux_Free_Filter(pHandle, fHandle);
  156.         if(err != NO_ERROR)
  157.         {
  158.             printf("Demux_Free_Filter ERROR\n");
  159.             return ERROR;
  160.         }
  161.  
  162.     tableId = 2;
  163.     for(i = 1; i < patTable->serviceInfoCount; i++)
  164.     {
  165.         err = Demux_Set_Filter(pHandle,patTable->patServiceInfoArray[i].pid,tableId,&fHandle);
  166.             if(err != NO_ERROR)
  167.             {
  168.                 printf("Demux_Register_Section_Filter_Callback ERROR\n");
  169.                 return ERROR;
  170.             }
  171.  
  172.  
  173.             pthread_mutex_lock(&mp1);
  174.             pthread_cond_wait(&cv1, &mp1);  
  175.             pthread_mutex_unlock(&mp1);
  176.  
  177.         serviceNum++;
  178.         err = Demux_Free_Filter(pHandle, fHandle);
  179.             if(err != NO_ERROR)
  180.             {
  181.                 printf("Demux_Free_Filter ERROR\n");
  182.                 return ERROR;
  183.             }
  184.         }
  185.    
  186.     return NO_ERROR;
  187. }
  188.  
  189.  
  190.  
  191. t_Error createStream(uint8_t isInitial)
  192. {
  193.     t_Error err;
  194.  
  195.     if(isInitial == 0)
  196.     {
  197.         err = Player_Stream_Remove(pHandle,sHandle,stAHandle);
  198.             if(err != NO_ERROR)
  199.             {
  200.                 printf("Player_Stream_Remove ERROR\n");
  201.                 return ERROR;
  202.             }
  203.         err = Player_Stream_Remove(pHandle,sHandle,stVHandle);
  204.             if(err != NO_ERROR)
  205.             {
  206.                 printf("Player_Stream_Remove ERROR\n");
  207.                 return ERROR;
  208.             }
  209.  
  210.     }
  211.  
  212.     err = Player_Stream_Create(pHandle, sHandle,VIDEO_PID,VIDEO_TYPE_MPEG2,&stVHandle);
  213.         if(err != NO_ERROR)
  214.         {
  215.             printf("Player_Stream_Create ERROR\n");
  216.             return ERROR;
  217.         }
  218.     err = Player_Stream_Create(pHandle, sHandle,AUDIO_PID,AUDIO_TYPE_MPEG_AUDIO,&stAHandle);
  219.         if(err != NO_ERROR)
  220.         {
  221.             printf("Player_Stream_Create ERROR\n");
  222.             return ERROR;
  223.         }
  224.    
  225.     return NO_ERROR;
  226. }
  227.  
  228. t_Error tdpDeinit()
  229. {
  230.     t_Error err;
  231.  
  232.     err = Player_Stream_Remove(pHandle,sHandle,stAHandle);
  233.         if(err != NO_ERROR)
  234.         {
  235.             printf("Player_Stream_Remove ERROR\n");
  236.             return ERROR;
  237.         }
  238.     err = Player_Stream_Remove(pHandle,sHandle,stVHandle);
  239.         if(err != NO_ERROR)
  240.         {
  241.             printf("Player_Stream_Remove ERROR\n");
  242.             return ERROR;
  243.         }
  244.     err = Demux_Free_Filter(pHandle,fHandle);
  245.         if(err != NO_ERROR)
  246.         {
  247.             printf("Demux_Free_Filter ERROR\n");
  248.             return ERROR;
  249.         }
  250.     err = Demux_Unregister_Section_Filter_Callback(demux_callback);
  251.         if(err != NO_ERROR)
  252.         {
  253.             printf("Demux_Unregister_Section_Filter_Callback ERROR\n");
  254.             return ERROR;
  255.         }
  256.     err = Player_Source_Close(pHandle, sHandle);
  257.         if(err != NO_ERROR)
  258.         {
  259.             printf("Player_Source_Close ERROR\n");
  260.             return ERROR;
  261.         }
  262.  
  263.     err = Player_Deinit(pHandle);
  264.         if(err != NO_ERROR)
  265.         {
  266.             printf("Player_Deinit ERROR\n");
  267.             return ERROR;
  268.         }
  269.     err = Tuner_Unregister_Status_Callback(tuner_callback);
  270.         if(err != NO_ERROR)
  271.         {
  272.             printf("Tuner_Unregister_Status_Callback ERROR\n");
  273.             return ERROR;
  274.         }      
  275.     err = Tuner_Deinit();
  276.         if(err != NO_ERROR)
  277.         {
  278.             printf("Tuner_Deinit ERROR\n");
  279.             return ERROR;
  280.         }
  281.  
  282.     free(pmtTable);
  283.         free(patTable);
  284.  
  285.     return NO_ERROR;
  286.  
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement