* transcode.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
- * $Id: transcode.c,v 1.12 2003/05/03 14:22:47 fenrir Exp $
+ * $Id: transcode.c,v 1.15 2003/05/04 18:51:34 fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
int i_width;
int i_height;
int i_key_int;
+ int i_qmin;
+ int i_qmax;
+ vlc_bool_t b_hq;
vlc_bool_t b_deinterlace;
int i_crop_top;
p_sys->i_width = 0;
p_sys->i_height = 0;
p_sys->i_key_int = -1;
+ p_sys->i_qmin = 2;
+ p_sys->i_qmax = 31;
+ p_sys->b_hq = VLC_FALSE;
p_sys->b_deinterlace= VLC_FALSE;
p_sys->i_crop_top = 0;
if( ( val = sout_cfg_find_value( p_stream->p_cfg, "ab" ) ) )
{
p_sys->i_abitrate = atoi( val );
+ if( p_sys->i_abitrate < 4000 )
+ {
+ p_sys->i_abitrate *= 1000;
+ }
}
msg_Dbg( p_stream, "codec audio=%4.4s %dHz %d channels %dKb/s",
{
p_sys->i_key_int = atoi( val );
}
+ if( sout_cfg_find( p_stream->p_cfg, "hq" ) )
+ {
+ p_sys->b_hq = VLC_TRUE;
+ }
+ if( ( val = sout_cfg_find_value( p_stream->p_cfg, "qmin" ) ) )
+ {
+ p_sys->i_qmin = atoi( val );
+ }
+ if( ( val = sout_cfg_find_value( p_stream->p_cfg, "qmax" ) ) )
+ {
+ p_sys->i_qmax = atoi( val );
+ }
msg_Dbg( p_stream, "codec video=%4.4s %dx%d %dkb/s",
fcc,
}
else
{
- int16_t *sout = (int16_t*)&id->p_buffer[id->i_buffer_pos];
- int i_used;
+ int16_t *sout = (int16_t*)&id->p_buffer[id->i_buffer_pos];
+ int i_used = 0;
if( id->f_src.i_fourcc == VLC_FOURCC( 's', '8', ' ', ' ' ) )
{
{
id->ff_enc_c->bit_rate_tolerance = p_sys->i_vtolerance;
}
- id->ff_enc_c->qmin = 2;
- id->ff_enc_c->qmax = 31;
+ id->ff_enc_c->qmin = p_sys->i_qmin;
+ id->ff_enc_c->qmax = p_sys->i_qmax;
+ if( p_sys->b_hq )
+ {
+ id->ff_enc_c->flags |= CODEC_FLAG_HQ;
+ }
if( i_ff_codec == CODEC_ID_RAWVIDEO )
{
static int transcode_video_ffmpeg_process( sout_stream_t *p_stream, sout_stream_id_t *id,
sout_buffer_t *in, sout_buffer_t **out )
{
+ sout_stream_sys_t *p_sys = p_stream->p_sys;
int i_used;
int i_out;
int b_gotpicture;
detecting size */
if( id->ff_enc_c->width <= 0 )
{
- id->ff_enc_c->width = id->f_dst.i_width = id->ff_dec_c->width;
+ id->ff_enc_c->width =
+ id->f_dst.i_width = id->ff_dec_c->width - p_sys->i_crop_left - p_sys->i_crop_right;
}
if( id->ff_enc_c->height <= 0 )
{
- id->ff_enc_c->height = id->f_dst.i_height = id->ff_dec_c->height;
+ id->ff_enc_c->height =
+ id->f_dst.i_height = id->ff_dec_c->height - p_sys->i_crop_top - p_sys->i_crop_bottom;
}
if( avcodec_open( id->ff_enc_c, id->ff_enc ) )
}
/* convert size and crop */
- if( ( id->ff_dec_c->width != id->ff_enc_c->width ) ||
- ( id->ff_dec_c->height != id->ff_enc_c->height ) )
+ if( id->ff_dec_c->width != id->ff_enc_c->width ||
+ id->ff_dec_c->height != id->ff_enc_c->height ||
+ p_sys->i_crop_top > 0 || p_sys->i_crop_bottom > 0 ||
+ p_sys->i_crop_left > 0 || p_sys->i_crop_right )
{
if( id->p_ff_pic_tmp2 == NULL )
{