Commit 690e5e08 authored by Gildas Bazin's avatar Gildas Bazin

* include/input_ext-plugins.h: export input_DecodeBlock().
* modules/stream_out/display.c: simplifications.
* modules/stream_out/transcode.c: memset of sout_stream_sys_t.
* modules/packetizer/mpeg4video.c: not all containers provide a pts info, in which case we use the dts.
parent e41c90dd
......@@ -3,7 +3,7 @@
* but exported to plug-ins
*****************************************************************************
* Copyright (C) 1999-2002 VideoLAN
* $Id: input_ext-plugins.h,v 1.45 2003/11/24 20:50:45 fenrir Exp $
* $Id: input_ext-plugins.h,v 1.46 2003/11/30 22:47:55 gbazin Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
......@@ -59,7 +59,7 @@ decoder_t * input_RunDecoder( input_thread_t *, es_descriptor_t * );
void input_EndDecoder( input_thread_t *, es_descriptor_t * );
VLC_EXPORT( void, input_DecodePES, ( decoder_t *, pes_packet_t * ) );
void input_DecodeBlock( decoder_t *, block_t * );
VLC_EXPORT( void, input_DecodeBlock,( decoder_t *, block_t * ) );
void input_EscapeDiscontinuity( input_thread_t * );
void input_EscapeAudioDiscontinuity( input_thread_t * );
......
......@@ -2,7 +2,7 @@
* mpeg4video.c: mpeg 4 video packetizer
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: mpeg4video.c,v 1.18 2003/11/30 22:14:39 fenrir Exp $
* $Id: mpeg4video.c,v 1.19 2003/11/30 22:47:55 gbazin Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org>
......@@ -282,7 +282,17 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
else if( p_start[3] == 0xb6 )
{
p_sys->b_vop = VLC_TRUE;
p_sys->i_pts = p_block->i_pts;
/* The pts information is not available in all the containers.
* FIXME: calculate the pts correctly */
if( p_sys->i_pts )
{
p_sys->i_pts = p_block->i_pts;
}
else
{
p_sys->i_pts = p_block->i_dts;
}
p_sys->i_dts = p_block->i_dts;
}
p_start += 4; /* Next */
......
......@@ -2,7 +2,7 @@
* display.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: display.c,v 1.9 2003/11/26 22:56:04 gbazin Exp $
* $Id: display.c,v 1.10 2003/11/30 22:47:55 gbazin Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
......@@ -125,7 +125,7 @@ struct sout_stream_id_t
};
static sout_stream_id_t * Add ( sout_stream_t *p_stream, es_format_t *p_fmt )
static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
sout_stream_id_t *id;
......@@ -142,7 +142,7 @@ static sout_stream_id_t * Add ( sout_stream_t *p_stream, es_format_t *p_fmt
id->p_es = input_AddES( p_sys->p_input,
NULL, /* no program */
12, /* es_id */
p_fmt->i_cat, /* UNKNOWN_ES,*/ /* es category */
p_fmt->i_cat, /* es category */
NULL, /* description */
0 ); /* no extra data */
......@@ -157,56 +157,8 @@ static sout_stream_id_t * Add ( sout_stream_t *p_stream, es_format_t *p_fmt
id->p_es->i_stream_id = 1;
id->p_es->i_fourcc = p_fmt->i_codec;
id->p_es->b_force_decoder = VLC_TRUE;
switch( p_fmt->i_cat )
{
case AUDIO_ES:
id->p_es->p_bitmapinfoheader = NULL;
id->p_es->p_waveformatex =
malloc( sizeof( WAVEFORMATEX ) + p_fmt->i_extra );
#define p_wf ((WAVEFORMATEX*)id->p_es->p_waveformatex)
p_wf->wFormatTag = WAVE_FORMAT_UNKNOWN;
p_wf->nChannels = p_fmt->audio.i_channels;
p_wf->nSamplesPerSec = p_fmt->audio.i_rate;
p_wf->nAvgBytesPerSec= p_fmt->i_bitrate / 8;
p_wf->nBlockAlign = p_fmt->audio.i_blockalign;
p_wf->wBitsPerSample = 0;
p_wf->cbSize = p_fmt->i_extra;
if( p_fmt->i_extra > 0 )
{
memcpy( &p_wf[1],
p_fmt->p_extra,
p_fmt->i_extra );
}
#undef p_wf
break;
case VIDEO_ES:
id->p_es->p_waveformatex = NULL;
id->p_es->p_bitmapinfoheader = malloc( sizeof( BITMAPINFOHEADER ) + p_fmt->i_extra );
#define p_bih ((BITMAPINFOHEADER*)id->p_es->p_bitmapinfoheader)
p_bih->biSize = sizeof( BITMAPINFOHEADER ) + p_fmt->i_extra;
p_bih->biWidth = p_fmt->video.i_width;
p_bih->biHeight = p_fmt->video.i_height;
p_bih->biPlanes = 0;
p_bih->biBitCount = 0;
p_bih->biCompression = 0;
p_bih->biSizeImage = 0;
p_bih->biXPelsPerMeter = 0;
p_bih->biYPelsPerMeter = 0;
p_bih->biClrUsed = 0;
p_bih->biClrImportant = 0;
if( p_fmt->i_extra > 0 )
{
memcpy( &p_bih[1],
p_fmt->p_extra,
p_fmt->i_extra );
}
#undef p_bih
break;
default:
msg_Err( p_stream, "unknown es type" );
free( id );
return NULL;
}
es_format_Copy( &id->p_es->fmt, p_fmt );
if( input_SelectES( p_sys->p_input, id->p_es ) )
{
......@@ -222,7 +174,7 @@ static sout_stream_id_t * Add ( sout_stream_t *p_stream, es_format_t *p_fmt
return id;
}
static int Del ( sout_stream_t *p_stream, sout_stream_id_t *id )
static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
......@@ -241,44 +193,20 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
while( p_buffer )
{
sout_buffer_t *p_next;
pes_packet_t *p_pes;
data_packet_t *p_data;
block_t *p_block;
if( p_buffer->i_size > 0 )
if( p_buffer->i_size > 0 &&
(p_block = block_New( p_stream, p_buffer->i_size )) )
{
if( !( p_pes = input_NewPES( p_sys->p_input->p_method_data ) ) )
{
msg_Err( p_stream, "cannot allocate new PES" );
return VLC_EGENERIC;
}
if( !( p_data = input_NewPacket( p_sys->p_input->p_method_data,
p_buffer->i_size ) ) )
{
msg_Err( p_stream, "cannot allocate new data_packet" );
return VLC_EGENERIC;
}
p_data->p_payload_end = p_data->p_payload_start + p_buffer->i_size;
p_pes->i_dts = p_buffer->i_dts <= 0 ? 0 :
p_buffer->i_dts + p_sys->i_delay;
p_pes->i_pts = p_buffer->i_pts <= 0 ? 0 :
p_buffer->i_pts + p_sys->i_delay;
p_pes->p_first = p_pes->p_last = p_data;
p_pes->i_nb_data = 1;
p_pes->i_pes_size = p_buffer->i_size;
p_stream->p_vlc->pf_memcpy( p_data->p_payload_start,
p_buffer->p_buffer,
p_buffer->i_size );
if( id->p_es->p_dec )
{
input_DecodePES( id->p_es->p_dec, p_pes );
}
else
{
input_DeletePES( p_sys->p_input->p_method_data, p_pes );
}
p_block->i_dts = p_buffer->i_dts <= 0 ? 0 :
p_buffer->i_dts + p_sys->i_delay;
p_block->i_pts = p_buffer->i_pts <= 0 ? 0 :
p_buffer->i_pts + p_sys->i_delay;
p_stream->p_vlc->pf_memcpy( p_block->p_buffer,
p_buffer->p_buffer, p_buffer->i_size );
input_DecodeBlock( id->p_es->p_dec, p_block );
}
/* *** go to next buffer *** */
......@@ -289,4 +217,3 @@ static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
return VLC_SUCCESS;
}
......@@ -2,7 +2,7 @@
* transcode.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: transcode.c,v 1.56 2003/11/29 18:36:13 massiot Exp $
* $Id: transcode.c,v 1.57 2003/11/30 22:47:55 gbazin Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Gildas Bazin <gbazin@netcourrier.com>
......@@ -125,20 +125,11 @@ static int Open( vlc_object_t *p_this )
char *codec;
p_sys = malloc( sizeof( sout_stream_sys_t ) );
memset( p_sys, 0, sizeof(struct sout_stream_sys_t) );
p_sys->p_out = sout_stream_new( p_stream->p_sout, p_stream->psz_next );
p_sys->i_acodec = 0;
p_sys->i_sample_rate = 0;
p_sys->i_channels = 0;
p_sys->i_abitrate = 0;
p_sys->i_vcodec = 0;
p_sys->i_vbitrate = 0;
p_sys->i_vtolerance = -1;
p_sys->i_width = 0;
p_sys->i_height = 0;
p_sys->i_key_int = -1;
p_sys->i_b_frames = 0;
p_sys->i_qmin = 2;
p_sys->i_qmax = 31;
#if LIBAVCODEC_BUILD >= 4673
......@@ -146,12 +137,6 @@ static int Open( vlc_object_t *p_this )
#else
p_sys->i_hq = VLC_FALSE;
#endif
p_sys->b_deinterlace= VLC_FALSE;
p_sys->i_crop_top = 0;
p_sys->i_crop_bottom= 0;
p_sys->i_crop_right = 0;
p_sys->i_crop_left = 0;
if( ( codec = sout_cfg_find_value( p_stream->p_cfg, "acodec" ) ) )
{
......@@ -909,7 +894,7 @@ static int transcode_audio_ffmpeg_process( sout_stream_t *p_stream,
/* dumb downmixing */
for( i = 0; i < aout_buf.i_nb_samples; i++ )
{
uint16_t *p_buffer = aout_buf.p_buffer;
uint16_t *p_buffer = (uint16_t *)aout_buf.p_buffer;
for( j = 0 ; j < id->p_encoder->fmt_in.audio.i_channels; j++ )
{
p_buffer[i*id->p_encoder->fmt_in.audio.i_channels+j] =
......@@ -1168,7 +1153,7 @@ static int transcode_video_ffmpeg_process( sout_stream_t *p_stream,
/* decode frame */
frame = id->p_ff_pic;
p_sys->i_input_pts = in->i_pts;
if( id->ff_dec )
if( id->ff_dec )
{
i_used = avcodec_decode_video( id->ff_dec_c, frame,
&b_gotpicture,
......@@ -1177,8 +1162,7 @@ static int transcode_video_ffmpeg_process( sout_stream_t *p_stream,
else
{
/* raw video */
avpicture_fill( (AVPicture*)frame,
p_data,
avpicture_fill( (AVPicture*)frame, p_data,
id->ff_dec_c->pix_fmt,
id->ff_dec_c->width, id->ff_dec_c->height );
i_used = i_data;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment