00001 #ifndef RESOURCETHREAD_H
00002 #define RESOURCETHREAD_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "arraylist.h"
00014 #include "bctimer.inc"
00015 #include "condition.inc"
00016 #include "mwindow.inc"
00017 #include "resourcepixmap.inc"
00018 #include "thread.h"
00019 #include "vframe.inc"
00020
00021
00022 class ResourceThreadItem
00023 {
00024 public:
00025 ResourceThreadItem(ResourcePixmap *pixmap,
00026 Asset *asset,
00027 int data_type,
00028 int operation_count);
00029 virtual ~ResourceThreadItem();
00030
00031 ResourcePixmap *pixmap;
00032 Asset *asset;
00033 int data_type;
00034 int operation_count;
00035 int last;
00036 };
00037
00038
00039 class AResourceThreadItem : public ResourceThreadItem
00040 {
00041 public:
00042 AResourceThreadItem(ResourcePixmap *pixmap,
00043 Asset *asset,
00044 int x,
00045 int channel,
00046 int64_t start,
00047 int64_t end,
00048 int operation_count);
00049 ~AResourceThreadItem();
00050 int x;
00051 int channel;
00052 int64_t start;
00053 int64_t end;
00054 };
00055
00056 class VResourceThreadItem : public ResourceThreadItem
00057 {
00058 public:
00059 VResourceThreadItem(ResourcePixmap *pixmap,
00060 int picon_x,
00061 int picon_y,
00062 int picon_w,
00063 int picon_h,
00064 double frame_rate,
00065 int64_t position,
00066 int layer,
00067 Asset *asset,
00068 int operation_count);
00069 ~VResourceThreadItem();
00070
00071
00072
00073 int picon_x;
00074 int picon_y;
00075 int picon_w;
00076 int picon_h;
00077 double frame_rate;
00078 int64_t position;
00079 int layer;
00080 };
00081
00082
00083 class ResourceThread : public Thread
00084 {
00085 public:
00086 ResourceThread(MWindow *mwindow);
00087 ~ResourceThread();
00088
00089
00090 void create_objects();
00091
00092 void stop_draw(int reset);
00093 void start_draw();
00094
00095
00096
00097 void add_picon(ResourcePixmap *pixmap,
00098 int picon_x,
00099 int picon_y,
00100 int picon_w,
00101 int picon_h,
00102 double frame_rate,
00103 int64_t position,
00104 int layer,
00105 Asset *asset);
00106
00107 void add_wave(ResourcePixmap *pixmap,
00108 Asset *asset,
00109 int x,
00110 int channel,
00111
00112 int64_t source_start,
00113 int64_t source_end);
00114
00115 void run();
00116
00117 void do_video(VResourceThreadItem *item);
00118 void do_audio(AResourceThreadItem *item);
00119
00120 MWindow *mwindow;
00121 Condition *draw_lock;
00122
00123 Mutex *item_lock;
00124 ArrayList<ResourceThreadItem*> items;
00125 int interrupted;
00126 VFrame *temp_picon;
00127 VFrame *temp_picon2;
00128
00129
00130 double *audio_buffer;
00131 int audio_channel;
00132 int64_t audio_start;
00133 int audio_samples;
00134 int audio_asset_id;
00135
00136 Timer *timer;
00137
00138 int prev_x;
00139 double prev_h;
00140 double prev_l;
00141
00142 int operation_count;
00143 };
00144
00145
00146
00147 #endif
00148