summaryrefslogtreecommitdiff
path: root/src/demuxers/demux_mpeg_block.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/demuxers/demux_mpeg_block.c')
-rw-r--r--src/demuxers/demux_mpeg_block.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c
index ec03ac8ba..2b14fab06 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.71 2002/01/04 00:23:06 jcdutton Exp $
+ * $Id: demux_mpeg_block.c,v 1.72 2002/01/05 18:14:27 jcdutton Exp $
*
* demultiplexer for mpeg 1/2 program streams
*
@@ -100,7 +100,7 @@ typedef struct demux_mpeg_block_s {
static void demux_mpeg_block_parse_pack (demux_mpeg_block_t *this, int preview_mode) {
buf_element_t *buf = NULL;
- unsigned char *p;
+ uint8_t *p;
int bMpeg1=0;
uint32_t header_len;
uint32_t PTS;
@@ -283,6 +283,7 @@ static void demux_mpeg_block_parse_pack (demux_mpeg_block_t *this, int preview_m
printf ("demux_mpeg_block: scr %d last_scr %d diff %d\n",
scr, this->last_scr, scr_diff);
#endif
+
if (abs(scr_diff) > 60000) {
@@ -310,6 +311,16 @@ static void demux_mpeg_block_parse_pack (demux_mpeg_block_t *this, int preview_m
packet_len = p[4] << 8 | p[5];
stream_id = p[3];
+ if (stream_id == 0xbf) { /* NAV Packet */
+ buf->content = p;
+ buf->size = packet_len;
+ buf->type = BUF_SPU_NAV;
+ buf->PTS = 0; /* NAV packets do not have PES values */
+ buf->input_pos = this->input->get_current_pos(this->input);
+ this->video_fifo->put (this->video_fifo, buf);
+ return ;
+ }
+
if (bMpeg1) {
if (stream_id == 0xBF) {
@@ -505,15 +516,6 @@ static void demux_mpeg_block_parse_pack (demux_mpeg_block_t *this, int preview_m
return ;
}
- } else if (stream_id == 0xbf) { /* NAV Packet */
- buf->content = p-9;
- buf->size = packet_len;
- buf->type = BUF_SPU_NAV;
- buf->PTS = PTS;
- buf->input_pos = this->input->get_current_pos(this->input);
- this->video_fifo->put (this->video_fifo, buf);
- return ;
-
} else if ((stream_id >= 0xbc) && ((stream_id & 0xf0) == 0xe0)) {