Changeset 50fd08c33f968d4050b63344a1765fa70ecf71ec

Show
Ignore:
Timestamp:
09/14/05 00:01:20 (3 years ago)
Author:
Gildas Bazin <gbazin@videolan.org>
git-committer:
Gildas Bazin <gbazin@videolan.org> 1126648880 +0000
git-parent:

[4f9e5a30481b8a7babaeda8dbe46eea3323f3a1d]

git-author:
Gildas Bazin <gbazin@videolan.org> 1126648880 +0000
Message:

* modules/packetizer/h264.c: small fix to annexe-b packetizer.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/packetizer/h264.c

    r29a8ff8 r50fd08c  
    7373    /* avcC data */ 
    7474    int i_avcC_length_size; 
     75    block_t *p_sps; 
     76    block_t *p_pps; 
    7577 
    7678    /* Useful values of the Sequence Parameter Set */ 
     
    153155    p_sys->b_sps   = VLC_FALSE; 
    154156    p_sys->b_pps   = VLC_FALSE; 
     157    p_sys->p_sps   = 0; 
     158    p_sys->p_pps   = 0; 
    155159 
    156160    p_sys->i_nal_type = -1; 
     
    183187            block_t *p_sps = nal_get_annexeb( p_dec, p + 2, i_length ); 
    184188 
     189            p_sys->p_sps = block_Duplicate( p_sps ); 
    185190            p_sps->i_pts = p_sps->i_dts = mdate(); 
    186191            ParseNALBlock( p_dec, p_sps ); 
     
    194199            block_t *p_pps = nal_get_annexeb( p_dec, p + 2, i_length ); 
    195200 
     201            p_sys->p_pps = block_Duplicate( p_pps ); 
    196202            p_pps->i_pts = p_pps->i_dts = mdate(); 
    197203            ParseNALBlock( p_dec, p_pps ); 
     
    237243    decoder_sys_t *p_sys = p_dec->p_sys; 
    238244 
     245    if( p_sys->p_sps ) block_Release( p_sys->p_sps ); 
     246    if( p_sys->p_pps ) block_Release( p_sys->p_pps ); 
    239247    block_BytestreamRelease( &p_sys->bytestream ); 
    240248    free( p_sys ); 
     
    282290                /* Find the next startcode */ 
    283291                if( block_FindStartcodeFromOffset( &p_sys->bytestream, 
    284                       &p_sys->i_offset, p_sys->startcode, 3 ) != VLC_SUCCESS) 
     292                      &p_sys->i_offset, p_sys->startcode+1, 3 ) != VLC_SUCCESS) 
    285293                { 
    286                     if( block_FindStartcodeFromOffset( &p_sys->bytestream, 
    287                           &p_sys->i_offset, p_sys->startcode+1, 3 ) != 
    288                         VLC_SUCCESS ) 
    289                     { 
    290                         /* Need more data */ 
    291                         return NULL; 
    292                     } 
     294                    /* Need more data */ 
     295                    return NULL; 
    293296                } 
    294297 
     
    301304                                p_pic->i_buffer ); 
    302305 
     306                if( !p_pic->p_buffer[p_pic->i_buffer-1] ) p_pic->i_buffer--; 
    303307                p_sys->i_offset = 0; 
    304308 
     
    338342    p_block = *pp_block; 
    339343    *pp_block = NULL; 
     344 
     345#if 0 
     346    if( //(p_block->i_flags & BLOCK_FLAG_TYPE_I) && 
     347        p_sys->p_sps && p_sys->p_pps ) 
     348    { 
     349        block_t *p_pic; 
     350        block_t *p_sps = block_Duplicate( p_sys->p_sps ); 
     351        block_t *p_pps = block_Duplicate( p_sys->p_pps ); 
     352        p_sps->i_dts = p_pps->i_dts = p_block->i_dts; 
     353        p_sps->i_pts = p_pps->i_pts = p_block->i_pts; 
     354        p_pic = ParseNALBlock( p_dec, p_sps ); 
     355        if( p_pic ) block_ChainAppend( &p_ret, p_pic ); 
     356        p_pic = ParseNALBlock( p_dec, p_pps ); 
     357        if( p_pic ) block_ChainAppend( &p_ret, p_pic ); 
     358    } 
     359#endif 
    340360 
    341361    for( p = p_block->p_buffer; p < &p_block->p_buffer[p_block->i_buffer]; ) 
     
    535555        p_sys->i_nal_type = i_nal_type; 
    536556 
    537         if( b_pic && p_sys->b_slice ) 
    538             OUTPUT; 
     557        if( b_pic && p_sys->b_slice ) OUTPUT; 
    539558 
    540559        p_sys->b_slice = VLC_TRUE; 
     
    549568        int i_tmp; 
    550569 
    551         if( !p_sys->b_sps ) 
    552             msg_Dbg( p_dec, "found NAL_SPS" ); 
     570        if( !p_sys->b_sps ) msg_Dbg( p_dec, "found NAL_SPS" ); 
    553571 
    554572        p_sys->b_sps = VLC_TRUE; 
     
    650668                } 
    651669                if( h != 0 ) 
    652                     p_dec->fmt_out.video.i_aspect = 
    653                         VOUT_ASPECT_FACTOR * w / h * p_dec->fmt_out.video.i_width / 
     670                    p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR * w / 
     671                        h * p_dec->fmt_out.video.i_width / 
    654672                        p_dec->fmt_out.video.i_height; 
    655673                else 
     
    661679 
    662680 
    663         if( p_sys->b_slice ) 
    664             OUTPUT; 
     681        if( p_sys->b_slice ) OUTPUT; 
    665682    } 
    666683    else if( i_nal_type == NAL_PPS ) 
     
    669686        bs_init( &s, &p_frag->p_buffer[4], p_frag->i_buffer - 4 ); 
    670687 
    671         if( !p_sys->b_pps ) 
    672             msg_Dbg( p_dec, "found NAL_PPS" ); 
     688        if( !p_sys->b_pps ) msg_Dbg( p_dec, "found NAL_PPS" ); 
    673689        p_sys->b_pps = VLC_TRUE; 
    674690 
    675691        /* TODO */ 
    676692 
    677         if( p_sys->b_slice ) 
    678             OUTPUT; 
     693        if( p_sys->b_slice ) OUTPUT; 
    679694    } 
    680695    else if( i_nal_type == NAL_AU_DELIMITER || 
     
    682697             ( i_nal_type >= 13 && i_nal_type <= 18 ) ) 
    683698    { 
    684         if( p_sys->b_slice ) 
    685             OUTPUT; 
     699        if( p_sys->b_slice ) OUTPUT; 
    686700    } 
    687701