Changeset 18262


Ignore:
Timestamp:
10/16/12 15:24:14 (11 years ago)
Author:
nit
Message:

[titan] some fixes in play

Location:
titan/titan
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/player.h

    r18258 r18262  
    4242        int16_t pmtpid = 0;
    4343        int serviceid = 0;
    44         int supermagic = 0;
     44        int supermagic = -1;
    4545        struct channel* chnode = NULL;
    4646        struct service* snode = NULL;
     
    4848        struct dvbdev* dvrnode = NULL;
    4949
    50         supermagic = getsupermagic(file);
     50        //supermagic = getsupermagic(file);
    5151
    5252        if(supermagic == NFS_SUPER_MAGIC || supermagic == SMB_SUPER_MAGIC)
  • titan/titan/record.h

    r18257 r18262  
    284284int readwritethread(struct stimerthread* stimer, struct service* servicenode, int flag)
    285285{
    286         int readret = 0, writeret = 0, ret = 0, recbsize = 0, tmprecbsize = 0, i = 0, pktcount = 0;
     286        int readret = 0, writeret = 0, ret = 0, recbsize = 0, tmprecbsize = 0, i = 0, pktcount = 0, frbsize = 0;
    287287        int readtimeout = -1, writetimeout = -1;
    288         int recsync = 0, frcount = 0;
     288        int recsync = 0, frcount = 0, count = 0;
    289289        unsigned char* buf = NULL, *tmpbuf = NULL;
    290290        char* retstr = NULL;
     
    299299
    300300        recsync = getconfigint("recsync", NULL);
     301        frbsize = servicenode->tssize * 2788;
    301302
    302303        if(servicenode->type == RECORDDIRECT || servicenode->type == RECORDTIMER || servicenode->type == RECORDTIMESHIFT)
     
    316317                if(servicenode->type == RECORDPLAY)
    317318                {
    318                         recbsize = servicenode->tssize * 2788;
    319                         tmprecbsize = 188 * 2788;
     319                        recbsize = servicenode->tssize * 188;
     320                        tmprecbsize = 188 * 188;
    320321                }
    321322                if(servicenode->type == RECORDSTREAM) recbsize = servicenode->tssize * 2788;
     
    368369                        if(frcount == 0 && status.playspeed < 0)
    369370                        {
    370                                 off64_t pos = lseek64(servicenode->recsrcfd, -(recbsize * 8), SEEK_CUR);
     371                                off64_t pos = lseek64(servicenode->recsrcfd, -(frbsize * 8), SEEK_CUR);
    371372                                videodiscontinuityskip(status.aktservice->videodev, -1);
    372373
     
    390391                        {
    391392                                frcount += readret;
    392                                 if(frcount >= recbsize * 4)
     393                                if(frcount >= frbsize * 4)
    393394                                        frcount = 0;
    394395
     
    415416                                else
    416417                                                writeret = dvbwrite(servicenode->recdstfd, buf, readret, writetimeout);
     418
     419                                //inject first pakets slower/smaler, so demux can start and read
     420                                if(servicenode->type == RECORDPLAY && count < 20)
     421                                {
     422                                        count++;
     423                                        usleep(20000);
     424                                        if(count == 19)
     425                                        {
     426                                                recbsize = servicenode->tssize * 2788;
     427                                                tmprecbsize = 188 * 2788;
     428
     429                                                free(buf);
     430                                                buf = malloc(recbsize);
     431                                                if(buf == NULL)
     432                                                {
     433                                                        err("no mem");
     434                                                        servicenode->recendtime = 1;
     435                                                }
     436
     437                                                if(servicenode->tssize == 192)
     438                                                {
     439                                                        free(tmpbuf);
     440                                                        tmpbuf = malloc(tmprecbsize);
     441                                                        if(tmpbuf == NULL)
     442                                                        {
     443                                                                err("no mem");
     444                                                                servicenode->recendtime = 1;
     445                                                        }
     446                                                }
     447                                        }
     448                                }
     449
    417450                        }
    418451
  • titan/titan/service.h

    r17962 r18262  
    431431
    432432        //get ait and parse it for hbbtv url
    433         if(chnode->aitpid > 0)
     433        if(flag == 0 && chnode->aitpid > 0)
    434434        {
    435435                unsigned char* aitbuf = NULL;
Note: See TracChangeset for help on using the changeset viewer.