]> git.vomp.tv Git - vompclient.git/commitdiff
MVP/Windows convergence
authorMark Calderbank <mark@vomp.tv>
Fri, 23 Jun 2006 23:23:38 +0000 (23:23 +0000)
committerMark Calderbank <mark@vomp.tv>
Fri, 23 Jun 2006 23:23:38 +0000 (23:23 +0000)
defines.h
demuxer.cc
demuxer.h
demuxervdr.cc
demuxervdr.h
objects.mk
player.cc
stream.cc
stream.h
videowin.cc
videowin.h

index e6e40030fdc638d97820ad971c1bdee706b1b090..d3c1f0ddbab45329751ad23694bdd11647d1318f 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -48,6 +48,7 @@ void MILLISLEEP(ULONG a);
   #define STRCASECMP _stricmp
   #define STRCASESTR StrStrI
 /*  #define STRTOULL _strtoui64 */
+  #define STRTOUL strtoul
   #define CLOSESOCKET closesocket
 
 #else
index 0b6f2cd293412f26f2e0f8c089dc64687da62e83..8e97ec65591d027f99d514f9913254a3a56ac823 100644 (file)
@@ -185,11 +185,8 @@ int Demuxer::PESPacket::write(UCHAR *buf, int len)
   data[5] = (length & 0xFF);
   return 1;
 }
-#ifndef NEW_DEMUXER
+
 int Demuxer::PESPacket::submit()
-#else
-int Demuxer::PESPacket::submit(ULLONG cur_pos)
-#endif
 {
   if (submitted >= size) return 0;
   if (!closed) parseDetails();
@@ -201,11 +198,7 @@ int Demuxer::PESPacket::submit(ULLONG cur_pos)
   {
     if (dx->video_current == -1) dx->video_current = packetType;
     if (dx->video_current == packetType && !dx->vid_seeking)
-#ifndef NEW_DEMUXER
       sent = dx->videostream.put(data+submitted, size-submitted);
-#else
-      sent = dx->videostream.put(data+submitted, size-submitted,cur_pos);
-#endif
     else
       sent = size-submitted;
   }
@@ -213,11 +206,7 @@ int Demuxer::PESPacket::submit(ULLONG cur_pos)
   {
     if (dx->audio_current == -1) dx->audio_current = packetType;
     if (dx->audio_current == packetType && !dx->aud_seeking)
-#ifndef NEW_DEMUXER
       sent = dx->audiostream.put(data+submitted, size-submitted);
-#else
-      sent = dx->audiostream.put(data+submitted, size-submitted,cur_pos);
-#endif
     else
       sent = size-submitted;
   }
index 6447f0c388dabb8af0b77f7e826746953f119d52..7e0f88dbfafcab3fe878396fb1420e4109d26931 100644 (file)
--- a/demuxer.h
+++ b/demuxer.h
@@ -46,11 +46,7 @@ protected:
       PESPacket();
       void init(UCHAR type);
       int  write(UCHAR* buf, int len);
-#ifndef NEW_DEMUXER
       int  submit();
-#else
-      int  submit(ULLONG cur_pos);
-#endif
     protected:
       UCHAR data[0x10000];
       UINT length, size;
@@ -82,11 +78,7 @@ protected:
 
     virtual int scan(UCHAR* buf, int len) = 0;
     virtual int findVideoPTS(UCHAR* buf, int len, ULLONG* dest) = 0;
-#ifndef NEW_DEMUXER
     virtual int put(UCHAR* buf, int len) = 0;
-#else
-    virtual int put(UCHAR* buf, int len,ULLONG cur_pos) = 0;
-#endif
     virtual void setFrameNum(ULONG frame) {}
     virtual ULONG getFrameNumFromPTS(ULLONG pts) {return 0;}
 
index cb0a4fdcc14ab8eaf4f9af58a13ff9b5826f0bf2..9444b5b764f8be18fd0251b1b5c50d3ab9b5617f 100644 (file)
@@ -141,25 +141,12 @@ void DemuxerVDR::setFrameNum(ULONG frame)
   Log::getInstance()->log("Demuxer", Log::DEBUG, "setFrameNum %d", frame);
 }
 
-#ifndef NEW_DEMUXER
 int DemuxerVDR::put(UCHAR* buf, int len)
-#else
-int DemuxerVDR::put(UCHAR* buf, int len, ULLONG cur_pos)
-#endif
 {
   int ret = 0;    // return number of bytes consumed
-
-#ifdef NEW_DEMUXER
-  ULLONG current_position = cur_pos;
-#endif
-
   if (submitting)
   {
-#ifndef NEW_DEMUXER
     if (packet.submit() == 0) // Still full!
-#else
-    if (packet.submit(current_position) == 0) // Still full!
-#endif
       return ret;
     else
       submitting = false;
@@ -172,11 +159,7 @@ int DemuxerVDR::put(UCHAR* buf, int len, ULLONG cur_pos)
       packet.write(buf, state);
       buf += state; len -= state; ret += state;
       state = 0;
-#ifndef NEW_DEMUXER
-    if (packet.submit() == 0) // Stream is full
-#else
-    if (packet.submit(current_position) == 0) // Stream is full
-#endif
+      if (packet.submit() == 0) // Stream is full
       {
         submitting = true;
         return ret;
@@ -229,25 +212,14 @@ int DemuxerVDR::put(UCHAR* buf, int len, ULLONG cur_pos)
         break;
     }
 
-#ifdef NEW_DEMUXER
-    current_position++;
-#endif
-
     if (state == -6) // Packet header complete
     {
       if (len >= packetLength) // The entire packet is available.
       {
         packet.write(buf, packetLength);
         buf += packetLength; len -= packetLength; ret += packetLength;
-#ifdef NEW_DEMUXER
-        current_position+=(ULLONG)packetLength;
-#endif
         state = 0;
-#ifndef NEW_DEMUXER
         if (packet.submit() == 0) // Stream is full
-#else
-        if (packet.submit(current_position) == 0) // Stream is full
-#endif
         {
           submitting = true;
           return ret;
@@ -270,7 +242,7 @@ ULONG DemuxerVDR::getFrameNumFromPTS(ULLONG pts)
   ULLONG difference = (1LL<<33);
   ULONG ref_frame = 0;
   int total = 0, actual = 0;
-  pthread_mutex_lock(&pts_map_mutex);
+  pts_map_mutex.Lock();
   PTSMap::iterator iter = pts_map.begin();
   while (iter != pts_map.end())
   {
@@ -296,7 +268,7 @@ ULONG DemuxerVDR::getFrameNumFromPTS(ULLONG pts)
     iter = pts_map.begin(); iter++;
     pts_map.erase(iter, pts_map.end());
   }
-  pthread_mutex_unlock(&pts_map_mutex);
+  pts_map_mutex.Unlock();
   if (total > 1 && actual == 1)
 Log::getInstance()->log("Demuxer", Log::DEBUG, "DELETED REFERENCES");
   if (actual > 1)
@@ -323,18 +295,18 @@ void DemuxerVDR::PESPacketVDR::parseDetails()
     if (seq_header && pts != PTS_INVALID)
     {
       PTSMapEntry me;
-      pthread_mutex_lock(&(dx->pts_map_mutex));
+      dx->pts_map_mutex.Lock();
       if (dx->pts_map.empty())
       {
         me.pts = pts;
         me.frame = frame_num;
-        pthread_mutex_unlock(&(dx->pts_map_mutex));
+        dx->pts_map_mutex.Unlock();
 Log::getInstance()->log("Demuxer", Log::DEBUG, "+* PTS INIT *+ %llu %u", me.pts, me.frame);
-        pthread_mutex_lock(&(dx->pts_map_mutex));
+        dx->pts_map_mutex.Lock();
         dx->pts_map.push_front(me);
       }
       me = dx->pts_map.front();
-      pthread_mutex_unlock(&(dx->pts_map_mutex));
+      dx->pts_map_mutex.Unlock();
 
       UINT fps = Video::getInstance()->getFPS();
       ULLONG pts_expected = me.pts + 90000*(frame_num - me.frame) / fps;
@@ -345,9 +317,9 @@ Log::getInstance()->log("Demuxer", Log::DEBUG, "+* PTS INIT *+ %llu %u", me.pts,
 Log::getInstance()->log("Demuxer", Log::DEBUG, "+* PTS JUMP *+ %llu %u", pts, frame_num);
         me.pts = pts;
         me.frame = frame_num;
-        pthread_mutex_lock(&(dx->pts_map_mutex));
+        dx->pts_map_mutex.Lock();
         dx->pts_map.push_front(me);
-        pthread_mutex_unlock(&(dx->pts_map_mutex));
+        dx->pts_map_mutex.Unlock();
       }
     }
   }
index d1412e06847e8466b34a9444fc080477655802db..65b0e8e06e55dcf8a700d575c1fc9b4255da02e1 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef DEMUXERVDR_H
 #define DEMUXERVDR_H
 
-#include "pthread.h"
+#include "mutex.h"
 #include <deque>
 #include "demuxer.h"
 #include "defines.h"
@@ -40,11 +40,7 @@ class DemuxerVDR : public Demuxer
     void flush();
     int scan(UCHAR* buf, int len);
     int findVideoPTS(UCHAR* buf, int len, ULLONG* dest);
-#ifndef NEW_DEMUXER
     int put(UCHAR* buf, int len);
-#else
-    int put(UCHAR* buf, int len,ULLONG cur_pos);
-#endif
     void setFrameNum(ULONG frame);
     ULONG getFrameNumFromPTS(ULLONG pts);
 
@@ -59,7 +55,7 @@ class DemuxerVDR : public Demuxer
     typedef struct { ULLONG pts; ULONG frame; } PTSMapEntry;
     typedef std::deque<PTSMapEntry> PTSMap;
     PTSMap pts_map;
-    pthread_mutex_t pts_map_mutex;
+    Mutex pts_map_mutex;
 };
 
 #endif
index b51cde85955de23637b13fc831b2c1cd8eb21d8e..1fd205192e81a3d92c1908790e0c59c816f2ca6b 100644 (file)
@@ -1,13 +1,15 @@
-OBJECTS1 = command.o log.o tcp.o dsock.o thread.o timers.o i18n.o                      \\r
-           message.o messagequeue.o                                                    \\r
-           vdr.o recman.o recording.o channel.o rectimer.o event.o directory.o         \\r
-           player.o vfeed.o afeed.o                                                    \\r
-           demuxer.o demuxervdr.o stream.o draintarget.o                               \\r
-           viewman.o box.o region.o colour.o view.o                                    \\r
-           vinfo.o vwallpaper.o vvolume.o vrecordinglist.o vlivebanner.o vmute.o       \\r
-           vtimerlist.o vtimeredit.o voptionsmenu.o vrecordingmenu.o vquestion.o       \\r
-           vchannellist.o vwelcome.o vvideolive.o vvideorec.o vepgsettimer.o           \\r
-           vchannelselect.o vserverselect.o vconnect.o voptions.o vepg.o vrecmove.o    \\r
-           widget.o wselectlist.o wjpeg.o wsymbol.o wbutton.o woptionbox.o wtextbox.o  \\r
-           fonts/helvB24.o fonts/helvB18.o                                             \\r
+OBJECTS1 = command.o log.o tcp.o dsock.o thread.o timers.o i18n.o mutex.o     \\r
+           message.o messagequeue.o                                           \\r
+           vdr.o recman.o recording.o channel.o rectimer.o event.o directory.o\\r
+           player.o vfeed.o afeed.o                                           \\r
+           demuxer.o demuxervdr.o stream.o draintarget.o                      \\r
+           viewman.o box.o region.o colour.o view.o                           \\r
+           vinfo.o vquestion.o vwallpaper.o vrecordinglist.o vlivebanner.o    \\r
+                                        vmute.o vvolume.o voptions.o                                       \\r
+           vtimerlist.o vtimeredit.o voptionsmenu.o vrecordingmenu.o          \\r
+           vchannellist.o vwelcome.o vvideolive.o vvideorec.o vepgsettimer.o  \\r
+           vchannelselect.o vserverselect.o vconnect.o vepg.o vrecmove.o      \\r
+           widget.o wselectlist.o wjpeg.o wsymbol.o wbutton.o                 \\r
+                                        woptionbox.o wtextbox.o                                            \\r
+           fonts/helvB24.o fonts/helvB18.o                                    \\r
            remote.o led.o mtd.o video.o audio.o osd.o surface.o\r
index 13b75767203edb7f49b740b95bd7c977eba7c87d..bdacba5e725b909840c4a06b5c4a1a5399ee0c06 100644 (file)
--- a/player.cc
+++ b/player.cc
@@ -573,9 +573,6 @@ void Player::threadMethod()
   UINT writeLength;
   UINT thisWrite;
   UINT preBufferTotal = 0;
-#ifdef NEW_DEMUXER
-  ULLONG currentposition;
-#endif
 
   VDR* vdr = VDR::getInstance();
 
@@ -626,9 +623,7 @@ void Player::threadMethod()
     }
 
     threadBuffer = vdr->getBlock(feedPosition, askFor, &thisRead);
-#ifdef NEW_DEMUXER
-    currentposition=feedPosition;
-#endif
+
     if (!vdr->isConnected())
     {
       doConnectionLost();
@@ -693,12 +688,7 @@ void Player::threadMethod()
 
     while(writeLength < thisRead)
     {
-#ifndef NEW_DEMUXER
       thisWrite = demuxer->put(threadBuffer + writeLength, thisRead - writeLength);
-#else
-      thisWrite = demuxer->put(threadBuffer + writeLength, thisRead - writeLength,
-      currentposition+(ULLONG)writeLength);
-#endif
       writeLength += thisWrite;
 //      logger->log("Player", Log::DEBUG, "Put %i to demuxer", thisWrite);
 
index 68232ab9f0177dc91595ed1633566cd631689141..6a4531e5ed0b9930f176eba04fafdadaa4a4e2ef 100644 (file)
--- a/stream.cc
+++ b/stream.cc
@@ -119,7 +119,7 @@ int Stream::put(UCHAR* inbuf, int len)
   return ret;
 }
 #else
-int Stream::put(UCHAR* inbuf, int len,ULLONG curpos)
+int Stream::put(UCHAR* inbuf, int len)
 {
   int ret = 0;
   int tail = bufferTail;
@@ -130,7 +130,6 @@ int Stream::put(UCHAR* inbuf, int len,ULLONG curpos)
   MediaPacket newPacket;
   newPacket.length=len;
   newPacket.pos_buffer=0;
-  newPacket.recording_byte_pos=curpos;
   newPacket.synched=false;
   newPacket.disconti=false;
   newPacket.pts=0;
index 6d33cf0df339250be009ec2b704e1a5a412d0cc0..507855b2a7e80ebcc8521989801b124e95ce72e9 100644 (file)
--- a/stream.h
+++ b/stream.h
@@ -42,12 +42,7 @@ class Stream
     int init(DrainTarget* tdt, int bufsize);
     void shutdown();
     void flush();
-#ifndef NEW_DEMUXER
     int put(UCHAR* inbuf, int len);
-#else
-    int put(UCHAR* inbuf, int len,ULLONG curpos);
-#endif
-
     int drain();
 
   private:
index 487c019cb58f652f65f7cf8f24d5beafa2b29467..d02988670c477809d62ded38b6aa9913012bb34d 100644 (file)
@@ -48,8 +48,8 @@ VideoWin::VideoWin()
   startoffset=0;\r
   lastrefaudiotime=0;\r
   lastrefvideotime=0;\r
-  lastreftimeBYTE=0;\r
   lastreftimeRT=0;\r
+  lastreftimePTS=0;\r
   firstsynched=false;\r
   cur_audio_media_sample=NULL;\r
   cur_video_media_sample=NULL;\r
@@ -377,8 +377,9 @@ ULLONG VideoWin::getCurrentTimestamp()
   startoffset=sourcefilter->getStartOffset();\r
        ncr_time-=startoffset;\r
        ncr_time-=lastreftimeRT;\r
-  ULLONG result=frameNumberToTimecode(\r
-    VDR::getInstance()->frameNumberFromPosition(lastreftimeBYTE));\r
+ /* ULLONG result=frameNumberToTimecode(\r
+    VDR::getInstance()->frameNumberFromPosition(lastreftimeBYTE));*/\r
+       ULLONG result=lastreftimePTS;\r
        result+=(ULLONG)(ncr_time/10000LL*90LL);\r
   return result;\r
 \r
@@ -536,7 +537,7 @@ UINT VideoWin::DeliverMediaSample(MediaPacket packet,
     else ms->SetPreroll(FALSE);\r
     /*Timecode handling*/\r
     lastreftimeRT=reftime1;\r
-    lastreftimeBYTE=packet.recording_byte_pos;\r
+       lastreftimePTS=packet.pts;\r
 \r
     }else {\r
       ms->SetSyncPoint(FALSE);\r
@@ -689,8 +690,8 @@ void VideoWin::ResetTimeOffsets() {
   startoffset=0;\r
   lastrefaudiotime=0;\r
   lastrefvideotime=0;\r
-  lastreftimeBYTE=0;\r
   lastreftimeRT=0;\r
+  lastreftimePTS=0;\r
 \r
 \r
 }\r
index c6b6db8d182adcd0e3647ed43a360fefdcdd926d..5176d6abb22d4f204d3ed1da0c0acbe935079dc7 100644 (file)
@@ -128,7 +128,7 @@ private:
   bool videoon;\r
   UCHAR pseudotvsize;\r
   REFERENCE_TIME lastreftimeRT;\r
-  ULLONG lastreftimeBYTE;\r
+  ULLONG lastreftimePTS;\r
   unsigned int videoposx;\r
   unsigned int videoposy;\r
 #ifdef DS_DEBUG\r