Changeset 25673


Ignore:
Timestamp:
01/15/14 15:59:59 (9 years ago)
Author:
gost
Message:

[titan] marker autoseek extension

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/marker.h

    r25645 r25673  
    375375        struct seeker *seeker = NULL;
    376376        struct seeker *seekerarb = NULL;
    377         int ret = 0, time = 0;
    378         int first = 1;
     377        int ret = 0, time = 0, lasttime = 0;
     378        int dir = 0;
    379379        unsigned long long pts = 0;
    380380        unsigned long long hpos = 0, len = 0;
    381381        unsigned long long startpos = 0;
    382         off64_t pos = 0;
     382        off64_t pos = 0, prosec = 0; diff = 0;
    383383       
    384384        struct service* snode = getservice(RECORDPLAY, 0);
     
    388388                return;
    389389        struct marker *marker = status.playmarker;
    390        
    391390       
    392391        seeker = (struct seeker*)calloc(1, sizeof(struct seeker));
     
    397396        seeker->next  = NULL;
    398397        seekerarb = seeker;
     398       
     399        prosec = marker->epos / marker->etime;
    399400
    400401        while(marker->next != NULL)
     
    424425        {
    425426                ret = videogetpts(status.aktservice->videodev, &pts);
    426                 if(status.playspeed == 0) {
    427                         if(ret == 0) {
    428                                 time = (pts - startpos) / 90000;
    429                                 seekerarb = seeker;
    430                                 while(1)
    431                                 {
    432                                         if(time >= seekerarb->stime && time < seekerarb->etime) {
    433                                                 m_lock(&status.tsseekmutex, 15);
     427                if(ret == 0) {
     428                        time = (pts - startpos) / 90000;
     429                        if(lasttime > time)
     430                                dir = -1;
     431                        else
     432                                dir = 1;
     433                        lasttime = time;
     434                        seekerarb = seeker;
     435                        while(1)
     436                        {
     437                                if(time >= seekerarb->stime && time < seekerarb->etime) {
     438                                        m_lock(&status.tsseekmutex, 15);       
     439                                        if(dir == 1) {
     440                                                diff = (time - seekerarb->stime) * prosec;
    434441                                                if(seekerarb->epos == 0)
    435442                                                        lseek64(snode->recsrcfd, 188+1024 , SEEK_END);
    436                                                 else
    437                                                         lseek64(snode->recsrcfd, seekerarb->epos, SEEK_SET);
    438                                                 playerresetts();
    439                                                 m_unlock(&status.tsseekmutex, 15);
     443                                                else
     444                                                        lseek64(snode->recsrcfd, seekerarb->epos+diff, SEEK_SET);
    440445                                        }
    441                                         if(seekerarb->next != NULL)
    442                                                 seekerarb = seekerarb->next;
    443                                         else
    444                                                 break;
     446                                        else if(dir == -1) {
     447                                                diff = (seekerarb->etime - time) * prosec;
     448                                                lseek64(snode->recsrcfd, seekerarb->spos-diff, SEEK_SET);
     449                                        }
     450                                        playerresetts();
     451                                        m_unlock(&status.tsseekmutex, 15);
     452                                        break;                                 
    445453                                }
     454                                if(seekerarb->next != NULL)
     455                                        seekerarb = seekerarb->next;
     456                                else
     457                                        break;
    446458                        }
    447459                }
Note: See TracChangeset for help on using the changeset viewer.