This patch adds rendering profiles.

This makes a lot easier to manage workflows where precise rendering parameters 
must be given, but when users need different sets of outputs... Now they don't 
need to tune  parameters everytime they demand different output, they can save 
profiles...

unfortunately this implementation is tied to regular rendering dialog and does 
not show up in batch rendering dialog

bye
andraz
diff -ru --exclude-from exclude hvirtual-svn/cinelerra/batchrender.C hvirtual-2.1/cinelerra/batchrender.C
--- hvirtual-svn/cinelerra/batchrender.C	2006-10-12 12:09:08.000000000 +0200
+++ hvirtual-2.1/cinelerra/batchrender.C	2007-02-09 16:08:04.000000000 +0100
@@ -447,7 +447,7 @@
 				LOAD_ALL);
 			command->change_type = CHANGE_ALL;
 			command->set_playback_range();
-			command->adjust_playback_range();
+			command->playback_range_adjust_inout();
 
 // Create test packages
 			packages->create_packages(mwindow,
diff -ru --exclude-from exclude hvirtual-svn/cinelerra/render.C hvirtual-2.1/cinelerra/render.C
--- hvirtual-svn/cinelerra/render.C	2006-10-12 16:59:13.000000000 +0200
+++ hvirtual-2.1/cinelerra/render.C	2007-02-09 19:35:57.000000000 +0100
@@ -49,6 +49,7 @@
 #include "vframe.h"
 #include "videoconfig.h"
 #include "vrender.h"
+#include "renderprofiles.h"
 
 #include <ctype.h>
 #include <string.h>
@@ -219,6 +220,7 @@
 	counter_lock = new Mutex("Render::counter_lock");
 	completion = new Condition(0, "Render::completion");
 	progress_timer = new Timer;
+	range_type = RANGE_BACKCOMPAT;
 }
 
 Render::~Render()
@@ -363,7 +365,7 @@
 		mwindow->save_defaults();
 printf("Render::run 10\n");
 
-		if(!result) render(1, asset, mwindow->edl, strategy);
+		if(!result) render(1, asset, mwindow->edl, strategy, range_type);
 printf("Render::run 11\n");
 
 		Garbage::delete_object(asset);
@@ -396,7 +398,7 @@
 				edl->load_xml(plugindb, file, LOAD_ALL);
 
 				check_asset(edl, *job->asset);
-				render(0, job->asset, edl, job->strategy);
+				render(0, job->asset, edl, job->strategy, RANGE_BACKCOMPAT);
 
 				delete edl;
 				delete file;
@@ -562,7 +564,8 @@
 int Render::render(int test_overwrite, 
 	Asset *asset,
 	EDL *edl,
-	int strategy)
+	int strategy,
+	int range_type)
 {
 	char string[BCTEXTLEN];
 // Total length in seconds
@@ -601,10 +604,25 @@
 	command->command = NORMAL_FWD;
 	command->get_edl()->copy_all(edl);
 	command->change_type = CHANGE_ALL;
+	if (range_type == RANGE_BACKCOMPAT)
+	{
 // Get highlighted playback range
-	command->set_playback_range();
+		command->set_playback_range();
 // Adjust playback range with in/out points
-	command->adjust_playback_range();
+		command->playback_range_adjust_inout();
+	} else
+	if (range_type == RANGE_PROJECT)
+	{
+		command->playback_range_project();
+	} else
+	if (range_type == RANGE_SELECTION)
+	{
+		command->set_playback_range();
+	} else
+	if (range_type == RANGE_INOUT)
+	{
+		command->playback_range_inout();
+	}
 	packages = new PackageDispatcher;
 
 
@@ -985,6 +1003,7 @@
 {
 	strategy = mwindow->defaults->get("RENDER_STRATEGY", SINGLE_PASS);
 	load_mode = mwindow->defaults->get("RENDER_LOADMODE", LOAD_NEW_TRACKS);
+	range_type = mwindow->defaults->get("RENDER_RANGE_TYPE", RANGE_PROJECT);
 
 
 	asset->load_defaults(mwindow->defaults, 
@@ -999,10 +1018,38 @@
 	return 0;
 }
 
+int Render::load_profile(int profile_slot, Asset *asset)
+{
+	char string_name[100];
+	sprintf(string_name, "RENDER_%i_STRATEGY", profile_slot);
+	strategy = mwindow->defaults->get(string_name, SINGLE_PASS);
+// Load mode is not part of the profile
+//	printf(string_name, "RENDER_%i_LOADMODE", profile_slot);
+//	load_mode = mwindow->defaults->get(string_name, LOAD_NEW_TRACKS);
+	sprintf(string_name, "RENDER_%i_RANGE_TYPE", profile_slot);
+	range_type = mwindow->defaults->get(string_name, RANGE_PROJECT);
+
+
+	sprintf(string_name, "RENDER_%i_", profile_slot);
+	asset->load_defaults(mwindow->defaults, 
+		string_name, 
+		1,
+		1,
+		1,
+		1,
+		1);
+
+
+	return 0;
+}
+
+
+
 int Render::save_defaults(Asset *asset)
 {
 	mwindow->defaults->update("RENDER_STRATEGY", strategy);
 	mwindow->defaults->update("RENDER_LOADMODE", load_mode);
+	mwindow->defaults->update("RENDER_RANGE_TYPE", range_type);
 
 
 
@@ -1022,7 +1069,7 @@
 
 
 #define WIDTH 410
-#define HEIGHT 360
+#define HEIGHT 455
 
 
 RenderWindow::RenderWindow(MWindow *mwindow, Render *render, Asset *asset)
@@ -1049,6 +1096,14 @@
 }
 
 
+int RenderWindow::load_profile(int profile_slot)
+{
+	render->load_profile(profile_slot, asset);
+	update_range_type(render->range_type);
+	format_tools->update(asset, &render->strategy);
+}
+
+
 
 int RenderWindow::create_objects()
 {
@@ -1076,12 +1131,83 @@
 		0,
 		&render->strategy,
 		0);
+	add_subwindow(new BC_Title(x, 
+		y, 
+			_("Render range:")));
 
+	x += 110;
+	add_subwindow(rangeproject = new RenderRangeProject(this, 
+		render->range_type == RANGE_PROJECT, 
+		x, 
+		y));
+	y += 20;
+	add_subwindow(rangeselection = new RenderRangeSelection(this, 
+		render->range_type == RANGE_SELECTION, 
+		x, 
+		y));
+	y += 20;
+	add_subwindow(rangeinout = new RenderRangeInOut(this, 
+		render->range_type == RANGE_INOUT, 
+		x, 
+		y));
+	y += 30;
+	x = 5;
+
+	renderprofile = new RenderProfile(mwindow, this, x, y, 1);
+	renderprofile->create_objects();
+	y += 70;
 	loadmode = new LoadMode(mwindow, this, x, y, &render->load_mode, 1);
 	loadmode->create_objects();
 
+
+
 	add_subwindow(new BC_OKButton(this));
 	add_subwindow(new BC_CancelButton(this));
 	show_window();
 	return 0;
 }
+
+void RenderWindow::update_range_type(int range_type)
+{
+	render->range_type = range_type;
+	rangeproject->update(range_type == RANGE_PROJECT);
+	rangeselection->update(range_type == RANGE_SELECTION);
+	rangeinout->update(range_type == RANGE_INOUT);
+}
+
+
+RenderRangeProject::RenderRangeProject(RenderWindow *rwindow, int value, int x, int y)
+ : BC_Radial(x, y, value, _("Project"))
+{
+	this->rwindow = rwindow;
+}
+int RenderRangeProject::handle_event()
+{
+	rwindow->update_range_type(RANGE_PROJECT);
+	return 1;
+}
+
+RenderRangeSelection::RenderRangeSelection(RenderWindow *rwindow, int value, int x, int y)
+ : BC_Radial(x, y, value, _("Selection"))
+{
+	this->rwindow = rwindow;
+}
+int RenderRangeSelection::handle_event()
+{
+	rwindow->update_range_type(RANGE_SELECTION);
+	return 1;
+}
+
+
+RenderRangeInOut::RenderRangeInOut(RenderWindow *rwindow, int value, int x, int y)
+ : BC_Radial(x, y, value, _("In/Out Points"))
+{
+	this->rwindow = rwindow;
+}
+int RenderRangeInOut::handle_event()
+{
+	rwindow->update_range_type(RANGE_INOUT);
+	return 1;
+}
+
+
diff -ru --exclude-from exclude hvirtual-svn/cinelerra/render.h hvirtual-2.1/cinelerra/render.h
--- hvirtual-svn/cinelerra/render.h	2006-10-12 12:09:08.000000000 +0200
+++ hvirtual-2.1/cinelerra/render.h	2007-02-09 19:23:34.000000000 +0100
@@ -30,6 +30,8 @@
 #include "track.inc"
 #include "transportque.inc"
 #include "vframe.inc"
+#include "renderprofiles.inc"
+
 
 class RenderItem : public BC_MenuItem
 {
@@ -100,10 +102,12 @@
 	int render(int test_overwrite, 
 		Asset *asset,
 		EDL *edl,
-		int strategy);
+		int strategy,
+		int range_type);
 
 	int load_defaults(Asset *asset);
 	int save_defaults(Asset *asset);
+	int load_profile(int profile_slot, Asset *asset);
 // force asset parameters regardless of window
 // This should be integrated into the Asset Class.
 	static int check_asset(EDL *edl, Asset &asset); 
@@ -160,6 +164,7 @@
 // For use in non interactive mode
 	ArrayList<PluginServer*> *plugindb;
 	int strategy;
+	int range_type;
 // Total selection to render in seconds
 	double total_start, total_end;
 // External Render farm checks this every frame.
@@ -192,6 +197,34 @@
 
 class RenderToTracks;
 
+
+class RenderRangeProject : public BC_Radial
+{
+public:
+	RenderRangeProject(RenderWindow *rwindow, int value, int x, int y);
+	int handle_event();
+	RenderWindow *rwindow;
+};
+
+class RenderRangeSelection : public BC_Radial
+{
+public:
+	RenderRangeSelection(RenderWindow *rwindow, int value, int x, int y);
+	int handle_event();
+	RenderWindow *rwindow;
+};
+
+
+class RenderRangeInOut : public BC_Radial
+{
+public:
+	RenderRangeInOut(RenderWindow *rwindow, int value, int x, int y);
+	int handle_event();
+	RenderWindow *rwindow;
+};
+
+
+
 class RenderWindow : public BC_Window
 {
 public:
@@ -199,8 +232,15 @@
 	~RenderWindow();
 
 	int create_objects();
+	void update_range_type(int range_type);
+	int load_profile(int profile_slot);
+	
+	RenderRangeProject *rangeproject;
+	RenderRangeSelection *rangeselection;
+	RenderRangeInOut *rangeinout;
 
-
+	RenderProfile *renderprofile;
+	
 	LoadMode *loadmode;
 	FormatTools *format_tools;
 
diff -ru --exclude-from exclude hvirtual-svn/cinelerra/render.inc hvirtual-2.1/cinelerra/render.inc
--- hvirtual-svn/cinelerra/render.inc	2006-10-12 12:09:08.000000000 +0200
+++ hvirtual-2.1/cinelerra/render.inc	2007-02-09 17:30:42.000000000 +0100
@@ -5,7 +5,7 @@
 class Render;
 class RenderItem;
 class RenderJob;
-
+class RenderWindow;
 
 // Internal rendering strategies
 
@@ -16,5 +16,9 @@
 #define BRENDER_FARM            4
 
 
+#define RANGE_BACKCOMPAT	0
+#define RANGE_PROJECT		1
+#define RANGE_SELECTION		2
+#define RANGE_INOUT		3
 
 #endif
diff -ru --exclude-from exclude hvirtual-svn/cinelerra/transportque.C hvirtual-2.1/cinelerra/transportque.C
--- hvirtual-svn/cinelerra/transportque.C	2006-10-12 12:09:09.000000000 +0200
+++ hvirtual-2.1/cinelerra/transportque.C	2007-02-09 16:12:00.000000000 +0100
@@ -208,26 +208,33 @@
 
 }
 
-void TransportCommand::adjust_playback_range()
+void TransportCommand::playback_range_adjust_inout()
 {
-
-
 	if(edl->local_session->inpoint_valid() ||
 		edl->local_session->outpoint_valid())
 	{
-		if(edl->local_session->inpoint_valid())
-			start_position = edl->local_session->get_inpoint();
-		else
-			start_position = 0;
-
-		if(edl->local_session->outpoint_valid())
-			end_position = edl->local_session->get_outpoint();
-		else
-			end_position = edl->tracks->total_playable_length();
+		playback_range_inout();
 	}
 }
 
+void TransportCommand::playback_range_inout()
+{
+	if(edl->local_session->inpoint_valid())
+		start_position = edl->local_session->get_inpoint();
+	else
+		start_position = 0;
+
+	if(edl->local_session->outpoint_valid())
+		end_position = edl->local_session->get_outpoint();
+	else
+		end_position = edl->tracks->total_playable_length();
+}
 
+void TransportCommand::playback_range_project()
+{
+	start_position = 0;
+	end_position = edl->tracks->total_playable_length();
+}
 
 
 
diff -ru --exclude-from exclude hvirtual-svn/cinelerra/transportque.h hvirtual-2.1/cinelerra/transportque.h
--- hvirtual-svn/cinelerra/transportque.h	2006-10-12 12:09:08.000000000 +0200
+++ hvirtual-2.1/cinelerra/transportque.h	2007-02-09 16:10:59.000000000 +0100
@@ -23,7 +23,11 @@
 	void set_playback_range(EDL *edl = 0, int use_inout = 0);
 
 // Adjust playback range with in/out points for rendering
-	void adjust_playback_range();
+	void playback_range_adjust_inout();
+// Set playback range to in/out points for rendering
+	void playback_range_inout();
+// Set playback range to whole project for rendering
+	void playback_range_project();
 
 	int single_frame();
 	EDL* get_edl();
--- hvirtual-svn/cinelerra/renderprofiles.C	1970-01-01 01:00:00.000000000 +0100
+++ hvirtual-2.1/cinelerra/renderprofiles.C	2007-02-09 20:18:11.000000000 +0100
@@ -0,0 +1,298 @@
+#include "clip.h"
+#include "renderprofiles.h"
+#include "mwindow.h"
+#include "theme.h"
+#include "bchash.h"
+#include "string.h"
+#include "render.h"
+#include "asset.h"
+#include "errorbox.h"
+#include "mwindowgui.h"
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
+#define LISTWIDTH 200
+
+RenderProfileItem::RenderProfileItem(char *text, int value)
+ : BC_ListBoxItem(text)
+{
+	this->value = value;
+}
+
+
+RenderProfile::RenderProfile(MWindow *mwindow,
+	RenderWindow *rwindow, 
+	int x, 
+	int y, 
+	int use_nothing)
+{
+	this->mwindow = mwindow;
+	this->rwindow = rwindow;
+	this->x = x;
+	this->y = y;
+	this->use_nothing = use_nothing;
+	for (int i = 1; i < MAX_PROFILES; i++)
+	{
+		char string_name[100];
+		char name[100] = "";
+		sprintf(string_name, "RENDER_%i_PROFILE_NAME", i);
+		mwindow->defaults->get(string_name, name);
+		if (strlen(name) != 0)
+			profiles.append(new RenderProfileItem(name, i));
+					
+	}
+}
+
+RenderProfile::~RenderProfile()
+{
+//	delete title;
+//	delete textbox;
+//	delete listbox;
+	for(int i = 0; i < profiles.total; i++)
+		delete profiles.values[i];
+}
+
+
+
+int RenderProfile::calculate_h(BC_WindowBase *gui)
+{
+	return BC_TextBox::calculate_h(gui, MEDIUMFONT, 1, 1);
+}
+
+int RenderProfile::create_objects()
+{
+	int x = this->x, y = this->y;
+	char *default_text = "";
+	rwindow->add_subwindow(new BC_Title(x, 
+		y, 
+			_("RenderProfile:")));
+
+
+	int old_y = y;
+	rwindow->add_subwindow(title = new BC_Title(x, y, _("Render profile:")));
+	y += 25;
+	rwindow->add_subwindow(textbox = new BC_TextBox(x, 
+		y, 
+		LISTWIDTH, 
+		1, 
+		default_text));
+	x += textbox->get_w();
+	rwindow->add_subwindow(listbox = new RenderProfileListBox(rwindow, this, x, y));
+
+	y = old_y;
+	x += listbox->get_w() + 10;
+	rwindow->add_subwindow(saveprofile = new SaveRenderProfileButton(this, 
+		x, 
+		y));
+	y += 25;
+	rwindow->add_subwindow(deleteprofile = new DeleteRenderProfileButton(this, 
+		x, 
+		y));
+
+
+
+	return 0;
+}
+
+int RenderProfile::get_h()
+{
+	int result = 0;
+	result = MAX(result, title->get_h());
+	result = MAX(result, textbox->get_h());
+	return result;
+}
+
+int RenderProfile::get_x()
+{
+	return x;
+}
+
+int RenderProfile::get_y()
+{
+	return y;
+}
+
+int RenderProfile::reposition_window(int x, int y)
+{
+	this->x = x;
+	this->y = y;
+	title->reposition_window(x, y);
+	y += 20;
+	textbox->reposition_window(x, y);
+	x += textbox->get_w();
+	listbox->reposition_window(x, 
+		y, 
+		LISTWIDTH);
+	return 0;
+}
+
+
+RenderProfileListBox::RenderProfileListBox(BC_WindowBase *window, 
+	RenderProfile *renderprofile, 
+	int x, 
+	int y)
+ : BC_ListBox(x,
+ 	y,
+	LISTWIDTH,
+	150,
+	LISTBOX_TEXT,
+	(ArrayList<BC_ListBoxItem *>*)&renderprofile->profiles,
+	0,
+	0,
+	1,
+	0,
+	1)
+{
+	this->window = window;
+	this->renderprofile = renderprofile;
+}
+
+RenderProfileListBox::~RenderProfileListBox()
+{
+}
+
+int RenderProfileListBox::handle_event()
+{
+	if(get_selection(0, 0) >= 0)
+	{
+		renderprofile->textbox->update(get_selection(0, 0)->get_text());
+		renderprofile->rwindow->load_profile(((RenderProfileItem*)get_selection(0, 0))->value);
+	}
+	return 1;
+}
+
+int RenderProfile::get_profile_slot_by_name(char * profile_name)
+{
+	for (int i = 1; i < MAX_PROFILES; i++)
+	{
+		char string_name[100];
+		char name[100] = "";
+		sprintf(string_name, "RENDER_%i_PROFILE_NAME", i);
+		
+		mwindow->defaults->get(string_name, name);
+		if (strcmp(name, profile_name) == 0)
+			return i;
+	}
+// No free profile slots!
+	return -1;
+}
+
+int RenderProfile::get_new_profile_slot()
+{
+	for (int i = 1; i < MAX_PROFILES; i++)
+	{
+		char string_name[100];
+		char name[100] = "";
+		sprintf(string_name, "RENDER_%i_PROFILE_NAME", i);
+		mwindow->defaults->get(string_name, name);
+		if (strlen(name) == 0)
+			return i;
+	}
+	return -1;
+}
+
+
+int RenderProfile::save_to_slot(int profile_slot, char *profile_name)
+{
+	char string_name[100];
+	sprintf(string_name, "RENDER_%i_PROFILE_NAME", profile_slot);
+	mwindow->defaults->update(string_name, profile_name);
+
+	sprintf(string_name, "RENDER_%i_STRATEGY", profile_slot);
+	mwindow->defaults->update(string_name, rwindow->render->strategy);
+	sprintf(string_name, "RENDER_%i_LOADMODE", profile_slot);
+	mwindow->defaults->update(string_name, rwindow->render->load_mode);
+	sprintf(string_name, "RENDER_%i_RANGE_TYPE", profile_slot);
+	mwindow->defaults->update(string_name, rwindow->render->range_type);
+
+	sprintf(string_name, "RENDER_%i_", profile_slot);
+	rwindow->asset->save_defaults(mwindow->defaults, 
+		string_name,
+		1,
+		1,
+		1,
+		1,
+		1);
+
+	mwindow->save_defaults();
+	return 0;
+}
+
+
+
+SaveRenderProfileButton::SaveRenderProfileButton(RenderProfile *profile, int x, int y)
+ : BC_GenericButton(x, y, _("Save profile"))
+{
+	this->profile = profile;
+}
+int SaveRenderProfileButton::handle_event()
+{
+	
+	char *profile_name = profile->textbox->get_text();
+	if (strlen(profile_name) == 0)     // Don't save when name not defined
+		return 1;
+	int slot = profile->get_profile_slot_by_name(profile_name);
+	if (slot < 0)
+	{
+		slot = profile->get_new_profile_slot();
+		if (slot < 0)
+		{
+			ErrorBox error_box(PROGRAM_NAME ": Error",
+					   profile->mwindow->gui->get_abs_cursor_x(1),
+					   profile->mwindow->gui->get_abs_cursor_y(1));
+			error_box.create_objects("Maximum number of render profiles reached");
+			error_box.raise_window();
+			error_box.run_window();
+			return 1;
+		}
+		
+		profile->profiles.append(new RenderProfileItem(profile_name, slot));
+		profile->listbox->update((ArrayList<BC_ListBoxItem *>*)&(profile->profiles), 0, 0, 1);
+	
+	}
+	
+	if (slot >= 0)
+	{
+		profile->save_to_slot(slot, profile_name);
+	}
+	return 1;
+}
+
+
+DeleteRenderProfileButton::DeleteRenderProfileButton(RenderProfile *profile, int x, int y)
+ : BC_GenericButton(x, y, _("Delete profile"))
+{
+	this->profile = profile;
+}
+int DeleteRenderProfileButton::handle_event()
+{
+	char *profile_name = profile->textbox->get_text();
+	int slot = profile->get_profile_slot_by_name(profile_name);
+	if (slot >= 0)
+	{
+		for(int i = 0; i < profile->profiles.total; i++)
+		{
+			if(profile->profiles.values[i]->value == slot)
+			{
+				profile->profiles.remove_object_number(i);
+				profile->save_to_slot(slot, "");
+
+				break;
+			}
+		}
+		profile->listbox->update((ArrayList<BC_ListBoxItem *>*)&(profile->profiles), 0, 0, 1);
+		profile->textbox->update("");
+
+	}
+
+
+	return 1;
+}
+
+
+
+
+
--- hvirtual-svn/cinelerra/renderprofiles.h	1970-01-01 01:00:00.000000000 +0100
+++ hvirtual-2.1/cinelerra/renderprofiles.h	2007-02-09 20:02:54.000000000 +0100
@@ -0,0 +1,88 @@
+#ifndef RENDERPROFILE_H
+#define RENDERPROFILE_H
+
+#include "guicast.h"
+#include "render.inc"
+#include "mwindow.inc"
+#include "renderprofiles.inc"
+
+class RenderProfileListBox;
+
+class RenderProfileItem : public BC_ListBoxItem
+{
+public:
+	RenderProfileItem(char *text, int value);
+	int value;
+};
+
+class SaveRenderProfileButton : public BC_GenericButton
+{
+public:
+	SaveRenderProfileButton(RenderProfile *profile, int x, int y);
+	int handle_event();
+	RenderProfile *profile;
+};
+
+class DeleteRenderProfileButton : public BC_GenericButton
+{
+public:
+	DeleteRenderProfileButton(RenderProfile *profile, int x, int y);
+	int handle_event();
+	RenderProfile *profile;
+};
+
+
+
+class RenderProfile
+{
+public:
+	RenderProfile(MWindow *mwindow,
+		RenderWindow *rwindow, 
+		int x, 
+		int y, 
+		int use_nothing);
+	~RenderProfile();
+	
+	int create_objects();
+	int reposition_window(int x, int y);
+	static int calculate_h(BC_WindowBase *gui);
+	int get_h();
+	int get_x();
+	int get_y();
+
+	int get_profile_slot_by_name(char *profile_name);
+	int get_new_profile_slot();
+	int save_to_slot(int profile_slot, char *profile_name);
+	
+	BC_Title *title;
+	BC_TextBox *textbox;
+	RenderProfileListBox *listbox;
+	SaveRenderProfileButton *saveprofile;
+	DeleteRenderProfileButton *deleteprofile;
+
+
+
+	MWindow *mwindow;
+	
+	RenderWindow *rwindow;
+
+	int x;
+	int y;
+	int *output;
+	int use_nothing;
+	ArrayList<RenderProfileItem*> profiles;
+};
+
+class RenderProfileListBox : public BC_ListBox
+{
+public:
+	RenderProfileListBox(BC_WindowBase *window, RenderProfile *renderprofile, int x, int y);
+	~RenderProfileListBox();
+
+	int handle_event();
+
+	BC_WindowBase *window;
+	RenderProfile *renderprofile;
+};
+
+#endif
--- hvirtual-svn/cinelerra/renderprofiles.inc	1970-01-01 01:00:00.000000000 +0100
+++ hvirtual-2.1/cinelerra/renderprofiles.inc	2007-02-09 17:59:55.000000000 +0100
@@ -0,0 +1,8 @@
+#ifndef RENDERPROFILES_INC
+#define RENDERPROFILES_INC
+
+class RenderProfile;
+
+#define MAX_PROFILES 16
+
+#endif

Reply via email to