+ AVDictionaryEntry *title = av_dict_get( p_sys->ic->metadata, "language", NULL, 0 );
+ AVDictionaryEntry *artist = av_dict_get( p_sys->ic->metadata, "artist", NULL, 0 );
+ AVDictionaryEntry *copyright = av_dict_get( p_sys->ic->metadata, "copyright", NULL, 0 );
+ AVDictionaryEntry *comment = av_dict_get( p_sys->ic->metadata, "comment", NULL, 0 );
+ AVDictionaryEntry *genre = av_dict_get( p_sys->ic->metadata, "genre", NULL, 0 );
+
+ if( title && title->value )
+ vlc_meta_SetTitle( p_meta, title->value );
+ if( artist && artist->value )
+ vlc_meta_SetArtist( p_meta, artist->value );
+ if( copyright && copyright->value )
+ vlc_meta_SetCopyright( p_meta, copyright->value );
+ if( comment && comment->value )
+ vlc_meta_SetDescription( p_meta, comment->value );
+ if( genre && genre->value )
+ vlc_meta_SetGenre( p_meta, genre->value );
+ return VLC_SUCCESS;
+ }
+
+ case DEMUX_GET_ATTACHMENTS:
+ {
+ input_attachment_t ***ppp_attach =
+ (input_attachment_t***)va_arg( args, input_attachment_t*** );
+ int *pi_int = (int*)va_arg( args, int * );
+ int i;
+
+ if( p_sys->i_attachments <= 0 )
+ return VLC_EGENERIC;
+
+ *pi_int = p_sys->i_attachments;;
+ *ppp_attach = malloc( sizeof(input_attachment_t**) * p_sys->i_attachments );
+ for( i = 0; i < p_sys->i_attachments; i++ )
+ (*ppp_attach)[i] = vlc_input_attachment_Duplicate( p_sys->attachments[i] );
+ return VLC_SUCCESS;
+ }
+
+ case DEMUX_GET_TITLE_INFO:
+ {
+ input_title_t ***ppp_title = (input_title_t***)va_arg( args, input_title_t*** );
+ int *pi_int = (int*)va_arg( args, int* );
+ int *pi_title_offset = (int*)va_arg( args, int* );
+ int *pi_seekpoint_offset = (int*)va_arg( args, int* );
+
+ if( !p_sys->p_title )
+ return VLC_EGENERIC;
+
+ *pi_int = 1;
+ *ppp_title = malloc( sizeof( input_title_t**) );
+ (*ppp_title)[0] = vlc_input_title_Duplicate( p_sys->p_title );
+ *pi_title_offset = 0;
+ *pi_seekpoint_offset = 0;
+ return VLC_SUCCESS;
+ }
+ case DEMUX_SET_TITLE:
+ {
+ const int i_title = (int)va_arg( args, int );
+ if( !p_sys->p_title || i_title != 0 )
+ return VLC_EGENERIC;
+ return VLC_SUCCESS;
+ }
+ case DEMUX_SET_SEEKPOINT:
+ {
+ const int i_seekpoint = (int)va_arg( args, int );
+ if( !p_sys->p_title )
+ return VLC_EGENERIC;
+
+ i64 = p_sys->p_title->seekpoint[i_seekpoint]->i_time_offset *
+ AV_TIME_BASE / 1000000 + i_start_time;
+
+ msg_Warn( p_demux, "DEMUX_SET_TIME: %"PRId64, i64 );
+
+ if( av_seek_frame( p_sys->ic, -1, i64, AVSEEK_FLAG_BACKWARD ) < 0 )