/[tivodecode]/mplayer_demuxer/trunk/demux_tivo.c
ViewVC logotype

Diff of /mplayer_demuxer/trunk/demux_tivo.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 73 by jeremyd2019, Sun Dec 17 22:20:25 2006 UTC revision 74 by jeremyd2019, Sun Dec 17 22:44:31 2006 UTC
# Line 21  char * o_mak; Line 21  char * o_mak;
21    
22  typedef struct {  typedef struct {
23          turing_state * turing;          turing_state * turing;
         demuxer_t * mpg_demuxer;  
         demuxer_t * demux_demuxer;  
24          off_t begin_at;          off_t begin_at;
25          off_t end_at;          off_t end_at;
26  } tivo_demux_priv;  } tivo_demux_priv;
# Line 63  static int tivo_stream_seek(stream_t*s, off_t pos) Line 61  static int tivo_stream_seek(stream_t*s, off_t pos)
61          int retval;          int retval;
62          ds_free_packs (ds);          ds_free_packs (ds);
63          mp_dbg(MSGT_DEMUX, MSGL_DBG3, "tivo_stream_seek to 0x%"PRIX64"\n", (int64_t)pos);          mp_dbg(MSGT_DEMUX, MSGL_DBG3, "tivo_stream_seek to 0x%"PRIX64"\n", (int64_t)pos);
64            /* XXX reset eof if the other guy did */
65            ds->demuxer->stream->eof = s->eof;
66          retval = stream_seek(ds->demuxer->stream, ((tivo_demux_priv*)ds->demuxer->priv)->begin_at + pos);          retval = stream_seek(ds->demuxer->stream, ((tivo_demux_priv*)ds->demuxer->priv)->begin_at + pos);
67          s->pos = ds->dpos = stream_tell(ds->demuxer->stream) - ((tivo_demux_priv*)ds->demuxer->priv)->begin_at;          s->pos = ds->dpos = stream_tell(ds->demuxer->stream) - ((tivo_demux_priv*)ds->demuxer->priv)->begin_at;
68            /* XXX set other guy's eof if stream_seek set it */
69            s->eof = ds->demuxer->stream->eof;
70          return retval;          return retval;
71  }  }
72    
# Line 87  demuxer_t* demux_tivo_open(demuxer_t* demuxer) Line 89  demuxer_t* demux_tivo_open(demuxer_t* demuxer)
89          {          {
90                  extern int audio_id, video_id, dvdsub_id;                  extern int audio_id, video_id, dvdsub_id;
91                  stream_t* s = new_ds_stream(demuxer->video);                  stream_t* s = new_ds_stream(demuxer->video);
92                    demuxer_t* od;
93                  s->seek = &tivo_stream_seek;                  s->seek = &tivo_stream_seek;
94                  priv->mpg_demuxer = demux_open(s, DEMUXER_TYPE_MPEG_PS,                  s->end_pos = priv->end_at - priv->begin_at;
95                    od = demux_open(s, DEMUXER_TYPE_MPEG_PS,
96                                  audio_id, video_id, dvdsub_id, NULL);                                  audio_id, video_id, dvdsub_id, NULL);
97                  /* XXX Can't get movi_end initialized at the right point */                  demuxer = new_demuxers_demuxer(od, od, od);
                 priv->mpg_demuxer->movi_end = priv->end_at;  
                 priv->demux_demuxer = new_demuxers_demuxer(priv->mpg_demuxer, priv->mpg_demuxer, priv->mpg_demuxer);  
                 /* XXX Can't get movi_end initialized at the right point */  
                 priv->demux_demuxer->movi_end = priv->end_at;  
98          }          }
99          return priv->demux_demuxer;          return demuxer;
100  }  }
101    
102  void demux_tivo_close(demuxer_t *demuxer)  void demux_tivo_close(demuxer_t *demuxer)
# Line 131  int demux_tivo_fill_buffer(demuxer_t* demuxer, demux_s Line 131  int demux_tivo_fill_buffer(demuxer_t* demuxer, demux_s
131                          {                          {
132                                  marker = 0xFFFFFFFF;                                  marker = 0xFFFFFFFF;
133                                  demuxer->filepos = stream_tell(demuxer->stream) - priv->begin_at;                                  demuxer->filepos = stream_tell(demuxer->stream) - priv->begin_at;
                                 /* XXX setting demux_demuxers filepos */  
                                 if(priv->demux_demuxer) priv->demux_demuxer->filepos = demuxer->filepos;  
134                                  ds_add_packet(ds, dp);                                  ds_add_packet(ds, dp);
135                                  return 1;                                  return 1;
136                          }                          }
# Line 143  int demux_tivo_fill_buffer(demuxer_t* demuxer, demux_s Line 141  int demux_tivo_fill_buffer(demuxer_t* demuxer, demux_s
141                                  {                                  {
142                                          resize_demux_packet(dp, dp->pos);                                          resize_demux_packet(dp, dp->pos);
143                                          demuxer->filepos = stream_tell(demuxer->stream) - priv->begin_at;                                          demuxer->filepos = stream_tell(demuxer->stream) - priv->begin_at;
                                         /* XXX setting demux_demuxers filepos */  
                                         if(priv->demux_demuxer) priv->demux_demuxer->filepos = demuxer->filepos;  
144                                          ds_add_packet(ds, dp);                                          ds_add_packet(ds, dp);
145                                          dp = new_demux_packet (STREAM_BUFFER_SIZE);                                          dp = new_demux_packet (STREAM_BUFFER_SIZE);
146                                  }                                  }
# Line 162  int demux_tivo_fill_buffer(demuxer_t* demuxer, demux_s Line 158  int demux_tivo_fill_buffer(demuxer_t* demuxer, demux_s
158                          {                          {
159                                  resize_demux_packet(dp, dp->pos);                                  resize_demux_packet(dp, dp->pos);
160                                  demuxer->filepos = stream_tell(demuxer->stream) - priv->begin_at;                                  demuxer->filepos = stream_tell(demuxer->stream) - priv->begin_at;
                                 /* XXX setting demux_demuxers filepos */  
                                 if(priv->demux_demuxer) priv->demux_demuxer->filepos = demuxer->filepos;  
161                                  ds_add_packet(ds, dp);                                  ds_add_packet(ds, dp);
162                                  dp = new_demux_packet (STREAM_BUFFER_SIZE);                                  dp = new_demux_packet (STREAM_BUFFER_SIZE);
163                          }                          }

Legend:
Removed from v.73  
changed lines
  Added in v.74

cvs@jdrake.com
ViewVC Help
Powered by ViewVC 1.1.13