diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-01-04 14:48:11 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-01-04 14:48:11 +0000 |
commit | 4b91fa7eb32d3337e0ac6dc3fc6b210ca480b7b9 (patch) | |
tree | 24cfafb063e21ca2f61878b04c948bc5f74690ec /src/demuxers/demux_rawdv.c | |
parent | feb5575abd810ae0a21de9c3f8dd3033cd4cf573 (diff) | |
download | xine-lib-4b91fa7eb32d3337e0ac6dc3fc6b210ca480b7b9.tar.gz xine-lib-4b91fa7eb32d3337e0ac6dc3fc6b210ca480b7b9.tar.bz2 |
add 2 demuxer groups (audio and games) with multiple plugins at the
same shared library (reduce loading time). demuxer api increased so
old ungrouped plugins won't be loaded.
Bill Fink patch to enable playback of live rawdv streams.
obs: non-regular files are now supposed non-seekable.
CVS patchset: 3771
CVS date: 2003/01/04 14:48:11
Diffstat (limited to 'src/demuxers/demux_rawdv.c')
-rw-r--r-- | src/demuxers/demux_rawdv.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/demuxers/demux_rawdv.c b/src/demuxers/demux_rawdv.c index 70c836d3b..683c3c9c2 100644 --- a/src/demuxers/demux_rawdv.c +++ b/src/demuxers/demux_rawdv.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_rawdv.c,v 1.1 2002/12/23 21:29:59 miguelfreitas Exp $ + * $Id: demux_rawdv.c,v 1.2 2003/01/04 14:48:12 miguelfreitas Exp $ * * demultiplexer for raw dv streams * @@ -140,22 +140,34 @@ static void demux_raw_dv_send_headers (demux_plugin_t *this_gen) { demux_raw_dv_t *this = (demux_raw_dv_t *) this_gen; buf_element_t *buf; xine_bmiheader *bih; - unsigned char scratch[4]; + unsigned char scratch[4], scratch2[4]; + int i; this->video_fifo = this->stream->video_fifo; this->audio_fifo = this->stream->audio_fifo; xine_demux_control_start(this->stream); - if ( !(this->input->get_capabilities(this->input) & INPUT_CAP_SEEKABLE)) { - printf("demux_rawdv: not seekable, can't handle!\n"); - return; + if ((this->input->get_capabilities(this->input)) & INPUT_CAP_SEEKABLE) { + this->input->seek(this->input, 0, SEEK_SET); + if( this->input->read (this->input, scratch, 4) != 4 ) + return; + this->input->seek(this->input, 0, SEEK_SET); + } + else { + if( this->input->read (this->input, scratch, 4) != 4 ) + return; + if( !(scratch[3] & 0x80) ) + i = NTSC_FRAME_SIZE; + else + i = PAL_FRAME_SIZE; + i -= 4; + while (i > 0) { + if( this->input->read (this->input, scratch2, 4) != 4 ) + return; + i -= 4; + } } - - this->input->seek(this->input, 0, SEEK_SET); - if( this->input->read (this->input, scratch, 4) != 4 ) - return; - this->input->seek(this->input, 0, SEEK_SET); buf = this->video_fifo->buffer_pool_alloc(this->video_fifo); buf->content = buf->mem; @@ -201,6 +213,11 @@ static int demux_raw_dv_seek (demux_plugin_t *this_gen, demux_raw_dv_t *this = (demux_raw_dv_t *) this_gen; + if (!(this->input->get_capabilities(this->input) & INPUT_CAP_SEEKABLE)) { + this->status = DEMUX_OK; + return this->status; + } + if( !start_pos && start_time ) { start_pos = (start_time * 90000 / this->duration) * this->frame_size; } @@ -341,6 +358,6 @@ static void *init_plugin (xine_t *xine, void *data) { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_DEMUX, 19, "rawdv", XINE_VERSION_CODE, NULL, init_plugin }, + { PLUGIN_DEMUX, 20, "rawdv", XINE_VERSION_CODE, NULL, init_plugin }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; |