]> git.vomp.tv Git - vompclient.git/blob - vvideorec.cc
Live switching of letterbox/chop sides for 4:3 TVs
[vompclient.git] / vvideorec.cc
1 /*
2     Copyright 2004-2005 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #include "vvideorec.h"
22
23 VVideoRec::VVideoRec(Recording* rec)
24 {
25   player = new PlayerVideo(Command::getInstance(), 1, 0); // say 0 for radio because buffering will work anyway
26   player->init();
27   vdr = VDR::getInstance();
28   video = Video::getInstance();
29
30   videoMode = video->getMode();
31   myRec = rec;
32
33   create(video->getScreenWidth(), video->getScreenHeight());
34   Colour transparent(0, 0, 0, 0);
35   setBackgroundColour(transparent);
36 }
37
38 VVideoRec::~VVideoRec()
39 {
40   Log::getInstance()->log("VVideoRec", Log::DEBUG, "Pre delete player");
41   delete player;
42   Log::getInstance()->log("VVideoRec", Log::DEBUG, "Post delete player");
43   Video::getInstance()->setDefaultAspect();
44 }
45
46 void VVideoRec::draw()
47 {
48   View::draw();
49 }
50
51 void VVideoRec::go(ULLONG startPosition)
52 {
53   ULLONG recLength = vdr->streamRecording(myRec);
54
55   player->setLength(recLength);
56   player->setPosition(startPosition);
57   player->play();
58 }
59
60 int VVideoRec::handleCommand(int command)
61 {
62   switch(command)
63   {
64     case Remote::PLAY:
65     {
66       player->play(); // do resync
67       return 2;
68     }
69
70     case Remote::STOP:
71     case Remote::BACK:
72     case Remote::MENU:
73     {
74       Log::getInstance()->log("VVideoRec", Log::DEBUG, "Pre player stop");
75       player->stop();
76       vdr->stopStreaming();
77       Log::getInstance()->log("VVideoRec", Log::DEBUG, "Post player stop");
78       return 4;
79     }
80     case Remote::PAUSE:
81     {
82       player->togglePause();
83       return 2;
84     }
85     case Remote::SKIPFORWARD:
86     {
87       player->skipForward(60);
88       return 2;
89     }
90     case Remote::SKIPBACK:
91     {
92       player->skipBackward(60);
93       return 2;
94     }
95     case Remote::FORWARD:
96     {
97       player->toggleFastForward();
98       return 2;
99     }
100     case Remote::YELLOW:
101     {
102       player->skipBackward(10);
103       return 2;
104     }
105     case Remote::BLUE:
106     {
107       player->skipForward(10);
108       return 2;
109     }
110     case Remote::FULL:
111     case Remote::TV:
112     {
113       toggleChopSides();
114       return 2;
115     }
116
117 //    case Remote::REVERSE:
118 //    {
119 //      player->toggleFastBackward();
120 //      return 2;
121 //    }
122
123 #ifdef DEV
124     case Remote::RED:
125     {
126       //player->test1();
127
128       /*
129       // for testing EPG in NTSC with a NTSC test video
130       Video::getInstance()->setMode(Video::QUARTER);
131       Video::getInstance()->setPosition(170, 5);
132       VEpg* vepg = new VEpg(NULL, 0);
133       vepg->draw();
134       ViewMan::getInstance()->add(vepg);
135       ViewMan::getInstance()->updateView(vepg);
136       */
137
138       return 2;
139     }
140     case Remote::GREEN:
141     {
142       player->test2();
143       return 2;
144     }
145 #endif
146
147     case Remote::ZERO: player->jumpToPercent(0); return 2;
148     case Remote::ONE: player->jumpToPercent(10); return 2;
149     case Remote::TWO: player->jumpToPercent(20); return 2;
150     case Remote::THREE: player->jumpToPercent(30); return 2;
151     case Remote::FOUR: player->jumpToPercent(40); return 2;
152     case Remote::FIVE: player->jumpToPercent(50); return 2;
153     case Remote::SIX: player->jumpToPercent(60); return 2;
154     case Remote::SEVEN: player->jumpToPercent(70); return 2;
155     case Remote::EIGHT: player->jumpToPercent(80); return 2;
156     case Remote::NINE: player->jumpToPercent(90); return 2;
157
158   }
159
160   return 1;
161 }
162
163 void VVideoRec::toggleChopSides()
164 {
165   if (video->getTVsize() == Video::ASPECT16X9) return; // Means nothing for 16:9 TVs
166
167   if (videoMode == Video::NORMAL)
168   {
169     videoMode = Video::LETTERBOX;
170     video->setMode(Video::LETTERBOX);
171   }
172   else
173   {
174     videoMode = Video::NORMAL;
175     video->setMode(Video::NORMAL);
176   }
177 }