7 mpeg3_css_t
* mpeg3_new_css();
12 int64_t mpeg3io_tell_gcc(mpeg3_fs_t
*fs
);
13 double mpeg3_add_double_gcc(double x
, double y
);
14 double mpeg3_divide_double_gcc(double x
, double y
);
15 int64_t mpeg3_total_bytes_gcc(mpeg3_title_t
*title
);
16 int64_t mpeg3io_path_total_bytes(char *path
);
17 int64_t mpeg3io_get_total_bytes(mpeg3_fs_t
*fs
);
24 mpeg3_title_t
* mpeg3_new_title(mpeg3_t
*file
, char *path
);
25 void mpeg3_new_cell(mpeg3_title_t
*title
,
26 int64_t program_start
,
31 /* Called by mpeg3_open for a single file */
32 int mpeg3demux_create_title(mpeg3_demuxer_t
*demuxer
,
38 mpeg3_atrack_t
* mpeg3_new_atrack(mpeg3_t
*file
,
41 mpeg3_demuxer_t
*demuxer
,
43 int mpeg3_delete_atrack(mpeg3_t
*file
, mpeg3_atrack_t
*atrack
);
45 void mpeg3_append_samples(mpeg3_atrack_t
*atrack
, int64_t offset
);
48 /* These return 1 on failure and 0 on success */
49 int mpeg3_next_header();
53 mpeg3_vtrack_t
* mpeg3_new_vtrack(mpeg3_t
*file
,
55 mpeg3_demuxer_t
*demuxer
,
57 int mpeg3_delete_vtrack(mpeg3_t
*file
, mpeg3_vtrack_t
*vtrack
);
59 void mpeg3_append_frame(mpeg3_vtrack_t
*vtrack
, int64_t offset
, int is_keyframe
);
63 mpeg3audio_t
* mpeg3audio_new(mpeg3_t
*file
,
64 mpeg3_atrack_t
*track
,
66 int mpeg3audio_delete(mpeg3audio_t
*audio
);
68 /* Decode up to requested number of samples. */
69 /* Return 0 on success and 1 on failure. */
70 int mpeg3audio_decode_audio(mpeg3audio_t
*audio
,
76 /* Shift the audio by the number of samples */
77 /* Used by table of contents routines and decode_audio */
78 void mpeg3_shift_audio(mpeg3audio_t
*audio
, int diff
);
81 /* Audio consists of many possible formats, each packetized into frames. */
82 /* Each format has a constructor, header decoder, frame decoder, and destructor. */
83 /* The function set is determined by the audio format. */
85 /* To decode audio, for each frame read the header sized number of bytes. */
86 /* Call the header decoder for the format. */
87 /* Call the frame decoder for the format. */
89 int mpeg3_new_decode_tables(mpeg3_layer_t
*audio
);
90 int mpeg3_init_layer3(mpeg3_layer_t
*audio
);
91 int mpeg3_init_layer2(mpeg3_layer_t
*audio
);
93 /* Create a new layer decoder */
94 mpeg3_layer_t
* mpeg3_new_layer();
96 /* Create a new ac3 decoder */
97 mpeg3_ac3_t
* mpeg3_new_ac3();
99 /* Create a new pcm decoder */
100 mpeg3_pcm_t
* mpeg3_new_pcm();
103 /* Delete a new layer decoder */
104 void mpeg3_delete_layer(mpeg3_layer_t
*audio
);
106 /* Delete a new ac3 decoder */
107 void mpeg3_delete_ac3(mpeg3_ac3_t
*audio
);
109 /* Delete a new pcm decoder */
110 void mpeg3_delete_pcm(mpeg3_pcm_t
*audio
);
113 /* Return 1 if the data isn't a header */
114 int mpeg3_layer_check(unsigned char *data
);
115 int mpeg3_ac3_check(unsigned char *header
);
116 int mpeg3_pcm_check(unsigned char *header
);
118 /* These return the size of the next frame including the header */
119 /* or 0 if it wasn't a header. */
120 /* Decode a layer header */
121 int mpeg3_layer_header(mpeg3_layer_t
*audio
, unsigned char *data
);
124 /* Decode an AC3 header */
125 int mpeg3_ac3_header(mpeg3_ac3_t
*audio
, unsigned char *header
);
127 /* Decode an PCM header */
128 int mpeg3_pcm_header(mpeg3_pcm_t
*audio
, unsigned char *header
);
131 /* Reset after a seek */
132 void mpeg3_layer_reset(mpeg3_layer_t
*audio
);
134 /* Decode a frame of layer 3 audio. */
135 /* The output is linear, one buffer for every channel. */
136 /* The user should get the channel count from one of the header commands */
137 /* The output must be big enough to hold the largest frame of audio */
138 /* These functions return the number of samples rendered */
139 int mpeg3audio_dolayer3(mpeg3_layer_t
*audio
,
145 /* Decode a frame of layer 2 audio */
146 int mpeg3audio_dolayer2(mpeg3_layer_t
*audio
,
152 /* Decode a frame of ac3 audio */
153 int mpeg3audio_doac3(mpeg3_ac3_t
*audio
,
160 /* Decode a frame of ac3 audio */
161 int mpeg3audio_dopcm(mpeg3_pcm_t
*audio
,
179 mpeg3video_t
* mpeg3video_new(mpeg3_t
*file
,
180 mpeg3_vtrack_t
*track
);
181 int mpeg3video_delete(mpeg3video_t
*video
);
182 int mpeg3video_read_frame(mpeg3video_t
*video
,
184 unsigned char **output_rows
,
192 void mpeg3video_dump(mpeg3video_t
*video
);
193 int mpeg3video_prev_code(mpeg3_demuxer_t
*demuxer
, unsigned int code
);
194 int mpeg3video_next_code(mpeg3_bits_t
* stream
, unsigned int code
);
195 void mpeg3video_toc_error();
196 int mpeg3_rewind_video(mpeg3video_t
*video
);
202 mpeg3_fs_t
* mpeg3_new_fs(char *path
);
203 int mpeg3_delete_fs(mpeg3_fs_t
*fs
);
204 int mpeg3io_open_file(mpeg3_fs_t
*fs
);
205 int mpeg3io_close_file(mpeg3_fs_t
*fs
);
206 int mpeg3io_seek(mpeg3_fs_t
*fs
, int64_t byte
);
207 int mpeg3io_seek_relative(mpeg3_fs_t
*fs
, int64_t bytes
);
208 int mpeg3io_read_data(unsigned char *buffer
, int64_t bytes
, mpeg3_fs_t
*fs
);
216 mpeg3_t
* mpeg3_new(char *path
);
217 mpeg3_index_t
* mpeg3_new_index();
218 void mpeg3_delete_index(mpeg3_index_t
*index
);
219 int mpeg3_delete(mpeg3_t
*file
);
220 int mpeg3_get_file_type(mpeg3_t
*file
,
225 int mpeg3_read_toc(mpeg3_t
*file
, int *atracks_return
, int *vtracks_return
);
241 mpeg3_demuxer_t
* mpeg3_new_demuxer(mpeg3_t
*file
,
245 int mpeg3_delete_demuxer(mpeg3_demuxer_t
*demuxer
);
246 mpeg3_demuxer_t
* mpeg3_get_demuxer(mpeg3_t
*file
);
247 int mpeg3demux_read_data(mpeg3_demuxer_t
*demuxer
,
248 unsigned char *output
,
251 /* Append elementary stream data */
252 /* Used by streaming mode. */
253 void mpeg3demux_append_data(mpeg3_demuxer_t
*demuxer
,
258 /* Shift elementary data out */
259 /* Used by streaming mode */
260 void mpeg3demux_shift_data(mpeg3_demuxer_t
*demuxer
,
263 /* Convert absolute byte position to position in program */
264 int64_t mpeg3_absolute_to_program(mpeg3_demuxer_t
*demuxer
,
265 int64_t absolute_byte
);
268 int mpeg3_read_next_packet(mpeg3_demuxer_t
*demuxer
);
269 int mpeg3_read_prev_packet(mpeg3_demuxer_t
*demuxer
);
272 unsigned int mpeg3demux_read_int32(mpeg3_demuxer_t
*demuxer
);
273 unsigned int mpeg3demux_read_int24(mpeg3_demuxer_t
*demuxer
);
274 unsigned int mpeg3demux_read_int16(mpeg3_demuxer_t
*demuxer
);
277 /* Give total number of bytes in all titles which belong to the current program. */
278 int64_t mpeg3demux_movie_size(mpeg3_demuxer_t
*demuxer
);
280 /* Give byte offset relative to start of movie */
281 int64_t mpeg3demux_tell_byte(mpeg3_demuxer_t
*demuxer
);
283 /* Give program the current packet belongs to */
284 int mpeg3demux_tell_program(mpeg3_demuxer_t
*demuxer
);
286 double mpeg3demux_get_time(mpeg3_demuxer_t
*demuxer
);
287 int mpeg3demux_eof(mpeg3_demuxer_t
*demuxer
);
288 int mpeg3demux_bof(mpeg3_demuxer_t
*demuxer
);
289 void mpeg3demux_start_reverse(mpeg3_demuxer_t
*demuxer
);
290 void mpeg3demux_start_forward(mpeg3_demuxer_t
*demuxer
);
291 int mpeg3demux_open_title(mpeg3_demuxer_t
*demuxer
, int title_number
);
292 /* Go to the absolute byte given */
293 int mpeg3demux_seek_byte(mpeg3_demuxer_t
*demuxer
, int64_t byte
);
295 /* Seek to the title and cell containing the absolute byte of the
297 /* Called at the beginning of every packet. */
298 int mpeg3_seek_phys(mpeg3_demuxer_t
*demuxer
);
300 unsigned char mpeg3demux_read_char_packet(mpeg3_demuxer_t
*demuxer
);
301 unsigned char mpeg3demux_read_prev_char_packet(mpeg3_demuxer_t
*demuxer
);
302 int mpeg3demux_read_program(mpeg3_demuxer_t
*demuxer
);
304 /* Get last pts read */
305 double mpeg3demux_audio_pts(mpeg3_demuxer_t
*demuxer
);
307 double mpeg3demux_video_pts(mpeg3_demuxer_t
*demuxer
);
309 /* Set the last pts read to -1 for audio and video */
310 void mpeg3demux_reset_pts(mpeg3_demuxer_t
*demuxer
);
312 /* scan forward for next pts. Used in byte seeking to synchronize */
313 double mpeg3demux_scan_pts(mpeg3_demuxer_t
*demuxer
);
315 /* seek using sequential search to the pts given. Used in byte seeking. */
316 int mpeg3demux_goto_pts(mpeg3_demuxer_t
*demuxer
, double pts
);
319 unsigned char mpeg3demux_read_char_packet(mpeg3_demuxer_t
*demuxer
);
320 unsigned char mpeg3demux_read_prev_char_packet(mpeg3_demuxer_t
*demuxer
);
322 #define mpeg3demux_error(demuxer) (((mpeg3_demuxer_t *)(demuxer))->error_flag)
324 static unsigned char mpeg3demux_read_char(mpeg3_demuxer_t
*demuxer
)
326 //printf("mpeg3demux_read_char %lx %lx\n", demuxer->data_position, demuxer->data_size);
327 if(demuxer
->data_position
< demuxer
->data_size
)
329 return demuxer
->data_buffer
[demuxer
->data_position
++];
333 return mpeg3demux_read_char_packet(demuxer
);
339 static unsigned char mpeg3demux_read_prev_char(mpeg3_demuxer_t
*demuxer
)
341 if(demuxer
->data_position
!= 0)
343 return demuxer
->data_buffer
[demuxer
->data_position
--];
347 return mpeg3demux_read_prev_char_packet(demuxer
);
365 mpeg3_bits_t
* mpeg3bits_new_stream(mpeg3_t
*file
, mpeg3_demuxer_t
*demuxer
);
366 int mpeg3bits_delete_stream(mpeg3_bits_t
* stream
);
367 int mpeg3bits_seek_byte(mpeg3_bits_t
* stream
, int64_t position
);
368 int mpeg3bits_open_title(mpeg3_bits_t
* stream
, int title
);
369 /* Give absolute byte offset in all titles. */
370 int64_t mpeg3bits_tell(mpeg3_bits_t
* stream
);
371 /* Reset bit bucket */
372 void mpeg3bits_reset(mpeg3_bits_t
*stream
);
379 #define mpeg3bits_error(stream) mpeg3demux_error((stream)->demuxer)
381 #define mpeg3bits_eof(stream) mpeg3demux_eof((stream)->demuxer)
383 #define mpeg3bits_bof(stream) mpeg3demux_bof((stream)->demuxer)
385 /* Read bytes backward from the file until the reverse_bits is full. */
386 static void mpeg3bits_fill_reverse_bits(mpeg3_bits_t
* stream
, int bits
)
389 while(stream
->bit_number
> 7)
392 stream
->bfr_size
-= 8;
393 stream
->bit_number
-= 8;
396 // Insert bytes before bfr_size
397 while(stream
->bfr_size
- stream
->bit_number
< bits
)
399 if(stream
->input_ptr
)
400 stream
->bfr
|= (unsigned int)(*--stream
->input_ptr
) << stream
->bfr_size
;
402 stream
->bfr
|= (unsigned int)mpeg3demux_read_prev_char(stream
->demuxer
) << stream
->bfr_size
;
403 stream
->bfr_size
+= 8;
407 /* Read bytes forward from the file until the forward_bits is full. */
408 static void mpeg3bits_fill_bits(mpeg3_bits_t
* stream
, int bits
)
410 while(stream
->bit_number
< bits
)
413 if(stream
->input_ptr
)
415 stream
->bfr
|= *stream
->input_ptr
++;
419 stream
->bfr
|= mpeg3demux_read_char(stream
->demuxer
);
421 stream
->bit_number
+= 8;
422 stream
->bfr_size
+= 8;
423 if(stream
->bfr_size
> 32) stream
->bfr_size
= 32;
427 /* Return 8 bits, advancing the file position. */
428 static unsigned int mpeg3bits_getbyte_noptr(mpeg3_bits_t
* stream
)
430 if(stream
->bit_number
< 8)
433 if(stream
->input_ptr
)
434 stream
->bfr
|= *stream
->input_ptr
++;
436 stream
->bfr
|= mpeg3demux_read_char(stream
->demuxer
);
438 stream
->bfr_size
+= 8;
439 if(stream
->bfr_size
> 32) stream
->bfr_size
= 32;
441 return (stream
->bfr
>> stream
->bit_number
) & 0xff;
443 return (stream
->bfr
>> (stream
->bit_number
-= 8)) & 0xff;
446 static unsigned int mpeg3bits_getbit_noptr(mpeg3_bits_t
* stream
)
448 if(!stream
->bit_number
)
451 stream
->bfr
|= mpeg3demux_read_char(stream
->demuxer
);
453 stream
->bfr_size
+= 8;
454 if(stream
->bfr_size
> 32) stream
->bfr_size
= 32;
456 stream
->bit_number
= 7;
458 return (stream
->bfr
>> 7) & 0x1;
460 return (stream
->bfr
>> (--stream
->bit_number
)) & (0x1);
463 /* Return n number of bits, advancing the file position. */
464 /* Use in place of flushbits */
465 static unsigned int mpeg3bits_getbits(mpeg3_bits_t
* stream
, int bits
)
467 if(bits
<= 0) return 0;
468 mpeg3bits_fill_bits(stream
, bits
);
469 return (stream
->bfr
>> (stream
->bit_number
-= bits
)) & (0xffffffff >> (32 - bits
));
472 static unsigned int mpeg3bits_showbits24_noptr(mpeg3_bits_t
* stream
)
474 while(stream
->bit_number
< 24)
477 stream
->bfr
|= mpeg3demux_read_char(stream
->demuxer
);
478 stream
->bit_number
+= 8;
479 stream
->bfr_size
+= 8;
480 if(stream
->bfr_size
> 32) stream
->bfr_size
= 32;
482 return (stream
->bfr
>> (stream
->bit_number
- 24)) & 0xffffff;
485 static unsigned int mpeg3bits_showbits32_noptr(mpeg3_bits_t
* stream
)
487 while(stream
->bit_number
< 32)
490 stream
->bfr
|= mpeg3demux_read_char(stream
->demuxer
);
491 stream
->bit_number
+= 8;
492 stream
->bfr_size
+= 8;
493 if(stream
->bfr_size
> 32) stream
->bfr_size
= 32;
498 static unsigned int mpeg3bits_showbits(mpeg3_bits_t
* stream
, int bits
)
500 mpeg3bits_fill_bits(stream
, bits
);
501 return (stream
->bfr
>> (stream
->bit_number
- bits
)) & (0xffffffff >> (32 - bits
));
504 static unsigned int mpeg3bits_getbits_reverse(mpeg3_bits_t
* stream
, int bits
)
507 mpeg3bits_fill_reverse_bits(stream
, bits
);
508 result
= (stream
->bfr
>> stream
->bit_number
) & (0xffffffff >> (32 - bits
));
509 stream
->bit_number
+= bits
;
513 static unsigned int mpeg3bits_showbits_reverse(mpeg3_bits_t
* stream
, int bits
)
516 mpeg3bits_fill_reverse_bits(stream
, bits
);
517 result
= (stream
->bfr
>> stream
->bit_number
) & (0xffffffff >> (32 - bits
));
530 // I/O must be character based so the buffer doesn't get overrun
538 void mpeg3io_read_buffer(mpeg3_fs_t
*fs
);
540 #define mpeg3io_tell(fs) (((mpeg3_fs_t *)(fs))->current_byte)
543 #define mpeg3io_eof(fs) (((mpeg3_fs_t *)(fs))->current_byte >= ((mpeg3_fs_t *)(fs))->total_bytes)
546 #define mpeg3io_bof(fs) (((mpeg3_fs_t *)(fs))->current_byte < 0)
548 #define mpeg3io_get_fd(fs) (fileno(((mpeg3_fs_t *)(fs))->fd))
550 #define mpeg3io_total_bytes(fs) (((mpeg3_fs_t *)(fs))->total_bytes)
552 static int mpeg3io_sync_buffer(mpeg3_fs_t
*fs
)
554 // Reposition buffer offset
555 if(fs
->buffer_position
+ fs
->buffer_offset
!= fs
->current_byte
)
557 fs
->buffer_offset
= fs
->current_byte
- fs
->buffer_position
;
561 if(fs
->current_byte
< fs
->buffer_position
||
562 fs
->current_byte
>= fs
->buffer_position
+ fs
->buffer_size
)
564 mpeg3io_read_buffer(fs
);
567 return !fs
->buffer_size
;
570 static unsigned int mpeg3io_read_char(mpeg3_fs_t
*fs
)
573 mpeg3io_sync_buffer(fs
);
574 result
= fs
->buffer
[fs
->buffer_offset
++];
579 static unsigned char mpeg3io_next_char(mpeg3_fs_t
*fs
)
581 unsigned char result
;
582 mpeg3io_sync_buffer(fs
);
583 result
= fs
->buffer
[fs
->buffer_offset
];
587 static uint32_t mpeg3io_read_int32(mpeg3_fs_t
*fs
)
591 /* Do not fread. This breaks byte ordering. */
592 a
= mpeg3io_read_char(fs
);
593 b
= mpeg3io_read_char(fs
);
594 c
= mpeg3io_read_char(fs
);
595 d
= mpeg3io_read_char(fs
);
603 static uint32_t mpeg3io_read_int24(mpeg3_fs_t
*fs
)
607 /* Do not fread. This breaks byte ordering. */
608 b
= mpeg3io_read_char(fs
);
609 c
= mpeg3io_read_char(fs
);
610 d
= mpeg3io_read_char(fs
);
617 static uint16_t mpeg3io_read_int16(mpeg3_fs_t
*fs
)
621 /* Do not fread. This breaks byte ordering. */
622 c
= mpeg3io_read_char(fs
);
623 d
= mpeg3io_read_char(fs
);
647 #define mpeg3slice_fillbits(buffer, nbits) \
648 while(((mpeg3_slice_buffer_t*)(buffer))->bits_size < (nbits)) \
650 if(((mpeg3_slice_buffer_t*)(buffer))->current_position < ((mpeg3_slice_buffer_t*)(buffer))->buffer_size) \
652 ((mpeg3_slice_buffer_t*)(buffer))->bits <<= 8; \
653 ((mpeg3_slice_buffer_t*)(buffer))->bits |= ((mpeg3_slice_buffer_t*)(buffer))->data[((mpeg3_slice_buffer_t*)(buffer))->current_position++]; \
655 ((mpeg3_slice_buffer_t*)(buffer))->bits_size += 8; \
658 #define mpeg3slice_flushbits(buffer, nbits) \
660 mpeg3slice_fillbits((buffer), (nbits)); \
661 ((mpeg3_slice_buffer_t*)(buffer))->bits_size -= (nbits); \
664 #define mpeg3slice_flushbit(buffer) \
666 if(((mpeg3_slice_buffer_t*)(buffer))->bits_size) \
667 ((mpeg3_slice_buffer_t*)(buffer))->bits_size--; \
669 if(((mpeg3_slice_buffer_t*)(buffer))->current_position < ((mpeg3_slice_buffer_t*)(buffer))->buffer_size) \
671 ((mpeg3_slice_buffer_t*)(buffer))->bits = \
672 ((mpeg3_slice_buffer_t*)(buffer))->data[((mpeg3_slice_buffer_t*)(buffer))->current_position++]; \
673 ((mpeg3_slice_buffer_t*)(buffer))->bits_size = 7; \
677 static unsigned int mpeg3slice_getbit(mpeg3_slice_buffer_t
*buffer
)
679 if(buffer
->bits_size
)
680 return (buffer
->bits
>> (--buffer
->bits_size
)) & 0x1;
682 if(buffer
->current_position
< buffer
->buffer_size
)
684 buffer
->bits
= buffer
->data
[buffer
->current_position
++];
685 buffer
->bits_size
= 7;
686 return (buffer
->bits
>> 7) & 0x1;
692 static unsigned int mpeg3slice_getbits2(mpeg3_slice_buffer_t
*buffer
)
694 if(buffer
->bits_size
>= 2)
695 return (buffer
->bits
>> (buffer
->bits_size
-= 2)) & 0x3;
697 if(buffer
->current_position
< buffer
->buffer_size
)
700 buffer
->bits
|= buffer
->data
[buffer
->current_position
++];
701 buffer
->bits_size
+= 6;
702 return (buffer
->bits
>> buffer
->bits_size
) & 0x3;
707 static unsigned int mpeg3slice_getbyte(mpeg3_slice_buffer_t
*buffer
)
709 if(buffer
->bits_size
>= 8)
710 return (buffer
->bits
>> (buffer
->bits_size
-= 8)) & 0xff;
712 if(buffer
->current_position
< buffer
->buffer_size
)
715 buffer
->bits
|= buffer
->data
[buffer
->current_position
++];
716 return (buffer
->bits
>> buffer
->bits_size
) & 0xff;
722 static unsigned int mpeg3slice_getbits(mpeg3_slice_buffer_t
*slice_buffer
, int bits
)
724 if(bits
== 1) return mpeg3slice_getbit(slice_buffer
);
725 mpeg3slice_fillbits(slice_buffer
, bits
);
726 return (slice_buffer
->bits
>> (slice_buffer
->bits_size
-= bits
)) & (0xffffffff >> (32 - bits
));
729 static unsigned int mpeg3slice_showbits16(mpeg3_slice_buffer_t
*buffer
)
731 if(buffer
->bits_size
>= 16)
732 return (buffer
->bits
>> (buffer
->bits_size
- 16)) & 0xffff;
734 if(buffer
->current_position
< buffer
->buffer_size
)
737 buffer
->bits_size
+= 16;
738 buffer
->bits
|= (unsigned int)buffer
->data
[buffer
->current_position
++] << 8;
739 buffer
->bits
|= buffer
->data
[buffer
->current_position
++];
740 return (buffer
->bits
>> (buffer
->bits_size
- 16)) & 0xffff;
745 static unsigned int mpeg3slice_showbits9(mpeg3_slice_buffer_t
*buffer
)
747 if(buffer
->bits_size
>= 9)
748 return (buffer
->bits
>> (buffer
->bits_size
- 9)) & 0x1ff;
750 if(buffer
->current_position
< buffer
->buffer_size
)
753 buffer
->bits_size
+= 16;
754 buffer
->bits
|= (unsigned int)buffer
->data
[buffer
->current_position
++] << 8;
755 buffer
->bits
|= buffer
->data
[buffer
->current_position
++];
756 return (buffer
->bits
>> (buffer
->bits_size
- 9)) & 0x1ff;
761 static unsigned int mpeg3slice_showbits5(mpeg3_slice_buffer_t
*buffer
)
763 if(buffer
->bits_size
>= 5)
764 return (buffer
->bits
>> (buffer
->bits_size
- 5)) & 0x1f;
766 if(buffer
->current_position
< buffer
->buffer_size
)
769 buffer
->bits_size
+= 8;
770 buffer
->bits
|= buffer
->data
[buffer
->current_position
++];
771 return (buffer
->bits
>> (buffer
->bits_size
- 5)) & 0x1f;
776 static unsigned int mpeg3slice_showbits(mpeg3_slice_buffer_t
*slice_buffer
, int bits
)
778 mpeg3slice_fillbits(slice_buffer
, bits
);
779 return (slice_buffer
->bits
>> (slice_buffer
->bits_size
- bits
)) & (0xffffffff >> (32 - bits
));