git.asbjorn.biz
/
swftools.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f1a650b
)
new option skipframes
author
kramm
<kramm>
Sun, 7 Jan 2007 20:24:45 +0000
(20:24 +0000)
committer
kramm
<kramm>
Sun, 7 Jan 2007 20:24:45 +0000
(20:24 +0000)
avi2swf/avi2swf.cc
patch
|
blob
|
history
avi2swf/v2swf.c
patch
|
blob
|
history
diff --git
a/avi2swf/avi2swf.cc
b/avi2swf/avi2swf.cc
index
2ce63c1
..
c68fedb
100644
(file)
--- a/
avi2swf/avi2swf.cc
+++ b/
avi2swf/avi2swf.cc
@@
-49,6
+49,7
@@
static float audio_adjust = 0;
static int mp3_bitrate = 32;
static int samplerate = 11025;
static int numframes = 0;
static int mp3_bitrate = 32;
static int samplerate = 11025;
static int numframes = 0;
+static char* skipframes = 0;
static struct options_t options[] = {
{"h", "help"},
static struct options_t options[] = {
{"h", "help"},
@@
-141,6
+142,10
@@
int args_callback_option(char*name,char*val)
skip = atoi(val);
return 1;
}
skip = atoi(val);
return 1;
}
+ else if(!strcmp(name, "C")) {
+ skipframes = strdup(val);
+ return 1;
+ }
else if(!strcmp(name, "s")) {
scale = atoi(val)/100.0;
if(scale>1.0 || scale<=0) {
else if(!strcmp(name, "s")) {
scale = atoi(val)/100.0;
if(scale>1.0 || scale<=0) {
@@
-283,6
+288,8
@@
int main (int argc,char ** argv)
v2swf_setparameter(&v2swf, "prescale", "1");
v2swf_setparameter(&v2swf, "flash_version", itoa(flashversion));
v2swf_setparameter(&v2swf, "keyframe_interval", itoa(keyframe_interval));
v2swf_setparameter(&v2swf, "prescale", "1");
v2swf_setparameter(&v2swf, "flash_version", itoa(flashversion));
v2swf_setparameter(&v2swf, "keyframe_interval", itoa(keyframe_interval));
+ if(skipframes)
+ v2swf_setparameter(&v2swf, "skipframes", skipframes);
if(expensive)
v2swf_setparameter(&v2swf, "motioncompensation", "1");
if(flip)
if(expensive)
v2swf_setparameter(&v2swf, "motioncompensation", "1");
if(flip)
diff --git
a/avi2swf/v2swf.c
b/avi2swf/v2swf.c
index
70d639e
..
0eb78f6
100644
(file)
--- a/
avi2swf/v2swf.c
+++ b/
avi2swf/v2swf.c
@@
-70,6
+70,8
@@
typedef struct _v2swf_internal_t
int keyframe;
int showframe;
int keyframe;
int showframe;
+ int skipframes;
+
float samplepos;
float framesamplepos;
int samplewritepos;
float samplepos;
float framesamplepos;
int samplewritepos;
@@
-77,6
+79,8
@@
typedef struct _v2swf_internal_t
int soundstreamhead;
int seek;
int soundstreamhead;
int seek;
+ int numframes;
+
double audio_fix;
int fixheader;
int prescale;
double audio_fix;
int fixheader;
int prescale;
@@
-619,6
+623,21
@@
static int writeAudioOnly(v2swf_internal_t*i)
return 1;
}
return 1;
}
+static int getframe(v2swf_internal_t*i)
+{
+ if(!i->skipframes)
+ return videoreader_getimage(i->video, i->vrbuffer);
+ else {
+ int t;
+ for(t=0;t<i->skipframes;t++) {
+ int ret = videoreader_getimage(i->video, i->vrbuffer);
+ if(!ret)
+ return 0;
+ }
+ return 1;
+ }
+}
+
static int encodeoneframe(v2swf_internal_t*i)
{
videoreader_t*video = i->video;
static int encodeoneframe(v2swf_internal_t*i)
{
videoreader_t*video = i->video;
@@
-636,11
+655,11
@@
static int encodeoneframe(v2swf_internal_t*i)
return writeAudioOnly(i);
}
return writeAudioOnly(i);
}
- if(!videoreader_getimage(i->video, i->vrbuffer))
+ if(!getframe(i) || (i->numframes && i->frames==i->numframes))
{
i->video_eof = 1;
msg("videoreader returned eof\n");
{
i->video_eof = 1;
msg("videoreader returned eof\n");
- if(i->audio_eof) {
+ if(i->audio_eof || (i->numframes && i->frames==i->numframes)) {
finish(i);
return 0;
} else {
finish(i);
return 0;
} else {
@@
-831,6
+850,15
@@
static int encodeoneframe(v2swf_internal_t*i)
return 1;
}
return 1;
}
+static void init_fps(v2swf_internal_t*i)
+{
+ int oldframerate = i->framerate;
+ i->framerate = i->video->fps / i->skipframes;
+ i->video_fps = ((int)(i->framerate*256))/256.0;
+ if(oldframerate)
+ msg("setting new framerate to %f\n", i->framerate);
+}
+
int v2swf_init(v2swf_t*v2swf, videoreader_t * video)
{
int ret = 0;
int v2swf_init(v2swf_t*v2swf, videoreader_t * video)
{
int ret = 0;
@@
-844,10
+872,13
@@
int v2swf_init(v2swf_t*v2swf, videoreader_t * video)
ringbuffer_init(&i->r);
ringbuffer_init(&i->r);
+ i->skipframes = 1;
+ i->framerate = 0;
+ i->video = video;
+ init_fps(i);
+
msg("video: %dx%d, fps %f\n", video->width, video->height, video->fps);
msg("video: %dx%d, fps %f\n", video->width, video->height, video->fps);
- i->video = video;
- i->video_fps = ((int)(video->fps*256))/256.0;
i->blockdiff = 64;
i->keyframe_interval = 8;
i->quality = 20;
i->blockdiff = 64;
i->keyframe_interval = 8;
i->quality = 20;
@@
-855,11
+886,12
@@
int v2swf_init(v2swf_t*v2swf, videoreader_t * video)
i->add_cut = 1;
i->samplerate = 11025;
i->prescale = 0;
i->add_cut = 1;
i->samplerate = 11025;
i->prescale = 0;
+ i->numframes= 0;
+ i->skipframes = 0;
i->head_done = 0;
i->diffmode = DIFFMODE_QMEAN;
i->audio_fix = 1.0;
i->fixheader = 0;
i->head_done = 0;
i->diffmode = DIFFMODE_QMEAN;
i->audio_fix = 1.0;
i->fixheader = 0;
- i->framerate = i->video_fps;
i->fpsratio = 1.00000000000;
i->fpspos = 0.0;
i->bitrate = 32;
i->fpsratio = 1.00000000000;
i->fpspos = 0.0;
i->bitrate = 32;
@@
-942,6
+974,11
@@
void v2swf_setparameter(v2swf_t*v2swf, char*name, char*value)
i->scale = atoi(value);
} else if(!strcmp(name, "quality")) {
i->quality = atoi(value);
i->scale = atoi(value);
} else if(!strcmp(name, "quality")) {
i->quality = atoi(value);
+ } else if(!strcmp(name, "skipframes")) {
+ i->skipframes = atoi(value);
+ init_fps(i);
+ } else if(!strcmp(name, "numframes")) {
+ i->numframes = atoi(value);
} else if(!strcmp(name, "motioncompensation")) {
i->domotion = atoi(value);
} else if(!strcmp(name, "prescale")) {
} else if(!strcmp(name, "motioncompensation")) {
i->domotion = atoi(value);
} else if(!strcmp(name, "prescale")) {