diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-02-12 04:09:48 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-02-12 04:09:48 +0400 |
commit | 5c5685f6c5bfc9a6c838aa837f1b5980127bcbc3 (patch) | |
tree | 3be4711bfe8b23cecee40c0cb9d0c041b66e7c0f /source/blender/blenkernel | |
parent | eecfa9473c985024128567fda33f8fd19bbda7a8 (diff) | |
parent | 24fc50907d811823c2d78fd03080376b0089c6e9 (diff) |
Merged changes in the trunk up to revision 44039.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_blender.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_writeffmpeg.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/idcode.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/particle.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/writeffmpeg.c | 57 |
9 files changed, 52 insertions, 23 deletions
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 50fef032b75..7236015054d 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -51,7 +51,7 @@ extern "C" { /* can be left blank, otherwise a,b,c... etc with no quotes */ #define BLENDER_VERSION_CHAR /* alpha/beta/rc/release, docs use this */ -#define BLENDER_VERSION_CYCLE beta +#define BLENDER_VERSION_CYCLE rc extern char versionstr[]; /* from blender.c */ diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h index e99dece0f7c..4c42d1e4a6c 100644 --- a/source/blender/blenkernel/BKE_writeffmpeg.h +++ b/source/blender/blenkernel/BKE_writeffmpeg.h @@ -74,7 +74,7 @@ void filepath_ffmpeg(char* string, struct RenderData* rd); extern void ffmpeg_set_preset(struct RenderData *rd, int preset); extern void ffmpeg_verify_image_type(struct RenderData *rd, struct ImageFormatData *imf); -extern void ffmpeg_verify_lossless_format(struct RenderData *rd, struct ImageFormatData *imf); +extern void ffmpeg_verify_codec_settings(struct RenderData *rd); extern struct IDProperty *ffmpeg_property_add(struct RenderData *Rd, const char *type, int opt_index, int parent_index); extern int ffmpeg_property_add_string(struct RenderData *rd, const char *type, const char *str); diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index 3f3e3b80042..a95cd8d00d8 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -650,11 +650,11 @@ void defvert_remove_group(MDeformVert *dvert, MDeformWeight *dw) dvert->dw[i]= dvert->dw[dvert->totweight]; } memcpy(dw_new, dvert->dw, sizeof(MDeformWeight) * dvert->totweight); - MEM_freeN(dvert->dw); #else memcpy(dw_new, dvert->dw, sizeof(MDeformWeight)*i); memcpy(dw_new+i, dvert->dw+i+1, sizeof(MDeformWeight)*(dvert->totweight-i)); #endif + MEM_freeN(dvert->dw); } dvert->dw = dw_new; } diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index e67056cdd9e..19fc75a88fe 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -398,8 +398,11 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O // fprintf(stderr,"armature %s target :%s \n", ob->id.name, target->id.name); node3 = dag_get_node(dag, ct->tar); - if (ct->subtarget[0]) + if (ct->subtarget[0]) { dag_add_relation(dag,node3,node, DAG_RL_OB_DATA|DAG_RL_DATA_DATA, cti->name); + if(ct->tar->type == OB_MESH) + node3->customdata_mask |= CD_MASK_MDEFORMVERT; + } else if(ELEM3(con->type, CONSTRAINT_TYPE_FOLLOWPATH, CONSTRAINT_TYPE_CLAMPTO, CONSTRAINT_TYPE_SPLINEIK)) dag_add_relation(dag,node3,node, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, cti->name); else diff --git a/source/blender/blenkernel/intern/idcode.c b/source/blender/blenkernel/intern/idcode.c index a7aa4836be5..c7dec3d8f4b 100644 --- a/source/blender/blenkernel/intern/idcode.c +++ b/source/blender/blenkernel/intern/idcode.c @@ -58,7 +58,7 @@ static IDType idtypes[]= { { ID_ID, "ID", "ids", 0}, /* plural is fake */ { ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE}, { ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */ - { ID_KE, "Key", "keys", 0}, + { ID_KE, "Key", "shape_keys", 0}, { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE}, { ID_LI, "Library", "libraries", 0}, { ID_LS, "FreestyleLineStyle", "linestyles", IDTYPE_FLAGS_ISLINKABLE}, diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index cba92e7a14c..f9f02751d82 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1315,7 +1315,7 @@ UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned for(a=0; a<totface; a++, mf++) if(!selected || (!(mf->flag & ME_HIDE) && (mf->flag & ME_FACE_SEL))) totuv += (mf->v4)? 4: 3; - + if(totuv==0) return NULL; diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 3a4ae5797a0..cd3933d3c44 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -4524,7 +4524,6 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3] madd_v3_v3fl(center, yvec, bb->offset[1]); } - void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys) { ParticleSimulationData sim= {0}; diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index e4fa2bde63b..f0dea976aa9 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -44,12 +44,12 @@ #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "BLI_utildefines.h" #include "BLI_blenlib.h" #include "BLI_edgehash.h" #include "BLI_math.h" #include "BLI_memarena.h" #include "BLI_pbvh.h" -#include "BLI_utildefines.h" #include "BKE_cdderivedmesh.h" #include "BKE_global.h" diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index 0b043e26ab7..bae4d9c4b4e 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -49,6 +49,8 @@ # include "AUD_C-API.h" #endif +#include "BLI_utildefines.h" + #include "BKE_global.h" #include "BKE_idprop.h" #include "BKE_main.h" @@ -250,7 +252,8 @@ static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportLis outsize = avcodec_encode_video(c, video_buffer, video_buffersize, frame); - if (outsize != 0) { + + if (outsize > 0) { AVPacket packet; av_init_packet(&packet); @@ -268,14 +271,13 @@ static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportLis packet.data = video_buffer; packet.size = outsize; ret = av_interleaved_write_frame(outfile, &packet); - } else { - ret = 0; + success = (ret == 0); + } else if (outsize < 0) { + success = 0; } - if (ret != 0) { - success= 0; + if (!success) BKE_report(reports, RPT_ERROR, "Error writing frame."); - } return success; } @@ -483,7 +485,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex if (!codec) return NULL; /* Be sure to use the correct pixel format(e.g. RGB, YUV) */ - + if (codec->pix_fmts) { c->pix_fmt = codec->pix_fmts[0]; } else { @@ -509,6 +511,12 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex c->pix_fmt = PIX_FMT_RGB32; } + if ( codec_id == CODEC_ID_QTRLE ) { + if (rd->im_format.planes == R_IMF_PLANES_RGBA) { + c->pix_fmt = PIX_FMT_ARGB; + } + } + if ((of->oformat->flags & AVFMT_GLOBALHEADER) // || !strcmp(of->oformat->name, "mp4") // || !strcmp(of->oformat->name, "mov") @@ -538,7 +546,19 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex return NULL; } - video_buffersize = avpicture_get_size(c->pix_fmt, c->width, c->height); + if ( codec_id == CODEC_ID_QTRLE ) { + // normally it should be enough to have buffer with actual image size, + // but some codecs like QTRLE might store extra information in this buffer, + // so it should be a way larger + + // maximum video buffer size is 6-bytes per pixel, plus DPX header size (1664) + // (from FFmpeg sources) + int size = c->width * c->height; + video_buffersize = 7*size + 10000; + } + else + video_buffersize = avpicture_get_size(c->pix_fmt, c->width, c->height); + video_buffer = (uint8_t*)MEM_mallocN(video_buffersize*sizeof(uint8_t), "FFMPEG video buffer"); @@ -1200,12 +1220,14 @@ int ffmpeg_property_add_string(RenderData *rd, const char * type, const char * s return 1; } -static void ffmpeg_set_expert_options(RenderData *rd, int preset) +static void ffmpeg_set_expert_options(RenderData *rd) { + int codec_id = rd->ffcodecdata.codec; + if(rd->ffcodecdata.properties) IDP_FreeProperty(rd->ffcodecdata.properties); - if(preset == FFMPEG_PRESET_H264) { + if(codec_id == CODEC_ID_H264) { /* * All options here are for x264, but must be set via ffmpeg. * The names are therefore different - Search for "x264 to FFmpeg option mapping" @@ -1248,6 +1270,12 @@ static void ffmpeg_set_expert_options(RenderData *rd, int preset) if(rd->ffcodecdata.flags & FFMPEG_LOSSLESS_OUTPUT) ffmpeg_property_add_string(rd, "video", "cqp:0"); } +#if 0 /* disabled for after release */ + else if(codec_id == CODEC_ID_DNXHD) { + if(rd->ffcodecdata.flags & FFMPEG_LOSSLESS_OUTPUT) + ffmpeg_property_add_string(rd, "video", "mbd:rd"); + } +#endif } void ffmpeg_set_preset(RenderData *rd, int preset) @@ -1317,7 +1345,6 @@ void ffmpeg_set_preset(RenderData *rd, int preset) rd->ffcodecdata.mux_packet_size = 2048; rd->ffcodecdata.mux_rate = 10080000; - ffmpeg_set_expert_options(rd, preset); break; case FFMPEG_PRESET_THEORA: @@ -1341,6 +1368,8 @@ void ffmpeg_set_preset(RenderData *rd, int preset) break; } + + ffmpeg_set_expert_options(rd); } void ffmpeg_verify_image_type(RenderData *rd, ImageFormatData *imf) @@ -1388,11 +1417,9 @@ void ffmpeg_verify_image_type(RenderData *rd, ImageFormatData *imf) } } -void ffmpeg_verify_lossless_format(RenderData *rd, ImageFormatData *imf) +void ffmpeg_verify_codec_settings(RenderData *rd) { - if(imf->imtype == R_IMF_IMTYPE_H264) { - ffmpeg_set_expert_options(rd, FFMPEG_PRESET_H264); - } + ffmpeg_set_expert_options(rd); } #endif |