[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15314] trunk/blender/source/blender: == FFMPEG ==
Peter Schlaile
peter at schlaile.de
Sun Jun 22 22:39:46 CEST 2008
Revision: 15314
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15314
Author: schlaile
Date: 2008-06-22 22:39:41 +0200 (Sun, 22 Jun 2008)
Log Message:
-----------
== FFMPEG ==
Added serious interlacing to movies opened using ffmpeg.
(Other video decoders to be done)
Rational: deinterlacing, if done seriously _has_ to be done
in YUV-space. Since internal interface first converts data
to RGB we are pretty much lost (and fall back to IMB_filtery
in that case).
Modified Paths:
--------------
trunk/blender/source/blender/imbuf/IMB_imbuf_types.h
trunk/blender/source/blender/imbuf/intern/anim.c
trunk/blender/source/blender/src/buttons_scene.c
trunk/blender/source/blender/src/sequence.c
Modified: trunk/blender/source/blender/imbuf/IMB_imbuf_types.h
===================================================================
--- trunk/blender/source/blender/imbuf/IMB_imbuf_types.h 2008-06-22 20:24:27 UTC (rev 15313)
+++ trunk/blender/source/blender/imbuf/IMB_imbuf_types.h 2008-06-22 20:39:41 UTC (rev 15314)
@@ -149,6 +149,7 @@
#define IB_zbuffloat (1 << 16)
#define IB_multilayer (1 << 17)
#define IB_imginfo (1 << 18)
+#define IB_animdeinterlace (1 << 19)
/*
* The bit flag is stored in the ImBuf.ftype variable.
Modified: trunk/blender/source/blender/imbuf/intern/anim.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/anim.c 2008-06-22 20:24:27 UTC (rev 15313)
+++ trunk/blender/source/blender/imbuf/intern/anim.c 2008-06-22 20:39:41 UTC (rev 15314)
@@ -638,6 +638,7 @@
AVPacket packet;
int64_t pts_to_search = 0;
int pos_found = 1;
+ int filter_y = 0;
if (anim == 0) return (0);
@@ -722,6 +723,18 @@
}
if(frameFinished && pos_found == 1) {
+ if (anim->ib_flags & IB_animdeinterlace) {
+ if (avpicture_deinterlace(
+ anim->pFrame,
+ anim->pFrame,
+ anim->pCodecCtx->pix_fmt,
+ anim->pCodecCtx->width,
+ anim->pCodecCtx->height)
+ < 0) {
+ filter_y = 1;
+ }
+ }
+
if (G.order == B_ENDIAN) {
int * dstStride
= anim->pFrameRGB->linesize;
@@ -823,6 +836,10 @@
av_free_packet(&packet);
}
+ if (filter_y && ibuf) {
+ IMB_filtery(ibuf);
+ }
+
return(ibuf);
}
@@ -983,6 +1000,7 @@
char head[256], tail[256];
unsigned short digits;
int pic;
+ int filter_y = (anim->ib_flags & IB_animdeinterlace);
if (anim == NULL) return(0);
@@ -1040,6 +1058,7 @@
case ANIM_FFMPEG:
ibuf = ffmpeg_fetchibuf(anim, position);
if (ibuf) anim->curposition = position;
+ filter_y = 0; /* done internally */
break;
#endif
#ifdef WITH_REDCODE
@@ -1052,6 +1071,7 @@
if (ibuf) {
if (anim->ib_flags & IB_ttob) IMB_flipy(ibuf);
+ if (filter_y) IMB_filtery(ibuf);
sprintf(ibuf->name, "%s.%04d", anim->name, anim->curposition + 1);
}
Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c 2008-06-22 20:24:27 UTC (rev 15313)
+++ trunk/blender/source/blender/src/buttons_scene.c 2008-06-22 20:39:41 UTC (rev 15314)
@@ -900,7 +900,7 @@
"Convert input to float data");
uiDefButBitI(block, TOG, SEQ_FILTERY,
- B_SEQ_BUT_RELOAD, "FilterY",
+ B_SEQ_BUT_RELOAD_FILE, "FilterY",
170,110,80,19, &last_seq->flag,
0.0, 21.0, 100, 0,
"For video movies to remove fields");
Modified: trunk/blender/source/blender/src/sequence.c
===================================================================
--- trunk/blender/source/blender/src/sequence.c 2008-06-22 20:24:27 UTC (rev 15313)
+++ trunk/blender/source/blender/src/sequence.c 2008-06-22 20:39:41 UTC (rev 15314)
@@ -445,7 +445,10 @@
seq->strip->len = seq->len;
} else if (seq->type == SEQ_MOVIE) {
if(seq->anim) IMB_free_anim(seq->anim);
- seq->anim = openanim(str, IB_rect);
+ seq->anim = openanim(
+ str, IB_rect |
+ ((seq->flag & SEQ_FILTERY)
+ ? IB_animdeinterlace : 0));
if (!seq->anim) {
return;
@@ -1445,7 +1448,7 @@
seq->strip->orx= se->ibuf->x;
seq->strip->ory= se->ibuf->y;
- if(seq->flag & SEQ_FILTERY) {
+ if((seq->flag & SEQ_FILTERY) && seq->type != SEQ_MOVIE) {
IMB_filtery(se->ibuf);
}
@@ -1772,8 +1775,11 @@
BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name);
BLI_convertstringcode(name, G.sce);
BLI_convertstringframe(name, G.scene->r.cfra);
-
- seq->anim = openanim(name, IB_rect);
+
+ seq->anim = openanim(
+ name, IB_rect |
+ ((seq->flag & SEQ_FILTERY)
+ ? IB_animdeinterlace : 0));
}
if(seq->anim) {
IMB_anim_set_preseek(seq->anim, seq->anim_preseek);
More information about the Bf-blender-cvs
mailing list