Changeset 211100f4853aa5cfcc8a735355e0971fe84596c1

Show
Ignore:
Timestamp:
15/05/04 16:42:16 (5 years ago)
Author:
Laurent Aimar <fenrir@videolan.org>
git-committer:
Laurent Aimar <fenrir@videolan.org> 1084632136 +0000
git-parent:

[62b379567e145f0ae9eb6204fc86cdbbb11faeb6]

git-author:
Laurent Aimar <fenrir@videolan.org> 1084632136 +0000
Message:
  • all: improved perfs (using block_ChainLastAppend).
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/vlc_block.h

    r4fc24a1 r211100f  
    113113} 
    114114VLC_EXPORT( void,       block_ChainAppend,  ( block_t **, block_t * ) ); 
     115VLC_EXPORT( void,       block_ChainLastAppend,  ( block_t ***ppp_last, block_t * ) ); 
    115116VLC_EXPORT( void,       block_ChainRelease, ( block_t * ) ); 
    116117VLC_EXPORT( int,        block_ChainExtract, ( block_t *, void *, int ) ); 
  • modules/demux/ts.c

    rda6ecee r211100f  
    187187    es_out_id_t *id; 
    188188    block_t     *p_pes; 
     189    block_t     **pp_last; 
    189190 
    190191    es_mpeg4_descriptor_t *p_mpeg4desc; 
     192    int         b_gather; 
    191193} ts_es_t; 
    192194 
     
    791793        pid->es->id      = NULL; 
    792794        pid->es->p_pes   = NULL; 
     795        pid->es->pp_last = &pid->es->p_pes; 
    793796        pid->es->p_mpeg4desc = NULL; 
     797        pid->es->b_gather = VLC_FALSE; 
    794798    } 
    795799} 
     
    858862    /* remove the pes from pid */ 
    859863    pid->es->p_pes = NULL; 
     864    pid->es->pp_last = &pid->es->p_pes; 
    860865 
    861866    /* FIXME find real max size */ 
     
    10041009        } 
    10051010 
    1006         /* For mpeg4/mscodec we first gather the packet. 
    1007          * This will make ffmpeg a lot happier */ 
    1008         p_block = block_ChainGather( p_pes ); 
     1011        if( pid->es->b_gather ) 
     1012        { 
     1013            /* For mpeg4/mscodec we first gather the packet. 
     1014             * This will make ffmpeg a lot happier */ 
     1015            p_block = block_ChainGather( p_pes ); 
     1016        } 
     1017        else 
     1018        { 
     1019            p_block = p_pes; 
     1020        } 
    10091021 
    10101022        for( i = 0; i < pid->i_extra_es; i++ ) 
     
    11551167            } 
    11561168 
    1157             pid->es->p_pes = p_bk
     1169            block_ChainLastAppend( &pid->es->pp_last, p_bk )
    11581170        } 
    11591171        else 
     
    11681180                /* TODO check if when have gathered enough packets to form a 
    11691181                 * PES (ie read PES size)*/ 
    1170                 block_ChainAppend( &pid->es->p_pes, p_bk ); 
     1182                block_ChainLastAppend( &pid->es->pp_last, p_bk ); 
    11711183            } 
    11721184        } 
     
    11971209        case 0x10:  /* MPEG4 (video) */ 
    11981210            es_format_Init( fmt, VIDEO_ES, VLC_FOURCC( 'm', 'p', '4', 'v' ) ); 
     1211            pid->es->b_gather = VLC_TRUE; 
    11991212            break; 
    12001213        case 0x1B:  /* H264 <- check transport syntax/needed descriptor */ 
     
    12311244            break; 
    12321245 
     1246        case 0xa0:  /* MSCODEC vlc (video) (fixed later) */ 
     1247            es_format_Init( fmt, UNKNOWN_ES, 0 ); 
     1248            pid->es->b_gather = VLC_TRUE; 
     1249            break; 
     1250 
    12331251        case 0x06:  /* PES_PRIVATE  (fixed later) */ 
    1234         case 0xa0:  /* MSCODEC vlc (video) (fixed later) */ 
    12351252        default: 
    12361253            es_format_Init( fmt, UNKNOWN_ES, 0 ); 
     
    18501867                        p_es->id = NULL; 
    18511868                        p_es->p_pes = NULL; 
     1869                        p_es->pp_last = &p_es->p_pes; 
    18521870                        p_es->p_mpeg4desc = NULL; 
    18531871 
  • modules/packetizer/mpegvideo.c

    r694b417 r211100f  
    8383    /* Current frame being built */ 
    8484    block_t    *p_frame; 
     85    block_t    **pp_last; 
     86 
    8587    vlc_bool_t b_frame_slice; 
    8688    mtime_t i_pts; 
     
    148150    p_sys->p_ext = NULL; 
    149151    p_sys->p_frame = NULL; 
     152    p_sys->pp_last = &p_sys->p_frame; 
    150153    p_sys->b_frame_slice = VLC_FALSE; 
    151154 
     
    217220        if( p_sys->p_frame ) block_ChainRelease( p_sys->p_frame ); 
    218221        p_sys->p_frame = NULL; 
     222        p_sys->pp_last = &p_sys->p_frame; 
    219223        p_sys->b_frame_slice = VLC_FALSE; 
    220224        block_Release( *pp_block ); 
     
    333337        if( p_sys->p_frame ) block_ChainRelease( p_sys->p_frame ); 
    334338        p_sys->p_frame = NULL; 
     339        p_sys->pp_last = &p_sys->p_frame; 
    335340        p_sys->b_frame_slice = VLC_FALSE; 
    336341 
     
    441446        /* Reset context */ 
    442447        p_sys->p_frame = NULL; 
     448        p_sys->pp_last = &p_sys->p_frame; 
    443449        p_sys->b_frame_slice = VLC_FALSE; 
    444450    } 
     
    454460        { 
    455461            /* Usefull for mpeg1: repeat sequence header every second */ 
    456             block_ChainAppend( &p_sys->p_frame, 
    457                                block_Duplicate( p_sys->p_seq ) ); 
     462            block_ChainLastAppend( &p_sys->pp_last, block_Duplicate( p_sys->p_seq ) ); 
    458463            if( p_sys->p_ext ) 
    459464            { 
    460                 block_ChainAppend( &p_sys->p_frame, 
    461                                    block_Duplicate( p_sys->p_ext ) ); 
     465                block_ChainLastAppend( &p_sys->pp_last, block_Duplicate( p_sys->p_ext ) ); 
    462466            } 
    463467 
     
    573577 
    574578    /* Append the block */ 
    575     block_ChainAppend( &p_sys->p_frame, p_frag ); 
     579    block_ChainLastAppend( &p_sys->pp_last, p_frag ); 
    576580 
    577581    return p_pic; 
  • src/misc/block.c

    ra7bac1e r211100f  
    240240void block_ChainAppend( block_t **pp_list, block_t *p_block ) 
    241241{ 
    242  
    243242    if( *pp_list == NULL ) 
    244243    { 
     
    255254        p->p_next = p_block; 
    256255    } 
     256} 
     257 
     258void block_ChainLastAppend( block_t ***ppp_last, block_t *p_block  ) 
     259{ 
     260    block_t *p_last = p_block; 
     261 
     262    /* Append the block */ 
     263    **ppp_last = p_block; 
     264 
     265    /* Update last pointer */ 
     266    while( p_last->p_next ) p_last = p_last->p_next; 
     267    *ppp_last = &p_last->p_next; 
    257268} 
    258269