rt_video.c
上传用户:sxdewei
上传日期:2014-06-02
资源大小:67k
文件大小:13k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <fcntl.h>
  5. #include <getopt.h>
  6. #include <errno.h>
  7. #include <unistd.h>
  8. #include <sys/ioctl.h>
  9. #include <sys/socket.h>
  10. #include <net/if.h>
  11. #include <linux/config.h>
  12. #include <netinet/in.h>
  13. #include <arpa/inet.h>
  14. #include <linux/if_ether.h>
  15. #include "cgivars.h"
  16. #include "htmllib.h"
  17. #include "config_phase.h"
  18. #include "sysconf.h"
  19. #include "fifo.h"
  20. #define DEBUG        0
  21. #define ID_CAM_RESO          3
  22. #define ID_CAM_LUM            5
  23. #define ID_CAM_SAT            6
  24. #define ID_CAM_CON            7
  25. static config_item ** items;
  26. static int config_list[] = {3,5,6,7};
  27. static char *config_name[] = {"CAM_RESO", "CAM_LUM", "CAM_SAT", "CAM_CON"};
  28. int get_ip(char* tmp)
  29. {
  30. struct ifreq ifr;
  31. unsigned long laddr;
  32. int i,Socket,res;
  33. struct interface *ife;
  34. char *ip;
  35. char pctmp[40];
  36. FILE *fd;
  37. char *host;
  38. if((host=getenv("HOST")) == NULL)
  39. {
  40. Socket = socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));
  41. //if(CONF_NET->WDHCP==1 || (CONF_NET->WIPADDR>0 && CONF_NET->WIPADDR!=0xffffffff))
  42. // strcpy(ifr.ifr_name, "eth1");
  43. //else
  44. strcpy(ifr.ifr_name, "eth0");
  45. ifr.ifr_addr.sa_family = AF_INET;
  46. memset(pctmp,0,sizeof(pctmp));
  47. if (ioctl(Socket, SIOCGIFADDR, &ifr) == 0)
  48. {
  49. //printf(" SIOCGIFADDR : %dn",i);
  50.      laddr = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;
  51. ip=&laddr;
  52. sprintf(tmp, "%d.%d.%d.%d", ip[0],ip[1],ip[2],ip[3]);
  53. }
  54. else
  55. strcpy(tmp, "0.0.0.0");
  56. close(Socket);
  57. }
  58. else
  59. {
  60. strcpy(tmp,host);
  61. }
  62. }
  63. void rt_video(char **postvars, char **getvars, int form_method)
  64. {
  65. int config_num = sizeof(config_list)/sizeof(int);
  66. int i;
  67. int r_fd, w_fd;
  68. int temp_int;
  69. char *temp_string;
  70. char iptmp[20];
  71. int ServerPort = 8090;  // to do: change it;
  72. int xreso ,yreso;
  73. //<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  74. //<META HTTP-EQUIV="expires" CONTENT="-1">
  75. char java[]="
  76. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  77. <HTML><HEAD>
  78. <META HTTP-EQUIV="Content-Type" content="text/html; charset=gb2312">
  79. <STYLE type=text/css>BODY {
  80. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  81. }
  82. TD {
  83. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  84. }
  85. FORM {
  86. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  87. }
  88. OPTION {
  89. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  90. }
  91. TEXTAREA {
  92. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  93. }
  94. P {
  95. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  96. }
  97. OL {
  98. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  99. }
  100. INPUT {
  101. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  102. }
  103. SELECT {
  104. FONT-SIZE: 10pt; FONT-FAMILY: Arial
  105. }
  106. .style1 {
  107. FONT-WEIGHT: bold; FONT-SIZE: 14pt
  108. }
  109. </STYLE>
  110. <META content="MSHTML 6.00.6000.16414" name=GENERATOR>
  111. </HEAD>";
  112. char jsp[] = "<script language="JavaScript">
  113. <!--
  114.    function  setResolution(x, y)
  115. {
  116. document.getElementById("VLCPlugin1").style.width = x;
  117. document.getElementById("VLCPlugin1").style.height = y; 
  118. //top.location.reload();
  119. //location.reload();
  120. //xreso = x;
  121. //yreso = y;
  122. }
  123. function setControl()
  124. {
  125.   var x,y;
  126.   var  selected = document.getElementById("CAM_RESO").value;
  127.   if( selected =="1")
  128.     {
  129.              x = 640;
  130.  y = 480;
  131.    }else if(selected =="2")
  132.    {
  133. x = 320;
  134. y = 240;
  135.    }else
  136.    {
  137. x = 160;
  138. y = 120;
  139.    }
  140. document.getElementById("VLCPlugin1").style.width = x;
  141. document.getElementById("VLCPlugin1").style.height = y; 
  142.       //   alert(selected);
  143.          return true;
  144. }
  145. -->
  146. </script> ";
  147. //r_fd = open_read_fifo();
  148.  //  trace("get:n");
  149. //tracePostVars(getvars);
  150. if(form_method == GET && getvars[0] != NULL)
  151. {
  152. for (i=0; getvars[i]; i+= 2)
  153. {
  154. if(!strcmp(getvars[i], "action"))
  155. {
  156. if(!strcmp(getvars[i+1], "pan_scan"))
  157. {
  158. w_fd = open_write_fifo();
  159. send_cmd(w_fd, VIDEO_L_R);
  160. close_write_fifo(w_fd);
  161. }
  162. else if(!strcmp(getvars[i+1], "tilt_scan"))
  163. {
  164. w_fd = open_write_fifo();
  165. send_cmd(w_fd, VIDEO_U_D);
  166. close_write_fifo(w_fd);
  167. }
  168. }
  169. else if(!strcmp(getvars[i], "diretion"))
  170. {
  171. if(!strcmp(getvars[i+1], "cam_up"))
  172. {
  173. w_fd = open_write_fifo();
  174. send_cmd(w_fd, VIDEO_U);
  175. close_write_fifo(w_fd);
  176. }
  177. else if(!strcmp(getvars[i+1], "cam_down"))
  178. {
  179. w_fd = open_write_fifo();
  180. send_cmd(w_fd, VIDEO_D);
  181. close_write_fifo(w_fd);
  182. }
  183. else if(!strcmp(getvars[i+1], "cam_left"))
  184. {
  185. w_fd = open_write_fifo();
  186. send_cmd(w_fd, VIDEO_L);
  187. close_write_fifo(w_fd);
  188. }
  189. else if(!strcmp(getvars[i+1], "cam_right"))
  190. {
  191. w_fd = open_write_fifo();
  192. send_cmd(w_fd, VIDEO_R);
  193. close_write_fifo(w_fd);
  194. }
  195. else if(!strcmp(getvars[i+1], "cam_home"))
  196. {
  197. w_fd = open_write_fifo();
  198. send_cmd(w_fd, VIDEO_C);
  199. close_write_fifo(w_fd);
  200. }
  201. }
  202. }
  203. //return;
  204. }
  205. //trace("here:n");
  206. printf("%sn", java);
  207. printf("%sn",jsp);
  208. items = init_config_item(items, config_num, config_list);
  209. // If we got post, write it into flash
  210. if(form_method == POST)
  211. {
  212. GetConfValues(config_list, items, config_num);
  213. if(SaveConfig(postvars, items, config_list, config_name, config_num))
  214. {
  215. /*
  216. w_fd = open_write_fifo();
  217. notify_config(w_fd);
  218. close_write_fifo(w_fd);
  219. read_fifo(r_fd);
  220. */
  221. }
  222. }
  223. get_ip(iptmp);
  224. GetConfValues(config_list, items, config_num);
  225. if(temp_string = getdata(ID_CAM_RESO, items, config_num))
  226. temp_int = atoi(temp_string);
  227. else
  228. temp_int = 2;
  229. if(temp_int == 1){
  230. xreso = 640;
  231. yreso =  480;
  232. }else if(temp_int == 2)
  233. {
  234.            xreso = 320;
  235.    yreso = 240 ;
  236.    
  237. }
  238. else{
  239.             xreso = 160;
  240. yreso = 120;
  241. }
  242. printf("<BODY leftMargin=30 topMargin=24 rightMargin=30 onload="setResolution(%d,%d);"><P class=style1>实时视频</P>n",xreso,yreso);
  243. printf("<FORM name=rt_video ACTION=/rt_video.cgi METHOD=POST target=msgFrame>n");
  244. printf("<table border=0 cellpadding=0 cellspacing=0 width=80%>><tbody>n");
  245. printf("<tr><td align="middle" bgcolor="#99ccff"><table border=0 cellpadding=0 cellspacing=0 ><tbody>n");
  246. printf("<tr><td width=50%> n");
  247. printf("<tr><td bgcolor="#0066cc"><div align="left"><font style="font-size: 12px;" color="#ffffff" face="Arial">Pan/Tilt</font></div></td></tr>n");
  248. printf("<tr><td height=1></td></tr><tr><td align="middle" bgcolor="#99ccff"><div align="center"><img src="pantiltctl_data/pad.gif" usemap="#pad" border=0 height=98 width=90>n");
  249. printf("<map name="pad">n");
  250. printf("<area title="Pan Scan" shape="CIRCLE" target="msgFrame" alt="左右巡检" coords="13,13,12" href="/rt_video.cgi?action=pan_scan&amp;lang=chs">n");
  251.     printf("<area title="Tilt Scan" shape="CIRCLE" target="msgFrame" alt="上下巡检" coords="78,13,12" href="/rt_video.cgi?action=tilt_scan&amp;lang=chs">n");
  252. printf("<area title="Tilt Up" shape="rect" target="msgFrame" alt="上" coords="33,20,57,43" href="/rt_video.cgi?action=cam_mv&amp;diretion=cam_up&amp;lang=chs">n");
  253. printf("<area title="Pan Left" shape="rect" target="msgFrame" alt="左" coords="5,45,30,69" href="/rt_video.cgi?action=cam_mv&amp;diretion=cam_left&amp;lang=chs">n");
  254. printf("<area title="Home Position" shape="CIRCLE" target="msgFrame" alt="居中" coords="45,57,12" href="/rt_video.cgi?action=cam_mv&amp;diretion=cam_home&amp;lang=chs">n");
  255. printf("<area title="Pan Right" shape="rect" target="msgFrame" alt="右" coords="60,45,85,69" href="/rt_video.cgi?action=cam_mv&amp;diretion=cam_right&amp;lang=chs">n");
  256. printf("<area title="Tilt Down" shape="rect" target="msgFrame" alt="下" coords="33,71,58,96" href="/rt_video.cgi?action=cam_mv&amp;diretion=cam_down&amp;lang=chs">n");
  257. printf(" </map></div></td></tr>n");
  258. printf("<TR><TD width=120>分辨率(图像大小):</TD><TD><SELECT name=CAM_RESO>n");
  259. if(temp_string = getdata(ID_CAM_RESO, items, config_num))
  260. {
  261. temp_int = atoi(temp_string);
  262. if(temp_int == 1)
  263. {
  264. printf("<option value="1" selected>640x480</OPTION> n");
  265. printf("<option value="2">320x240</OPTION> n");
  266. printf("<option value="3">160x120</OPTION> n");
  267. }
  268. else if(temp_int == 2)
  269. {
  270. printf("<option value="1">640x480</OPTION> n");
  271. printf("<option value="2" selected>320x240</OPTION> n");
  272. printf("<option value="3">160x120</OPTION> n");
  273. }
  274. else
  275. {
  276. printf("<option value="1">640x480</OPTION> n");
  277. printf("<option value="2">320x240</OPTION> n");
  278. printf("<option value="3" selected>160x120</OPTION> n");
  279. }
  280. }
  281. printf("</SELECT></TD></TR>n");
  282. if(temp_string = getdata(ID_CAM_LUM, items, config_num))
  283. temp_int = atoi(temp_string);
  284. else
  285. temp_int = 0;
  286. printf("<tr><td>亮度<td>n");
  287. printf("<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1" width="100" height="25">n");
  288. printf("<param name="Min" value=0>n");
  289. printf("<param name="Max" value=64>n");
  290. printf("<param name="Value" value=%d>n", temp_int);
  291. printf("</object>n");
  292. printf("<script>n");
  293. printf("function rt_video.Slider1::Change()n");
  294. printf("{n");
  295.    printf("document.all.CAM_LUM.value = document.all.Slider1.Value;n");
  296. printf("};n");
  297. printf("</script>n");
  298. printf("<input type=hidden name=CAM_LUM value=%d>n",temp_int);
  299. if(temp_string = getdata(ID_CAM_SAT, items, config_num))
  300. temp_int = atoi(temp_string);
  301. else
  302. temp_int = 0;
  303. printf("<tr><td>对比度<td>n");
  304. printf("<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider2" width="100" height="25">n");
  305. printf("<param name="Min" value=0>n");
  306. printf("<param name="Max" value=64>n");
  307. printf("<param name="Value" value=%d>n", temp_int);
  308. printf("</object>n");
  309. printf("<script>n");
  310. printf("function rt_video.Slider2::Change()n");
  311. printf("{n");
  312.    printf("document.all.CAM_SAT.value = document.all.Slider2.Value;n");
  313. printf("};n");
  314. printf("</script>n");
  315. printf("<input type=hidden name=CAM_SAT value=%d>n",temp_int);
  316. if(temp_string = getdata(ID_CAM_CON, items, config_num))
  317. temp_int = atoi(temp_string);
  318. else
  319. temp_int = 0;
  320. printf("<tr><td>饱和度<td>n");
  321. printf("<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider3" width="100" height="25">n");
  322. printf("<param name="Min" value=0>n");
  323. printf("<param name="Max" value=64>n");
  324. printf("<param name="Value" value=%d>n", temp_int);
  325. printf("</object>n");
  326. printf("<script>n");
  327. printf("function rt_video.Slider3::Change()n");
  328. printf("{n");
  329.    printf("document.all.CAM_CON.value = document.all.Slider3.Value;n");
  330. printf("};n");
  331. printf("</script>n");
  332. printf("<input type=hidden name=CAM_CON value=%d>n",temp_int);
  333. printf("<DIV align=left><INPUT type=submit value=应用   onclick="return setControl();"> <INPUT type=reset value=清除> </DIV>n");
  334. printf("</td>n");
  335. printf("<td width=50%> n");
  336. if(temp_string = getdata(ID_CAM_RESO, items, config_num))
  337. temp_int = atoi(temp_string);
  338. else
  339. temp_int = 2;
  340. if(temp_int == 1)
  341. {
  342. printf("<object classid="clsid:E23FE9C6-778E-49D4-B537-38FCDE4887D8" id="VLCPlugin1" width="640" height="480">n");
  343. printf("<param name="Src" value="http://%s:%d/test.avi">n", iptmp, ServerPort);
  344. }
  345. if(temp_int == 2)
  346. {
  347. printf("<object classid="clsid:E23FE9C6-778E-49D4-B537-38FCDE4887D8" id="VLCPlugin1" width="320" height="240">n");
  348. printf("<param name="Src" value="http://%s:%d/test.avi">n", iptmp, ServerPort);
  349. }
  350. if(temp_int == 3)
  351. {
  352. printf("<object classid="clsid:E23FE9C6-778E-49D4-B537-38FCDE4887D8" id="VLCPlugin1" width="160" height="120">n");
  353. printf("<param name="Src" value="http://%s:%d/test.avi">n", iptmp, ServerPort);
  354. }
  355. printf("</td></tr></tbody></table>n");
  356. printf("<hr size=1></td> </tr>n");
  357. printf("</tbody></table></FORM><p>&nbsp;</p></body></html>n");   
  358.             
  359. free_config_item(items, config_num);
  360. //close_read_fifo();
  361. }
  362. ////////////////////////////////////////////////////////////////////////////
  363. // Function: main
  364. ////////////////////////////////////////////////////////////////////////////
  365. int main(void)
  366. {
  367.     char **postvars = NULL;  // POST request data repository
  368.     char **getvars = NULL;   // GET request data repository
  369.     int form_method;         // POST = 1, GET = 0
  370.     // CGI part start here
  371.     form_method = getRequestMethod();
  372.     if(form_method == POST)
  373.     {
  374.        // getvars = getGETvars();
  375.         postvars = getPOSTvars();
  376.     }
  377.     else if(form_method == GET)
  378.     {
  379.         getvars = getGETvars();
  380.     }
  381.     // CGI start here, set COM port
  382.     rt_video(postvars, getvars, form_method);
  383.     //htmlFooter();
  384.     cleanUp(form_method, getvars, postvars);
  385.     fflush(stdout);
  386.     exit(0);
  387. }  // end of main