OptCam.pl
上传用户:qdrechuli
上传日期:2022-08-01
资源大小:917k
文件大小:3k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. #!/usr/bin/perl -w
  2. use strict;
  3. use DBI;
  4. use vars qw(%base);
  5. sub SetState
  6. {
  7. (my $State) = @_;
  8. my $db = DBI->connect("DBI:mysql:netcam","root","");
  9. my $sqlreq = "UPDATE vars SET V_Value='".$State."' WHERE V_Var='OptCamState'";
  10. my $sql = $db->prepare($sqlreq);
  11. $sql->execute();
  12. $sql->finish();
  13. $db->disconnect();
  14. }
  15. sub Stop
  16. {
  17. SetState('STOP');
  18. }
  19. sub Start
  20. {
  21. SetState('START');
  22. my $db = DBI->connect("DBI:mysql:netcam","root","");
  23. my $sqlreq = "SELECT C_ID FROM cam";
  24. my $sql = $db->prepare($sqlreq);
  25. $sql->execute();
  26. while ((my $CID) = $sql->fetchrow())
  27. {
  28. $SIG{CHLD} = 'IGNORE';
  29. my $pid = fork;
  30. if ($pid==0)
  31. {
  32. $sql->finish();
  33. print "CHILD(",$CID,")  : STARTINGn";
  34. while (1)
  35. {
  36. my $sqlreq = "SELECT V_Value FROM vars WHERE V_Var='OptCamState'";
  37.    my $sql = $db->prepare($sqlreq);
  38. $sql->execute();
  39. (my $NewState) = $sql->fetchrow();
  40. $sql->finish();
  41. if ($NewState eq 'STOP')
  42. {
  43. $db->disconnect();
  44. print "CHILD(",$CID,") : ENDINGn";
  45. exit(0);
  46. }
  47. $sqlreq = "SELECT R_ID,R_Img FROM record WHERE ";
  48. $sqlreq .= "R_Opt=0 and R_CAM=".$CID." ";
  49. $sqlreq .= "LIMIT 0,1";
  50. $sql = $db->prepare($sqlreq);
  51. $sql->execute();
  52. while ((my $RID,my $Img) = $sql->fetchrow())
  53. {
  54. print "CHILD(",$CID,") : ",$RID,"n";
  55. print "CHILD(",$CID,") : ",length($Img),"n";
  56. open(IMAGE,">/opt/NetAdmin/Net-Cam/data/tmp_".$CID.".jpg");
  57. print IMAGE $Img;
  58. close(IMAGE);
  59. my @args = ("/opt/NetAdmin/Net-Cam/bin/jdo.o","/opt/NetAdmin/Net-Cam/data/tmp_".$CID.".jpg");
  60. system(@args);
  61. open(IMAGE,"/opt/NetAdmin/Net-Cam/data/tmp_".$CID.".jpg");
  62. read IMAGE,$Img,length($Img)*2;
  63. close(IMAGE);
  64. print "CHILD(",$CID,") : ",length($Img),"n";
  65. $base{update} = $db->prepare("UPDATE record SET R_Size=?,R_Img=?,R_Opt=? WHERE R_ID=?");
  66. $db->do("LOCK TABLE record LOW_PRIORITY WRITE");
  67. $base{update}->execute(length($Img),$Img,1,$RID);
  68. $db->do("UNLOCK TABLE");
  69. }
  70. $sql->finish();
  71. }
  72. }
  73. }
  74. $sql->finish();
  75. $db->disconnect();
  76. }
  77. sub main
  78.   {
  79. $SIG{CHLD}='IGNORE';
  80. my $pid = fork;
  81. if ($pid)
  82. {
  83. print "OPTCAM : STARTING PARENT ",$pid,"n";
  84. exit(0);
  85. }
  86. Start();
  87. my $CurState = "START";
  88. my $db = DBI->connect("DBI:mysql:netcam","root","");
  89. while (1)
  90.   {
  91. print "PARENT : READING STATEn";
  92. my $sqlreq = "SELECT V_Value FROM vars WHERE V_Var='OptCamState'";
  93.    my $sql = $db->prepare($sqlreq);
  94.    $sql->execute();
  95.    (my $NewState) = $sql->fetchrow();
  96. $sql->finish();
  97. print "PARENT : CurSTATE = ",$CurState,"n";
  98. print "PARENT : NewSTATE = ",$NewState,"n";
  99. if ($NewState eq 'STOP' and $CurState eq "START")
  100. {
  101. Stop();
  102. $CurState = 'STOP';
  103. }
  104. if ($NewState eq 'START' and $CurState eq "STOP")
  105. {
  106. Start();
  107. $CurState = 'START';
  108. }
  109. if ($NewState eq 'RESTART')
  110. {
  111. Stop();
  112. sleep(10);
  113. Start();
  114. $CurState = 'START';
  115. }
  116. sleep(10);
  117.    }
  118. $db->disconnect();
  119.   }
  120. main();
  121. exit(0);