thrControl.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:4k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2002 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *
  7.  */
  8. /* "@(#) RF5_IEK 2.00.01 11-26-02 (swat-c18)" */
  9. /*
  10.  *  ======== thrControl.c ========
  11.  *  This file shows an example of sending messages from one thread to the
  12.  *  other using mailbox.
  13.  */
  14. #include <std.h>
  15. // DSP/BIOS includes
  16. #include <mbx.h>
  17. #include <tsk.h>
  18. // RF includes
  19. #include <utl.h>
  20. // application includes
  21. #include "appResources.h"   // application-wide common info
  22. #include "appThreads.h"     // thread-wide common info
  23. #include "thrControl.h"
  24. #include "appmain.h"
  25. #include "tskProcess.h"     /* contains thread specific information */
  26. // global variables to be modified by GEL
  27. #define NUMCONTROLS 1    // same as the number of processing channels
  28. typedef struct ExternalControl
  29. {
  30.     Int frameRatio[NUMCONTROLS];
  31.     Int quality[NUMCONTROLS];
  32. } ExternalControl;
  33. #pragma DATA_ALIGN(externalControl, 128);
  34. ExternalControl externalControl;        // GEL script writes here
  35. ExternalControl externalControlPrev;    // this is a local copy
  36. /*
  37.  *  ======== thrControlInit ========
  38.  *
  39.  */
  40. Void thrControlInit()
  41. {
  42.     UTL_assert( NUMCONTROLS == 1 );
  43.     // set the default frame ratio
  44.     externalControl.frameRatio[0] = 1;   // live video channel
  45.     externalControl.quality[0]    = 85;
  46.     externalControlPrev = externalControl;
  47. }
  48. void thrControlSet( int FrameRatio, int Quality )
  49. {
  50.     UTL_assert( NUMCONTROLS == 1 );
  51.     // Keep the quality reasonable. File size increases
  52.     // about 60% between quality factors 95 and 100.
  53.     // Keep it 1-90.
  54.     if( (Quality-=10) < 1 )
  55.         Quality = 1;
  56.     // set the default frame ratio
  57.     externalControl.frameRatio[0] = FrameRatio;
  58.     externalControl.quality[0]    = Quality;
  59. }
  60. /*
  61.  *  ======== thrControlStartup ========
  62.  *
  63.  */
  64. Void thrControlStartup()
  65. {
  66.     Int chanNum;
  67.     CtrlMsg txMsg;
  68.     // send message to initialize the frame ratio
  69.     for( chanNum = 0; chanNum < NUMCONTROLS; chanNum++)
  70.     {
  71.         // Set-up initial values for frame ratio
  72.         txMsg.cmd = MSGFRAMECHANGE;
  73.         txMsg.arg1 = chanNum;
  74.         txMsg.arg2 = externalControl.frameRatio[chanNum];
  75.         // Send the request
  76.         MBX_post( &mbxProcess, &txMsg, 0 );
  77.         // Set-up initial values for new quality
  78.         txMsg.cmd  = MSGQUALCHANGE;
  79.         txMsg.arg1 = chanNum;
  80.         txMsg.arg2 = 0;     // JPEG encoder cell index
  81.         txMsg.arg3 = externalControl.quality[chanNum];
  82.         // Send the request
  83.         MBX_post( &mbxProcess, &txMsg, 0 );
  84.     }
  85. }
  86. /*
  87.  *  ======== thrControlRun ========
  88.  *
  89.  *  Main function of Control task.
  90.  */
  91. Void thrControlRun()
  92. {
  93.     Int chanNum;
  94.     CtrlMsg txMsg;
  95.     // Main loop
  96.     while (TRUE)
  97.     {
  98.         // check for changes
  99.         for( chanNum = 0; chanNum < NUMCONTROLS; chanNum++)
  100.         {
  101.             // See if user requested a frame ratio change.
  102.             if( externalControl.frameRatio[chanNum] !=
  103.                 externalControlPrev.frameRatio[chanNum] )
  104.             {
  105.                 // new value entered
  106.                 externalControlPrev.frameRatio[chanNum] =
  107.                     externalControl.frameRatio[chanNum];
  108.                 // send message to tell which channel has ratio changed
  109.                 txMsg.cmd = MSGFRAMECHANGE;
  110.                 txMsg.arg1 = chanNum;
  111.                 txMsg.arg2 = externalControl.frameRatio[chanNum];
  112.                 MBX_post( &mbxProcess, &txMsg, 0 );
  113.             }
  114.              // See if user requested a quality change.
  115.             if( externalControl.quality[chanNum] !=
  116.                 externalControlPrev.quality[chanNum] )
  117.             {
  118.                  // new value entered
  119.                 externalControlPrev.quality[chanNum] =
  120.                     externalControl.quality[chanNum];
  121.                 // send message to tell which channel has ratio changed
  122.                 txMsg.cmd = MSGQUALCHANGE;
  123.                 txMsg.arg1 = chanNum;
  124.                 txMsg.arg2 = 0;       // JPEG encoder cell index
  125.                 txMsg.arg3 = externalControl.quality[chanNum];
  126.                 MBX_post( &mbxProcess, &txMsg, 0 );
  127.             }
  128.         }
  129.         // suspend self for 500 ticks, and then poll again
  130.         TSK_sleep( 500 );
  131.     }
  132. }