+/*****************************************************************************
+ * Module descriptor
+ *****************************************************************************/
+#define ALPHA_TEXT N_("Transparency")
+#define ALPHA_LONGTEXT N_( \
+ "Transparency of the mosaic foreground pictures. " \
+ "0 means transparent, 255 opaque (default)." )
+
+#define HEIGHT_TEXT N_("Height")
+#define HEIGHT_LONGTEXT N_( "Total height of the mosaic, in pixels." )
+#define WIDTH_TEXT N_("Width")
+#define WIDTH_LONGTEXT N_( "Total width of the mosaic, in pixels." )
+
+#define XOFFSET_TEXT N_("Top left corner X coordinate")
+#define XOFFSET_LONGTEXT N_( \
+ "X Coordinate of the top-left corner of the mosaic.")
+#define YOFFSET_TEXT N_("Top left corner Y coordinate")
+#define YOFFSET_LONGTEXT N_( \
+ "Y Coordinate of the top-left corner of the mosaic.")
+
+#define BORDERW_TEXT N_("Border width")
+#define BORDERW_LONGTEXT N_( \
+ "Width in pixels of the border between miniatures." )
+#define BORDERH_TEXT N_("Border height")
+#define BORDERH_LONGTEXT N_( \
+ "Height in pixels of the border between miniatures." )
+
+#define ALIGN_TEXT N_("Mosaic alignment" )
+#define ALIGN_LONGTEXT N_( \
+ "You can enforce the mosaic alignment on the video " \
+ "(0=center, 1=left, 2=right, 4=top, 8=bottom, you can " \
+ "also use combinations of these values, eg 6 = top-right).")
+
+#define POS_TEXT N_("Positioning method")
+#define POS_LONGTEXT N_( \
+ "Positioning method for the mosaic. auto: " \
+ "automatically choose the best number of rows and columns. " \
+ "fixed: use the user-defined number of rows and columns. " \
+ "offsets: use the user-defined offsets for each image." )
+
+#define ROWS_TEXT N_("Number of rows")
+#define ROWS_LONGTEXT N_( \
+ "Number of image rows in the mosaic (only used if " \
+ "positionning method is set to \"fixed\")." )
+
+#define COLS_TEXT N_("Number of columns")
+#define COLS_LONGTEXT N_( \
+ "Number of image columns in the mosaic (only used if " \
+ "positionning method is set to \"fixed\"." )
+
+#define AR_TEXT N_("Keep aspect ratio")
+#define AR_LONGTEXT N_( \
+ "Keep the original aspect ratio when resizing " \
+ "mosaic elements." )
+#define KEEP_TEXT N_("Keep original size")
+#define KEEP_LONGTEXT N_( \
+ "Keep the original size of mosaic elements." )
+
+#define ORDER_TEXT N_("Elements order" )
+#define ORDER_LONGTEXT N_( \
+ "You can enforce the order of the elements on " \
+ "the mosaic. You must give a comma-separated list of picture ID(s)." \
+ "These IDs are assigned in the \"mosaic-bridge\" module." )
+
+#define OFFSETS_TEXT N_("Offsets in order" )
+#define OFFSETS_LONGTEXT N_( \
+ "You can enforce the (x,y) offsets of the elements on the mosaic " \
+ "(only used if positioning method is set to \"offsets\"). You " \
+ "must give a comma-separated list of coordinates (eg: 10,10,150,10)." )
+
+#define DELAY_TEXT N_("Delay")
+#define DELAY_LONGTEXT N_( \
+ "Pictures coming from the mosaic elements will be delayed " \
+ "according to this value (in milliseconds). For high " \
+ "values you will need to raise caching at input.")
+
+enum
+{
+ position_auto = 0, position_fixed = 1, position_offsets = 2
+};
+static const int pi_pos_values[] = { 0, 1, 2 };
+static const char *const ppsz_pos_descriptions[] =
+ { N_("auto"), N_("fixed"), N_("offsets") };
+
+static const int pi_align_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
+static const char *const ppsz_align_descriptions[] =
+ { N_("Center"), N_("Left"), N_("Right"), N_("Top"), N_("Bottom"),
+ N_("Top-Left"), N_("Top-Right"), N_("Bottom-Left"), N_("Bottom-Right") };
+
+#define CFG_PREFIX "mosaic-"
+
+vlc_module_begin ()
+ set_description( N_("Mosaic video sub filter") )
+ set_shortname( N_("Mosaic") )
+ set_category( CAT_VIDEO )
+ set_subcategory( SUBCAT_VIDEO_SUBPIC)
+ set_capability( "sub filter", 0 )
+ set_callbacks( CreateFilter, DestroyFilter )
+
+ add_integer_with_range( CFG_PREFIX "alpha", 255, 0, 255, NULL,
+ ALPHA_TEXT, ALPHA_LONGTEXT, false );
+
+ add_integer( CFG_PREFIX "height", 100, NULL,
+ HEIGHT_TEXT, HEIGHT_LONGTEXT, false );
+ add_integer( CFG_PREFIX "width", 100, NULL,
+ WIDTH_TEXT, WIDTH_LONGTEXT, false );
+
+ add_integer( CFG_PREFIX "align", 5, NULL,
+ ALIGN_TEXT, ALIGN_LONGTEXT, true);
+ change_integer_list( pi_align_values, ppsz_align_descriptions, NULL );
+
+ add_integer( CFG_PREFIX "xoffset", 0, NULL,
+ XOFFSET_TEXT, XOFFSET_LONGTEXT, true );
+ add_integer( CFG_PREFIX "yoffset", 0, NULL,
+ YOFFSET_TEXT, YOFFSET_LONGTEXT, true );
+
+ add_integer( CFG_PREFIX "borderw", 0, NULL,
+ BORDERW_TEXT, BORDERW_LONGTEXT, true );
+ add_deprecated_alias( CFG_PREFIX "vborder" )
+ add_integer( CFG_PREFIX "borderh", 0, NULL,
+ BORDERH_TEXT, BORDERH_LONGTEXT, true );
+ add_deprecated_alias( CFG_PREFIX "hborder" )
+
+ add_integer( CFG_PREFIX "position", 0, NULL,
+ POS_TEXT, POS_LONGTEXT, false );
+ change_integer_list( pi_pos_values, ppsz_pos_descriptions, NULL );
+ add_integer( CFG_PREFIX "rows", 2, NULL,
+ ROWS_TEXT, ROWS_LONGTEXT, false );
+ add_integer( CFG_PREFIX "cols", 2, NULL,
+ COLS_TEXT, COLS_LONGTEXT, false );
+
+ add_bool( CFG_PREFIX "keep-aspect-ratio", 0, NULL,
+ AR_TEXT, AR_LONGTEXT, false );
+ add_bool( CFG_PREFIX "keep-picture", 0, NULL,
+ KEEP_TEXT, KEEP_LONGTEXT, false );
+
+ add_string( CFG_PREFIX "order", "", NULL,
+ ORDER_TEXT, ORDER_LONGTEXT, false );
+
+ add_string( CFG_PREFIX "offsets", "", NULL,
+ OFFSETS_TEXT, OFFSETS_LONGTEXT, false );
+
+ add_integer( CFG_PREFIX "delay", 0, NULL, DELAY_TEXT, DELAY_LONGTEXT,
+ false );
+vlc_module_end ()
+
+static const char *const ppsz_filter_options[] = {
+ "alpha", "height", "width", "align", "xoffset", "yoffset",
+ "borderw", "borderh", "position", "rows", "cols",
+ "keep-aspect-ratio", "keep-picture", "order", "offsets",
+ "delay", NULL
+};