]> git.vomp.tv Git - vompserver.git/commitdiff
Frame numbering stuff
authorChris Tallon <chris@vomp.tv>
Sat, 11 Mar 2006 23:27:36 +0000 (23:27 +0000)
committerChris Tallon <chris@vomp.tv>
Sat, 11 Mar 2006 23:27:36 +0000 (23:27 +0000)
mvpclient.c
mvpclient.h
recplayer.c
recplayer.h

index b765a7ed71fe652a10cc458be116c2739b359c8a..0802127fa2e73d60306562d9f168a7273b9f3c3b 100644 (file)
@@ -227,6 +227,9 @@ void MVPClient::run2()
       case 15:
         result = processSetTimer(data, packetLength);
         break;
+      case 16:
+        result = processPositionFromFrameNumber(data, packetLength);
+        break;
     }
 
     free(buffer);
@@ -612,13 +615,38 @@ int MVPClient::processReScanRecording(UCHAR* data, int length)
   return 1;
 }
 
+int MVPClient::processPositionFromFrameNumber(UCHAR* data, int length)
+{
+  ULLONG retval = 0;
+
+  ULONG frameNumber = ntohl(*(ULONG*)data);
+  data += 4;
+
+  if (!rp)
+  {
+    log->log("Client", Log::DEBUG, "Rescan recording called when no recording being played!");
+  }
+  else
+  {
+    retval = rp->positionFromFrameNumber(frameNumber);
+  }
+
+  UCHAR sendBuffer[12];
+  *(ULONG*)&sendBuffer[0] = htonl(8);
+  *(ULLONG*)&sendBuffer[4] = htonll(retval);
+
+  tcp.sendPacket(sendBuffer, 12);
+  log->log("Client", Log::DEBUG, "Wrote posFromFrameNum reply to client");
+  return 1;
+}
+
 int MVPClient::processGetChannelSchedule(UCHAR* data, int length)
 {
-  ULONG channelNumber = ntohl(*(ULLONG*)data);
+  ULONG channelNumber = ntohl(*(ULONG*)data);
   data += 4;
-  ULONG startTime = ntohl(*(ULLONG*)data);
+  ULONG startTime = ntohl(*(ULONG*)data);
   data += 4;
-  ULONG duration = ntohl(*(ULLONG*)data);
+  ULONG duration = ntohl(*(ULONG*)data);
 
   log->log("Client", Log::DEBUG, "get schedule called for channel %lu", channelNumber);
 
index 6444cd7375e80a39886f8939efc4fd7cb7939c93..fd26be7a590a1babba1a32c1009a6371712c00fa 100644 (file)
@@ -78,6 +78,7 @@ class MVPClient
     int processConfigLoad(UCHAR* data, int length);
     int processGetTimers(UCHAR* data, int length);
     int processSetTimer(UCHAR* data, int length);
+    int processPositionFromFrameNumber(UCHAR* data, int length);
 
     cChannel* channelFromNumber(ULONG channelNumber);
     void writeResumeData();
index 0968d44df764db0fe840e2434d503e4bcb3dc34a..09186e21c45e876098be5c6fffe86142670a097a 100644 (file)
@@ -31,6 +31,9 @@ RecPlayer::RecPlayer(cRecording* rec)
 
   // FIXME find out max file path / name lengths
 
+  indexFile = new cIndexFile(recording->FileName(), false);
+  if (!indexFile) log->log("RecPlayer", Log::ERR, "Failed to create indexfile!");
+
   scan();
 }
 
@@ -172,3 +175,22 @@ cRecording* RecPlayer::getCurrentRecording()
 {
   return recording;
 }
+
+ULLONG RecPlayer::positionFromFrameNumber(ULONG frameNumber)
+{
+  if (!indexFile) return 0;
+
+  uchar retFileNumber;
+  int retFileOffset;
+  uchar retPicType;
+  int retLength;
+
+  if (!indexFile->Get((int)frameNumber, &retFileNumber, &retFileOffset, &retPicType, &retLength))
+  {
+    return 0;
+  }
+
+  log->log("RecPlayer", Log::DEBUG, "FN: %u FO: %i PT: %u L: %i", retFileNumber, retFileOffset, retPicType, retLength);
+
+  return 0;
+}
index 5ab84d24433b18589632298dbcd92f9ffbb6c414..0c75a50584502853b8fed1c6663f0e441353634c 100644 (file)
@@ -45,10 +45,12 @@ class RecPlayer
     ULLONG getLastPosition();
     cRecording* getCurrentRecording();
     void scan();
+    ULLONG positionFromFrameNumber(ULONG frameNumber);
 
   private:
     Log* log;
     cRecording* recording;
+    cIndexFile* indexFile;
     FILE* file;
     int fileOpen;
     Segment* segments[1000];