Changeset 231d0470d084693eb25042ef22a111d21c63f241
- Timestamp:
- 21/11/03 01:38:01
(5 years ago)
- Author:
- Gildas Bazin <gbazin@videolan.org>
- git-committer:
- Gildas Bazin <gbazin@videolan.org> 1069375081 +0000
- git-parent:
[571f69bab779d190704c37fdb9e39439e758fffc]
- git-author:
- Gildas Bazin <gbazin@videolan.org> 1069375081 +0000
- Message:
* include/vlc_common.h: include stdlib.h
* include/ninput.h, src/input/stream.c, src/input/input.c:
new stream_Block() function to read a block_t from the input.
es_out_Send() takes a block_t as input, for PES (deprecated) use es_out_SendPES().
* modules/demux/*: changed to new es_out_Send(). asf.c and avi.c still use es_out_SendPES() though.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| rb38ec88 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 1999-2001 VideoLAN |
|---|
| 5 | | * $Id: ninput.h,v 1.17 2003/11/20 22:10:55 fenrir Exp $ |
|---|
| | 5 | * $Id: ninput.h,v 1.18 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 36 | 36 | { |
|---|
| 37 | 37 | es_out_id_t *(*pf_add) ( es_out_t *, es_format_t * ); |
|---|
| 38 | | int (*pf_send) ( es_out_t *, es_out_id_t *, pes_packet_t * ); |
|---|
| | 38 | int (*pf_send) ( es_out_t *, es_out_id_t *, block_t * ); |
|---|
| | 39 | int (*pf_send_pes)( es_out_t *, es_out_id_t *, pes_packet_t * ); |
|---|
| 39 | 40 | void (*pf_del) ( es_out_t *, es_out_id_t * ); |
|---|
| 40 | 41 | int (*pf_control)( es_out_t *, int i_query, va_list ); |
|---|
| … | … | |
| 51 | 52 | out->pf_del( out, id ); |
|---|
| 52 | 53 | } |
|---|
| 53 | | static inline int es_out_Send( es_out_t *out, es_out_id_t *id, pes_packet_t *p_pes ) |
|---|
| | 54 | static inline int es_out_Send( es_out_t *out, es_out_id_t *id, |
|---|
| | 55 | block_t *p_block ) |
|---|
| 54 | 56 | { |
|---|
| 55 | | return out->pf_send( out, id, p_pes ); |
|---|
| | 57 | return out->pf_send( out, id, p_block ); |
|---|
| | 58 | } |
|---|
| | 59 | static inline int es_out_SendPES( es_out_t *out, es_out_id_t *id, |
|---|
| | 60 | pes_packet_t *p_pes ) |
|---|
| | 61 | { |
|---|
| | 62 | return out->pf_send_pes( out, id, p_pes ); |
|---|
| 56 | 63 | } |
|---|
| 57 | 64 | static inline int es_out_vaControl( es_out_t *out, int i_query, va_list args ) |
|---|
| … | … | |
| 102 | 109 | VLC_EXPORT( data_packet_t *,stream_DataPacket, ( stream_t *, int i_size, vlc_bool_t b_force ) ); |
|---|
| 103 | 110 | VLC_EXPORT( pes_packet_t *, stream_PesPacket, ( stream_t *, int i_size ) ); |
|---|
| | 111 | VLC_EXPORT( block_t *, stream_Block, ( stream_t *, int i_size ) ); |
|---|
| 104 | 112 | |
|---|
| 105 | 113 | static int64_t inline stream_Tell( stream_t *s ) |
|---|
| r1e9f16e |
r231d047 |
|
| 4 | 4 | ***************************************************************************** |
|---|
| 5 | 5 | * Copyright (C) 1998, 1999, 2000 VideoLAN |
|---|
| 6 | | * $Id: vlc_common.h,v 1.86 2003/11/16 21:07:30 gbazin Exp $ |
|---|
| | 6 | * $Id: vlc_common.h,v 1.87 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 7 | 7 | * |
|---|
| 8 | 8 | * Authors: Samuel Hocevar <sam@via.ecp.fr> |
|---|
| … | … | |
| 52 | 52 | * Required system headers |
|---|
| 53 | 53 | *****************************************************************************/ |
|---|
| | 54 | #include <stdlib.h> |
|---|
| 54 | 55 | #include <stdarg.h> |
|---|
| 55 | 56 | |
|---|
| r1e9f16e |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2001 VideoLAN |
|---|
| 5 | | * $Id: a52sys.c,v 1.9 2003/11/16 21:07:31 gbazin Exp $ |
|---|
| | 5 | * $Id: a52sys.c,v 1.10 2003/11/21 00:38:00 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 178 | 178 | { |
|---|
| 179 | 179 | demux_sys_t *p_sys = p_input->p_demux_data; |
|---|
| 180 | | pes_packet_t *p_pes; |
|---|
| | 180 | block_t *p_block; |
|---|
| 181 | 181 | |
|---|
| 182 | 182 | int i_channels, i_sample_rate, i_frame_size; |
|---|
| … | … | |
| 228 | 228 | p_sys->i_time * 9 / 100 ); |
|---|
| 229 | 229 | |
|---|
| 230 | | if( ( p_pes = stream_PesPacket( p_input->s, i_frame_size ) ) == NULL ) |
|---|
| | 230 | if( ( p_block = stream_Block( p_input->s, i_frame_size ) ) == NULL ) |
|---|
| 231 | 231 | { |
|---|
| 232 | 232 | msg_Warn( p_input, "cannot read data" ); |
|---|
| … | … | |
| 234 | 234 | } |
|---|
| 235 | 235 | |
|---|
| 236 | | p_pes->i_dts = |
|---|
| 237 | | p_pes->i_pts = input_ClockGetTS( p_input, |
|---|
| | 236 | p_block->i_dts = |
|---|
| | 237 | p_block->i_pts = input_ClockGetTS( p_input, |
|---|
| 238 | 238 | p_input->stream.p_selected_program, |
|---|
| 239 | 239 | p_sys->i_time * 9 / 100 ); |
|---|
| 240 | 240 | |
|---|
| 241 | | es_out_Send( p_input->p_es_out, p_sys->p_es, p_pes ); |
|---|
| | 241 | es_out_Send( p_input->p_es_out, p_sys->p_es, p_block ); |
|---|
| 242 | 242 | |
|---|
| 243 | 243 | p_sys->i_time += (mtime_t)1000000 * |
|---|
| r1e9f16e |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2001 VideoLAN |
|---|
| 5 | | * $Id: aac.c,v 1.7 2003/11/16 21:07:31 gbazin Exp $ |
|---|
| | 5 | * $Id: aac.c,v 1.8 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 195 | 195 | { |
|---|
| 196 | 196 | demux_sys_t *p_sys = p_input->p_demux_data; |
|---|
| 197 | | pes_packet_t *p_pes; |
|---|
| | 197 | block_t *p_block; |
|---|
| 198 | 198 | |
|---|
| 199 | 199 | uint8_t h[8]; |
|---|
| … | … | |
| 244 | 244 | p_sys->i_time * 9 / 100 ); |
|---|
| 245 | 245 | |
|---|
| 246 | | if( ( p_pes = stream_PesPacket( p_input->s, AAC_FRAME_SIZE( h ) ) )==NULL ) |
|---|
| | 246 | if( ( p_block = stream_Block( p_input->s, AAC_FRAME_SIZE( h ) ) ) == NULL ) |
|---|
| 247 | 247 | { |
|---|
| 248 | 248 | msg_Warn( p_input, "cannot read data" ); |
|---|
| … | … | |
| 250 | 250 | } |
|---|
| 251 | 251 | |
|---|
| 252 | | p_pes->i_dts = |
|---|
| 253 | | p_pes->i_pts = input_ClockGetTS( p_input, |
|---|
| | 252 | p_block->i_dts = |
|---|
| | 253 | p_block->i_pts = input_ClockGetTS( p_input, |
|---|
| 254 | 254 | p_input->stream.p_selected_program, |
|---|
| 255 | 255 | p_sys->i_time * 9 / 100 ); |
|---|
| 256 | 256 | |
|---|
| 257 | | es_out_Send( p_input->p_es_out, p_sys->p_es, p_pes ); |
|---|
| | 257 | es_out_Send( p_input->p_es_out, p_sys->p_es, p_block ); |
|---|
| 258 | 258 | |
|---|
| 259 | 259 | p_sys->i_time += (mtime_t)1000000 * |
|---|
| rb38ec88 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2002-2003 VideoLAN |
|---|
| 5 | | * $Id: asf.c,v 1.43 2003/11/20 22:10:56 fenrir Exp $ |
|---|
| | 5 | * $Id: asf.c,v 1.44 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 717 | 717 | if( p_stream->p_pes->i_pes_size > 0 ) |
|---|
| 718 | 718 | { |
|---|
| 719 | | es_out_Send( p_input->p_es_out, p_stream->p_es, p_stream->p_pes ); |
|---|
| | 719 | es_out_SendPES( p_input->p_es_out, p_stream->p_es, p_stream->p_pes ); |
|---|
| 720 | 720 | p_stream->p_pes = NULL; |
|---|
| 721 | 721 | } |
|---|
| raed1e85 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2001-2003 VideoLAN |
|---|
| 5 | | * $Id: au.c,v 1.10 2003/11/16 22:54:12 gbazin Exp $ |
|---|
| | 5 | * $Id: au.c,v 1.11 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 326 | 326 | { |
|---|
| 327 | 327 | demux_sys_t *p_sys = p_input->p_demux_data; |
|---|
| 328 | | pes_packet_t *p_pes; |
|---|
| | 328 | block_t *p_block; |
|---|
| 329 | 329 | |
|---|
| 330 | 330 | if( p_input->stream.p_selected_program->i_synchro_state == SYNCHRO_REINIT ) |
|---|
| … | … | |
| 346 | 346 | p_sys->i_time * 9 / 100 ); |
|---|
| 347 | 347 | |
|---|
| 348 | | if( ( p_pes = stream_PesPacket( p_input->s, p_sys->i_frame_size ) )==NULL ) |
|---|
| | 348 | if( ( p_block = stream_Block( p_input->s, p_sys->i_frame_size ) ) == NULL ) |
|---|
| 349 | 349 | { |
|---|
| 350 | 350 | msg_Warn( p_input, "cannot read data" ); |
|---|
| 351 | 351 | return 0; |
|---|
| 352 | 352 | } |
|---|
| 353 | | p_pes->i_dts = |
|---|
| 354 | | p_pes->i_pts = input_ClockGetTS( p_input, |
|---|
| | 353 | p_block->i_dts = |
|---|
| | 354 | p_block->i_pts = input_ClockGetTS( p_input, |
|---|
| 355 | 355 | p_input->stream.p_selected_program, |
|---|
| 356 | 356 | p_sys->i_time * 9 / 100 ); |
|---|
| 357 | 357 | |
|---|
| 358 | | es_out_Send( p_input->p_es_out, p_sys->p_es, p_pes ); |
|---|
| | 358 | es_out_Send( p_input->p_es_out, p_sys->p_es, p_block ); |
|---|
| 359 | 359 | |
|---|
| 360 | 360 | p_sys->i_time += p_sys->i_frame_length; |
|---|
| rb38ec88 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2001 VideoLAN |
|---|
| 5 | | * $Id: avi.c,v 1.71 2003/11/20 22:10:56 fenrir Exp $ |
|---|
| | 5 | * $Id: avi.c,v 1.72 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| 7 | 7 | * |
|---|
| … | … | |
| 777 | 777 | if( b_play_audio || tk->i_cat != AUDIO_ES ) |
|---|
| 778 | 778 | { |
|---|
| 779 | | es_out_Send( p_input->p_es_out, tk->p_es, p_pes ); |
|---|
| | 779 | es_out_SendPES( p_input->p_es_out, tk->p_es, p_pes ); |
|---|
| 780 | 780 | } |
|---|
| 781 | 781 | else |
|---|
| … | … | |
| 903 | 903 | |
|---|
| 904 | 904 | p_pes->i_rate = p_input->stream.control.i_rate; |
|---|
| 905 | | es_out_Send( p_input->p_es_out, p_stream->p_es, p_pes ); |
|---|
| | 905 | es_out_SendPES( p_input->p_es_out, p_stream->p_es, p_pes ); |
|---|
| 906 | 906 | } |
|---|
| 907 | 907 | else |
|---|
| r571f69b |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2003 VideoLAN |
|---|
| 5 | | * $Id: livedotcom.cpp,v 1.9 2003/11/20 23:13:28 sigmunau Exp $ |
|---|
| | 5 | * $Id: livedotcom.cpp,v 1.10 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 855 | 855 | input_thread_t *p_input = tk->p_input; |
|---|
| 856 | 856 | demux_sys_t *p_sys = p_input->p_demux_data; |
|---|
| 857 | | pes_packet_t *p_pes; |
|---|
| 858 | | data_packet_t *p_data; |
|---|
| 859 | | |
|---|
| 860 | | mtime_t i_pts = (mtime_t)pts.tv_sec * 1000000LL + (mtime_t)pts.tv_usec; |
|---|
| | 857 | block_t *p_block; |
|---|
| | 858 | |
|---|
| | 859 | mtime_t i_pts = (mtime_t)pts.tv_sec * 1000000LL + (mtime_t)pts.tv_usec; |
|---|
| 861 | 860 | |
|---|
| 862 | 861 | if( tk->b_quicktime && tk->p_es == NULL ) |
|---|
| … | … | |
| 889 | 888 | pts.tv_sec * 1000000LL + pts.tv_usec ); |
|---|
| 890 | 889 | #endif |
|---|
| 891 | | /* Create a PES */ |
|---|
| 892 | | if( ( p_pes = input_NewPES( p_input->p_method_data ) ) == NULL ) |
|---|
| 893 | | { |
|---|
| 894 | | return; |
|---|
| 895 | | } |
|---|
| 896 | 890 | if( i_size > 65536 ) |
|---|
| 897 | 891 | { |
|---|
| … | … | |
| 899 | 893 | } |
|---|
| 900 | 894 | /* FIXME could i_size be > buffer size ? */ |
|---|
| 901 | | p_data = input_NewPacket( p_input->p_method_data, i_size ); |
|---|
| 902 | | |
|---|
| 903 | | memcpy( p_data->p_payload_start, tk->buffer, i_size ); |
|---|
| 904 | | p_data->p_payload_end = p_data->p_payload_start + i_size; |
|---|
| 905 | | |
|---|
| 906 | | p_pes->p_first = p_pes->p_last = p_data; |
|---|
| 907 | | p_pes->i_nb_data = 1; |
|---|
| 908 | | p_pes->i_pes_size = i_size; |
|---|
| 909 | | p_pes->i_rate = p_input->stream.control.i_rate; |
|---|
| | 895 | p_block = block_New( p_input, i_size ); |
|---|
| | 896 | |
|---|
| | 897 | memcpy( p_block->p_buffer, tk->buffer, i_size ); |
|---|
| | 898 | //p_block->i_rate = p_input->stream.control.i_rate; |
|---|
| 910 | 899 | |
|---|
| 911 | 900 | if( i_pts != tk->i_pts ) |
|---|
| 912 | 901 | { |
|---|
| 913 | | p_pes->i_dts = |
|---|
| 914 | | p_pes->i_pts = input_ClockGetTS( p_input, |
|---|
| | 902 | p_block->i_dts = |
|---|
| | 903 | p_block->i_pts = input_ClockGetTS( p_input, |
|---|
| 915 | 904 | p_input->stream.p_selected_program, |
|---|
| 916 | 905 | i_pts * 9 / 100 ); |
|---|
| … | … | |
| 918 | 907 | else |
|---|
| 919 | 908 | { |
|---|
| 920 | | p_pes->i_dts = 0; |
|---|
| 921 | | p_pes->i_pts = 0; |
|---|
| | 909 | p_block->i_dts = 0; |
|---|
| | 910 | p_block->i_pts = 0; |
|---|
| 922 | 911 | } |
|---|
| 923 | 912 | //fprintf( stderr, "tk -> dpts=%lld\n", i_pts - tk->i_pts ); |
|---|
| 924 | 913 | |
|---|
| 925 | | es_out_Send( p_input->p_es_out, tk->p_es, p_pes ); |
|---|
| | 914 | es_out_Send( p_input->p_es_out, tk->p_es, p_block ); |
|---|
| 926 | 915 | |
|---|
| 927 | 916 | /* warm that's ok */ |
|---|
| rb38ec88 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2001 VideoLAN |
|---|
| 5 | | * $Id: mkv.cpp,v 1.42 2003/11/20 22:10:55 fenrir Exp $ |
|---|
| | 5 | * $Id: mkv.cpp,v 1.43 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 1370 | 1370 | } |
|---|
| 1371 | 1371 | |
|---|
| 1372 | | static pes_packet_t *MemToPES( input_thread_t *p_input, uint8_t *p_mem, int i_mem ) |
|---|
| 1373 | | { |
|---|
| 1374 | | pes_packet_t *p_pes; |
|---|
| 1375 | | data_packet_t *p_data; |
|---|
| 1376 | | |
|---|
| 1377 | | if( ( p_pes = input_NewPES( p_input->p_method_data ) ) == NULL ) |
|---|
| 1378 | | { |
|---|
| 1379 | | return NULL; |
|---|
| 1380 | | } |
|---|
| 1381 | | |
|---|
| 1382 | | p_data = input_NewPacket( p_input->p_method_data, i_mem); |
|---|
| 1383 | | |
|---|
| 1384 | | memcpy( p_data->p_payload_start, p_mem, i_mem ); |
|---|
| 1385 | | p_data->p_payload_end = p_data->p_payload_start + i_mem; |
|---|
| 1386 | | |
|---|
| 1387 | | p_pes->p_first = p_pes->p_last = p_data; |
|---|
| 1388 | | p_pes->i_nb_data = 1; |
|---|
| 1389 | | p_pes->i_pes_size = i_mem; |
|---|
| 1390 | | p_pes->i_rate = p_input->stream.control.i_rate; |
|---|
| 1391 | | |
|---|
| 1392 | | return p_pes; |
|---|
| | 1372 | static block_t *MemToBlock( input_thread_t *p_input, uint8_t *p_mem, int i_mem) |
|---|
| | 1373 | { |
|---|
| | 1374 | block_t *p_block; |
|---|
| | 1375 | if( !(p_block = block_New( p_input, i_mem ) ) ) return NULL; |
|---|
| | 1376 | memcpy( p_block->p_buffer, p_mem, i_mem ); |
|---|
| | 1377 | //p_block->i_rate = p_input->stream.control.i_rate; |
|---|
| | 1378 | return p_block; |
|---|
| 1393 | 1379 | } |
|---|
| 1394 | 1380 | |
|---|
| … | … | |
| 1431 | 1417 | if( !tk.b_inited && tk.i_data_init > 0 ) |
|---|
| 1432 | 1418 | { |
|---|
| 1433 | | pes_packet_t *p_init; |
|---|
| | 1419 | block_t *p_init; |
|---|
| 1434 | 1420 | |
|---|
| 1435 | 1421 | msg_Dbg( p_input, "sending header (%d bytes)", tk.i_data_init ); |
|---|
| … | … | |
| 1463 | 1449 | i_size[2] = tk.i_data_init - i_offset - i_size[0] - i_size[1]; |
|---|
| 1464 | 1450 | |
|---|
| 1465 | | p_init = MemToPES( p_input, &tk.p_data_init[i_offset], i_size[0] ); |
|---|
| | 1451 | p_init = MemToBlock( p_input, &tk.p_data_init[i_offset], i_size[0] ); |
|---|
| 1466 | 1452 | if( p_init ) |
|---|
| 1467 | 1453 | { |
|---|
| 1468 | 1454 | es_out_Send( p_input->p_es_out, tk.p_es, p_init ); |
|---|
| 1469 | 1455 | } |
|---|
| 1470 | | p_init = MemToPES( p_input, &tk.p_data_init[i_offset+i_size[0]], i_size[1] ); |
|---|
| | 1456 | p_init = MemToBlock( p_input, &tk.p_data_init[i_offset+i_size[0]], i_size[1] ); |
|---|
| 1471 | 1457 | if( p_init ) |
|---|
| 1472 | 1458 | { |
|---|
| 1473 | 1459 | es_out_Send( p_input->p_es_out, tk.p_es, p_init ); |
|---|
| 1474 | 1460 | } |
|---|
| 1475 | | p_init = MemToPES( p_input, &tk.p_data_init[i_offset+i_size[0]+i_size[1]], i_size[2] ); |
|---|
| | 1461 | p_init = MemToBlock( p_input, &tk.p_data_init[i_offset+i_size[0]+i_size[1]], i_size[2] ); |
|---|
| 1476 | 1462 | if( p_init ) |
|---|
| 1477 | 1463 | { |
|---|
| … | … | |
| 1481 | 1467 | else |
|---|
| 1482 | 1468 | { |
|---|
| 1483 | | p_init = MemToPES( p_input, tk.p_data_init, tk.i_data_init ); |
|---|
| | 1469 | p_init = MemToBlock( p_input, tk.p_data_init, tk.i_data_init ); |
|---|
| 1484 | 1470 | if( p_init ) |
|---|
| 1485 | 1471 | { |
|---|
| … | … | |
| 1493 | 1479 | for( i = 0; i < block->NumberFrames(); i++ ) |
|---|
| 1494 | 1480 | { |
|---|
| 1495 | | pes_packet_t *p_pes; |
|---|
| | 1481 | block_t *p_block; |
|---|
| 1496 | 1482 | DataBuffer &data = block->GetBuffer(i); |
|---|
| 1497 | 1483 | |
|---|
| 1498 | | p_pes = MemToPES( p_input, data.Buffer(), data.Size() ); |
|---|
| 1499 | | if( p_pes == NULL ) |
|---|
| | 1484 | p_block = MemToBlock( p_input, data.Buffer(), data.Size() ); |
|---|
| | 1485 | if( p_block == NULL ) |
|---|
| 1500 | 1486 | { |
|---|
| 1501 | 1487 | break; |
|---|
| 1502 | 1488 | } |
|---|
| 1503 | 1489 | |
|---|
| 1504 | | p_pes->i_pts = i_pts; |
|---|
| 1505 | | p_pes->i_dts = i_pts; |
|---|
| | 1490 | p_block->i_pts = i_pts; |
|---|
| | 1491 | p_block->i_dts = i_pts; |
|---|
| 1506 | 1492 | |
|---|
| 1507 | 1493 | if( tk.fmt.i_cat == SPU_ES && strcmp( tk.psz_codec, "S_VOBSUB" ) ) |
|---|
| … | … | |
| 1509 | 1495 | if( i_duration > 0 ) |
|---|
| 1510 | 1496 | { |
|---|
| 1511 | | p_pes->i_dts += i_duration * 1000; |
|---|
| | 1497 | p_block->i_dts += i_duration * 1000; |
|---|
| 1512 | 1498 | } |
|---|
| 1513 | 1499 | else |
|---|
| 1514 | 1500 | { |
|---|
| 1515 | | p_pes->i_dts = 0; |
|---|
| 1516 | | } |
|---|
| 1517 | | |
|---|
| 1518 | | if( p_pes->p_first && p_pes->i_pes_size > 0 ) |
|---|
| 1519 | | { |
|---|
| 1520 | | p_pes->p_first->p_payload_end[0] = '\0'; |
|---|
| 1521 | | } |
|---|
| 1522 | | } |
|---|
| 1523 | | es_out_Send( p_input->p_es_out, tk.p_es, p_pes ); |
|---|
| | 1501 | p_block->i_dts = 0; |
|---|
| | 1502 | } |
|---|
| | 1503 | |
|---|
| | 1504 | if( p_block->i_buffer > 0 ) |
|---|
| | 1505 | { |
|---|
| | 1506 | p_block->p_buffer[p_block->i_buffer-1] = '\0'; |
|---|
| | 1507 | } |
|---|
| | 1508 | } |
|---|
| | 1509 | es_out_Send( p_input->p_es_out, tk.p_es, p_block ); |
|---|
| 1524 | 1510 | |
|---|
| 1525 | 1511 | /* use time stamp only for first block */ |
|---|
| rb38ec88 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 1999-2003 VideoLAN |
|---|
| 5 | | * $Id: sub.c,v 1.37 2003/11/20 22:10:56 fenrir Exp $ |
|---|
| | 5 | * $Id: sub.c,v 1.38 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 519 | 519 | p_sub->subtitle[p_sub->i_subtitle].i_start < i_maxdate ) |
|---|
| 520 | 520 | { |
|---|
| 521 | | pes_packet_t *p_pes; |
|---|
| 522 | | data_packet_t *p_data; |
|---|
| 523 | | |
|---|
| | 521 | block_t *p_block; |
|---|
| 524 | 522 | int i_len; |
|---|
| 525 | 523 | |
|---|
| … | … | |
| 532 | 530 | continue; |
|---|
| 533 | 531 | } |
|---|
| 534 | | if( !( p_pes = input_NewPES( p_sub->p_input->p_method_data ) ) ) |
|---|
| | 532 | |
|---|
| | 533 | if( !( p_block = block_New( p_sub->p_input, i_len ) ) ) |
|---|
| 535 | 534 | { |
|---|
| 536 | 535 | p_sub->i_subtitle++; |
|---|
| … | … | |
| 538 | 537 | } |
|---|
| 539 | 538 | |
|---|
| 540 | | if( !( p_data = input_NewPacket( p_sub->p_input->p_method_data, |
|---|
| 541 | | i_len ) ) ) |
|---|
| 542 | | { |
|---|
| 543 | | input_DeletePES( p_sub->p_input->p_method_data, p_pes ); |
|---|
| 544 | | p_sub->i_subtitle++; |
|---|
| 545 | | continue; |
|---|
| 546 | | } |
|---|
| 547 | | p_data->p_payload_end = p_data->p_payload_start + i_len; |
|---|
| 548 | | |
|---|
| 549 | | p_pes->i_pts = |
|---|
| | 539 | p_block->i_pts = |
|---|
| 550 | 540 | input_ClockGetTS( p_sub->p_input, |
|---|
| 551 | 541 | p_sub->p_input->stream.p_selected_program, |
|---|
| … | … | |
| 556 | 546 | * i_dts means end of display... |
|---|
| 557 | 547 | */ |
|---|
| 558 | | p_pes->i_dts = |
|---|
| | 548 | p_block->i_dts = |
|---|
| 559 | 549 | input_ClockGetTS( p_sub->p_input, |
|---|
| 560 | 550 | p_sub->p_input->stream.p_selected_program, |
|---|
| … | … | |
| 563 | 553 | else |
|---|
| 564 | 554 | { |
|---|
| 565 | | p_pes->i_dts = 0; |
|---|
| 566 | | } |
|---|
| 567 | | |
|---|
| 568 | | p_pes->i_nb_data = 1; |
|---|
| 569 | | p_pes->p_first = |
|---|
| 570 | | p_pes->p_last = p_data; |
|---|
| 571 | | p_pes->i_pes_size = i_len; |
|---|
| 572 | | |
|---|
| 573 | | memcpy( p_data->p_payload_start, |
|---|
| 574 | | p_sub->subtitle[p_sub->i_subtitle].psz_text, |
|---|
| 575 | | i_len ); |
|---|
| 576 | | |
|---|
| 577 | | if( p_pes->i_pts > 0 ) |
|---|
| 578 | | { |
|---|
| 579 | | es_out_Send( p_input->p_es_out, p_sub->p_es, p_pes ); |
|---|
| | 555 | p_block->i_dts = 0; |
|---|
| | 556 | } |
|---|
| | 557 | |
|---|
| | 558 | memcpy( p_block->p_buffer, |
|---|
| | 559 | p_sub->subtitle[p_sub->i_subtitle].psz_text, i_len ); |
|---|
| | 560 | |
|---|
| | 561 | if( p_block->i_pts > 0 ) |
|---|
| | 562 | { |
|---|
| | 563 | es_out_Send( p_input->p_es_out, p_sub->p_es, p_block ); |
|---|
| 580 | 564 | } |
|---|
| 581 | 565 | else |
|---|
| 582 | 566 | { |
|---|
| 583 | | input_DeletePES( p_sub->p_input->p_method_data, p_pes ); |
|---|
| | 567 | block_Release( p_block ); |
|---|
| 584 | 568 | } |
|---|
| 585 | 569 | |
|---|
| raed1e85 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 2001-2003 VideoLAN |
|---|
| 5 | | * $Id: wav.c,v 1.10 2003/11/16 22:54:12 gbazin Exp $ |
|---|
| | 5 | * $Id: wav.c,v 1.11 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 231 | 231 | demux_sys_t *p_sys = p_input->p_demux_data; |
|---|
| 232 | 232 | int64_t i_pos; |
|---|
| 233 | | pes_packet_t *p_pes; |
|---|
| | 233 | block_t *p_block; |
|---|
| 234 | 234 | |
|---|
| 235 | 235 | if( p_input->stream.p_selected_program->i_synchro_state == SYNCHRO_REINIT ) |
|---|
| … | … | |
| 259 | 259 | } |
|---|
| 260 | 260 | |
|---|
| 261 | | if( ( p_pes = stream_PesPacket( p_input->s, p_sys->i_frame_size ) )==NULL ) |
|---|
| | 261 | if( ( p_block = stream_Block( p_input->s, p_sys->i_frame_size ) ) == NULL ) |
|---|
| 262 | 262 | { |
|---|
| 263 | 263 | msg_Warn( p_input, "cannot read data" ); |
|---|
| 264 | 264 | return 0; |
|---|
| 265 | 265 | } |
|---|
| 266 | | p_pes->i_dts = |
|---|
| 267 | | p_pes->i_pts = input_ClockGetTS( p_input, |
|---|
| | 266 | p_block->i_dts = |
|---|
| | 267 | p_block->i_pts = input_ClockGetTS( p_input, |
|---|
| 268 | 268 | p_input->stream.p_selected_program, |
|---|
| 269 | 269 | p_sys->i_time * 9 / 100 ); |
|---|
| 270 | 270 | |
|---|
| 271 | | es_out_Send( p_input->p_es_out, p_sys->p_es, p_pes ); |
|---|
| | 271 | es_out_Send( p_input->p_es_out, p_sys->p_es, p_block ); |
|---|
| 272 | 272 | |
|---|
| 273 | 273 | p_sys->i_time += p_sys->i_frame_length; |
|---|
| rb38ec88 |
r231d047 |
|
| 5 | 5 | ***************************************************************************** |
|---|
| 6 | 6 | * Copyright (C) 1998-2002 VideoLAN |
|---|
| 7 | | * $Id: input.c,v 1.257 2003/11/20 22:10:56 fenrir Exp $ |
|---|
| | 7 | * $Id: input.c,v 1.258 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 8 | 8 | * |
|---|
| 9 | 9 | * Authors: Christophe Massiot <massiot@via.ecp.fr> |
|---|
| … | … | |
| 989 | 989 | |
|---|
| 990 | 990 | static es_out_id_t *EsOutAdd ( es_out_t *, es_format_t * ); |
|---|
| 991 | | static int EsOutSend ( es_out_t *, es_out_id_t *, pes_packet_t * ); |
|---|
| | 991 | static int EsOutSend ( es_out_t *, es_out_id_t *, block_t * ); |
|---|
| | 992 | static int EsOutSendPES( es_out_t *, es_out_id_t *, pes_packet_t * ); |
|---|
| 992 | 993 | static void EsOutDel ( es_out_t *, es_out_id_t * ); |
|---|
| 993 | 994 | static int EsOutControl( es_out_t *, int i_query, va_list ); |
|---|
| … | … | |
| 999 | 1000 | out->pf_add = EsOutAdd; |
|---|
| 1000 | 1001 | out->pf_send = EsOutSend; |
|---|
| | 1002 | out->pf_send_pes= EsOutSendPES; |
|---|
| 1001 | 1003 | out->pf_del = EsOutDel; |
|---|
| 1002 | 1004 | out->pf_control = EsOutControl; |
|---|
| … | … | |
| 1217 | 1219 | } |
|---|
| 1218 | 1220 | |
|---|
| 1219 | | static int EsOutSend( es_out_t *out, es_out_id_t *id, pes_packet_t *p_pes ) |
|---|
| | 1221 | static int EsOutSend( es_out_t *out, es_out_id_t *id, block_t *p_block ) |
|---|
| | 1222 | { |
|---|
| | 1223 | if( id->p_es->p_decoder_fifo ) |
|---|
| | 1224 | { |
|---|
| | 1225 | pes_packet_t *p_pes; |
|---|
| | 1226 | |
|---|
| | 1227 | if( !(p_pes = input_NewPES( out->p_sys->p_input->p_method_data ) ) ) |
|---|
| | 1228 | { |
|---|
| | 1229 | return VLC_SUCCESS; |
|---|
| | 1230 | } |
|---|
| | 1231 | |
|---|
| | 1232 | p_pes->p_first = p_pes->p_last = |
|---|
| | 1233 | input_NewPacket( out->p_sys->p_input->p_method_data, |
|---|
| | 1234 | p_block->i_buffer ); |
|---|
| | 1235 | |
|---|
| | 1236 | p_pes->i_nb_data = 1; |
|---|
| | 1237 | p_pes->i_pts = p_block->i_pts; |
|---|
| | 1238 | p_pes->i_dts = p_block->i_dts; |
|---|
| | 1239 | |
|---|
| | 1240 | p_pes->p_first->p_payload_end = |
|---|
| | 1241 | p_pes->p_first->p_payload_start + p_block->i_buffer; |
|---|
| | 1242 | memcpy( p_pes->p_first->p_payload_start, |
|---|
| | 1243 | p_block->p_buffer, p_block->i_buffer ); |
|---|
| | 1244 | |
|---|
| | 1245 | block_Release( p_block ); |
|---|
| | 1246 | |
|---|
| | 1247 | input_DecodePES( id->p_es->p_decoder_fifo, p_pes ); |
|---|
| | 1248 | } |
|---|
| | 1249 | else |
|---|
| | 1250 | { |
|---|
| | 1251 | block_Release( p_block ); |
|---|
| | 1252 | } |
|---|
| | 1253 | return VLC_SUCCESS; |
|---|
| | 1254 | } |
|---|
| | 1255 | |
|---|
| | 1256 | static int EsOutSendPES( es_out_t *out, es_out_id_t *id, pes_packet_t *p_pes ) |
|---|
| 1220 | 1257 | { |
|---|
| 1221 | 1258 | if( id->p_es->p_decoder_fifo ) |
|---|
| rd44f9d2 |
r231d047 |
|
| 3 | 3 | ***************************************************************************** |
|---|
| 4 | 4 | * Copyright (C) 1999-2001 VideoLAN |
|---|
| 5 | | * $Id: stream.c,v 1.6 2003/10/08 21:01:07 gbazin Exp $ |
|---|
| | 5 | * $Id: stream.c,v 1.7 2003/11/21 00:38:01 gbazin Exp $ |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * Authors: Laurent Aimar <fenrir@via.ecp.fr> |
|---|
| … | … | |
| 267 | 267 | |
|---|
| 268 | 268 | /** |
|---|
| | 269 | * Read "i_size" bytes and store them in a block_t. If less than "i_size" |
|---|
| | 270 | * bytes are available then return what is left and if nothing is availble, |
|---|
| | 271 | * return NULL. |
|---|
| | 272 | */ |
|---|
| | 273 | block_t *stream_Block( stream_t *s, int i_size ) |
|---|
| | 274 | { |
|---|
| | 275 | block_t *p_block; |
|---|
| | 276 | |
|---|
| | 277 | if( i_size <= 0 ) return NULL; |
|---|
| | 278 | if( !(p_block = block_New( s->p_input, i_size ) ) ) return NULL; |
|---|
| | 279 | |
|---|
| | 280 | p_block->i_buffer = stream_Read( s, p_block->p_buffer, i_size ); |
|---|
| | 281 | if( !p_block->i_buffer ) |
|---|
| | 282 | { |
|---|
| | 283 | block_Release( p_block ); |
|---|
| | 284 | p_block = NULL; |
|---|
| | 285 | } |
|---|
| | 286 | |
|---|
| | 287 | return p_block; |
|---|
| | 288 | } |
|---|
| | 289 | |
|---|
| | 290 | /** |
|---|
| 269 | 291 | * Read "i_size" bytes and store them in a pes_packet_t. Only fields |
|---|
| 270 | 292 | * p_first, p_last, i_nb_data, and i_pes_size are set. (Of course, |
|---|