Changeset 50fd08c33f968d4050b63344a1765fa70ecf71ec
- 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
| r29a8ff8 |
r50fd08c |
|
| 73 | 73 | /* avcC data */ |
|---|
| 74 | 74 | int i_avcC_length_size; |
|---|
| | 75 | block_t *p_sps; |
|---|
| | 76 | block_t *p_pps; |
|---|
| 75 | 77 | |
|---|
| 76 | 78 | /* Useful values of the Sequence Parameter Set */ |
|---|
| … | … | |
| 153 | 155 | p_sys->b_sps = VLC_FALSE; |
|---|
| 154 | 156 | p_sys->b_pps = VLC_FALSE; |
|---|
| | 157 | p_sys->p_sps = 0; |
|---|
| | 158 | p_sys->p_pps = 0; |
|---|
| 155 | 159 | |
|---|
| 156 | 160 | p_sys->i_nal_type = -1; |
|---|
| … | … | |
| 183 | 187 | block_t *p_sps = nal_get_annexeb( p_dec, p + 2, i_length ); |
|---|
| 184 | 188 | |
|---|
| | 189 | p_sys->p_sps = block_Duplicate( p_sps ); |
|---|
| 185 | 190 | p_sps->i_pts = p_sps->i_dts = mdate(); |
|---|
| 186 | 191 | ParseNALBlock( p_dec, p_sps ); |
|---|
| … | … | |
| 194 | 199 | block_t *p_pps = nal_get_annexeb( p_dec, p + 2, i_length ); |
|---|
| 195 | 200 | |
|---|
| | 201 | p_sys->p_pps = block_Duplicate( p_pps ); |
|---|
| 196 | 202 | p_pps->i_pts = p_pps->i_dts = mdate(); |
|---|
| 197 | 203 | ParseNALBlock( p_dec, p_pps ); |
|---|
| … | … | |
| 237 | 243 | decoder_sys_t *p_sys = p_dec->p_sys; |
|---|
| 238 | 244 | |
|---|
| | 245 | if( p_sys->p_sps ) block_Release( p_sys->p_sps ); |
|---|
| | 246 | if( p_sys->p_pps ) block_Release( p_sys->p_pps ); |
|---|
| 239 | 247 | block_BytestreamRelease( &p_sys->bytestream ); |
|---|
| 240 | 248 | free( p_sys ); |
|---|
| … | … | |
| 282 | 290 | /* Find the next startcode */ |
|---|
| 283 | 291 | 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) |
|---|
| 285 | 293 | { |
|---|
| 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; |
|---|
| 293 | 296 | } |
|---|
| 294 | 297 | |
|---|
| … | … | |
| 301 | 304 | p_pic->i_buffer ); |
|---|
| 302 | 305 | |
|---|
| | 306 | if( !p_pic->p_buffer[p_pic->i_buffer-1] ) p_pic->i_buffer--; |
|---|
| 303 | 307 | p_sys->i_offset = 0; |
|---|
| 304 | 308 | |
|---|
| … | … | |
| 338 | 342 | p_block = *pp_block; |
|---|
| 339 | 343 | *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 |
|---|
| 340 | 360 | |
|---|
| 341 | 361 | for( p = p_block->p_buffer; p < &p_block->p_buffer[p_block->i_buffer]; ) |
|---|
| … | … | |
| 535 | 555 | p_sys->i_nal_type = i_nal_type; |
|---|
| 536 | 556 | |
|---|
| 537 | | if( b_pic && p_sys->b_slice ) |
|---|
| 538 | | OUTPUT; |
|---|
| | 557 | if( b_pic && p_sys->b_slice ) OUTPUT; |
|---|
| 539 | 558 | |
|---|
| 540 | 559 | p_sys->b_slice = VLC_TRUE; |
|---|
| … | … | |
| 549 | 568 | int i_tmp; |
|---|
| 550 | 569 | |
|---|
| 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" ); |
|---|
| 553 | 571 | |
|---|
| 554 | 572 | p_sys->b_sps = VLC_TRUE; |
|---|
| … | … | |
| 650 | 668 | } |
|---|
| 651 | 669 | 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 / |
|---|
| 654 | 672 | p_dec->fmt_out.video.i_height; |
|---|
| 655 | 673 | else |
|---|
| … | … | |
| 661 | 679 | |
|---|
| 662 | 680 | |
|---|
| 663 | | if( p_sys->b_slice ) |
|---|
| 664 | | OUTPUT; |
|---|
| | 681 | if( p_sys->b_slice ) OUTPUT; |
|---|
| 665 | 682 | } |
|---|
| 666 | 683 | else if( i_nal_type == NAL_PPS ) |
|---|
| … | … | |
| 669 | 686 | bs_init( &s, &p_frag->p_buffer[4], p_frag->i_buffer - 4 ); |
|---|
| 670 | 687 | |
|---|
| 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" ); |
|---|
| 673 | 689 | p_sys->b_pps = VLC_TRUE; |
|---|
| 674 | 690 | |
|---|
| 675 | 691 | /* TODO */ |
|---|
| 676 | 692 | |
|---|
| 677 | | if( p_sys->b_slice ) |
|---|
| 678 | | OUTPUT; |
|---|
| | 693 | if( p_sys->b_slice ) OUTPUT; |
|---|
| 679 | 694 | } |
|---|
| 680 | 695 | else if( i_nal_type == NAL_AU_DELIMITER || |
|---|
| … | … | |
| 682 | 697 | ( i_nal_type >= 13 && i_nal_type <= 18 ) ) |
|---|
| 683 | 698 | { |
|---|
| 684 | | if( p_sys->b_slice ) |
|---|
| 685 | | OUTPUT; |
|---|
| | 699 | if( p_sys->b_slice ) OUTPUT; |
|---|
| 686 | 700 | } |
|---|
| 687 | 701 | |
|---|