+ // We can try using any of these encoders to convert PNG to MPEG.
+ enum mpeg_encoder
+ {
+ mpeg_encoder_ffmpeg, // ffmpeg
+ mpeg_encoder_mjpegtools_old, // mjpegtools before version 1.8
+ mpeg_encoder_mjpegtools_new // mjpegtools from version 1.8
+ };
+
+ dvd_generator(const video::frame_params & frame_params,
+ mpeg_encoder encoder)
+ : frame_params_(frame_params),
+ encoder_(encoder)
+ {}
+
+ // Create a new empty menu; return a reference to it.
+ // The client must call generate_menu_vob() for each menu before
+ // calling generate().
+ pgc_ref add_menu();
+ // Add a menu entry (link) to an existing menu.
+ void add_menu_entry(unsigned index,
+ const rectangle & area,
+ const pgc_ref & target);
+ // Generate the menu VOB from a background image and button
+ // highlight image.
+ void generate_menu_vob(unsigned index,
+ Glib::RefPtr<Gdk::Pixbuf> background,
+ Glib::RefPtr<Gdk::Pixbuf> highlights) const;
+
+ // Create a new title using the given vob_list; return a reference
+ // to it. The argument will be pilfered (i.e. emptied).
+ pgc_ref add_title(vob_list & list);
+
+ // Use dvdauthor to generate a DVD filesystem.
+ void generate(const std::string & output_dir) const;
+
+private:
+ struct menu_entry
+ {
+ rectangle area;
+ pgc_ref target;
+ };
+