44
36
#include "ADM_toolkit/filesel.h"
45
37
#include "prototype.h"
46
38
#include "ADM_audiodevice/audio_out.h"
47
//#include "avdm_mad.h"
49
40
#include "ADM_toolkit/toolkit.hxx"
50
#include "ADM_toolkit/toolkit_gtk.h"
51
41
#include "ADM_audio/aviaudio.hxx"
52
42
#include "ADM_audiofilter/audioprocess.hxx"
54
44
#include "ADM_video/ADM_genvideo.hxx"
55
45
#include "ADM_filter/video_filters.h"
56
46
#include "gtkgui.h"
57
#include "ADM_gui2/GUI_render.h"
47
#include "GUI_render.h"
58
48
#include "ADM_audiofilter/audioeng_buildfilters.h"
49
#include "ADM_libraries/ADM_utilities/avidemutils.h"
60
51
//___________________________________
61
52
#define AUDIO_PRELOAD 150
64
55
static void resetTime(void);
65
56
static void ComputePreload(void);
66
57
static void FillAudio(void);
58
extern void UI_purge(void);
68
59
#define EVEN(x) (x&0xffffffe)
71
extern void UI_setPreviewToggleStatus( uint8_t status );
72
extern uint8_t GUI_getFrame(uint32_t frameno, ADMImage *image, uint32_t *flags);
73
61
//___________________________________
74
extern uint8_t stop_req;
75
63
static int called = 0;
76
64
static uint32_t vids = 0, auds = 0, dauds = 0;
77
65
static int32_t delta;
103
uint32_t priorityLevel;
105
originalPriority = getpriority(PRIO_PROCESS, 0);
106
prefs->get(PRIORITY_PLAYBACK,&priorityLevel);
107
setpriority(PRIO_PROCESS, 0, ADM_getNiceValue(priorityLevel));
115
109
uint32_t played_frame=0;
116
110
uint32_t remaining=avifileinfo->nb_frames-curframe;
113
if(getPreviewMode()==ADM_PREVIEW_OUTPUT)
121
filter=getLastVideoFilter(curframe,remaining);
124
editorKillPreview ();
125
UI_setPreviewToggleStatus( 0 );
115
filter=getLastVideoFilter(curframe,remaining);
131
119
filter=getFirstVideoFilter(curframe,remaining );
133
122
max=filter->getInfo()->nb_frames;
135
124
// compute how much a frame lasts in ms
136
125
one_frame = (uint32_t) floor(1000.*1000.*10. / filter->getInfo()->fps1000);
137
126
err = one_frame % 10;
138
127
one_frame /= 10; // Duration of a frame in ms, err =leftover in 1/10 ms
139
buffer=new ADMImage(filter->getInfo()->width,filter->getInfo()->height);
140
129
// go to RealTime...
141
printf(" One frame : %lu, err=%lu ms\n", one_frame, err);
142
// read frame in chunk
143
if(!filter->getFrameNumberNoAlloc(1,&framelen,buffer,&flags))
145
printf("\n cannot read frame!\n");
130
printf("One frame : %lu, err=%lu ms\n", one_frame, err);
150
132
// prepare 1st frame
155
137
#ifdef HAVE_AUDIO
156
138
ComputePreload();
158
renderResize(filter->getInfo()->width,filter->getInfo()->height,currentZoom);
159
renderStartPlaying();
142
//renderStartPlaying();
160
143
// reset timer reference
145
admPreview::deferDisplay(1,curframe);
146
admPreview::update(played_frame);
165
renderUpdateImage(buffer->data);
166
if(mode_preview&&!guiOutputDisplay)
168
editorUpdatePreview(played_frame);
170
update_status_bar(buffer);
150
admPreview::displayNow(played_frame);;
172
153
time_a = getTime(0);
177
158
if((played_frame)>=(max-1))
179
printf("\n End met (%lu / %lu )\n",played_frame,max);
160
printf("\nEnd met (%lu / %lu )\n",played_frame,max);
182
if(!filter->getFrameNumberNoAlloc(played_frame+1,&framelen,buffer,&flags))
184
printf("\n cannot read frame!\n");
164
admPreview::update(played_frame+1);;
234
212
// go back to normal display mode
235
213
//____________________________________
240
renderResize(avifileinfo->width , avifileinfo->height,currentZoom);
241
216
getFirstVideoFilter( );
242
//video_body->getUncompressedFrame(curframe, rdr_decomp_buffer,&flags);
243
GUI_getFrame(curframe, rdr_decomp_buffer, &flags);
244
renderUpdateImage(rdr_decomp_buffer->data);
246
update_status_bar(rdr_decomp_buffer);
249
editorUpdatePreview(curframe);
218
admPreview::deferDisplay(0,0);
220
// Updated by expose ?
221
admPreview::update(curframe);
251
224
#ifdef HAVE_AUDIO
252
225
if (currentaudiostream)
370
345
channels= playback->getInfo()->channels;
371
346
one_audio_frame = (one_frame * wavinfo->frequency * channels); // 1000 *nb audio bytes per ms
372
347
one_audio_frame /= 1000; // In elemtary info (float)
373
printf("\n 1 audio frame = %lu bytes (1)", one_audio_frame);
348
printf("1 audio frame = %lu bytes\n", one_audio_frame);
374
349
// 3 sec buffer..
375
350
wavbuf = (float *) ADM_alloc((3 * channels * wavinfo->frequency*wavinfo->channels));
376
351
ADM_assert(wavbuf);