diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2002-09-18 00:51:33 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2002-09-18 00:51:33 +0000 |
commit | db4a9292eb386fe91bbb4059c1b172e45bd32ce7 (patch) | |
tree | 85a58e93c69fa06b6304bb936c77131b957d3c5f /src/demuxers/demux_mpeg.c | |
parent | 1ad10f5795d76ee8d66c642cc4165593ce6a9e39 (diff) | |
download | xine-lib-db4a9292eb386fe91bbb4059c1b172e45bd32ce7.tar.gz xine-lib-db4a9292eb386fe91bbb4059c1b172e45bd32ce7.tar.bz2 |
first steps towards implementing stream/meta info
CVS patchset: 2680
CVS date: 2002/09/18 00:51:33
Diffstat (limited to 'src/demuxers/demux_mpeg.c')
-rw-r--r-- | src/demuxers/demux_mpeg.c | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/src/demuxers/demux_mpeg.c b/src/demuxers/demux_mpeg.c index 1e4649701..5242af47b 100644 --- a/src/demuxers/demux_mpeg.c +++ b/src/demuxers/demux_mpeg.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_mpeg.c,v 1.75 2002/09/05 22:18:52 mroi Exp $ + * $Id: demux_mpeg.c,v 1.76 2002/09/18 00:51:33 guenter Exp $ * * demultiplexer for mpeg 1/2 program streams * reads streams of variable blocksizes @@ -834,53 +834,58 @@ static int demux_mpeg_get_status (demux_plugin_t *this_gen) { return (this->thread_running?DEMUX_OK:DEMUX_FINISHED); } -static int demux_mpeg_start (demux_plugin_t *this_gen, - fifo_buffer_t *video_fifo, - fifo_buffer_t *audio_fifo, - off_t start_pos, int start_time) { - - demux_mpeg_t *this = (demux_mpeg_t *) this_gen; - int err; - int status; - +static int demux_mpeg_send_headers (demux_mpeg_t *this) { pthread_mutex_lock( &this->mutex ); - if( !this->thread_running ) { - - this->video_fifo = video_fifo; - this->audio_fifo = audio_fifo; - - this->rate = 0; /* fixme */ - this->last_pts[0] = 0; - this->last_pts[1] = 0; + this->video_fifo = this->xine->video_fifo; + this->audio_fifo = this->xine->audio_fifo; - xine_demux_control_start(this->xine); - - if ((this->input->get_capabilities (this->input) & INPUT_CAP_PREVIEW) != 0 ) { - - uint32_t w; - int num_buffers = NUM_PREVIEW_BUFFERS; - - this->preview_mode = 1; - - this->input->seek (this->input, 4, SEEK_SET); - - this->status = DEMUX_OK ; + this->rate = 0; /* fixme */ + this->last_pts[0] = 0; + this->last_pts[1] = 0; + + xine_demux_control_start(this->xine); + + if ((this->input->get_capabilities (this->input) & INPUT_CAP_PREVIEW) != 0 ) { + + uint32_t w; + int num_buffers = NUM_PREVIEW_BUFFERS; + + this->preview_mode = 1; + + this->input->seek (this->input, 4, SEEK_SET); + + this->status = DEMUX_OK ; + + do { + + w = parse_pack_preview (this, &num_buffers); + + if (w != 0x000001ba) + demux_mpeg_resync (this, w); + + num_buffers --; + + } while ( (this->status == DEMUX_OK) && (num_buffers>0)) ; + + /* printf ("demux_mpeg: rate %d\n", this->rate); */ + } - do { + xine_demux_control_headers_done (this->xine); - w = parse_pack_preview (this, &num_buffers); + pthread_mutex_unlock (&this->mutex); - if (w != 0x000001ba) - demux_mpeg_resync (this, w); + return DEMUX_CAN_HANDLE; +} - num_buffers --; +static int demux_mpeg_start (demux_plugin_t *this_gen, + off_t start_pos, int start_time) { - } while ( (this->status == DEMUX_OK) && (num_buffers>0)) ; + demux_mpeg_t *this = (demux_mpeg_t *) this_gen; + int err; + int status; - /* printf ("demux_mpeg: rate %d\n", this->rate); */ - } - } + pthread_mutex_lock( &this->mutex ); if ((this->input->get_capabilities (this->input) & INPUT_CAP_SEEKABLE) != 0 ) { @@ -926,10 +931,9 @@ static int demux_mpeg_start (demux_plugin_t *this_gen, static int demux_mpeg_seek (demux_plugin_t *this_gen, off_t start_pos, int start_time) { - demux_mpeg_t *this = (demux_mpeg_t *) this_gen; + /* demux_mpeg_t *this = (demux_mpeg_t *) this_gen; */ - return demux_mpeg_start (this_gen, this->video_fifo, this->audio_fifo, - start_pos, start_time); + return demux_mpeg_start (this_gen, start_pos, start_time); } static int demux_mpeg_open(demux_plugin_t *this_gen, @@ -966,7 +970,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, pckbuf = read_bytes (this, 1); if ((pckbuf>>4) != 4) { this->input = input; - return DEMUX_CAN_HANDLE; + return demux_mpeg_send_headers (this); } } break; @@ -978,7 +982,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, pckbuf = read_bytes (this, 1); if ((pckbuf>>4) != 4) { this->input = input; - return DEMUX_CAN_HANDLE; + return demux_mpeg_send_headers (this); } } break; @@ -1010,7 +1014,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, pckbuf = read_bytes (this, 1); if ((pckbuf>>4) != 4) { this->input = input; - return DEMUX_CAN_HANDLE; + return demux_mpeg_send_headers (this); } } break; @@ -1041,7 +1045,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, for (j = 0; j < 1024 - 4; j++) { if (BE_32(&buf[j]) == MPEG_MARKER) { this->input = input; - return DEMUX_CAN_HANDLE; + return demux_mpeg_send_headers (this); } } } @@ -1074,7 +1078,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, if(!strncmp((media + 3), "mpeg1", 5)) { this->input = input; - return DEMUX_CAN_HANDLE; + return demux_mpeg_send_headers (this); } else if(!strncasecmp((media + 3), "mpeg2", 5)) { return DEMUX_CANNOT_HANDLE; @@ -1102,7 +1106,7 @@ static int demux_mpeg_open(demux_plugin_t *this_gen, if(!strcasecmp((ending + 1), m)) { this->input = input; - return DEMUX_CAN_HANDLE; + return demux_mpeg_send_headers (this); } } } @@ -1125,7 +1129,7 @@ static char *demux_mpeg_get_mimetypes(void) { "video/x-mpeg: mpeg, mpg, mpe: MPEG animation;"; } -static void demux_mpeg_close (demux_plugin_t *this) { +static void demux_mpeg_dispose (demux_plugin_t *this) { free (this); } @@ -1161,13 +1165,15 @@ static void *init_demuxer_plugin (xine_t *xine, void *data) { this->demux_plugin.start = demux_mpeg_start; this->demux_plugin.seek = demux_mpeg_seek; this->demux_plugin.stop = demux_mpeg_stop; - this->demux_plugin.close = demux_mpeg_close; + this->demux_plugin.dispose = demux_mpeg_dispose; this->demux_plugin.get_status = demux_mpeg_get_status; this->demux_plugin.get_identifier = demux_mpeg_get_id; this->demux_plugin.get_stream_length = demux_mpeg_get_stream_length; this->demux_plugin.get_mimetypes = demux_mpeg_get_mimetypes; this->status = DEMUX_FINISHED; + this->xine = xine; + pthread_mutex_init( &this->mutex, NULL ); return this; |