mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 18:05:37 +00:00
added encoding pattern property
Original commit message from CVS: added encoding pattern property B-frames don't work
This commit is contained in:
parent
1afe0eed8e
commit
8c348ff580
2 changed files with 21 additions and 3 deletions
|
@ -47,6 +47,7 @@ enum {
|
||||||
ARG_FPS,
|
ARG_FPS,
|
||||||
ARG_QUALITY,
|
ARG_QUALITY,
|
||||||
ARG_BITRATE,
|
ARG_BITRATE,
|
||||||
|
ARG_PATTERN,
|
||||||
/* FILL ME */
|
/* FILL ME */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,6 +169,10 @@ gst_libfame_class_init (GstLibfameClass *klass)
|
||||||
g_param_spec_int ("quality", "Quality",
|
g_param_spec_int ("quality", "Quality",
|
||||||
"Percentage of quality of compression (versus size)",
|
"Percentage of quality of compression (versus size)",
|
||||||
0, 100, 75, G_PARAM_READWRITE)); /* CHECKME */
|
0, 100, 75, G_PARAM_READWRITE)); /* CHECKME */
|
||||||
|
g_object_class_install_property (gobject_class, ARG_PATTERN,
|
||||||
|
g_param_spec_string ("pattern", "Pattern",
|
||||||
|
"Encoding pattern of I, P, and B frames",
|
||||||
|
0, G_PARAM_READWRITE)); /* CHECKME */
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstPadConnectReturn
|
static GstPadConnectReturn
|
||||||
|
@ -197,7 +202,8 @@ gst_libfame_sinkconnect (GstPad *pad, GstCaps *caps)
|
||||||
|
|
||||||
libfame->fp.width = width;
|
libfame->fp.width = width;
|
||||||
libfame->fp.height = height;
|
libfame->fp.height = height;
|
||||||
libfame->fp.coding = "I";
|
libfame->fp.coding = (const char *) libfame->pattern;
|
||||||
|
g_warning ("Using pattern %s for encoding\n", libfame->fp.coding);
|
||||||
|
|
||||||
/* FIXME: choose good parameters */
|
/* FIXME: choose good parameters */
|
||||||
libfame->fp.slices_per_frame = 1;
|
libfame->fp.slices_per_frame = 1;
|
||||||
|
@ -255,6 +261,7 @@ gst_libfame_init (GstLibfame *libfame)
|
||||||
libfame->fp.frame_rate_den = 1; /* avoid floating point exceptions */
|
libfame->fp.frame_rate_den = 1; /* avoid floating point exceptions */
|
||||||
libfame->fp.profile = g_strdup_printf ("mpeg1");
|
libfame->fp.profile = g_strdup_printf ("mpeg1");
|
||||||
|
|
||||||
|
libfame->pattern = g_strdup_printf ("I");
|
||||||
/* allocate space for the buffer */
|
/* allocate space for the buffer */
|
||||||
libfame->buffer_size = LIBFAME_BUFFER_SIZE; /* FIXME */
|
libfame->buffer_size = LIBFAME_BUFFER_SIZE; /* FIXME */
|
||||||
libfame->buffer = (unsigned char *) g_malloc (libfame->buffer_size);
|
libfame->buffer = (unsigned char *) g_malloc (libfame->buffer_size);
|
||||||
|
@ -297,8 +304,8 @@ gst_libfame_chain (GstPad *pad, GstBuffer *buf)
|
||||||
libfame->fy.h = libfame->fp.height;
|
libfame->fy.h = libfame->fp.height;
|
||||||
libfame->fy.p = 0; /* FIXME: is this pointing to previous data ? */
|
libfame->fy.p = 0; /* FIXME: is this pointing to previous data ? */
|
||||||
libfame->fy.y = data;
|
libfame->fy.y = data;
|
||||||
libfame->fy.u = data + libfame->width * libfame->height;
|
libfame->fy.u = data + libfame->fp.width * libfame->fp.height;
|
||||||
libfame->fy.v = data + 5 * libfame->width * libfame->height / 4;
|
libfame->fy.v = data + 5 * libfame->fp.width * libfame->fp.height / 4;
|
||||||
fame_start_frame (libfame->fc, &libfame->fy, NULL);
|
fame_start_frame (libfame->fc, &libfame->fy, NULL);
|
||||||
|
|
||||||
while ((length = fame_encode_slice (libfame->fc)) != 0)
|
while ((length = fame_encode_slice (libfame->fc)) != 0)
|
||||||
|
@ -380,6 +387,11 @@ gst_libfame_set_property (GObject *object, guint prop_id,
|
||||||
src->encoder->seq.bit_rate = g_value_get_int (value);
|
src->encoder->seq.bit_rate = g_value_get_int (value);
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
|
case ARG_PATTERN:
|
||||||
|
if (src->pattern) g_free (src->pattern);
|
||||||
|
src->pattern = (gchar *) g_value_get_string (value);
|
||||||
|
g_warning ("setting pattern to %s\n", src->pattern);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -407,6 +419,9 @@ gst_libfame_get_property (GObject *object, guint prop_id,
|
||||||
g_warning ("You think you WANT to know bitrate ? Think AGAIN !\n");
|
g_warning ("You think you WANT to know bitrate ? Think AGAIN !\n");
|
||||||
/* g_value_set_int (value, src->encoder->seq.bit_rate); */
|
/* g_value_set_int (value, src->encoder->seq.bit_rate); */
|
||||||
break;
|
break;
|
||||||
|
case ARG_PATTERN:
|
||||||
|
g_value_set_string (value, src->pattern);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -61,6 +61,9 @@ struct _GstLibfame {
|
||||||
/* the size of the output buffer */
|
/* the size of the output buffer */
|
||||||
gint outsize;
|
gint outsize;
|
||||||
|
|
||||||
|
/* encoding pattern string */
|
||||||
|
gchar *pattern;
|
||||||
|
|
||||||
/* libfame stuff */
|
/* libfame stuff */
|
||||||
fame_context_t *fc;
|
fame_context_t *fc;
|
||||||
fame_parameters_t fp;
|
fame_parameters_t fp;
|
||||||
|
|
Loading…
Reference in a new issue