Changeset 231d0470d084693eb25042ef22a111d21c63f241

Show
Ignore:
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
  • include/ninput.h

    rb38ec88 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    3636{ 
    3737    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 * ); 
    3940    void         (*pf_del)    ( es_out_t *, es_out_id_t * ); 
    4041    int          (*pf_control)( es_out_t *, int i_query, va_list ); 
     
    5152    out->pf_del( out, id ); 
    5253} 
    53 static inline int es_out_Send( es_out_t *out, es_out_id_t *id, pes_packet_t *p_pes ) 
     54static inline int es_out_Send( es_out_t *out, es_out_id_t *id, 
     55                   block_t *p_block ) 
    5456{ 
    55     return out->pf_send( out, id, p_pes ); 
     57    return out->pf_send( out, id, p_block ); 
     58
     59static 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 ); 
    5663} 
    5764static inline int es_out_vaControl( es_out_t *out, int i_query, va_list args ) 
     
    102109VLC_EXPORT( data_packet_t *,stream_DataPacket,      ( stream_t *, int i_size, vlc_bool_t b_force ) ); 
    103110VLC_EXPORT( pes_packet_t *, stream_PesPacket,       ( stream_t *, int i_size ) ); 
     111VLC_EXPORT( block_t *,      stream_Block,           ( stream_t *, int i_size ) ); 
    104112 
    105113static int64_t inline stream_Tell( stream_t *s ) 
  • include/vlc_common.h

    r1e9f16e r231d047  
    44 ***************************************************************************** 
    55 * 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 $ 
    77 * 
    88 * Authors: Samuel Hocevar <sam@via.ecp.fr> 
     
    5252 * Required system headers 
    5353 *****************************************************************************/ 
     54#include <stdlib.h> 
    5455#include <stdarg.h> 
    5556 
  • modules/demux/a52sys.c

    r1e9f16e r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    178178{ 
    179179    demux_sys_t  *p_sys = p_input->p_demux_data; 
    180     pes_packet_t *p_pes
     180    block_t *p_block
    181181 
    182182    int i_channels, i_sample_rate, i_frame_size; 
     
    228228                          p_sys->i_time * 9 / 100 ); 
    229229 
    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 ) 
    231231    { 
    232232        msg_Warn( p_input, "cannot read data" ); 
     
    234234    } 
    235235 
    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, 
    238238                                     p_input->stream.p_selected_program, 
    239239                                     p_sys->i_time * 9 / 100 ); 
    240240 
    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 ); 
    242242 
    243243    p_sys->i_time += (mtime_t)1000000 * 
  • modules/demux/aac.c

    r1e9f16e r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    195195{ 
    196196    demux_sys_t  *p_sys = p_input->p_demux_data; 
    197     pes_packet_t *p_pes
     197    block_t *p_block
    198198 
    199199    uint8_t      h[8]; 
     
    244244                          p_sys->i_time * 9 / 100 ); 
    245245 
    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 ) 
    247247    { 
    248248        msg_Warn( p_input, "cannot read data" ); 
     
    250250    } 
    251251 
    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, 
    254254                                     p_input->stream.p_selected_program, 
    255255                                     p_sys->i_time * 9 / 100 ); 
    256256 
    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 ); 
    258258 
    259259    p_sys->i_time += (mtime_t)1000000 * 
  • modules/demux/asf/asf.c

    rb38ec88 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    717717                if( p_stream->p_pes->i_pes_size > 0 ) 
    718718                { 
    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 ); 
    720720                    p_stream->p_pes = NULL; 
    721721                } 
  • modules/demux/au.c

    raed1e85 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    326326{ 
    327327    demux_sys_t  *p_sys = p_input->p_demux_data; 
    328     pes_packet_t *p_pes
     328    block_t *p_block
    329329 
    330330    if( p_input->stream.p_selected_program->i_synchro_state == SYNCHRO_REINIT ) 
     
    346346                          p_sys->i_time * 9 / 100 ); 
    347347 
    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 ) 
    349349    { 
    350350        msg_Warn( p_input, "cannot read data" ); 
    351351        return 0; 
    352352    } 
    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, 
    355355                                     p_input->stream.p_selected_program, 
    356356                                     p_sys->i_time * 9 / 100 ); 
    357357 
    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 ); 
    359359 
    360360    p_sys->i_time += p_sys->i_frame_length; 
  • modules/demux/avi/avi.c

    rb38ec88 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
    77 * 
     
    777777        if( b_play_audio || tk->i_cat != AUDIO_ES ) 
    778778        { 
    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 ); 
    780780        } 
    781781        else 
     
    903903 
    904904                    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 ); 
    906906                } 
    907907                else 
  • modules/demux/livedotcom.cpp

    r571f69b r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    855855    input_thread_t *p_input = tk->p_input; 
    856856    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; 
    861860 
    862861    if( tk->b_quicktime && tk->p_es == NULL ) 
     
    889888             pts.tv_sec * 1000000LL + pts.tv_usec ); 
    890889#endif 
    891     /* Create a PES */ 
    892     if( ( p_pes = input_NewPES( p_input->p_method_data ) ) == NULL ) 
    893     { 
    894         return; 
    895     } 
    896890    if( i_size > 65536 ) 
    897891    { 
     
    899893    } 
    900894    /* 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; 
    910899 
    911900    if( i_pts != tk->i_pts ) 
    912901    { 
    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, 
    915904                                         p_input->stream.p_selected_program, 
    916905                                         i_pts * 9 / 100 ); 
     
    918907    else 
    919908    { 
    920         p_pes->i_dts = 0; 
    921         p_pes->i_pts = 0; 
     909        p_block->i_dts = 0; 
     910        p_block->i_pts = 0; 
    922911    } 
    923912    //fprintf( stderr, "tk -> dpts=%lld\n", i_pts - tk->i_pts ); 
    924913 
    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 ); 
    926915 
    927916    /* warm that's ok */ 
  • modules/demux/mkv.cpp

    rb38ec88 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    13701370} 
    13711371 
    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; 
     1372static 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; 
    13931379} 
    13941380 
     
    14311417    if( !tk.b_inited && tk.i_data_init > 0 ) 
    14321418    { 
    1433         pes_packet_t *p_init; 
     1419        block_t *p_init; 
    14341420 
    14351421        msg_Dbg( p_input, "sending header (%d bytes)", tk.i_data_init ); 
     
    14631449            i_size[2] = tk.i_data_init - i_offset - i_size[0] - i_size[1]; 
    14641450 
    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] ); 
    14661452            if( p_init ) 
    14671453            { 
    14681454                es_out_Send( p_input->p_es_out, tk.p_es, p_init ); 
    14691455            } 
    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] ); 
    14711457            if( p_init ) 
    14721458            { 
    14731459                es_out_Send( p_input->p_es_out, tk.p_es, p_init ); 
    14741460            } 
    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] ); 
    14761462            if( p_init ) 
    14771463            { 
     
    14811467        else 
    14821468        { 
    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 ); 
    14841470            if( p_init ) 
    14851471            { 
     
    14931479    for( i = 0; i < block->NumberFrames(); i++ ) 
    14941480    { 
    1495         pes_packet_t *p_pes
     1481        block_t *p_block
    14961482        DataBuffer &data = block->GetBuffer(i); 
    14971483 
    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 ) 
    15001486        { 
    15011487            break; 
    15021488        } 
    15031489 
    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; 
    15061492 
    15071493        if( tk.fmt.i_cat == SPU_ES && strcmp( tk.psz_codec, "S_VOBSUB" ) ) 
     
    15091495            if( i_duration > 0 ) 
    15101496            { 
    1511                 p_pes->i_dts += i_duration * 1000; 
     1497                p_block->i_dts += i_duration * 1000; 
    15121498            } 
    15131499            else 
    15141500            { 
    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 ); 
    15241510 
    15251511        /* use time stamp only for first block */ 
  • modules/demux/util/sub.c

    rb38ec88 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    519519           p_sub->subtitle[p_sub->i_subtitle].i_start < i_maxdate ) 
    520520    { 
    521         pes_packet_t    *p_pes; 
    522         data_packet_t   *p_data; 
    523  
     521        block_t *p_block; 
    524522        int i_len; 
    525523 
     
    532530            continue; 
    533531        } 
    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 ) ) ) 
    535534        { 
    536535            p_sub->i_subtitle++; 
     
    538537        } 
    539538 
    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 = 
    550540            input_ClockGetTS( p_sub->p_input, 
    551541                              p_sub->p_input->stream.p_selected_program, 
     
    556546             * i_dts means end of display... 
    557547             */ 
    558             p_pes->i_dts = 
     548            p_block->i_dts = 
    559549                input_ClockGetTS( p_sub->p_input, 
    560550                              p_sub->p_input->stream.p_selected_program, 
     
    563553        else 
    564554        { 
    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 ); 
    580564        } 
    581565        else 
    582566        { 
    583             input_DeletePES( p_sub->p_input->p_method_data, p_pes ); 
     567            block_Release( p_block ); 
    584568        } 
    585569 
  • modules/demux/wav.c

    raed1e85 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    231231    demux_sys_t  *p_sys = p_input->p_demux_data; 
    232232    int64_t      i_pos; 
    233     pes_packet_t *p_pes
     233    block_t      *p_block
    234234 
    235235    if( p_input->stream.p_selected_program->i_synchro_state == SYNCHRO_REINIT ) 
     
    259259    } 
    260260 
    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 ) 
    262262    { 
    263263        msg_Warn( p_input, "cannot read data" ); 
    264264        return 0; 
    265265    } 
    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, 
    268268                                     p_input->stream.p_selected_program, 
    269269                                     p_sys->i_time * 9 / 100 ); 
    270270 
    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 ); 
    272272 
    273273    p_sys->i_time += p_sys->i_frame_length; 
  • src/input/input.c

    rb38ec88 r231d047  
    55 ***************************************************************************** 
    66 * 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 $ 
    88 * 
    99 * Authors: Christophe Massiot <massiot@via.ecp.fr> 
     
    989989 
    990990static 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 * ); 
     991static int          EsOutSend   ( es_out_t *, es_out_id_t *, block_t * ); 
     992static int          EsOutSendPES( es_out_t *, es_out_id_t *, pes_packet_t * ); 
    992993static void         EsOutDel    ( es_out_t *, es_out_id_t * ); 
    993994static int          EsOutControl( es_out_t *, int i_query, va_list ); 
     
    9991000    out->pf_add     = EsOutAdd; 
    10001001    out->pf_send    = EsOutSend; 
     1002    out->pf_send_pes= EsOutSendPES; 
    10011003    out->pf_del     = EsOutDel; 
    10021004    out->pf_control = EsOutControl; 
     
    12171219} 
    12181220 
    1219 static int EsOutSend( es_out_t *out, es_out_id_t *id, pes_packet_t *p_pes ) 
     1221static 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 
     1256static int EsOutSendPES( es_out_t *out, es_out_id_t *id, pes_packet_t *p_pes ) 
    12201257{ 
    12211258    if( id->p_es->p_decoder_fifo ) 
  • src/input/stream.c

    rd44f9d2 r231d047  
    33 ***************************************************************************** 
    44 * 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 $ 
    66 * 
    77 * Authors: Laurent Aimar <fenrir@via.ecp.fr> 
     
    267267 
    268268/** 
     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 */ 
     273block_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/** 
    269291 * Read "i_size" bytes and store them in a pes_packet_t.  Only fields 
    270292 * p_first, p_last, i_nb_data, and i_pes_size are set.  (Of course,