/*\r
- Copyright 2004-2005 Chris Tallon\r
+ Copyright 2006 Chris Tallon, Marten Richter\r
\r
This file is part of VOMP.\r
\r
\r
#include "vaudioselector.h"\r
\r
-VAudioSelector::VAudioSelector(View* tparent, bool* availableAudioChannels, int currentAudioChannel, RecInfo* recInfo)\r
+VAudioSelector::VAudioSelector(void* tparent, bool* availableAudioChannels, int currentAudioChannel, RecInfo* recInfo)\r
{\r
+ Log::getInstance()->log("VAS", Log::DEBUG, "%i", currentAudioChannel);\r
+\r
parent = tparent;\r
\r
create(200, 120);\r
- if (Video::getInstance()->getFormat() == Video::PAL)\r
- {\r
- setScreenPos(62, 410);\r
- }\r
- else\r
- {\r
- setScreenPos(57, 320);\r
- }\r
\r
-\r
- setTitleText(tr("Audio"));\r
- setBackgroundColour(Colour::VIEWBACKGROUND);\r
- setTitleBarOn(1);\r
- setTitleBarColour(Colour::TITLEBARBACKGROUND);\r
+// setTitleText(tr("Audio"));\r
+// setTitleBarOn(1);\r
+// setTitleBarColour(Colour::TITLEBARBACKGROUND);\r
\r
sl.setSurface(surface);\r
- sl.setSurfaceOffset(0, 30);\r
- sl.setDimensions(area.w, area.h - 30);\r
+ sl.setSurfaceOffset(40, 30);\r
+ sl.setDimensions(area.w - 45, area.h - 30);\r
\r
// Load data from availableAudioChannels, currentAudioChannel and recInfo\r
\r
int i;\r
- int selected = 0;\r
\r
- for (i = 0; i < PES_AUDIO_END - PES_AUDIO_START; i++)\r
+ for (i = 0; i < PES_AUDIO_MAXCHANNELS; i++)\r
{\r
if (availableAudioChannels[i])\r
{\r
ac->type = 0;\r
ac->name = NULL;\r
ac->pestype = PES_AUDIO_START + i;\r
- if (i == currentAudioChannel) selected = i;\r
acl.push_back(ac);\r
}\r
}\r
// Now do display\r
\r
char tempString[300];\r
- int slSelected;\r
int audioChannelListSize = acl.size();\r
\r
if (audioChannelListSize)\r
for(i = 0; i < audioChannelListSize; i++)\r
{\r
AudioChannel* ac = acl[i];\r
- if (i == currentAudioChannel)\r
- slSelected = 1;\r
- else\r
- slSelected = 0;\r
\r
if (ac->name)\r
{\r
- sl.addOption(ac->name, (ULONG)ac, slSelected);\r
+ sl.addOption(ac->name, (ULONG)ac, (ac->pestype == currentAudioChannel));\r
}\r
else\r
{\r
SNPRINTF(tempString, 299, "%lu", (ULONG)(ac->pestype - PES_AUDIO_START));\r
- sl.addOption(tempString, (ULONG)ac, slSelected);\r
+ sl.addOption(tempString, (ULONG)ac, (ac->pestype == currentAudioChannel));\r
}\r
}\r
}\r
acl.clear();\r
\r
sl.clear();\r
+\r
+ Message* m = new Message();\r
+ m->from = this;\r
+ m->to = parent;\r
+ m->message = Message::CHILD_CLOSE;\r
+ Command::getInstance()->postMessageNoLock(m);\r
}\r
\r
void VAudioSelector::draw()\r
{\r
View::draw();\r
+ rectangle(0, 0, area.w, 30, Colour::TITLEBARBACKGROUND);\r
+ drawText(tr("Audio"), 45, 5, Colour::LIGHTTEXT);\r
+\r
+ sl.setBackgroundColour(backgroundColour);\r
sl.draw();\r
}\r
\r
{\r
case Remote::BACK:\r
case Remote::OK:\r
+ case Remote::GREEN:\r
{\r
return 4;\r
}\r
case Remote::DF_UP:\r
+ case Remote::UP:\r
{\r
sl.up();\r
sl.draw();\r
\r
ViewMan::getInstance()->updateView(this);\r
- //player->setAudioChannel((AudioChannel*)sl.getCurrentOptionData());\r
+\r
+ Message* m = new Message();\r
+ m->from = this;\r
+ m->to = parent;\r
+ m->message = Message::AUDIO_CHANGE_CHANNEL;\r
+ m->parameter = ((AudioChannel*)sl.getCurrentOptionData())->pestype;\r
+ Command::getInstance()->postMessageNoLock(m);\r
\r
return 2;\r
}\r
case Remote::DF_DOWN:\r
+ case Remote::DOWN:\r
{\r
sl.down();\r
sl.draw();\r
\r
ViewMan::getInstance()->updateView(this);\r
- //player->setAudioChannel((AudioChannel*)sl.getCurrentOptionData());\r
+\r
+ Message* m = new Message();\r
+ m->from = this;\r
+ m->to = parent;\r
+ m->message = Message::AUDIO_CHANGE_CHANNEL;\r
+ m->parameter = ((AudioChannel*)sl.getCurrentOptionData())->pestype;\r
+ Command::getInstance()->postMessageNoLock(m);\r
\r
return 2;\r
}\r
vdr = VDR::getInstance();
video = Video::getInstance();
timers = Timers::getInstance();
+ vas = NULL;
- isRadio = !(rec->recInfo->hasVideo());
+ isRadio = rec->recInfo->hasNoVideo();
- Log::getInstance()->log("VVideoRec", Log::DEBUG, "hasVideo = %i", isRadio);
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "Radio = %i", isRadio);
player = new Player(Command::getInstance(), this, true, isRadio);
player->init();
barBlue.set(0, 0, 150, 150);
barShowing = false;
- stickyBar = false;
+ barGenHold = false;
+ barScanHold = false;
+ barVasHold = false;
dowss = false;
char* optionWSS = vdr->configLoad("General", "WSS");
VVideoRec::~VVideoRec()
{
+ if (vas)
+ {
+ viewman->removeView(vas);
+ vas = NULL;
+ }
+
if (playing) stopPlay();
video->setDefaultAspect();
ULLONG lengthBytes = vdr->streamRecording(myRec->getFileName(), &lengthFrames);
if (lengthBytes)
{
- doBar(0);
player->setLengthBytes(lengthBytes);
- if (!isRadio) player->setLengthFrames(lengthFrames);
+ if (!isRadio)
+ {
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "GO is setting length frames = %lu", lengthFrames);
+ player->setLengthFrames(lengthFrames);
+ }
+ else
+ {
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "GO is NOT setting length frames");
+ }
player->setStartFrame(startFrameNum); // means bytes if radio (FIXME not done yet!)
player->play();
playing = true;
+ doBar(0);
}
else
{
#ifdef DEV
case Remote::RED:
{
+ //Don't use RED for anything. It will eventually be recording summary
+
//player->test1();
void VVideoRec::processMessage(Message* m)
{
- if (m->from != player) return;
- if (m->message != Message::PLAYER_EVENT) return;
-
Log::getInstance()->log("VVideoRec", Log::DEBUG, "Message received");
- switch(m->parameter)
+ if (m->from == player)
{
- case Player::CONNECTION_LOST: // connection lost detected
+ if (m->message != Message::PLAYER_EVENT) return;
+ switch(m->parameter)
{
- // I can't handle this, send it to command
- Message* m = new Message();
- m->to = Command::getInstance();
- m->message = Message::CONNECTION_LOST;
- Command::getInstance()->postMessageNoLock(m);
- break;
- }
- case Player::STOP_PLAYBACK:
- {
- // FIXME Obselete ish - improve this
- Message* m = new Message(); // Must be done after this thread finishes, and must break into master mutex
- m->to = Command::getInstance();
- m->message = Message::STOP_PLAYBACK;
- Command::getInstance()->postMessageNoLock(m);
- break;
- }
- case Player::ASPECT43:
- {
- if (dowss)
+ case Player::CONNECTION_LOST: // connection lost detected
{
- Log::getInstance()->log("VVideoRec", Log::DEBUG, "Received do WSS 43");
- wss.setWide(false);
- wss.draw();
- viewman->updateView(this, &wssRegion);
+ // I can't handle this, send it to command
+ Message* m = new Message();
+ m->to = Command::getInstance();
+ m->message = Message::CONNECTION_LOST;
+ Command::getInstance()->postMessageNoLock(m);
+ break;
}
- break;
- }
- case Player::ASPECT169:
- {
- if (dowss)
+ case Player::STOP_PLAYBACK:
{
- Log::getInstance()->log("VVideoRec", Log::DEBUG, "Received do WSS 169");
- wss.setWide(true);
- wss.draw();
- viewman->updateView(this, &wssRegion);
+ // FIXME Obselete ish - improve this
+ Message* m = new Message(); // Must be done after this thread finishes, and must break into master mutex
+ m->to = Command::getInstance();
+ m->message = Message::STOP_PLAYBACK;
+ Command::getInstance()->postMessageNoLock(m);
+ break;
}
- break;
+ case Player::ASPECT43:
+ {
+ if (dowss)
+ {
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "Received do WSS 43");
+ wss.setWide(false);
+ wss.draw();
+ viewman->updateView(this, &wssRegion);
+ }
+ break;
+ }
+ case Player::ASPECT169:
+ {
+ if (dowss)
+ {
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "Received do WSS 169");
+ wss.setWide(true);
+ wss.draw();
+ viewman->updateView(this, &wssRegion);
+ }
+ break;
+ }
+ }
+ }
+ else if (m->message == Message::AUDIO_CHANGE_CHANNEL)
+ {
+ Log::getInstance()->log("VVideoRec", Log::DEBUG, "Received change audio channel to %i", m->parameter);
+ player->setAudioChannel(m->parameter);
+ }
+ else if (m->message == Message::CHILD_CLOSE)
+ {
+ if (m->from == vas)
+ {
+ vas = NULL;
+ barVasHold = false;
+ if (!barGenHold && !barScanHold && !barVasHold) removeBar();
}
}
}
{
bool* availableAudioChannels = player->getDemuxerAudioChannels();
int currentAudioChannel = player->getCurrentAudioChannel();
- VAudioSelector* vas = new VAudioSelector(this, availableAudioChannels, currentAudioChannel, myRec->recInfo);
+
+ vas = new VAudioSelector(this, availableAudioChannels, currentAudioChannel, myRec->recInfo);
+ vas->setBackgroundColour(barBlue);
+ if (video->getFormat() == Video::PAL)
+ {
+// vas->setScreenPos(62, barRegion.y - 120);
+ vas->setScreenPos(0, barRegion.y - 120);
+ }
+ else
+ {
+// vas->setScreenPos(57, barRegion.y - 120);
+ vas->setScreenPos(0, barRegion.y - 120);
+ }
+
+ barVasHold = true;
+ doBar(0);
vas->draw();
viewman->add(vas);
viewman->updateView(this, &barRegion);
- if ((playerState == Player::S_FFWD) || (playerState == Player::S_FBWD))
- {
- timers->cancelTimer(this, 1);
- stickyBar = true;
- }
- else
- {
- timers->setTimerD(this, 1, 4); // only set the getridofbar timer if not ffwd/fbwd
- stickyBar = false;
- }
+ timers->cancelTimer(this, 1);
+
+
+ if ((playerState == Player::S_FFWD) || (playerState == Player::S_FBWD)) barScanHold = true;
+ else barScanHold = false;
+
+ if (!barGenHold && !barScanHold && !barVasHold) timers->setTimerD(this, 1, 4);
+
timers->setTimerD(this, 2, 0, 200000000);
}
void VVideoRec::drawBarClocks()
{
- if (stickyBar)
+ if (barScanHold)
{
UCHAR playerState = player->getState();
// sticky bar is set if we are in ffwd/fbwd mode
// if player has gone to S_PLAY then kill stickyBar, and run doBar(0) which
// will repaint all the bar (it will call this function again, but
- // this section won't run because stickyBar will then == false)
+ // this section won't run because stickyBarF will then == false)
if ((playerState != Player::S_FFWD) && (playerState != Player::S_FBWD))
{
- stickyBar = false;
+ barScanHold = false;
doBar(0);
return; // doBar will call this function and do the rest
}
if (!barShowing) return;
timers->cancelTimer(this, 2);
barShowing = false;
- stickyBar = false;
+ barGenHold = false;
+ barScanHold = false;
+ barVasHold = false;
rectangle(barRegion, transparent);
viewman->updateView(this, &barRegion);
}