Commit 8ca8d346 authored by Antoine Cellerier's avatar Antoine Cellerier

image.c: ImageReadUrl now tries to open the image using the stream functions...

image.c: ImageReadUrl now tries to open the image using the stream functions if fopen failed. (Which means that it can now read images on the web)

parent f4941313
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <vlc/decoder.h> #include <vlc/decoder.h>
#include <vlc_filter.h> #include <vlc_filter.h>
#include <vlc_image.h> #include <vlc_image.h>
#include <vlc_stream.h>
#include <charset.h> #include <charset.h>
static picture_t *ImageRead( image_handler_t *, block_t *, static picture_t *ImageRead( image_handler_t *, block_t *,
...@@ -205,23 +206,47 @@ static picture_t *ImageReadUrl( image_handler_t *p_image, const char *psz_url, ...@@ -205,23 +206,47 @@ static picture_t *ImageReadUrl( image_handler_t *p_image, const char *psz_url,
block_t *p_block; block_t *p_block;
picture_t *p_pic; picture_t *p_pic;
FILE *file; FILE *file;
stream_t *p_stream = NULL;
int i_size; int i_size;
file = utf8_fopen( psz_url, "rb" ); file = utf8_fopen( psz_url, "rb" );
if( !file ) if( file )
{ {
msg_Dbg( p_image->p_parent, "could not open file %s for reading",
psz_url );
return NULL;
}
fseek( file, 0, SEEK_END ); fseek( file, 0, SEEK_END );
i_size = ftell( file ); i_size = ftell( file );
fseek( file, 0, SEEK_SET ); fseek( file, 0, SEEK_SET );
}
else
{
/*msg_Dbg( p_image->p_parent, "could not open file %s for reading",
psz_url );*/
/* if file couldn't be opened, try to open the url with the stream
* functions. Any url can be thus be opened. */
p_stream = stream_UrlNew( p_image->p_parent, psz_url );
if( !p_stream )
{
msg_Dbg( p_image->p_parent, "could not open %s for reading",
psz_url );
return NULL;
}
else
{
i_size = stream_Size( p_stream );
}
}
p_block = block_New( p_image->p_parent, i_size ); p_block = block_New( p_image->p_parent, i_size );
if( file )
{
fread( p_block->p_buffer, sizeof(char), i_size, file ); fread( p_block->p_buffer, sizeof(char), i_size, file );
fclose( file ); fclose( file );
}
else
{
stream_Read( p_stream, p_block->p_buffer, i_size );
stream_Delete( p_stream );
}
if( !p_fmt_in->i_chroma ) if( !p_fmt_in->i_chroma )
{ {
......
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