Commit 6bb15948 authored by Christophe Massiot's avatar Christophe Massiot

* Added a new kfir: access module, designed to work around a bug in the

  kfir driver.
parent fa2aca3d
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* file.c: file input (file: access plug-in) * file.c: file input (file: access plug-in)
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * Copyright (C) 2001, 2002 VideoLAN
* $Id: file.c,v 1.16 2003/04/02 15:20:12 massiot Exp $ * $Id: file.c,v 1.17 2003/04/02 23:16:30 massiot Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -78,6 +78,7 @@ vlc_module_begin(); ...@@ -78,6 +78,7 @@ vlc_module_begin();
set_capability( "access", 50 ); set_capability( "access", 50 );
add_shortcut( "file" ); add_shortcut( "file" );
add_shortcut( "stream" ); add_shortcut( "stream" );
add_shortcut( "kfir" );
set_callbacks( Open, Close ); set_callbacks( Open, Close );
vlc_module_end(); vlc_module_end();
...@@ -90,6 +91,7 @@ typedef struct _input_socket_s ...@@ -90,6 +91,7 @@ typedef struct _input_socket_s
input_socket_t _socket; input_socket_t _socket;
unsigned int i_nb_reads; unsigned int i_nb_reads;
vlc_bool_t b_kfir;
} _input_socket_t; } _input_socket_t;
/***************************************************************************** /*****************************************************************************
...@@ -104,7 +106,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -104,7 +106,7 @@ static int Open( vlc_object_t *p_this )
struct stat stat_info; struct stat stat_info;
#endif #endif
_input_socket_t * p_access_data; _input_socket_t * p_access_data;
vlc_bool_t b_stdin; vlc_bool_t b_stdin, b_kfir = 0;
p_input->i_mtu = 0; p_input->i_mtu = 0;
...@@ -137,6 +139,15 @@ static int Open( vlc_object_t *p_this ) ...@@ -137,6 +139,15 @@ static int Open( vlc_object_t *p_this )
p_input->stream.b_seekable = 0; p_input->stream.b_seekable = 0;
p_input->stream.p_selected_area->i_size = 0; p_input->stream.p_selected_area->i_size = 0;
} }
else if( *p_input->psz_access &&
!strncmp( p_input->psz_access, "kfir", 7 ) )
{
/* stream:%s */
p_input->stream.b_pace_control = 0;
p_input->stream.b_seekable = 0;
p_input->stream.p_selected_area->i_size = 0;
b_kfir = 1;
}
else else
{ {
/* file:%s or %s */ /* file:%s or %s */
...@@ -192,6 +203,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -192,6 +203,7 @@ static int Open( vlc_object_t *p_this )
} }
p_access_data->i_nb_reads = 0; p_access_data->i_nb_reads = 0;
p_access_data->b_kfir = b_kfir;
if( b_stdin ) if( b_stdin )
{ {
p_access_data->_socket.i_handle = 0; p_access_data->_socket.i_handle = 0;
...@@ -280,8 +292,10 @@ static ssize_t Read( input_thread_t * p_input, byte_t * p_buffer, size_t i_len ) ...@@ -280,8 +292,10 @@ static ssize_t Read( input_thread_t * p_input, byte_t * p_buffer, size_t i_len )
i_ret = -1; i_ret = -1;
} }
#else #else
# ifndef WIN32 #ifndef WIN32
if ( !p_input->stream.b_pace_control ) if ( !p_input->stream.b_pace_control )
{
if ( !p_access_data->b_kfir )
{ {
/* Find if some data is available. This won't work under Windows. */ /* Find if some data is available. This won't work under Windows. */
struct timeval timeout; struct timeval timeout;
...@@ -313,13 +327,29 @@ static ssize_t Read( input_thread_t * p_input, byte_t * p_buffer, size_t i_len ) ...@@ -313,13 +327,29 @@ static ssize_t Read( input_thread_t * p_input, byte_t * p_buffer, size_t i_len )
if( i_ret < 0 ) if( i_ret < 0 )
{ {
msg_Err( p_input, "network select error (%s)", strerror(errno) ); msg_Err( p_input, "select error (%s)", strerror(errno) );
return -1; return -1;
} }
i_ret = read( p_access_data->_socket.i_handle, p_buffer, i_len );
} }
else
{
/* b_kfir ; work around a buggy poll() driver implementation */
while ( (i_ret = read( p_access_data->_socket.i_handle, p_buffer,
i_len )) == 0 &&
!p_input->b_die && !p_input->b_error )
{
msleep(INPUT_ERROR_SLEEP);
}
}
}
else
# endif # endif
{
/* b_pace_control || WIN32 */
i_ret = read( p_access_data->_socket.i_handle, p_buffer, i_len ); i_ret = read( p_access_data->_socket.i_handle, p_buffer, i_len );
}
#endif #endif
if( i_ret < 0 ) if( i_ret < 0 )
......
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