00001 #ifndef _INPUT_HELPERS_H_
00002 #define _INPUT_HELPERS_H_
00003
00004 class input_helper {
00005 public:
00006 input_helper();
00007 void open(service_ptr_t<file> p_filehint,metadb_handle_ptr p_location,unsigned p_flags,abort_callback & p_abort,bool p_from_redirect = false,bool p_skip_hints = false);
00008 void open(service_ptr_t<file> p_filehint,const playable_location & p_location,unsigned p_flags,abort_callback & p_abort,bool p_from_redirect = false,bool p_skip_hints = false);
00009
00010 bool need_file_reopen(const char * newPath) const;
00011
00012 void close();
00013 bool is_open();
00014 bool run(audio_chunk & p_chunk,abort_callback & p_abort);
00015 void seek(double seconds,abort_callback & p_abort);
00016 bool can_seek();
00017 void set_full_buffer(t_filesize val);
00018 void on_idle(abort_callback & p_abort);
00019 bool get_dynamic_info(file_info & p_out,double & p_timestamp_delta);
00020 bool get_dynamic_info_track(file_info & p_out,double & p_timestamp_delta);
00021
00023 const char * get_path() const;
00024
00026 void get_info(t_uint32 p_subsong,file_info & p_info,abort_callback & p_abort);
00027
00028 static void g_get_info(const playable_location & p_location,file_info & p_info,abort_callback & p_abort,bool p_from_redirect = false);
00029 static void g_set_info(const playable_location & p_location,file_info & p_info,abort_callback & p_abort,bool p_from_redirect = false);
00030
00031
00032 static bool g_mark_dead(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,bit_array_var & p_mask,abort_callback & p_abort);
00033
00034 private:
00035 service_ptr_t<input_decoder> m_input;
00036 pfc::string8 m_path;
00037 t_filesize m_fullbuffer;
00038 };
00039
00040 class NOVTABLE dead_item_filter : public abort_callback {
00041 public:
00042 virtual void on_progress(t_size p_position,t_size p_total) = 0;
00043
00044 bool run(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,bit_array_var & p_mask);
00045 };
00046
00047 class input_info_read_helper {
00048 public:
00049 input_info_read_helper() {}
00050 void get_info(const playable_location & p_location,file_info & p_info,t_filestats & p_stats,abort_callback & p_abort);
00051 void get_info_check(const playable_location & p_location,file_info & p_info,t_filestats & p_stats,bool & p_reloaded,abort_callback & p_abort);
00052 private:
00053 void open(const char * p_path,abort_callback & p_abort);
00054
00055 pfc::string8 m_path;
00056 service_ptr_t<input_info_reader> m_input;
00057 };
00058
00059
00060
00061 class input_helper_cue {
00062 public:
00063 void open(service_ptr_t<file> p_filehint,const playable_location & p_location,unsigned p_flags,abort_callback & p_abort,double p_start,double p_length);
00064
00065 void close();
00066 bool is_open();
00067 bool run(audio_chunk & p_chunk,abort_callback & p_abort);
00068 void seek(double seconds,abort_callback & p_abort);
00069 bool can_seek();
00070 void set_full_buffer(t_filesize val);
00071 void on_idle(abort_callback & p_abort);
00072 bool get_dynamic_info(file_info & p_out,double & p_timestamp_delta);
00073 bool get_dynamic_info_track(file_info & p_out,double & p_timestamp_delta);
00074
00075 const char * get_path() const;
00076
00077 void get_info(t_uint32 p_subsong,file_info & p_info,abort_callback & p_abort);
00078
00079 private:
00080 input_helper m_input;
00081 double m_start,m_length,m_position;
00082 bool m_dynamic_info_trigger,m_dynamic_info_track_trigger;
00083 };
00084
00085 #endif