]> git.vomp.tv Git - vompclient-marten.git/blob - vfeed.cc
Add handling reference frame pointers
[vompclient-marten.git] / vfeed.cc
1 /*\r
2     Copyright 2004-2005 Chris Tallon\r
3 \r
4     This file is part of VOMP.\r
5 \r
6     VOMP is free software; you can redistribute it and/or modify\r
7     it under the terms of the GNU General Public License as published by\r
8     the Free Software Foundation; either version 2 of the License, or\r
9     (at your option) any later version.\r
10 \r
11     VOMP is distributed in the hope that it will be useful,\r
12     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14     GNU General Public License for more details.\r
15 \r
16     You should have received a copy of the GNU General Public License\r
17     along with VOMP; if not, write to the Free Software\r
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
19 */\r
20 \r
21 #include "vfeed.h"\r
22 \r
23 #include "log.h"\r
24 #include "demuxer.h"\r
25 #include "callback.h"\r
26 \r
27 VFeed::VFeed(Callback* tcb)\r
28 : cb(*tcb)\r
29 {\r
30 }\r
31 \r
32 int VFeed::init()\r
33 {\r
34   return 1;\r
35 }\r
36 \r
37 int VFeed::shutdown()\r
38 {\r
39   // FIXME\r
40   return 1;\r
41 }\r
42 \r
43 int VFeed::start()\r
44 {\r
45   return threadStart();\r
46 }\r
47 \r
48 void VFeed::stop()\r
49 {\r
50         Log::getInstance()->log("VFeed", Log::DEBUG, "Stop1");\r
51   threadCancel();\r
52         Log::getInstance()->log("VFeed", Log::DEBUG, "Stop2");\r
53 }\r
54 \r
55 void VFeed::release()\r
56 {\r
57   threadSignal();\r
58 }\r
59 \r
60 void VFeed::threadMethod()\r
61 {\r
62   bool vlen;\r
63 \r
64   Log::getInstance()->log("VFeed", Log::DEBUG, "Started");\r
65   threadWaitForSignal(); // Don't feed video until audio has started\r
66   Log::getInstance()->log("VFeed", Log::DEBUG, "Released");\r
67 \r
68   while(1)\r
69   {\r
70     threadCheckExit();\r
71     vlen = Demuxer::getInstance()->writeVideo();\r
72 \r
73     if (vlen)\r
74     {\r
75       cb.call(this);\r
76     }\r
77     else\r
78     {\r
79       //Log::getInstance()->log("VFeed", Log::DEBUG, "No data delay");\r
80       MILLISLEEP(5);\r
81     }\r
82   }\r
83 }\r
84 \r