Commit 70065a2f authored by Christophe Massiot's avatar Christophe Massiot

* modules/access/pvr/pvr.c: Code conventions; added :audio= option to

  specify the audio bitmask (0xA9 seems a good value).
parent 60c1f0cd
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* pvr.c * pvr.c
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * Copyright (C) 2001, 2002 VideoLAN
* $Id: pvr.c,v 1.13 2004/02/20 16:29:31 bigben Exp $ * $Id$
* *
* Authors: Eric Petit <titer@videolan.org> * Authors: Eric Petit <titer@videolan.org>
* *
...@@ -97,6 +97,7 @@ struct access_sys_t ...@@ -97,6 +97,7 @@ struct access_sys_t
int i_bitrate; int i_bitrate;
int i_bitrate_peak; int i_bitrate_peak;
int i_bitrate_mode; int i_bitrate_mode;
int i_audio_bitmask;
int i_input; int i_input;
}; };
...@@ -108,6 +109,7 @@ static int Open( vlc_object_t * p_this ) ...@@ -108,6 +109,7 @@ static int Open( vlc_object_t * p_this )
input_thread_t * p_input = (input_thread_t*) p_this; input_thread_t * p_input = (input_thread_t*) p_this;
access_sys_t * p_sys; access_sys_t * p_sys;
char * psz_tofree, * psz_parser, * psz_device; char * psz_tofree, * psz_parser, * psz_device;
char psz_tmp[5];
struct v4l2_format vfmt; struct v4l2_format vfmt;
struct v4l2_frequency vf; struct v4l2_frequency vf;
...@@ -156,25 +158,26 @@ static int Open( vlc_object_t * p_this ) ...@@ -156,25 +158,26 @@ static int Open( vlc_object_t * p_this )
psz_parser++; psz_parser++;
} }
if (!strncmp( psz_parser_init, "secam" , if ( !strncmp( psz_parser_init, "secam" ,
psz_parser - psz_parser_init ) ) psz_parser - psz_parser_init ) )
{ {
p_sys->i_standard = V4L2_STD_SECAM; p_sys->i_standard = V4L2_STD_SECAM;
} }
else if (!strncmp( psz_parser_init, "pal" , else if ( !strncmp( psz_parser_init, "pal" ,
psz_parser - psz_parser_init ) ) psz_parser - psz_parser_init ) )
{ {
p_sys->i_standard = V4L2_STD_PAL; p_sys->i_standard = V4L2_STD_PAL;
} }
else if (!strncmp( psz_parser_init, "ntsc" , else if ( !strncmp( psz_parser_init, "ntsc" ,
psz_parser - psz_parser_init ) ) psz_parser - psz_parser_init ) )
{ {
p_sys->i_standard = V4L2_STD_NTSC; p_sys->i_standard = V4L2_STD_NTSC;
} }
else else
{p_sys->i_standard = strtol( psz_parser_init , {
&psz_parser, 0 );} p_sys->i_standard = strtol( psz_parser_init ,
&psz_parser, 0 );
}
} }
else if( !strncmp( psz_parser, "channel=", else if( !strncmp( psz_parser, "channel=",
strlen( "channel=" ) ) ) strlen( "channel=" ) ) )
...@@ -218,6 +221,13 @@ static int Open( vlc_object_t * p_this ) ...@@ -218,6 +221,13 @@ static int Open( vlc_object_t * p_this )
strtol( psz_parser + strlen( "height=" ), strtol( psz_parser + strlen( "height=" ),
&psz_parser, 0 ); &psz_parser, 0 );
} }
else if( !strncmp( psz_parser, "audio=",
strlen( "audio=" ) ) )
{
p_sys->i_audio_bitmask =
strtol( psz_parser + strlen( "audio=" ),
&psz_parser, 0 );
}
else if( !strncmp( psz_parser, "bitrate=", else if( !strncmp( psz_parser, "bitrate=",
strlen( "bitrate=" ) ) ) strlen( "bitrate=" ) ) )
{ {
...@@ -244,18 +254,17 @@ static int Open( vlc_object_t * p_this ) ...@@ -244,18 +254,17 @@ static int Open( vlc_object_t * p_this )
psz_parser++; psz_parser++;
} }
if (!strncmp( psz_parser_init, "vbr" , if ( !strncmp( psz_parser_init, "vbr" ,
psz_parser - psz_parser_init ) ) psz_parser - psz_parser_init ) )
{ {
p_sys->i_bitrate_mode = 0; p_sys->i_bitrate_mode = 0;
} }
else if (!strncmp( psz_parser_init, "cbr" , else if ( !strncmp( psz_parser_init, "cbr" ,
psz_parser - psz_parser_init ) ) psz_parser - psz_parser_init ) )
{ {
p_sys->i_bitrate_mode = 1; p_sys->i_bitrate_mode = 1;
} }
} }
else if( !strncmp( psz_parser, "size=", else if( !strncmp( psz_parser, "size=",
strlen( "size=" ) ) ) strlen( "size=" ) ) )
{ {
...@@ -265,7 +274,6 @@ static int Open( vlc_object_t * p_this ) ...@@ -265,7 +274,6 @@ static int Open( vlc_object_t * p_this )
p_sys->i_height = p_sys->i_height =
strtol( psz_parser + 1 , strtol( psz_parser + 1 ,
&psz_parser, 0 ); &psz_parser, 0 );
} }
else else
{ {
...@@ -276,7 +284,8 @@ static int Open( vlc_object_t * p_this ) ...@@ -276,7 +284,8 @@ static int Open( vlc_object_t * p_this )
psz_parser++; psz_parser++;
} }
psz_device = calloc( psz_parser - psz_parser_init + 1, 1 ); psz_device = calloc( psz_parser - psz_parser_init + 1, 1 );
strncpy( psz_device, psz_parser_init, psz_parser - psz_parser_init ); strncpy( psz_device, psz_parser_init,
psz_parser - psz_parser_init );
} }
if( *psz_parser ) if( *psz_parser )
psz_parser++; psz_parser++;
...@@ -309,66 +318,67 @@ static int Open( vlc_object_t * p_this ) ...@@ -309,66 +318,67 @@ static int Open( vlc_object_t * p_this )
free( psz_device ); free( psz_device );
/* set the input */ /* set the input */
if( p_sys->i_input != -1) if ( p_sys->i_input != -1 )
{ {
if(ioctl( p_sys->i_fd, VIDIOC_S_INPUT, &p_sys->i_input ) < 0 ) if ( ioctl( p_sys->i_fd, VIDIOC_S_INPUT, &p_sys->i_input ) < 0 )
{ {
msg_Warn( p_input, "VIDIOC_S_INPUT failed" ); msg_Warn( p_input, "VIDIOC_S_INPUT failed" );
} }
else else
{ {
msg_Dbg( p_input,"input set to:%d",p_sys->i_input); msg_Dbg( p_input, "input set to:%d", p_sys->i_input);
} }
} }
/* set the video standard */ /* set the video standard */
if(p_sys->i_standard != V4L2_STD_UNKNOWN) if ( p_sys->i_standard != V4L2_STD_UNKNOWN )
{ {
if(ioctl( p_sys->i_fd, VIDIOC_S_STD, &p_sys->i_standard ) < 0 ) if ( ioctl( p_sys->i_fd, VIDIOC_S_STD, &p_sys->i_standard ) < 0 )
{ {
msg_Warn( p_input, "VIDIOC_S_STD failed" ); msg_Warn( p_input, "VIDIOC_S_STD failed" );
} }
else else
{ {
msg_Dbg( p_input,"video standard set to:%x",p_sys->i_standard); msg_Dbg( p_input, "video standard set to:%x", p_sys->i_standard);
} }
} }
/* set the picture size */ /* set the picture size */
if(p_sys->i_width != -1 || p_sys->i_height != -1) if ( p_sys->i_width != -1 || p_sys->i_height != -1 )
{ {
if(ioctl( p_sys->i_fd, VIDIOC_G_FMT, &vfmt ) < 0 ) if ( ioctl( p_sys->i_fd, VIDIOC_G_FMT, &vfmt ) < 0 )
{ {
msg_Warn( p_input, "VIDIOC_G_FMT failed" ); msg_Warn( p_input, "VIDIOC_G_FMT failed" );
} }
else else
{ {
if(p_sys->i_width != -1) if ( p_sys->i_width != -1 )
{ {
vfmt.fmt.pix.width = p_sys->i_width; vfmt.fmt.pix.width = p_sys->i_width;
} }
if(p_sys->i_height != -1) if ( p_sys->i_height != -1 )
{ {
vfmt.fmt.pix.height = p_sys->i_height; vfmt.fmt.pix.height = p_sys->i_height;
} }
if( ioctl( p_sys->i_fd, VIDIOC_S_FMT, &vfmt ) < 0 ) if ( ioctl( p_sys->i_fd, VIDIOC_S_FMT, &vfmt ) < 0 )
{ {
msg_Warn( p_input, "VIDIOC_S_FMT failed" ); msg_Warn( p_input, "VIDIOC_S_FMT failed" );
} }
else else
{ {
msg_Dbg( p_input,"picture size set to:%dx%d",vfmt.fmt.pix.width, vfmt.fmt.pix.height); msg_Dbg( p_input, "picture size set to:%dx%d",
vfmt.fmt.pix.width, vfmt.fmt.pix.height );
} }
} }
} }
/* set the frequency */ /* set the frequency */
if (p_sys->i_frequency != -1) if ( p_sys->i_frequency != -1 )
{ {
vf.tuner = 0; /* TODO: let the user choose the tuner */ vf.tuner = 0; /* TODO: let the user choose the tuner */
if( ioctl( p_sys->i_fd, VIDIOC_G_FREQUENCY, &vf ) < 0 ) if ( ioctl( p_sys->i_fd, VIDIOC_G_FREQUENCY, &vf ) < 0 )
{ {
msg_Warn( p_input, "VIDIOC_G_FREQUENCY failed (%s)", msg_Warn( p_input, "VIDIOC_G_FREQUENCY failed (%s)",
strerror( errno ) ); strerror( errno ) );
...@@ -383,26 +393,28 @@ static int Open( vlc_object_t * p_this ) ...@@ -383,26 +393,28 @@ static int Open( vlc_object_t * p_this )
} }
else else
{ {
msg_Dbg( p_input,"Tuner frequency set to:%d",p_sys->i_frequency); msg_Dbg( p_input, "Tuner frequency set to:%d",
p_sys->i_frequency);
} }
} }
} }
/* codec parameters */ /* codec parameters */
if(p_sys->i_framerate != -1 if ( p_sys->i_framerate != -1
|| p_sys->i_bitrate_mode != -1 || p_sys->i_bitrate_mode != -1
|| p_sys->i_bitrate_peak != -1 || p_sys->i_bitrate_peak != -1
|| p_sys->i_bitrate != -1) || p_sys->i_bitrate != -1
|| p_sys->i_audio_bitmask != -1 )
{ {
if( ioctl( p_sys->i_fd, IVTV_IOC_G_CODEC, &codec ) < 0 ) if ( ioctl( p_sys->i_fd, IVTV_IOC_G_CODEC, &codec ) < 0 )
{ {
msg_Warn( p_input, "IVTV_IOC_G_CODEC failed" ); msg_Warn( p_input, "IVTV_IOC_G_CODEC failed" );
} }
else else
{ {
if(p_sys->i_framerate != -1) if ( p_sys->i_framerate != -1 )
{ {
switch( p_sys->i_framerate ) switch ( p_sys->i_framerate )
{ {
case 30: case 30:
codec.framerate = 0; codec.framerate = 0;
...@@ -419,21 +431,26 @@ static int Open( vlc_object_t * p_this ) ...@@ -419,21 +431,26 @@ static int Open( vlc_object_t * p_this )
} }
} }
if(p_sys->i_bitrate != -1) if ( p_sys->i_bitrate != -1 )
{ {
codec.bitrate = p_sys->i_bitrate; codec.bitrate = p_sys->i_bitrate;
} }
if(p_sys->i_bitrate_peak != -1) if ( p_sys->i_bitrate_peak != -1 )
{ {
codec.bitrate_peak = p_sys->i_bitrate_peak; codec.bitrate_peak = p_sys->i_bitrate_peak;
} }
if(p_sys->i_bitrate_mode != -1) if ( p_sys->i_bitrate_mode != -1 )
{ {
codec.bitrate_mode = p_sys->i_bitrate_mode; codec.bitrate_mode = p_sys->i_bitrate_mode;
} }
if ( p_sys->i_audio_bitmask != -1 )
{
codec.audio_bitmask = p_sys->i_audio_bitmask;
}
if( ioctl( p_sys->i_fd, IVTV_IOC_S_CODEC, &codec ) < 0 ) if( ioctl( p_sys->i_fd, IVTV_IOC_S_CODEC, &codec ) < 0 )
{ {
msg_Warn( p_input, "IVTV_IOC_S_CODEC failed" ); msg_Warn( p_input, "IVTV_IOC_S_CODEC failed" );
...@@ -441,15 +458,15 @@ static int Open( vlc_object_t * p_this ) ...@@ -441,15 +458,15 @@ static int Open( vlc_object_t * p_this )
else else
{ {
msg_Dbg( p_input, "Setting codec parameters to: framerate: %d, bitrate: %d/%d/%d", msg_Dbg( p_input, "Setting codec parameters to: framerate: %d, bitrate: %d/%d/%d",
codec.framerate, codec.bitrate, codec.bitrate_peak, codec.bitrate_mode); codec.framerate, codec.bitrate, codec.bitrate_peak, codec.bitrate_mode );
} }
} }
} }
/* do a quick read */ /* do a quick read */
if(p_sys->i_fd) if ( p_sys->i_fd )
{ {
if(read(p_sys->i_fd,&" ",1)) if ( read( p_sys->i_fd, psz_tmp, 1 ) )
{ {
msg_Dbg(p_input, "Could read byte from device"); msg_Dbg(p_input, "Could read byte from device");
} }
......
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