Ticket #611: movsubstest.2.diff

File movsubstest.2.diff, 1.7 KB (added by reimar, 20 years ago)

fixed sync

  • libmpdemux/demux_mov.c

     
    3232
    3333#include "bswap.h"
    3434
     35#include "libvo/sub.h"
     36extern subtitle *vo_sub;
     37
    3538#include "qtpalette.h"
    3639#include "parse_mp4.h" // .MP4 specific stuff
    3740
     
    290293}
    291294
    292295#define MOV_MAX_TRACKS 256
     296#define MOV_MAX_SUBLEN 1024
    293297
    294298typedef struct {
    295299    off_t moov_start;
     
    300304    mov_track_t* tracks[MOV_MAX_TRACKS];
    301305    int timescale; // movie timescale
    302306    int duration;  // movie duration (in movie timescale units)
     307    subtitle subs;
     308    char subtext[MOV_MAX_SUBLEN + 1];
    303309} mov_priv_t;
    304310
    305311#define MOV_FOURCC(a,b,c,d) ((a<<24)|(b<<16)|(c<<8)|(d))
     
    21152121   
    21162122    ++trak->pos;
    21172123
     2124    if (demuxer->sub->id >= 0 && demuxer->sub->id < priv->track_db) {
     2125      int samplenr = 0;
     2126      trak = priv->tracks[demuxer->sub->id];
     2127      while (samplenr < trak->samples_size) {
     2128        double subpts = (double)trak->samples[samplenr].pts / (double)trak->timescale;
     2129        if (subpts >= pts) break;
     2130        samplenr++;
     2131      }
     2132      samplenr--;
     2133      if (samplenr < 0)
     2134        vo_sub = NULL;
     2135      else {
     2136        off_t pos = trak->samples[samplenr].pos + 2;
     2137        int len = trak->samples[samplenr].size - 2;
     2138        if (len < 0) len = 0;
     2139        if (len > MOV_MAX_SUBLEN) len = MOV_MAX_SUBLEN;
     2140        stream_seek(demuxer->stream, pos);
     2141        stream_read(demuxer->stream, priv->subtext, len);
     2142        priv->subtext[len] = 0;
     2143        priv->subs.lines = 1;
     2144        priv->subs.text[0] = &priv->subtext;
     2145        vo_sub = &priv->subs;
     2146      }
     2147      vo_osd_changed (OSDTYPE_SUBTITLE);
     2148    }
     2149
    21182150    return 1;
    21192151   
    21202152}