summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-12-18 15:44:56 +0100
committerSebastian Dröge <slomo@circular-chaos.org>2013-07-29 12:30:23 +0200
commit0fc8de7c3807890b1bb930a7f12c32c9ce96a0bc (patch)
treea3bb03212a600d6513392b505f1aa76f4df48a73
parent5d107a693fcce80a0d77523b883706829a186e6a (diff)
downloadgstreamer-plugins-bad-0fc8de7c3807890b1bb930a7f12c32c9ce96a0bc.tar.gz
openjpegenc: Add some properties
-rw-r--r--ext/openjpeg/gstopenjpegenc.c152
1 files changed, 148 insertions, 4 deletions
diff --git a/ext/openjpeg/gstopenjpegenc.c b/ext/openjpeg/gstopenjpegenc.c
index b948a5f72..06da0fb7e 100644
--- a/ext/openjpeg/gstopenjpegenc.c
+++ b/ext/openjpeg/gstopenjpegenc.c
@@ -28,11 +28,51 @@
GST_DEBUG_CATEGORY_STATIC (gst_openjpeg_enc_debug);
#define GST_CAT_DEFAULT gst_openjpeg_enc_debug
+#define GST_OPENJPEG_ENC_TYPE_PROGRESSION_ORDER (gst_openjpeg_enc_progression_order_get_type())
+static GType
+gst_openjpeg_enc_progression_order_get_type (void)
+{
+ static const GEnumValue values[] = {
+ {LRCP, "LRCP", "lrcp"},
+ {RLCP, "RLCP", "rlcp"},
+ {RPCL, "RPCL", "rpcl"},
+ {PCRL, "PCRL", "pcrl"},
+ {CPRL, "CPRL", "crpl"},
+ {0, NULL, NULL}
+ };
+ static volatile GType id = 0;
+
+ if (g_once_init_enter ((gsize *) & id)) {
+ GType _id;
+
+ _id = g_enum_register_static ("GstOpenJPEGEncProgressionOrder", values);
+
+ g_once_init_leave ((gsize *) & id, _id);
+ }
+
+ return id;
+}
+
enum
{
PROP_0,
+ PROP_NUM_LAYERS,
+ PROP_NUM_RESOLUTIONS,
+ PROP_PROGRESSION_ORDER,
+ PROP_TILE_OFFSET_X,
+ PROP_TILE_OFFSET_Y,
+ PROP_TILE_WIDTH,
+ PROP_TILE_HEIGHT
};
+#define DEFAULT_NUM_LAYERS 1
+#define DEFAULT_NUM_RESOLUTIONS 6
+#define DEFAULT_PROGRESSION_ORDER LRCP
+#define DEFAULT_TILE_OFFSET_X 0
+#define DEFAULT_TILE_OFFSET_Y 0
+#define DEFAULT_TILE_WIDTH 0
+#define DEFAULT_TILE_HEIGHT 0
+
static void gst_openjpeg_enc_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_openjpeg_enc_get_property (GObject * object, guint prop_id,
@@ -100,6 +140,42 @@ gst_openjpeg_enc_class_init (GstOpenJPEGEncClass * klass)
gobject_class->set_property = gst_openjpeg_enc_set_property;
gobject_class->get_property = gst_openjpeg_enc_get_property;
+ g_object_class_install_property (gobject_class, PROP_NUM_LAYERS,
+ g_param_spec_int ("num-layers", "Number of layers",
+ "Number of layers", 1, 10, DEFAULT_NUM_LAYERS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_NUM_RESOLUTIONS,
+ g_param_spec_int ("num-resolutions", "Number of resolutions",
+ "Number of resolutions", 1, 10, DEFAULT_NUM_RESOLUTIONS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_PROGRESSION_ORDER,
+ g_param_spec_enum ("progression-order", "Progression Order",
+ "Progression order", GST_OPENJPEG_ENC_TYPE_PROGRESSION_ORDER,
+ DEFAULT_PROGRESSION_ORDER,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_TILE_OFFSET_X,
+ g_param_spec_int ("tile-offset-x", "Tile Offset X",
+ "Tile Offset X", G_MININT, G_MAXINT, DEFAULT_TILE_OFFSET_X,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_TILE_OFFSET_Y,
+ g_param_spec_int ("tile-offset-y", "Tile Offset Y",
+ "Tile Offset Y", G_MININT, G_MAXINT, DEFAULT_TILE_OFFSET_Y,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_TILE_WIDTH,
+ g_param_spec_int ("tile-width", "Tile Width",
+ "Tile Width", 0, G_MAXINT, DEFAULT_TILE_WIDTH,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_TILE_HEIGHT,
+ g_param_spec_int ("tile-height", "Tile Height",
+ "Tile Height", 0, G_MAXINT, DEFAULT_TILE_HEIGHT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_openjpeg_enc_src_template));
gst_element_class_add_pad_template (element_class,
@@ -129,18 +205,65 @@ gst_openjpeg_enc_init (GstOpenJPEGEnc * self)
{
opj_set_default_encoder_parameters (&self->params);
- /* TODO: Add properties for these */
self->params.cp_fixed_quality = 1;
- self->params.tcp_numlayers = 1;
+ self->params.cp_disto_alloc = 0;
+ self->params.cp_fixed_alloc = 0;
+
+ /*
+ * TODO: Add properties / caps fields for these
+ *
+ * self->params.csty;
+ * self->params.tcp_rates;
+ * self->params.tcp_distoratio;
+ * self->params.mode;
+ * self->params.irreversible;
+ * self->params.cp_cinema;
+ * self->params.cp_rsiz;
+ */
+
+ self->params.tcp_numlayers = DEFAULT_NUM_LAYERS;
+ self->params.numresolution = DEFAULT_NUM_RESOLUTIONS;
+ self->params.prog_order = DEFAULT_PROGRESSION_ORDER;
+ self->params.cp_tx0 = DEFAULT_TILE_OFFSET_X;
+ self->params.cp_ty0 = DEFAULT_TILE_OFFSET_Y;
+ self->params.cp_tdx = DEFAULT_TILE_WIDTH;
+ self->params.cp_tdy = DEFAULT_TILE_HEIGHT;
+ self->params.tile_size_on = (self->params.cp_tdx != 0
+ && self->params.cp_tdy != 0);
}
static void
gst_openjpeg_enc_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
- /* GstOpenJPEGEnc *self = GST_OPENJPEG_ENC (object); */
+ GstOpenJPEGEnc *self = GST_OPENJPEG_ENC (object);
switch (prop_id) {
+ case PROP_NUM_LAYERS:
+ self->params.tcp_numlayers = g_value_get_int (value);
+ break;
+ case PROP_NUM_RESOLUTIONS:
+ self->params.numresolution = g_value_get_int (value);
+ break;
+ case PROP_PROGRESSION_ORDER:
+ self->params.prog_order = g_value_get_enum (value);
+ break;
+ case PROP_TILE_OFFSET_X:
+ self->params.cp_tx0 = g_value_get_int (value);
+ break;
+ case PROP_TILE_OFFSET_Y:
+ self->params.cp_ty0 = g_value_get_int (value);
+ break;
+ case PROP_TILE_WIDTH:
+ self->params.cp_tdx = g_value_get_int (value);
+ self->params.tile_size_on = (self->params.cp_tdx != 0
+ && self->params.cp_tdy != 0);
+ break;
+ case PROP_TILE_HEIGHT:
+ self->params.cp_tdy = g_value_get_int (value);
+ self->params.tile_size_on = (self->params.cp_tdx != 0
+ && self->params.cp_tdy != 0);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -151,9 +274,30 @@ static void
gst_openjpeg_enc_get_property (GObject * object, guint prop_id, GValue * value,
GParamSpec * pspec)
{
- /* GstOpenJPEGEnc *self = GST_OPENJPEG_ENC (object); */
+ GstOpenJPEGEnc *self = GST_OPENJPEG_ENC (object);
switch (prop_id) {
+ case PROP_NUM_LAYERS:
+ g_value_set_int (value, self->params.tcp_numlayers);
+ break;
+ case PROP_NUM_RESOLUTIONS:
+ g_value_set_int (value, self->params.numresolution);
+ break;
+ case PROP_PROGRESSION_ORDER:
+ g_value_set_enum (value, self->params.prog_order);
+ break;
+ case PROP_TILE_OFFSET_X:
+ g_value_set_int (value, self->params.cp_tx0);
+ break;
+ case PROP_TILE_OFFSET_Y:
+ g_value_set_int (value, self->params.cp_ty0);
+ break;
+ case PROP_TILE_WIDTH:
+ g_value_set_int (value, self->params.cp_tdx);
+ break;
+ case PROP_TILE_HEIGHT:
+ g_value_set_int (value, self->params.cp_tdy);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;