Changeset 779340cfa2ce06d7226e037765807edd24942885
- Timestamp:
- 07/03/04 23:34:22 (5 years ago)
- git-parent:
- Files:
-
- include/vlc_codec.h (modified) (2 diffs)
- include/vlc_es.h (modified) (4 diffs)
- modules/codec/faad.c (modified) (2 diffs)
- modules/codec/ffmpeg/ffmpeg.c (modified) (2 diffs)
- modules/demux/ps.h (modified) (2 diffs)
- modules/demux/ts.c (modified) (2 diffs)
- src/input/es_out.c (modified) (3 diffs)
- src/input/input_dec.c (modified) (15 diffs)
- src/input/input_programs.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
include/vlc_codec.h
r8c816fe r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 1999-2003 VideoLAN 5 * $Id : vlc_codec.h,v 1.8 2004/02/20 18:34:28 massiot Exp$5 * $Id$ 6 6 * 7 7 * Authors: Gildas Bazin <gbazin@netcourrier.com> … … 53 53 void ( * pf_decode_sub) ( decoder_t *, block_t ** ); 54 54 block_t * ( * pf_packetize ) ( decoder_t *, block_t ** ); 55 56 /* Some decoders only accept packetized data (ie. not truncated) */ 57 vlc_bool_t b_need_packetized; 55 58 56 59 /* Input format ie from demuxer (XXX: a lot of field could be invalid) */ include/vlc_es.h
ra02533c r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 1999-2001 VideoLAN 5 * $Id : vlc_es.h,v 1.10 2004/02/07 00:33:08 gbazin Exp$5 * $Id$ 6 6 * 7 7 * Authors: Laurent Aimar <fenrir@via.ecp.fr> … … 143 143 subs_format_t subs; 144 144 145 int i_bitrate; 146 145 int i_bitrate; 146 147 vlc_bool_t b_packetized; /* wether the data is packetized 148 (ie. not truncated) */ 147 149 int i_extra; 148 150 void *p_extra; … … 172 174 memset( &fmt->subs, 0, sizeof(subs_format_t) ); 173 175 176 fmt->b_packetized = VLC_TRUE; 174 177 fmt->i_bitrate = 0; 175 178 fmt->i_extra = 0; … … 186 189 if( src->i_extra > 0 ) 187 190 { 191 dst->i_extra = src->i_extra; 188 192 dst->p_extra = malloc( src->i_extra ); 189 memcpy( dst->p_extra, src->p_extra, 190 src->i_extra ); 193 memcpy( dst->p_extra, src->p_extra, src->i_extra ); 191 194 } 192 195 else modules/codec/faad.c
rde81c25 r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 2001, 2003 VideoLAN 5 * $Id : faad.c,v 1.14 2004/02/25 17:48:52 fenrir Exp$5 * $Id$ 6 6 * 7 7 * Authors: Laurent Aimar <fenrir@via.ecp.fr> … … 162 162 p_sys->p_buffer = 0; 163 163 164 /* Faad2 can't deal with truncated data (eg. from MPEG TS) */ 165 p_dec->b_need_packetized = VLC_TRUE; 166 164 167 return VLC_SUCCESS; 165 168 } modules/codec/ffmpeg/ffmpeg.c
r133d08f r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 1999-2001 VideoLAN 5 * $Id : ffmpeg.c,v 1.80 2004/01/26 18:57:18 gbazin Exp$5 * $Id$ 6 6 * 7 7 * Authors: Laurent Aimar <fenrir@via.ecp.fr> … … 181 181 { 182 182 case VIDEO_ES: 183 p_dec->b_need_packetized = VLC_TRUE; 183 184 p_dec->pf_decode_video = E_(DecodeVideo); 184 185 i_result = E_( InitVideoDec )( p_dec, p_context, p_codec, modules/demux/ps.h
r1570d3b r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 2004 VideoLAN 5 * $Id : ps.h,v 1.5 2004/01/30 01:09:24 fenrir Exp$5 * $Id$ 6 6 * 7 7 * Authors: Laurent Aimar <fenrir@via.ecp.fr> … … 102 102 } 103 103 } 104 105 /* PES packets usually contain truncated frames */ 106 tk->fmt.b_packetized = VLC_FALSE; 107 104 108 return VLC_SUCCESS; 105 109 } modules/demux/ts.c
rb72b93e r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 2004 VideoLAN 5 * $Id : ts.c,v 1.13 2004/03/03 01:26:49 fenrir Exp$5 * $Id$ 6 6 * 7 7 * Authors: Laurent Aimar <fenrir@via.ecp.fr> … … 1148 1148 break; 1149 1149 } 1150 1151 /* PES packets usually contain truncated frames */ 1152 fmt->b_packetized = VLC_FALSE; 1150 1153 1151 1154 return fmt->i_cat == UNKNOWN_ES ? VLC_EGENERIC : VLC_SUCCESS ; src/input/es_out.c
rb99b127 r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 2003-2004 VideoLAN 5 * $Id : es_out.c,v 1.25 2004/01/31 20:21:47 fenrir Exp$5 * $Id$ 6 6 * 7 7 * Authors: Laurent Aimar <fenrir@via.ecp.fr> … … 332 332 switch( fmt->i_cat ) 333 333 { 334 case AUDIO_ES: 335 { 336 WAVEFORMATEX *p_wf = 337 malloc( sizeof( WAVEFORMATEX ) + fmt->i_extra); 338 339 p_wf->wFormatTag = WAVE_FORMAT_UNKNOWN; 340 p_wf->nChannels = fmt->audio.i_channels; 341 p_wf->nSamplesPerSec = fmt->audio.i_rate; 342 p_wf->nAvgBytesPerSec = fmt->i_bitrate / 8; 343 p_wf->nBlockAlign = fmt->audio.i_blockalign; 344 p_wf->wBitsPerSample = fmt->audio.i_bitspersample; 345 p_wf->cbSize = fmt->i_extra; 346 if( fmt->i_extra > 0 ) 347 { 348 memcpy( &p_wf[1], fmt->p_extra, fmt->i_extra ); 349 } 350 es->p_es->p_waveformatex = p_wf; 351 352 es->i_channel = p_sys->i_audio; 353 break; 354 } 355 case VIDEO_ES: 356 { 357 BITMAPINFOHEADER *p_bih = malloc( sizeof( BITMAPINFOHEADER ) + 358 fmt->i_extra ); 359 p_bih->biSize = sizeof(BITMAPINFOHEADER) + fmt->i_extra; 360 p_bih->biWidth = fmt->video.i_width; 361 p_bih->biHeight = fmt->video.i_height; 362 p_bih->biPlanes = 1; 363 p_bih->biBitCount = 24; 364 p_bih->biCompression = fmt->i_codec; 365 p_bih->biSizeImage = fmt->video.i_width * 366 fmt->video.i_height; 367 p_bih->biXPelsPerMeter = 0; 368 p_bih->biYPelsPerMeter = 0; 369 p_bih->biClrUsed = 0; 370 p_bih->biClrImportant = 0; 371 372 if( fmt->i_extra > 0 ) 373 { 374 memcpy( &p_bih[1], fmt->p_extra, fmt->i_extra ); 375 } 376 es->p_es->p_bitmapinfoheader = p_bih; 377 378 es->i_channel = p_sys->i_video; 379 break; 380 } 381 case SPU_ES: 334 case AUDIO_ES: 335 es->i_channel = p_sys->i_audio; 336 break; 337 338 case VIDEO_ES: 339 es->i_channel = p_sys->i_video; 340 break; 341 342 case SPU_ES: 382 343 { 383 344 subtitle_data_t *p_sub = malloc( sizeof( subtitle_data_t ) ); … … 397 358 } 398 359 399 default:400 es->i_channel = 0;401 break;360 default: 361 es->i_channel = 0; 362 break; 402 363 } 403 364 src/input/input_dec.c
r6c95578 r779340c 72 72 sout_packetizer_input_t *p_sout_input; 73 73 74 /* Some decoders require already packetized data (ie. not truncated) */ 75 decoder_t *p_packetizer; 76 74 77 /* Current format in use by the output */ 75 78 video_format_t video; … … 95 98 decoder_t * input_RunDecoder( input_thread_t * p_input, es_descriptor_t * p_es ) 96 99 { 97 decoder_t *p_dec = NULL;98 vlc_value_t val;100 decoder_t *p_dec = NULL; 101 vlc_value_t val; 99 102 100 103 /* If we are in sout mode, search for packetizer module */ … … 108 111 return NULL; 109 112 } 110 111 p_dec->p_module = module_Need( p_dec, "packetizer", "$packetizer", 0 );112 113 } 113 114 else … … 120 121 return NULL; 121 122 } 122 123 /* default Get a suitable decoder module */124 p_dec->p_module = module_Need( p_dec, "decoder", "$codec", 0 );125 123 } 126 124 … … 163 161 } 164 162 } 163 164 /* Select a new ES */ 165 INSERT_ELEM( p_input->stream.pp_selected_es, 166 p_input->stream.i_selected_es_number, 167 p_input->stream.i_selected_es_number, 168 p_es ); 165 169 166 170 p_input->stream.b_changed = 1; … … 399 403 p_dec->pf_packetize = 0; 400 404 401 /* Select a new ES */402 INSERT_ELEM( p_input->stream.pp_selected_es,403 p_input->stream.i_selected_es_number,404 p_input->stream.i_selected_es_number,405 p_es );406 407 405 /* Initialize the decoder fifo */ 408 406 p_dec->p_module = NULL; 409 407 410 p_dec->fmt_in = p_es->fmt;408 es_format_Copy( &p_dec->fmt_in, &p_es->fmt ); 411 409 412 410 if( p_es->p_waveformatex ) … … 481 479 p_dec->p_owner->p_sout = p_input->stream.p_sout; 482 480 p_dec->p_owner->p_sout_input = NULL; 481 p_dec->p_owner->p_packetizer = NULL; 483 482 p_dec->p_owner->p_es_descriptor = p_es; 484 483 … … 502 501 vlc_object_attach( p_dec, p_input ); 503 502 503 /* Find a suitable decoder/packetizer module */ 504 if( i_object_type == VLC_OBJECT_DECODER ) 505 p_dec->p_module = module_Need( p_dec, "decoder", "$codec", 0 ); 506 else 507 p_dec->p_module = module_Need( p_dec, "packetizer", "$packetizer", 0 ); 508 509 /* Check if decoder requires already packetized data */ 510 if( i_object_type == VLC_OBJECT_DECODER && 511 p_dec->b_need_packetized && !p_dec->fmt_in.b_packetized ) 512 { 513 p_dec->p_owner->p_packetizer = 514 vlc_object_create( p_input, VLC_OBJECT_PACKETIZER ); 515 if( p_dec->p_owner->p_packetizer ) 516 { 517 p_dec->p_owner->p_packetizer->fmt_in = null_es_format; 518 p_dec->p_owner->p_packetizer->fmt_out = null_es_format; 519 es_format_Copy( &p_dec->p_owner->p_packetizer->fmt_in, 520 &p_dec->fmt_in ); 521 522 vlc_object_attach( p_dec->p_owner->p_packetizer, p_input ); 523 524 p_dec->p_owner->p_packetizer->p_module = 525 module_Need( p_dec->p_owner->p_packetizer, 526 "packetizer", "$packetizer", 0 ); 527 528 if( !p_dec->p_owner->p_packetizer->p_module ) 529 { 530 es_format_Clean( &p_dec->p_owner->p_packetizer->fmt_in ); 531 vlc_object_detach( p_dec->p_owner->p_packetizer ); 532 vlc_object_destroy( p_dec->p_owner->p_packetizer ); 533 } 534 } 535 } 536 504 537 return p_dec; 505 538 } … … 581 614 p_dec->p_owner->p_es_descriptor->p_pgrm->i_number; 582 615 } 583 p_dec->p_owner->sout.i_id = p_dec->p_owner->p_es_descriptor->i_id - 1; 616 p_dec->p_owner->sout.i_id = 617 p_dec->p_owner->p_es_descriptor->i_id - 1; 584 618 if( p_dec->fmt_in.psz_language ) 585 619 { 586 p_dec->p_owner->sout.psz_language = strdup( p_dec->fmt_in.psz_language ); 620 p_dec->p_owner->sout.psz_language = 621 strdup( p_dec->fmt_in.psz_language ); 587 622 } 588 623 589 624 p_dec->p_owner->p_sout_input = 590 sout_InputNew( p_dec->p_owner->p_sout, &p_dec->p_owner->sout ); 625 sout_InputNew( p_dec->p_owner->p_sout, 626 &p_dec->p_owner->sout ); 591 627 592 628 if( p_dec->p_owner->p_sout_input == NULL ) … … 597 633 while( p_sout_block ) 598 634 { 599 block_t *p_next = p_sout_block->p_next;635 block_t *p_next = p_sout_block->p_next; 600 636 block_Release( p_sout_block ); 601 637 p_sout_block = p_next; … … 626 662 p_sout_buffer->i_length = p_sout_block->i_length; 627 663 p_sout_buffer->i_flags = 628 (p_sout_block->i_flags << SOUT_BUFFER_FLAGS_BLOCK_SHIFT)629 & SOUT_BUFFER_FLAGS_BLOCK_MASK;664 ( p_sout_block->i_flags << SOUT_BUFFER_FLAGS_BLOCK_SHIFT ) 665 & SOUT_BUFFER_FLAGS_BLOCK_MASK; 630 666 631 667 block_Release( p_sout_block ); 632 668 633 sout_InputSendBuffer( p_dec->p_owner->p_sout_input, p_sout_buffer ); 669 sout_InputSendBuffer( p_dec->p_owner->p_sout_input, 670 p_sout_buffer ); 634 671 635 672 p_sout_block = p_next; … … 655 692 aout_buffer_t *p_aout_buf; 656 693 657 while( (p_aout_buf = p_dec->pf_decode_audio( p_dec, &p_block )) ) 694 if( p_dec->p_owner->p_packetizer ) 695 { 696 block_t *p_packetized_block; 697 decoder_t *p_packetizer = p_dec->p_owner->p_packetizer; 698 699 while( (p_packetized_block = 700 p_packetizer->pf_packetize( p_packetizer, &p_block )) ) 701 { 702 while( (p_aout_buf = 703 p_dec->pf_decode_audio( p_dec, &p_packetized_block )) ) 704 { 705 aout_DecPlay( p_dec->p_owner->p_aout, 706 p_dec->p_owner->p_aout_input, p_aout_buf ); 707 } 708 } 709 } 710 else while( (p_aout_buf = p_dec->pf_decode_audio( p_dec, &p_block )) ) 658 711 { 659 712 aout_DecPlay( p_dec->p_owner->p_aout, … … 665 718 picture_t *p_pic; 666 719 667 while( (p_pic = p_dec->pf_decode_video( p_dec, &p_block )) ) 720 if( p_dec->p_owner->p_packetizer ) 721 { 722 block_t *p_packetized_block; 723 decoder_t *p_packetizer = p_dec->p_owner->p_packetizer; 724 725 while( (p_packetized_block = 726 p_packetizer->pf_packetize( p_packetizer, &p_block )) ) 727 { 728 while( (p_pic = 729 p_dec->pf_decode_video( p_dec, &p_packetized_block )) ) 730 { 731 vout_DatePicture( p_dec->p_owner->p_vout, p_pic, 732 p_pic->date ); 733 vout_DisplayPicture( p_dec->p_owner->p_vout, p_pic ); 734 } 735 } 736 } 737 else while( (p_pic = p_dec->pf_decode_video( p_dec, &p_block )) ) 668 738 { 669 739 vout_DatePicture( p_dec->p_owner->p_vout, p_pic, p_pic->date ); … … 694 764 vlc_object_detach( p_dec ); 695 765 696 msg_Dbg( p_dec, 697 "killing decoder fourcc `%4.4s', %d PES in FIFO", 766 msg_Dbg( p_dec, "killing decoder fourcc `%4.4s', %d PES in FIFO", 698 767 (char*)&p_dec->fmt_in.i_codec, 699 768 p_dec->p_owner->p_fifo->i_depth ); … … 730 799 { 731 800 sout_InputDelete( p_dec->p_owner->p_sout_input ); 732 if( p_dec->p_owner->sout.i_extra ) free(p_dec->p_owner->sout.p_extra); 733 } 734 735 if( p_dec->fmt_in.i_extra ) free( p_dec->fmt_in.p_extra ); 736 if( p_dec->fmt_out.i_extra ) free( p_dec->fmt_out.p_extra ); 801 es_format_Clean( &p_dec->p_owner->sout ); 802 } 803 804 es_format_Clean( &p_dec->fmt_in ); 805 es_format_Clean( &p_dec->fmt_out ); 806 807 if( p_dec->p_owner->p_packetizer ) 808 { 809 module_Unneed( p_dec->p_owner->p_packetizer, 810 p_dec->p_owner->p_packetizer->p_module ); 811 es_format_Clean( &p_dec->p_owner->p_packetizer->fmt_in ); 812 es_format_Clean( &p_dec->p_owner->p_packetizer->fmt_out ); 813 vlc_object_detach( p_dec->p_owner->p_packetizer ); 814 vlc_object_destroy( p_dec->p_owner->p_packetizer ); 815 } 737 816 738 817 free( p_dec->p_owner ); src/input/input_programs.c
r4c19e52 r779340c 3 3 ***************************************************************************** 4 4 * Copyright (C) 1999-2004 VideoLAN 5 * $Id : input_programs.c,v 1.133 2004/02/25 12:38:33 fenrir Exp$5 * $Id$ 6 6 * 7 7 * Authors: Christophe Massiot <massiot@via.ecp.fr> … … 625 625 p_es->b_force_decoder = VLC_FALSE; 626 626 es_format_Init( &p_es->fmt, UNKNOWN_ES, 0 ); 627 p_es->fmt.b_packetized = VLC_FALSE; /* Only there for old mpeg demuxers */ 627 628 628 629 if( i_data_len )
