svn merge -r40166:40279 ^/trunk/blender
[blender.git] / source / blender / makesrna / intern / rna_scene.c
index cf5b38aeb3aed25fc93d9bbc50168b2a2135796a..c50519479ebec2adf7bfb71076bbf110c0f0270b 100644 (file)
@@ -39,6 +39,9 @@
 #include "DNA_particle_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_userdef_types.h"
+#include "BLI_math.h"
+
+#include "BKE_tessmesh.h"
 
 /* Include for Bake Options */
 #include "RE_pipeline.h"
@@ -46,7 +49,7 @@
 #ifdef WITH_QUICKTIME
 #include "quicktime_export.h"
 #  ifdef WITH_AUDASPACE
-#    include "AUD_C-API.h"
+#    include "AUD_Space.h"
 #  endif
 #endif
 
@@ -100,14 +103,6 @@ EnumPropertyItem snap_element_items[] = {
        {SCE_SNAP_MODE_VOLUME, "VOLUME", ICON_SNAP_VOLUME, "Volume", "Snap to volume"},
        {0, NULL, 0, NULL, NULL}};
 
-static EnumPropertyItem audio_channel_items[] = {
-       {1, "MONO", 0, "Mono", "Set audio channels to mono"},
-       {2, "STEREO", 0, "Stereo", "Set audio channels to stereo"},
-       {4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
-       {6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
-       {8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
-       {0, NULL, 0, NULL, NULL}};
-
 EnumPropertyItem image_type_items[] = {
        {0, "", 0, "Image", NULL},
        {R_BMP, "BMP", ICON_FILE_IMAGE, "BMP", "Output image in bitmap format"},
@@ -143,7 +138,9 @@ EnumPropertyItem image_type_items[] = {
 #endif
        {R_AVIJPEG, "AVI_JPEG", ICON_FILE_MOVIE, "AVI JPEG", "Output video in AVI JPEG format"},
        {R_AVIRAW, "AVI_RAW", ICON_FILE_MOVIE, "AVI Raw", "Output video in AVI Raw format"},
+#ifdef WITH_FRAMESERVER
        {R_FRAMESERVER, "FRAMESERVER", ICON_FILE_SCRIPT, "Frame Server", "Output image to a frameserver"},
+#endif
 #ifdef WITH_FFMPEG
        {R_H264, "H264", ICON_FILE_MOVIE, "H.264", "Output video in H.264 format"},
        {R_FFMPEG, "FFMPEG", ICON_FILE_MOVIE, "MPEG", "Output video in MPEG format"},
@@ -161,6 +158,12 @@ EnumPropertyItem image_type_items[] = {
 #endif
        {0, NULL, 0, NULL, NULL}};
 
+EnumPropertyItem image_color_mode_items[] ={
+       {R_PLANESBW, "BW", 0, "BW", "Images get saved in 8 bits grayscale (only PNG, JPEG, TGA, TIF)"},
+       {R_PLANES24, "RGB", 0, "RGB", "Images are saved with RGB (color) data"},
+       {R_PLANES32, "RGBA", 0, "RGBA", "Images are saved with RGB and Alpha data (if supported)"},
+       {0, NULL, 0, NULL, NULL}};
+
 #ifdef RNA_RUNTIME
 
 #include "DNA_anim_types.h"
@@ -188,6 +191,7 @@ EnumPropertyItem image_type_items[] = {
 #include "BKE_mesh.h"
 #include "BKE_sound.h"
 #include "BKE_screen.h"
+#include "BKE_sequencer.h"
 #include "BKE_animsys.h"
 
 #include "WM_api.h"
@@ -338,6 +342,26 @@ static void rna_Scene_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
        DAG_on_visible_update(bmain, FALSE);
 }
 
+static void rna_Scene_fps_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+{
+       sound_update_fps(scene);
+       seq_update_sound_bounds_all(scene);
+}
+
+static void rna_Scene_listener_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
+{
+       sound_update_scene_listener(scene);
+}
+
+static void rna_Scene_volume_set(PointerRNA *ptr, float value)
+{
+       Scene *scene= (Scene*)(ptr->data);
+
+       scene->audio.volume = value;
+       if(scene->sound_scene)
+               sound_set_scene_volume(scene, value);
+}
+
 static void rna_Scene_framelen_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
 {      
        scene->r.framelen= (float)scene->r.framapto/(float)scene->r.images;
@@ -418,11 +442,10 @@ static void rna_Scene_preview_range_end_frame_set(PointerRNA *ptr, int value)
        data->r.pefra= value;
 }
 
-static void rna_Scene_frame_update(bContext *C, PointerRNA *UNUSED(ptr))
+static void rna_Scene_frame_update(Main *bmain, Scene *UNUSED(current_scene), PointerRNA *ptr)
 {
-       //Scene *scene= ptr->id.data;
-       //ED_update_for_newframe(C);
-       sound_seek_scene(C);
+       Scene *scene= (Scene*)ptr->id.data;
+       sound_seek_scene(bmain, scene);
 }
 
 static PointerRNA rna_Scene_active_keying_set_get(PointerRNA *ptr)
@@ -706,8 +729,8 @@ static void rna_RenderSettings_active_layer_set(PointerRNA *ptr, PointerRNA valu
 {
        RenderData *rd= (RenderData*)ptr->data;
        SceneRenderLayer *srl= (SceneRenderLayer*)value.data;
-       
-       rd->actlay = BLI_findindex(&rd->layers, srl);
+       const int index= BLI_findindex(&rd->layers, srl);
+       if (index != -1) rd->actlay= index;
 }
 
 static void rna_RenderSettings_engine_set(PointerRNA *ptr, int value)
@@ -716,7 +739,7 @@ static void rna_RenderSettings_engine_set(PointerRNA *ptr, int value)
        RenderEngineType *type= BLI_findlink(&R_engines, value);
 
        if(type)
-               BLI_strncpy(rd->engine, type->idname, sizeof(rd->engine));
+               BLI_strncpy_utf8(rd->engine, type->idname, sizeof(rd->engine));
 }
 
 static EnumPropertyItem *rna_RenderSettings_engine_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free)
@@ -789,7 +812,7 @@ static void rna_SceneRenderLayer_name_set(PointerRNA *ptr, const char *value)
        Scene *scene= (Scene*)ptr->id.data;
        SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data;
 
-       BLI_strncpy(rl->name, value, sizeof(rl->name));
+       BLI_strncpy_utf8(rl->name, value, sizeof(rl->name));
 
        if(scene->nodetree) {
                bNode *node;
@@ -864,9 +887,9 @@ static void rna_Scene_editmesh_select_mode_set(PointerRNA *ptr, const int *value
 
                if(scene->basact) {
                        Mesh *me= get_mesh(scene->basact->object);
-                       if(me && me->edit_mesh && me->edit_mesh->selectmode != flag) {
-                               me->edit_mesh->selectmode= flag;
-                               EM_selectmode_set(me->edit_mesh);
+                       if(me && me->edit_btmesh && me->edit_btmesh->selectmode != flag) {
+                               me->edit_btmesh->selectmode= flag;
+                               EDBM_selectmode_set(me->edit_btmesh);
                        }
                }
        }
@@ -878,7 +901,7 @@ static void rna_Scene_editmesh_select_mode_update(Main *UNUSED(bmain), Scene *sc
 
        if(scene->basact) {
                me= get_mesh(scene->basact->object);
-               if(me && me->edit_mesh==NULL)
+               if(me && me->edit_btmesh==NULL)
                        me= NULL;
        }
 
@@ -990,16 +1013,15 @@ static TimeMarker *rna_TimeLine_add(Scene *scene, const char name[])
        TimeMarker *marker = MEM_callocN(sizeof(TimeMarker), "TimeMarker");
        marker->flag= SELECT;
        marker->frame= 1;
-       BLI_strncpy(marker->name, name, sizeof(marker->name));
+       BLI_strncpy_utf8(marker->name, name, sizeof(marker->name));
        BLI_addtail(&scene->markers, marker);
        return marker;
 }
 
 static void rna_TimeLine_remove(Scene *scene, ReportList *reports, TimeMarker *marker)
 {
-       /* try to remove the F-Curve from the action */
        if (!BLI_remlink_safe(&scene->markers, marker)) {
-               BKE_reportf(reports, RPT_ERROR, "TimelineMarker '%s' not found in action '%s'", marker->name, scene->id.name+2);
+               BKE_reportf(reports, RPT_ERROR, "TimelineMarker '%s' not found in scene '%s'", marker->name, scene->id.name+2);
                return;
        }
 
@@ -1188,9 +1210,9 @@ static void rna_def_tool_settings(BlenderRNA  *brna)
        RNA_def_property_ui_icon(prop, ICON_RETOPO, 0);
        RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
 
-       prop= RNA_def_property(srna, "use_snap_project_self", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_negative_sdna(prop, NULL, "snap_flag", SCE_SNAP_PROJECT_NO_SELF);
-       RNA_def_property_ui_text(prop, "Project to Self", "Project into its self (editmode)");
+       prop= RNA_def_property(srna, "use_snap_self", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "snap_flag", SCE_SNAP_NO_SELF);
+       RNA_def_property_ui_text(prop, "Project to Self", "Snap onto its self (editmode)");
        RNA_def_property_ui_icon(prop, ICON_ORTHO, 0);
        RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
        
@@ -1218,7 +1240,7 @@ static void rna_def_tool_settings(BlenderRNA  *brna)
        prop= RNA_def_property(srna, "use_keyframe_insert_keyingset", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_ONLYKEYINGSET);
        RNA_def_property_ui_text(prop, "Auto Keyframe Insert Keying Set", "Automatic keyframe insertion using active Keying Set only");
-       RNA_def_property_ui_icon(prop, ICON_KEY_HLT, 0); // XXX: we need a dedicated icon
+       RNA_def_property_ui_icon(prop, ICON_KEYINGSET, 0);
        
        /* UV */
        prop= RNA_def_property(srna, "uv_select_mode", PROP_ENUM, PROP_NONE);
@@ -1419,7 +1441,7 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
        prop= RNA_def_property(srna, "layers_zmask", PROP_BOOLEAN, PROP_LAYER);
        RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1);
        RNA_def_property_array(prop, 20);
-       RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers");
+       RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers for solid faces");
        if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
        else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 
@@ -1527,6 +1549,12 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
        if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
        else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 
+       prop= RNA_def_property(srna, "use_pass_material_index", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXMA);
+       RNA_def_property_ui_text(prop, "Material Index", "Deliver material index pass");
+       if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
+       else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
        prop= RNA_def_property(srna, "use_pass_color", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA);
        RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass");
@@ -1644,6 +1672,96 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
        else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 }
 
+static void rna_def_scene_game_recast_data(BlenderRNA *brna)
+{
+       StructRNA *srna;
+       PropertyRNA *prop;
+
+       srna= RNA_def_struct(brna, "SceneGameRecastData", NULL);
+       RNA_def_struct_sdna(srna, "RecastData");
+       RNA_def_struct_nested(brna, srna, "Scene");
+       RNA_def_struct_ui_text(srna, "Recast Data", "Recast data for a Game datablock");
+
+       prop= RNA_def_property(srna, "cell_size", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "cellsize");
+       RNA_def_property_ui_range(prop, 0.1, 1, 1, 2);
+       RNA_def_property_ui_text(prop, "Cell Size", "Rasterized cell size");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "cell_height", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "cellheight");
+       RNA_def_property_ui_range(prop, 0.1, 1, 1, 2);
+       RNA_def_property_ui_text(prop, "Cell Height", "Rasterized cell height");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "agent_height", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "agentheight");
+       RNA_def_property_ui_range(prop, 0.1, 5, 1, 2);
+       RNA_def_property_ui_text(prop, "Agent Height", "Minimum height where the agent can still walk");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "agent_radius", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "agentradius");
+       RNA_def_property_ui_range(prop, 0.1, 5, 1, 2);
+       RNA_def_property_ui_text(prop, "Agent Radius", "Radius of the agent");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "max_climb", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "agentmaxclimb");
+       RNA_def_property_ui_range(prop, 0.1, 5, 1, 2);
+       RNA_def_property_ui_text(prop, "Max Climb", "Maximum height between grid cells the agent can climb");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "max_slope", PROP_FLOAT, PROP_ANGLE);
+       RNA_def_property_float_sdna(prop, NULL, "agentmaxslope");
+       RNA_def_property_range(prop, 0, M_PI/2);
+       RNA_def_property_ui_text(prop, "Max Slope", "Maximum walkable slope angle in degrees");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+
+       prop= RNA_def_property(srna, "region_min_size", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "regionminsize");
+       RNA_def_property_ui_range(prop, 0, 150, 1, 2);
+       RNA_def_property_ui_text(prop, "Min Region Size", "Minimum regions size. Smaller regions will be deleted");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "region_merge_size", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "regionmergesize");
+       RNA_def_property_ui_range(prop, 0, 150, 1, 2);
+       RNA_def_property_ui_text(prop, "Merged Region Size", "Minimum regions size. Smaller regions will be merged");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "edge_max_len", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "edgemaxlen");
+       RNA_def_property_ui_range(prop, 0, 50, 1, 2);
+       RNA_def_property_ui_text(prop, "Max Edge Length", "Maximum contour edge length");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "edge_max_error", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "edgemaxerror");
+       RNA_def_property_ui_range(prop, 0.1, 3.0, 1, 2);
+       RNA_def_property_ui_text(prop, "Max Edge Error", "Maximum distance error from contour to cells");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "verts_per_poly", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "vertsperpoly");
+       RNA_def_property_ui_range(prop, 3, 12, 1, 0);
+       RNA_def_property_ui_text(prop, "Verts Per Poly", "Max number of vertices per polygon");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "sample_dist", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "detailsampledist");
+       RNA_def_property_ui_range(prop, 0.0, 16.0, 1, 2);
+       RNA_def_property_ui_text(prop, "Sample Distance", "Detail mesh sample spacing");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "sample_max_error", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "detailsamplemaxerror");
+       RNA_def_property_ui_range(prop, 0.0, 16.0, 1, 2);
+       RNA_def_property_ui_text(prop, "Max Sample Error", "Detail mesh simplification max sample error");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+}
+
 static void rna_def_scene_game_data(BlenderRNA *brna)
 {
        StructRNA *srna;
@@ -1693,6 +1811,12 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
                {GAME_MAT_GLSL, "GLSL", 0, "GLSL", "OpenGL shading language shaders"},
                {0, NULL, 0, NULL, NULL}};
 
+       static EnumPropertyItem obstacle_simulation_items[] = {
+               {OBSTSIMULATION_NONE, "NONE", 0, "None", ""},
+               {OBSTSIMULATION_TOI_rays, "RVO (rays)", 0, "RVO (rays)", ""},
+               {OBSTSIMULATION_TOI_cells, "RVO (cells)", 0, "RVO (cells)", ""},
+               {0, NULL, 0, NULL, NULL}};
+
        srna= RNA_def_struct(brna, "SceneGameData", NULL);
        RNA_def_struct_sdna(srna, "GameData");
        RNA_def_struct_nested(brna, srna, "Scene");
@@ -1899,6 +2023,10 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
        prop= RNA_def_property(srna, "use_auto_start", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_funcs(prop, "rna_GameSettings_auto_start_get", "rna_GameSettings_auto_start_set");
        RNA_def_property_ui_text(prop, "Auto Start", "Automatically start game at load time");
+
+       prop= RNA_def_property(srna, "restrict_animation_updates", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_RESTRICT_ANIM_UPDATES);
+       RNA_def_property_ui_text(prop, "Restrict Animation Updates", "Restrict the number of animation updates to the animation FPS. This is better for performance, but can cause issues with smooth playback.");
        
        /* materials */
        prop= RNA_def_property(srna, "material_mode", PROP_ENUM, PROP_NONE);
@@ -1941,6 +2069,33 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
        RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_EXTRA_TEX);
        RNA_def_property_ui_text(prop, "GLSL Extra Textures", "Use extra textures like normal or specular maps for GLSL rendering");
        RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
+
+       /* obstacle simulation */
+       prop= RNA_def_property(srna, "obstacle_simulation", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "obstacleSimulation");
+       RNA_def_property_enum_items(prop, obstacle_simulation_items);
+       RNA_def_property_ui_text(prop, "Obstacle simulation", "Simulation used for obstacle avoidance in the game engine");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "level_height", PROP_FLOAT, PROP_ACCELERATION);
+       RNA_def_property_float_sdna(prop, NULL, "levelHeight");
+       RNA_def_property_range(prop, 0.0f, 200.0f);
+       RNA_def_property_ui_text(prop, "Level height", "Max difference in heights of obstacles to enable their interaction");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "show_obstacle_simulation", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_SHOW_OBSTACLE_SIMULATION);
+       RNA_def_property_ui_text(prop, "Visualization", "Enable debug visualization for obstacle simulation");
+
+       /* Recast Settings */
+       prop= RNA_def_property(srna, "recast_data", PROP_POINTER, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_NEVER_NULL);
+       RNA_def_property_pointer_sdna(prop, NULL, "recastData");
+       RNA_def_property_struct_type(prop, "SceneGameRecastData");
+       RNA_def_property_ui_text(prop, "Recast Data", "");
+
+       /* Nestled Data  */
+       rna_def_scene_game_recast_data(brna);
 }
 
 static void rna_def_scene_render_layer(BlenderRNA *brna)
@@ -1977,7 +2132,7 @@ static void rna_def_render_layers(BlenderRNA *brna, PropertyRNA *cprop)
        prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
        RNA_def_property_struct_type(prop, "SceneRenderLayer");
        RNA_def_property_pointer_funcs(prop, "rna_RenderSettings_active_layer_get", "rna_RenderSettings_active_layer_set", NULL, NULL);
-       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_NULL);
        RNA_def_property_ui_text(prop, "Active Render Layer", "Active Render Layer");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
 
@@ -2003,13 +2158,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
                {R_ALPHAPREMUL, "PREMUL", 0, "Premultiplied", "Transparent RGB pixels are multiplied by the alpha channel"},
                {R_ALPHAKEY, "STRAIGHT", 0, "Straight Alpha", "Transparent RGB and alpha pixels are unmodified"},
                {0, NULL, 0, NULL, NULL}};
-               
-       static EnumPropertyItem color_mode_items[] ={
-               {R_PLANESBW, "BW", 0, "BW", "Images get saved in 8 bits grayscale (only PNG, JPEG, TGA, TIF)"},
-               {R_PLANES24, "RGB", 0, "RGB", "Images are saved with RGB (color) data"},
-               {R_PLANES32, "RGBA", 0, "RGBA", "Images are saved with RGB and Alpha data (if supported)"},
-               {0, NULL, 0, NULL, NULL}};
-       
+
        static EnumPropertyItem display_mode_items[] ={
                {R_OUTPUT_SCREEN, "SCREEN", 0, "Full Screen", "Images are rendered in full Screen"},
                {R_OUTPUT_AREA, "AREA", 0, "Image Editor", "Images are rendered in Image Editor"},
@@ -2186,6 +2335,14 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
                {0, NULL, 0, NULL, NULL}};
 #endif
 
+       static EnumPropertyItem audio_channel_items[] = {
+               {1, "MONO", 0, "Mono", "Set audio channels to mono"},
+               {2, "STEREO", 0, "Stereo", "Set audio channels to stereo"},
+               {4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
+               {6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
+               {8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
+               {0, NULL, 0, NULL, NULL}};
+
        static EnumPropertyItem engine_items[] = {
                {0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
                {0, NULL, 0, NULL, NULL}};
@@ -2198,7 +2355,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        
        prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_bitflag_sdna(prop, NULL, "planes");
-       RNA_def_property_enum_items(prop, color_mode_items);
+       RNA_def_property_enum_items(prop, image_color_mode_items);
        RNA_def_property_ui_text(prop, "Color Mode", "Choose BW for saving greyscale images, RGB for saving red, green and blue channels, AND RGBA for saving red, green, blue + alpha channels");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
 
@@ -2456,47 +2613,53 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        /* FFMPEG Audio*/
        prop= RNA_def_property(srna, "ffmpeg_audio_codec", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.audio_codec");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_enum_items(prop, ffmpeg_audio_codec_items);
        RNA_def_property_ui_text(prop, "Audio Codec", "FFMpeg audio codec to use");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
        
        prop= RNA_def_property(srna, "ffmpeg_audio_bitrate", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_bitrate");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_range(prop, 32, 384);
        RNA_def_property_ui_text(prop, "Bitrate", "Audio bitrate(kb/s)");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
        
-       prop= RNA_def_property(srna, "ffmpeg_audio_mixrate", PROP_INT, PROP_NONE);
-       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_mixrate");
-       RNA_def_property_range(prop, 8000, 192000);
-       RNA_def_property_ui_text(prop, "Samplerate", "Audio samplerate(samples/s)");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
        prop= RNA_def_property(srna, "ffmpeg_audio_volume", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "ffcodecdata.audio_volume");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_range(prop, 0.0f, 1.0f);
        RNA_def_property_ui_text(prop, "Volume", "Audio volume");
        RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+#endif
+
+       // the following two "ffmpeg" settings are general audio settings
+       prop= RNA_def_property(srna, "ffmpeg_audio_mixrate", PROP_INT, PROP_NONE);
+       RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_mixrate");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+       RNA_def_property_range(prop, 8000, 192000);
+       RNA_def_property_ui_text(prop, "Samplerate", "Audio samplerate(samples/s)");
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
 
        prop= RNA_def_property(srna, "ffmpeg_audio_channels", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_sdna(prop, NULL, "ffcodecdata.audio_channels");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_enum_items(prop, audio_channel_items);
        RNA_def_property_ui_text(prop, "Audio Channels", "Sets the audio channel count");
-#endif
 
        prop= RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "frs_sec");
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_range(prop, 1, 120);
        RNA_def_property_ui_text(prop, "FPS", "Framerate, expressed in frames per second");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_fps_update");
        
        prop= RNA_def_property(srna, "fps_base", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "frs_sec_base");
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_range(prop, 0.1f, 120.0f);
        RNA_def_property_ui_text(prop, "FPS Base", "Framerate base");
-       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+       RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_Scene_fps_update");
        
        /* frame mapping */
        prop= RNA_def_property(srna, "frame_map_old", PROP_INT, PROP_NONE);
@@ -2823,7 +2986,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        
        prop= RNA_def_property(srna, "bake_margin", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "bake_filter");
-       RNA_def_property_range(prop, 0, 32);
+       RNA_def_property_range(prop, 0, 64);
        RNA_def_property_ui_text(prop, "Margin", "Amount of pixels to extend the baked result with, as post process filter");
 
        prop= RNA_def_property(srna, "bake_distance", PROP_FLOAT, PROP_NONE);
@@ -3259,8 +3422,7 @@ void RNA_def_scene(BlenderRNA *brna)
        RNA_def_property_int_sdna(prop, NULL, "r.cfra");
        RNA_def_property_range(prop, MINAFRAME, MAXFRAME);
        RNA_def_property_int_funcs(prop, NULL, "rna_Scene_current_frame_set", NULL);
-       RNA_def_property_ui_text(prop, "Current Frame", "Current Frame");
-       RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+       RNA_def_property_ui_text(prop, "Current Frame", "Current Frame, to update animation data from python frame_set() instead");
        RNA_def_property_update(prop, NC_SCENE|ND_FRAME, "rna_Scene_frame_update");
        
        prop= RNA_def_property(srna, "frame_subframe", PROP_FLOAT, PROP_TIME);
@@ -3435,21 +3597,31 @@ void RNA_def_scene(BlenderRNA *brna)
 
        prop= RNA_def_property(srna, "audio_doppler_speed", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "audio.speed_of_sound");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_range(prop, 0.01f, FLT_MAX);
        RNA_def_property_ui_text(prop, "Speed of Sound", "Speed of sound for Doppler effect calculation");
-       RNA_def_property_update(prop, NC_SCENE, NULL);
+       RNA_def_property_update(prop, NC_SCENE, "rna_Scene_listener_update");
 
        prop= RNA_def_property(srna, "audio_doppler_factor", PROP_FLOAT, PROP_NONE);
        RNA_def_property_float_sdna(prop, NULL, "audio.doppler_factor");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_range(prop, 0.0, FLT_MAX);
        RNA_def_property_ui_text(prop, "Doppler Factor", "Pitch factor for Doppler effect calculation");
-       RNA_def_property_update(prop, NC_SCENE, NULL);
+       RNA_def_property_update(prop, NC_SCENE, "rna_Scene_listener_update");
 
        prop= RNA_def_property(srna, "audio_distance_model", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_bitflag_sdna(prop, NULL, "audio.distance_model");
+       RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_enum_items(prop, audio_distance_model_items);
        RNA_def_property_ui_text(prop, "Distance Model", "Distance model for distance attenuation calculation");
+       RNA_def_property_update(prop, NC_SCENE, "rna_Scene_listener_update");
+
+       prop= RNA_def_property(srna, "audio_volume", PROP_FLOAT, PROP_NONE);
+       RNA_def_property_float_sdna(prop, NULL, "audio.volume");
+       RNA_def_property_range(prop, 0.0f, 1.0f);
+       RNA_def_property_ui_text(prop, "Volume", "Audio volume");
        RNA_def_property_update(prop, NC_SCENE, NULL);
+       RNA_def_property_float_funcs(prop, NULL, "rna_Scene_volume_set", NULL);
 
        /* Game Settings */
        prop= RNA_def_property(srna, "game_settings", PROP_POINTER, PROP_NONE);
@@ -3469,6 +3641,7 @@ void RNA_def_scene(BlenderRNA *brna)
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_struct_type(prop, "GreasePencil");
        RNA_def_property_ui_text(prop, "Grease Pencil Data", "Grease Pencil datablock");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
        
        /* Transform Orientations */
        prop= RNA_def_property(srna, "orientations", PROP_COLLECTION, PROP_NONE);