#include <vlc_image.h>
#include <vlc_stream.h>
#include <vlc_charset.h>
+#include <vlc_sout.h>
#include <libvlc.h>
static picture_t *ImageRead( image_handler_t *, block_t *,
video_format_t *, const char * );
static void DeleteFilter( filter_t * );
-static vlc_fourcc_t Ext2Fourcc( const char * );
+vlc_fourcc_t image_Type2Fourcc( const char * );
+vlc_fourcc_t image_Ext2Fourcc( const char * );
/*static const char *Fourcc2Ext( vlc_fourcc_t );*/
/**
p_block = block_New( p_image->p_parent, i_size );
stream_Read( p_stream, p_block->p_buffer, i_size );
+
+ if( !p_fmt_in->i_chroma )
+ {
+ char *psz_mime = NULL;
+ stream_Control( p_stream, STREAM_GET_CONTENT_TYPE, &psz_mime );
+ if( psz_mime )
+ p_fmt_in->i_chroma = image_Mime2Fourcc( psz_mime );
+ free( psz_mime );
+ }
stream_Delete( p_stream );
if( !p_fmt_in->i_chroma )
{
/* Try to guess format from file name */
- p_fmt_in->i_chroma = Ext2Fourcc( psz_url );
+ p_fmt_in->i_chroma = image_Ext2Fourcc( psz_url );
}
p_pic = ImageRead( p_image, p_block, p_fmt_in, p_fmt_out );
if( !p_fmt_out->i_chroma )
{
/* Try to guess format from file name */
- p_fmt_out->i_chroma = Ext2Fourcc( psz_url );
+ p_fmt_out->i_chroma = image_Ext2Fourcc( psz_url );
}
file = utf8_fopen( psz_url, "wb" );
{ 0, NULL }
};
-static vlc_fourcc_t Ext2Fourcc( const char *psz_name )
+vlc_fourcc_t image_Type2Fourcc( const char *psz_type )
{
int i;
- psz_name = strrchr( psz_name, '.' );
- if( !psz_name ) return 0;
- psz_name++;
-
for( i = 0; ext_table[i].i_codec; i++ )
{
int j;
- for( j = 0; toupper(ext_table[i].psz_ext[j]) == toupper(psz_name[j]);
+ for( j = 0; toupper(ext_table[i].psz_ext[j]) == toupper(psz_type[j]);
j++ )
{
- if( !ext_table[i].psz_ext[j] && !psz_name[j] )
+ if( !ext_table[i].psz_ext[j] && !psz_type[j] )
return ext_table[i].i_codec;
}
}
return 0;
}
+vlc_fourcc_t image_Ext2Fourcc( const char *psz_name )
+{
+ psz_name = strrchr( psz_name, '.' );
+ if( !psz_name ) return 0;
+ psz_name++;
+
+ return image_Type2Fourcc( psz_name );
+}
+
/*
static const char *Fourcc2Ext( vlc_fourcc_t i_codec )
{
}
*/
+static const struct
+{
+ vlc_fourcc_t i_codec;
+ const char *psz_mime;
+} mime_table[] =
+{
+ { VLC_FOURCC('b','m','p',' '), "image/bmp" },
+ { VLC_FOURCC('b','m','p',' '), "image/x-bmp" },
+ { VLC_FOURCC('b','m','p',' '), "image/x-bitmap" },
+ { VLC_FOURCC('b','m','p',' '), "image/x-ms-bmp" },
+ { VLC_FOURCC('p','n','m',' '), "image/x-portable-anymap" },
+ { VLC_FOURCC('p','n','m',' '), "image/x-portable-bitmap" },
+ { VLC_FOURCC('p','n','m',' '), "image/x-portable-graymap" },
+ { VLC_FOURCC('p','n','m',' '), "image/x-portable-pixmap" },
+ { VLC_FOURCC('g','i','f',' '), "image/gif" },
+ { VLC_FOURCC('j','p','e','g'), "image/jpeg" },
+ { VLC_FOURCC('p','c','x',' '), "image/pcx" },
+ { VLC_FOURCC('p','n','g',' '), "image/png" },
+ { VLC_FOURCC('t','i','f','f'), "image/tiff" },
+ { VLC_FOURCC('t','g','a',' '), "iamge/x-tga" },
+ { VLC_FOURCC('x','p','m',' '), "image/x-xpixmap" },
+ { 0, NULL }
+};
+
+vlc_fourcc_t image_Mime2Fourcc( const char *psz_mime )
+{
+ int i;
+ for( i = 0; mime_table[i].i_codec; i++ )
+ if( !strcmp( psz_mime, mime_table[i].psz_mime ) )
+ return mime_table[i].i_codec;
+ return 0;
+}
+
+
static picture_t *video_new_buffer( decoder_t *p_dec )
{
p_dec->fmt_out.video.i_chroma = p_dec->fmt_out.i_codec;
vlc_object_attach( p_dec, p_this );
/* Find a suitable decoder module */
- p_dec->p_module = module_need( p_dec, "decoder", "$codec", 0 );
+ p_dec->p_module = module_need( p_dec, "decoder", "$codec", false );
if( !p_dec->p_module )
{
msg_Err( p_dec, "no suitable decoder module for fourcc `%4.4s'.\n"
{
encoder_t *p_enc;
- p_enc = vlc_object_create( p_this, VLC_OBJECT_ENCODER );
+ p_enc = sout_EncoderCreate( p_this );
if( p_enc == NULL )
return NULL;
vlc_object_attach( p_enc, p_this );
/* Find a suitable decoder module */
- p_enc->p_module = module_need( p_enc, "encoder", 0, 0 );
+ p_enc->p_module = module_need( p_enc, "encoder", NULL, false );
if( !p_enc->p_module )
{
msg_Err( p_enc, "no suitable encoder module for fourcc `%4.4s'.\n"
p_filter->fmt_out.i_codec = p_fmt_out->i_chroma;
p_filter->fmt_out.video = *p_fmt_out;
p_filter->p_module = module_need( p_filter, "video filter2",
- psz_module, 0 );
+ psz_module, false );
if( !p_filter->p_module )
{