diff options
author | Guenter Bartsch <guenter@users.sourceforge.net> | 2001-06-23 19:45:47 +0000 |
---|---|---|
committer | Guenter Bartsch <guenter@users.sourceforge.net> | 2001-06-23 19:45:47 +0000 |
commit | ee8df4f4d8e2088da9dbc38e3230fad1de64908f (patch) | |
tree | 945c14e183c1c36bf91050e036efa67ae205e5e3 /src/demuxers/demux_mpeg_block.c | |
parent | 5e9ccc6f1f1689a317e574f48d3acedce3d11a40 (diff) | |
download | xine-lib-ee8df4f4d8e2088da9dbc38e3230fad1de64908f.tar.gz xine-lib-ee8df4f4d8e2088da9dbc38e3230fad1de64908f.tar.bz2 |
fixed race between metronom and xine engine, small audio plugin api change to improve responsiveness (unfinished), small demux_mpeg_block bugfix (alignment for DVD plugin)
CVS patchset: 218
CVS date: 2001/06/23 19:45:47
Diffstat (limited to 'src/demuxers/demux_mpeg_block.c')
-rw-r--r-- | src/demuxers/demux_mpeg_block.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index 051017a1e..e35bc8f4b 100644 --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.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_block.c,v 1.20 2001/06/17 23:17:40 f1rmb Exp $ + * $Id: demux_mpeg_block.c,v 1.21 2001/06/23 19:45:47 guenter Exp $ * * demultiplexer for mpeg 1/2 program streams * @@ -61,6 +61,9 @@ typedef struct demux_mpeg_block_s { gui_get_next_mrl_cb_t next_mrl_cb; gui_branched_cb_t branched_cb; + + uint8_t *scratch; + } demux_mpeg_block_t ; @@ -339,18 +342,20 @@ static void *demux_mpeg_block_loop (void *this_gen) { buf_element_t *buf = NULL; demux_mpeg_block_t *this = (demux_mpeg_block_t *) this_gen; - printf ("demux_mpeg_block: demux loop starting...\n"); + /* printf ("demux_mpeg_block: demux loop starting...\n"); */ this->send_end_buffers = 1; do { demux_mpeg_block_parse_pack(this, 0); - + } while (this->status == DEMUX_OK) ; + /* printf ("demux_mpeg_block: demux loop finished (status: %d)\n", this->status); + */ this->status = DEMUX_FINISHED; @@ -480,7 +485,6 @@ static int demux_mpeg_block_open(demux_plugin_t *this_gen, switch(stage) { case STAGE_BY_CONTENT: { - uint8_t buf[4096]; if((input->get_capabilities(input) & INPUT_CAP_SEEKABLE) != 0) { @@ -490,15 +494,17 @@ static int demux_mpeg_block_open(demux_plugin_t *this_gen, /* detect blocksize */ input->seek(input, 2048, SEEK_SET); - if (!input->read(input, buf, 4)) + if (!input->read(input, this->scratch, 4)) return DEMUX_CANNOT_HANDLE; - if(buf[0] || buf[1] || (buf[2] != 0x01) || (buf[3] != 0xba)) { + if (this->scratch[0] || this->scratch[1] + || (this->scratch[2] != 0x01) || (this->scratch[3] != 0xba)) { input->seek(input, 2324, SEEK_SET); - if (!input->read(input, buf, 4)) + if (!input->read(input, this->scratch, 4)) return DEMUX_CANNOT_HANDLE; - if(buf[0] || buf[1] || (buf[2] != 0x01) || (buf[3] != 0xba)) + if (this->scratch[0] || this->scratch[1] + || (this->scratch[2] != 0x01) || (this->scratch[3] != 0xba)) return DEMUX_CANNOT_HANDLE; this->blocksize = 2324; @@ -506,15 +512,16 @@ static int demux_mpeg_block_open(demux_plugin_t *this_gen, this->blocksize = 2048; } - /* make sure it's mpeg-2 */ - input->seek(input, 0, SEEK_SET); - if (input->read(input, buf, this->blocksize)) { + if (input->read(input, this->scratch, this->blocksize)) { - if(buf[0] || buf[1] || (buf[2] != 0x01) || (buf[3] != 0xba)) + if (this->scratch[0] || this->scratch[1] + || (this->scratch[2] != 0x01) || (this->scratch[3] != 0xba)) return DEMUX_CANNOT_HANDLE; - if ((buf[4]>>4) != 4) + /* if it's a file then make sure it's mpeg-2 */ + if ( !input->get_blocksize(input) + && ((this->scratch[4]>>4) != 4) ) return DEMUX_CANNOT_HANDLE; this->input = input; @@ -602,6 +609,8 @@ demux_plugin_t *init_demuxer_plugin(int iface, config_values_t *config) { this->demux_plugin.close = demux_mpeg_block_close; this->demux_plugin.get_status = demux_mpeg_block_get_status; this->demux_plugin.get_identifier = demux_mpeg_block_get_id; + + this->scratch = xmalloc_aligned (512, 4096); return (demux_plugin_t *) this; break; |