style: run gst-indent
This commit is contained in:
@@ -33,8 +33,10 @@ GST_DEBUG_CATEGORY (freeimageenc_debug);
|
||||
static gboolean
|
||||
plugin_init (GstPlugin * plugin)
|
||||
{
|
||||
GST_DEBUG_CATEGORY_INIT (freeimagedec_debug, "freeimagedec", 0, "FreeImage image decoder");
|
||||
GST_DEBUG_CATEGORY_INIT (freeimageenc_debug, "freeimageenc", 0, "FreeImage image encoder");
|
||||
GST_DEBUG_CATEGORY_INIT (freeimagedec_debug, "freeimagedec", 0,
|
||||
"FreeImage image decoder");
|
||||
GST_DEBUG_CATEGORY_INIT (freeimageenc_debug, "freeimageenc", 0,
|
||||
"FreeImage image encoder");
|
||||
|
||||
if (!gst_freeimagedec_register_plugins (plugin))
|
||||
return FALSE;
|
||||
|
||||
@@ -59,9 +59,12 @@ static gboolean gst_freeimagedec_sink_setcaps (GstPad * pad, GstCaps * caps);
|
||||
|
||||
static void gst_freeimagedec_task (GstPad * pad);
|
||||
|
||||
static gboolean gst_freeimagedec_freeimage_init (GstFreeImageDec * freeimagedec);
|
||||
static gboolean gst_freeimagedec_freeimage_clear (GstFreeImageDec * freeimagedec);
|
||||
static GstFlowReturn gst_freeimagedec_caps_create_and_set (GstFreeImageDec * freeimagedec);
|
||||
static gboolean gst_freeimagedec_freeimage_init (GstFreeImageDec *
|
||||
freeimagedec);
|
||||
static gboolean gst_freeimagedec_freeimage_clear (GstFreeImageDec *
|
||||
freeimagedec);
|
||||
static GstFlowReturn gst_freeimagedec_caps_create_and_set (GstFreeImageDec *
|
||||
freeimagedec);
|
||||
static GstFlowReturn gst_freeimagedec_push_dib (GstFreeImageDec * freeimagedec);
|
||||
|
||||
static GstElementClass *parent_class = NULL;
|
||||
@@ -76,7 +79,7 @@ static int DLL_CALLCONV
|
||||
gst_freeimagedec_user_seek (fi_handle handle, long offset, int origin)
|
||||
{
|
||||
GstFreeImageDec *freeimagedec = GST_FREEIMAGEDEC (handle);
|
||||
|
||||
|
||||
switch (origin) {
|
||||
case SEEK_SET:
|
||||
freeimagedec->offset = offset;
|
||||
@@ -100,7 +103,8 @@ gst_freeimagedec_user_tell (fi_handle handle)
|
||||
}
|
||||
|
||||
unsigned DLL_CALLCONV
|
||||
gst_freeimagedec_user_read (void *data, unsigned elsize, unsigned elcount, fi_handle handle)
|
||||
gst_freeimagedec_user_read (void *data, unsigned elsize, unsigned elcount,
|
||||
fi_handle handle)
|
||||
{
|
||||
GstFreeImageDec *freeimagedec;
|
||||
GstBuffer *buffer;
|
||||
@@ -113,7 +117,9 @@ gst_freeimagedec_user_read (void *data, unsigned elsize, unsigned elcount, fi_ha
|
||||
GST_LOG ("reading %" G_GSIZE_FORMAT " bytes of data at offset %d", length,
|
||||
freeimagedec->offset);
|
||||
|
||||
ret = gst_pad_pull_range (freeimagedec->sinkpad, freeimagedec->offset, length, &buffer);
|
||||
ret =
|
||||
gst_pad_pull_range (freeimagedec->sinkpad, freeimagedec->offset, length,
|
||||
&buffer);
|
||||
if (ret != GST_FLOW_OK)
|
||||
goto pause;
|
||||
|
||||
@@ -160,14 +166,14 @@ gst_freeimagedec_class_init (GstFreeImageDecClass * klass,
|
||||
GstFreeImageDecClassData * class_data)
|
||||
{
|
||||
GstElementClass *gstelement_class;
|
||||
GstCaps * caps;
|
||||
GstCaps *caps;
|
||||
GstPadTemplate *templ;
|
||||
const gchar * mimetype;
|
||||
const gchar * format;
|
||||
const gchar * format_description;
|
||||
const gchar * extensions;
|
||||
gchar * description;
|
||||
gchar * longname;
|
||||
const gchar *mimetype;
|
||||
const gchar *format;
|
||||
const gchar *format_description;
|
||||
const gchar *extensions;
|
||||
gchar *description;
|
||||
gchar *longname;
|
||||
|
||||
klass->fif = class_data->fif;
|
||||
|
||||
@@ -199,8 +205,7 @@ gst_freeimagedec_class_init (GstFreeImageDecClass * klass,
|
||||
format_description, extensions);
|
||||
gst_element_class_set_details_simple (gstelement_class, longname,
|
||||
"Codec/Decoder/Image",
|
||||
description,
|
||||
"Joshua M. Doe <oss@nvl.army.mil>");
|
||||
description, "Joshua M. Doe <oss@nvl.army.mil>");
|
||||
g_free (longname);
|
||||
g_free (description);
|
||||
|
||||
@@ -210,23 +215,28 @@ gst_freeimagedec_class_init (GstFreeImageDecClass * klass,
|
||||
static void
|
||||
gst_freeimagedec_init (GstFreeImageDec * freeimagedec)
|
||||
{
|
||||
GstElementClass * klass = GST_ELEMENT_GET_CLASS (freeimagedec);
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (freeimagedec);
|
||||
|
||||
freeimagedec->sinkpad = gst_pad_new_from_template (
|
||||
gst_element_class_get_pad_template (klass, "sink"), "sink");
|
||||
freeimagedec->sinkpad =
|
||||
gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
|
||||
"sink"), "sink");
|
||||
|
||||
gst_pad_set_activate_function (freeimagedec->sinkpad, gst_freeimagedec_sink_activate);
|
||||
gst_pad_set_activate_function (freeimagedec->sinkpad,
|
||||
gst_freeimagedec_sink_activate);
|
||||
gst_pad_set_activatepull_function (freeimagedec->sinkpad,
|
||||
gst_freeimagedec_sink_activate_pull);
|
||||
gst_pad_set_activatepush_function (freeimagedec->sinkpad,
|
||||
gst_freeimagedec_sink_activate_push);
|
||||
gst_pad_set_chain_function (freeimagedec->sinkpad, gst_freeimagedec_chain);
|
||||
gst_pad_set_event_function (freeimagedec->sinkpad, gst_freeimagedec_sink_event);
|
||||
gst_pad_set_setcaps_function (freeimagedec->sinkpad, gst_freeimagedec_sink_setcaps);
|
||||
gst_pad_set_event_function (freeimagedec->sinkpad,
|
||||
gst_freeimagedec_sink_event);
|
||||
gst_pad_set_setcaps_function (freeimagedec->sinkpad,
|
||||
gst_freeimagedec_sink_setcaps);
|
||||
gst_element_add_pad (GST_ELEMENT (freeimagedec), freeimagedec->sinkpad);
|
||||
|
||||
freeimagedec->srcpad = gst_pad_new_from_template (
|
||||
gst_element_class_get_pad_template (klass, "src"), "src");
|
||||
freeimagedec->srcpad =
|
||||
gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
|
||||
"src"), "src");
|
||||
gst_pad_use_fixed_caps (freeimagedec->srcpad);
|
||||
gst_element_add_pad (GST_ELEMENT (freeimagedec), freeimagedec->srcpad);
|
||||
|
||||
@@ -261,12 +271,12 @@ gst_freeimagedec_caps_create_and_set (GstFreeImageDec * freeimagedec)
|
||||
|
||||
if (caps == NULL) {
|
||||
/* we have an unsupported type, we'll try converting to RGB/RGBA */
|
||||
FIBITMAP * dib;
|
||||
FIBITMAP *dib;
|
||||
if (FreeImage_IsTransparent (freeimagedec->dib)) {
|
||||
GST_DEBUG ("Image is non-standard format with transparency, convert to 32-bit RGB");
|
||||
GST_DEBUG
|
||||
("Image is non-standard format with transparency, convert to 32-bit RGB");
|
||||
dib = FreeImage_ConvertTo32Bits (freeimagedec->dib);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
GST_DEBUG ("Image is non-standard format, convert to 24-bit RGB");
|
||||
dib = FreeImage_ConvertTo24Bits (freeimagedec->dib);
|
||||
}
|
||||
@@ -330,9 +340,11 @@ gst_freeimagedec_task (GstPad * pad)
|
||||
format = GST_FORMAT_BYTES;
|
||||
gst_pad_query_peer_duration (pad, &format, &freeimagedec->length);
|
||||
|
||||
imagetype = FreeImage_GetFileTypeFromHandle (&freeimagedec->fiio, freeimagedec, 0);
|
||||
freeimagedec->dib = FreeImage_LoadFromHandle (imagetype, &freeimagedec->fiio,
|
||||
freeimagedec, 0);
|
||||
imagetype =
|
||||
FreeImage_GetFileTypeFromHandle (&freeimagedec->fiio, freeimagedec, 0);
|
||||
freeimagedec->dib =
|
||||
FreeImage_LoadFromHandle (imagetype, &freeimagedec->fiio, freeimagedec,
|
||||
0);
|
||||
|
||||
ret = gst_freeimagedec_push_dib (freeimagedec);
|
||||
if (ret != GST_FLOW_OK)
|
||||
@@ -346,12 +358,12 @@ gst_freeimagedec_task (GstPad * pad)
|
||||
pause:
|
||||
{
|
||||
GST_INFO_OBJECT (freeimagedec, "pausing task, reason %s",
|
||||
gst_flow_get_name (ret));
|
||||
gst_flow_get_name (ret));
|
||||
gst_pad_pause_task (freeimagedec->sinkpad);
|
||||
if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) {
|
||||
GST_ELEMENT_ERROR (freeimagedec, STREAM, FAILED,
|
||||
("Internal data stream error."),
|
||||
("stream stopped, reason %s", gst_flow_get_name (ret)));
|
||||
("Internal data stream error."),
|
||||
("stream stopped, reason %s", gst_flow_get_name (ret)));
|
||||
gst_pad_push_event (freeimagedec->srcpad, gst_event_new_eos ());
|
||||
}
|
||||
}
|
||||
@@ -362,12 +374,13 @@ gst_freeimagedec_chain (GstPad * pad, GstBuffer * buffer)
|
||||
{
|
||||
GstFreeImageDec *freeimagedec;
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
FIMEMORY * fimem;
|
||||
FIMEMORY *fimem;
|
||||
FREE_IMAGE_FORMAT format;
|
||||
|
||||
freeimagedec = GST_FREEIMAGEDEC (gst_pad_get_parent (pad));
|
||||
|
||||
GST_LOG_OBJECT (freeimagedec, "Got buffer, size=%u", GST_BUFFER_SIZE (buffer));
|
||||
GST_LOG_OBJECT (freeimagedec, "Got buffer, size=%u",
|
||||
GST_BUFFER_SIZE (buffer));
|
||||
|
||||
if (G_UNLIKELY (!freeimagedec->setup))
|
||||
goto not_configured;
|
||||
@@ -375,12 +388,14 @@ gst_freeimagedec_chain (GstPad * pad, GstBuffer * buffer)
|
||||
/* Return if we have bad flow conditions */
|
||||
ret = freeimagedec->ret;
|
||||
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
|
||||
GST_WARNING_OBJECT (freeimagedec, "we have a pending return code of %d", ret);
|
||||
GST_WARNING_OBJECT (freeimagedec, "we have a pending return code of %d",
|
||||
ret);
|
||||
goto beach;
|
||||
}
|
||||
|
||||
/* Decode image to DIB */
|
||||
fimem = FreeImage_OpenMemory (GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer));
|
||||
fimem =
|
||||
FreeImage_OpenMemory (GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer));
|
||||
format = FreeImage_GetFileTypeFromMemory (fimem, 0);
|
||||
GST_LOG ("FreeImage format is %d", format);
|
||||
freeimagedec->dib = FreeImage_LoadFromMemory (format, fimem, 0);
|
||||
@@ -401,7 +416,8 @@ gst_freeimagedec_chain (GstPad * pad, GstBuffer * buffer)
|
||||
gst_freeimagedec_freeimage_init (freeimagedec);
|
||||
} else {
|
||||
GST_LOG_OBJECT (freeimagedec, "sending EOS");
|
||||
freeimagedec->ret = gst_pad_push_event (freeimagedec->srcpad, gst_event_new_eos ());
|
||||
freeimagedec->ret =
|
||||
gst_pad_push_event (freeimagedec->srcpad, gst_event_new_eos ());
|
||||
}
|
||||
|
||||
/* grab new return code */
|
||||
@@ -474,10 +490,11 @@ gst_freeimagedec_sink_event (GstPad * pad, GstEvent * event)
|
||||
gst_event_parse_new_segment_full (event, &update, &rate, &arate, &fmt,
|
||||
&start, &stop, &position);
|
||||
|
||||
gst_segment_set_newsegment_full (&freeimagedec->segment, update, rate, arate,
|
||||
fmt, start, stop, position);
|
||||
gst_segment_set_newsegment_full (&freeimagedec->segment, update, rate,
|
||||
arate, fmt, start, stop, position);
|
||||
|
||||
GST_LOG_OBJECT (freeimagedec, "NEWSEGMENT (%s)", gst_format_get_name (fmt));
|
||||
GST_LOG_OBJECT (freeimagedec, "NEWSEGMENT (%s)",
|
||||
gst_format_get_name (fmt));
|
||||
|
||||
if (fmt == GST_FORMAT_TIME) {
|
||||
freeimagedec->need_newsegment = FALSE;
|
||||
@@ -655,28 +672,27 @@ gst_freeimagedec_push_dib (GstFreeImageDec * freeimagedec)
|
||||
GST_LOG ("Buffer size must be %d", buffer_size);
|
||||
|
||||
ret = gst_pad_alloc_buffer_and_set_caps (freeimagedec->srcpad,
|
||||
GST_BUFFER_OFFSET_NONE, buffer_size,
|
||||
GST_PAD_CAPS (freeimagedec->srcpad), &buffer);
|
||||
GST_BUFFER_OFFSET_NONE, buffer_size,
|
||||
GST_PAD_CAPS (freeimagedec->srcpad), &buffer);
|
||||
if (ret != GST_FLOW_OK)
|
||||
return ret;
|
||||
|
||||
/* flip image and copy to buffer */
|
||||
for (i = 0; i < height; i++) {
|
||||
memcpy (GST_BUFFER_DATA (buffer) + i * pitch,
|
||||
FreeImage_GetBits (freeimagedec->dib) + (height - i - 1) * pitch, pitch);
|
||||
FreeImage_GetBits (freeimagedec->dib) + (height - i - 1) * pitch,
|
||||
pitch);
|
||||
}
|
||||
|
||||
|
||||
if (GST_BUFFER_TIMESTAMP_IS_VALID (freeimagedec->in_timestamp))
|
||||
GST_BUFFER_TIMESTAMP (buffer) = freeimagedec->in_timestamp;
|
||||
else
|
||||
if (freeimagedec->fps_d != 0)
|
||||
GST_BUFFER_TIMESTAMP (buffer) =
|
||||
(freeimagedec->in_offset * freeimagedec->fps_n) / freeimagedec->fps_d;
|
||||
else if (freeimagedec->fps_d != 0)
|
||||
GST_BUFFER_TIMESTAMP (buffer) =
|
||||
(freeimagedec->in_offset * freeimagedec->fps_n) / freeimagedec->fps_d;
|
||||
if (GST_BUFFER_TIMESTAMP_IS_VALID (freeimagedec->in_duration))
|
||||
GST_BUFFER_DURATION (buffer) = freeimagedec->in_duration;
|
||||
else
|
||||
if (freeimagedec->fps_n != 0)
|
||||
GST_BUFFER_DURATION (buffer) = freeimagedec->fps_d / freeimagedec->fps_n;
|
||||
GST_BUFFER_DURATION (buffer) = freeimagedec->in_duration;
|
||||
else if (freeimagedec->fps_n != 0)
|
||||
GST_BUFFER_DURATION (buffer) = freeimagedec->fps_d / freeimagedec->fps_n;
|
||||
GST_BUFFER_OFFSET (buffer) = freeimagedec->in_offset;
|
||||
GST_BUFFER_OFFSET_END (buffer) = freeimagedec->in_offset;
|
||||
|
||||
@@ -743,11 +759,13 @@ gst_freeimagedec_register_plugins (GstPlugin * plugin)
|
||||
gint i;
|
||||
gint nloaded = 0;
|
||||
|
||||
GST_LOG ("FreeImage indicates there are %d formats supported", FreeImage_GetFIFCount());
|
||||
GST_LOG ("FreeImage indicates there are %d formats supported",
|
||||
FreeImage_GetFIFCount ());
|
||||
|
||||
for (i = 0; i < FreeImage_GetFIFCount(); i++) {
|
||||
if (FreeImage_FIFSupportsReading ((FREE_IMAGE_FORMAT)i)) {
|
||||
if (gst_freeimagedec_register_plugin (plugin, (FREE_IMAGE_FORMAT)i) == TRUE)
|
||||
for (i = 0; i < FreeImage_GetFIFCount (); i++) {
|
||||
if (FreeImage_FIFSupportsReading ((FREE_IMAGE_FORMAT) i)) {
|
||||
if (gst_freeimagedec_register_plugin (plugin,
|
||||
(FREE_IMAGE_FORMAT) i) == TRUE)
|
||||
nloaded += 1;
|
||||
}
|
||||
}
|
||||
@@ -756,4 +774,4 @@ gst_freeimagedec_register_plugins (GstPlugin * plugin)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,8 +52,10 @@ static gboolean gst_freeimageenc_sink_setcaps (GstPad * pad, GstCaps * caps);
|
||||
|
||||
static void gst_freeimageenc_task (GstPad * pad);
|
||||
|
||||
static gboolean gst_freeimageenc_freeimage_init (GstFreeImageEnc * freeimageenc);
|
||||
static gboolean gst_freeimageenc_freeimage_clear (GstFreeImageEnc * freeimageenc);
|
||||
static gboolean gst_freeimageenc_freeimage_init (GstFreeImageEnc *
|
||||
freeimageenc);
|
||||
static gboolean gst_freeimageenc_freeimage_clear (GstFreeImageEnc *
|
||||
freeimageenc);
|
||||
static GstFlowReturn gst_freeimageenc_push_dib (GstFreeImageEnc * freeimageenc);
|
||||
|
||||
static GstElementClass *parent_class = NULL;
|
||||
@@ -68,7 +70,7 @@ static int DLL_CALLCONV
|
||||
gst_freeimageenc_user_seek (fi_handle handle, long offset, int origin)
|
||||
{
|
||||
GstFreeImageEnc *freeimageenc = GST_FREEIMAGEENC (handle);
|
||||
|
||||
|
||||
switch (origin) {
|
||||
case SEEK_SET:
|
||||
freeimageenc->offset = offset;
|
||||
@@ -96,14 +98,14 @@ gst_freeimageenc_class_init (GstFreeImageEncClass * klass,
|
||||
GstFreeImageEncClassData * class_data)
|
||||
{
|
||||
GstElementClass *gstelement_class;
|
||||
GstCaps * caps;
|
||||
GstCaps *caps;
|
||||
GstPadTemplate *templ;
|
||||
const gchar * mimetype;
|
||||
const gchar * format;
|
||||
const gchar * format_description;
|
||||
const gchar * extensions;
|
||||
gchar * description;
|
||||
gchar * longname;
|
||||
const gchar *mimetype;
|
||||
const gchar *format;
|
||||
const gchar *format_description;
|
||||
const gchar *extensions;
|
||||
gchar *description;
|
||||
gchar *longname;
|
||||
|
||||
klass->fif = class_data->fif;
|
||||
|
||||
@@ -135,8 +137,7 @@ gst_freeimageenc_class_init (GstFreeImageEncClass * klass,
|
||||
format_description, extensions);
|
||||
gst_element_class_set_details_simple (gstelement_class, longname,
|
||||
"Codec/Encoder/Image",
|
||||
description,
|
||||
"Joshua M. Doe <oss@nvl.army.mil>");
|
||||
description, "Joshua M. Doe <oss@nvl.army.mil>");
|
||||
g_free (longname);
|
||||
g_free (description);
|
||||
}
|
||||
@@ -144,16 +145,19 @@ gst_freeimageenc_class_init (GstFreeImageEncClass * klass,
|
||||
static void
|
||||
gst_freeimageenc_init (GstFreeImageEnc * freeimageenc)
|
||||
{
|
||||
GstElementClass * klass = GST_ELEMENT_GET_CLASS (freeimageenc);
|
||||
GstElementClass *klass = GST_ELEMENT_GET_CLASS (freeimageenc);
|
||||
|
||||
freeimageenc->sinkpad = gst_pad_new_from_template (
|
||||
gst_element_class_get_pad_template (klass, "sink"), "sink");
|
||||
freeimageenc->sinkpad =
|
||||
gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
|
||||
"sink"), "sink");
|
||||
gst_pad_set_chain_function (freeimageenc->sinkpad, gst_freeimageenc_chain);
|
||||
gst_pad_set_setcaps_function (freeimageenc->sinkpad, gst_freeimageenc_sink_setcaps);
|
||||
gst_pad_set_setcaps_function (freeimageenc->sinkpad,
|
||||
gst_freeimageenc_sink_setcaps);
|
||||
gst_element_add_pad (GST_ELEMENT (freeimageenc), freeimageenc->sinkpad);
|
||||
|
||||
freeimageenc->srcpad = gst_pad_new_from_template (
|
||||
gst_element_class_get_pad_template (klass, "src"), "src");
|
||||
freeimageenc->srcpad =
|
||||
gst_pad_new_from_template (gst_element_class_get_pad_template (klass,
|
||||
"src"), "src");
|
||||
gst_pad_use_fixed_caps (freeimageenc->srcpad);
|
||||
gst_element_add_pad (GST_ELEMENT (freeimageenc), freeimageenc->srcpad);
|
||||
|
||||
@@ -174,37 +178,38 @@ gst_freeimageenc_init (GstFreeImageEnc * freeimageenc)
|
||||
|
||||
static GstFlowReturn
|
||||
gst_freeimageenc_chain (GstPad * pad, GstBuffer * buffer)
|
||||
{
|
||||
{
|
||||
GstFreeImageEnc *freeimageenc;
|
||||
GstFreeImageEncClass *klass;
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
GstBuffer * buffer_out;
|
||||
GstBuffer *buffer_out;
|
||||
FIMEMORY *hmem = NULL;
|
||||
gint srcPitch, dstPitch;
|
||||
guint8 * pSrc, * pDst;
|
||||
guint8 *pSrc, *pDst;
|
||||
gint width, height, bpp;
|
||||
size_t y;
|
||||
BYTE * mem_buffer;
|
||||
BYTE *mem_buffer;
|
||||
DWORD size_in_bytes;
|
||||
|
||||
freeimageenc = GST_FREEIMAGEENC (gst_pad_get_parent (pad));
|
||||
klass = GST_FREEIMAGEENC_GET_CLASS (freeimageenc);
|
||||
|
||||
GST_LOG_OBJECT (freeimageenc, "Got buffer, size=%u", GST_BUFFER_SIZE (buffer));
|
||||
GST_LOG_OBJECT (freeimageenc, "Got buffer, size=%u",
|
||||
GST_BUFFER_SIZE (buffer));
|
||||
|
||||
/* convert raw buffer to FIBITMAP */
|
||||
width = FreeImage_GetWidth (freeimageenc->dib);
|
||||
height = FreeImage_GetHeight (freeimageenc->dib);
|
||||
bpp = FreeImage_GetBPP (freeimageenc->dib);
|
||||
|
||||
|
||||
dstPitch = FreeImage_GetPitch (freeimageenc->dib);
|
||||
srcPitch = GST_ROUND_UP_4 (width * bpp / 8);
|
||||
|
||||
/* Copy data, invert scanlines and respect FreeImage pitch */
|
||||
pDst = FreeImage_GetBits(freeimageenc->dib);
|
||||
pDst = FreeImage_GetBits (freeimageenc->dib);
|
||||
for (y = 0; y < height; ++y) {
|
||||
pSrc = GST_BUFFER_DATA (buffer) + (height - y - 1) * srcPitch;
|
||||
memcpy(pDst, pSrc, srcPitch);
|
||||
memcpy (pDst, pSrc, srcPitch);
|
||||
pDst += dstPitch;
|
||||
}
|
||||
|
||||
@@ -219,7 +224,7 @@ gst_freeimageenc_chain (GstPad * pad, GstBuffer * buffer)
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
|
||||
if (!FreeImage_AcquireMemory(hmem, &mem_buffer, &size_in_bytes)) {
|
||||
if (!FreeImage_AcquireMemory (hmem, &mem_buffer, &size_in_bytes)) {
|
||||
GST_ERROR ("Failed to acquire encoded image");
|
||||
FreeImage_CloseMemory (hmem);
|
||||
gst_buffer_unref (buffer);
|
||||
@@ -274,7 +279,7 @@ gst_freeimageenc_sink_setcaps (GstPad * pad, GstCaps * caps)
|
||||
freeimageenc = GST_FREEIMAGEENC (gst_pad_get_parent (pad));
|
||||
|
||||
if (gst_freeimageutils_parse_caps (caps, &type, &width, &height, &bpp,
|
||||
&red_mask, &green_mask, &blue_mask) == FALSE) {
|
||||
&red_mask, &green_mask, &blue_mask) == FALSE) {
|
||||
GST_DEBUG ("Failed to parse caps");
|
||||
return FALSE;
|
||||
}
|
||||
@@ -382,11 +387,13 @@ gst_freeimageenc_register_plugins (GstPlugin * plugin)
|
||||
gint i;
|
||||
gint nloaded = 0;
|
||||
|
||||
GST_LOG ("FreeImage indicates there are %d formats supported", FreeImage_GetFIFCount());
|
||||
GST_LOG ("FreeImage indicates there are %d formats supported",
|
||||
FreeImage_GetFIFCount ());
|
||||
|
||||
for (i = 0; i < FreeImage_GetFIFCount(); i++) {
|
||||
if (FreeImage_FIFSupportsWriting ((FREE_IMAGE_FORMAT)i)) {
|
||||
if (gst_freeimageenc_register_plugin (plugin, (FREE_IMAGE_FORMAT)i) == TRUE)
|
||||
for (i = 0; i < FreeImage_GetFIFCount (); i++) {
|
||||
if (FreeImage_FIFSupportsWriting ((FREE_IMAGE_FORMAT) i)) {
|
||||
if (gst_freeimageenc_register_plugin (plugin,
|
||||
(FREE_IMAGE_FORMAT) i) == TRUE)
|
||||
nloaded += 1;
|
||||
}
|
||||
}
|
||||
@@ -395,4 +402,4 @@ gst_freeimageenc_register_plugins (GstPlugin * plugin)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ gst_freeimageutils_caps_from_dib (FIBITMAP * dib, gint fps_n, gint fps_d)
|
||||
FREE_IMAGE_TYPE image_type;
|
||||
guint width, height, bpp;
|
||||
gint video_format = -1;
|
||||
GstCaps * caps = NULL;
|
||||
GstCaps *caps = NULL;
|
||||
gint endianness;
|
||||
|
||||
if (dib == NULL)
|
||||
@@ -30,71 +30,62 @@ gst_freeimageutils_caps_from_dib (FIBITMAP * dib, gint fps_n, gint fps_d)
|
||||
case FIT_BITMAP:
|
||||
if (bpp == 24) {
|
||||
if (FreeImage_GetRedMask (dib) == GST_VIDEO_BYTE1_MASK_24_INT &&
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_24_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE3_MASK_24_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_RGB;
|
||||
}
|
||||
else if (FreeImage_GetRedMask (dib) == GST_VIDEO_BYTE3_MASK_24_INT &&
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_24_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE1_MASK_24_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_BGR;
|
||||
}
|
||||
else {
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_24_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE3_MASK_24_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_RGB;
|
||||
} else if (FreeImage_GetRedMask (dib) == GST_VIDEO_BYTE3_MASK_24_INT &&
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_24_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE1_MASK_24_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_BGR;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else if (bpp == 32) {
|
||||
} else if (bpp == 32) {
|
||||
if (FreeImage_GetRedMask (dib) == GST_VIDEO_BYTE1_MASK_32_INT &&
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_32_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE3_MASK_32_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_RGBA;
|
||||
}
|
||||
else if (FreeImage_GetRedMask (dib) == GST_VIDEO_BYTE3_MASK_32_INT &&
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_32_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE1_MASK_32_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_BGRA;
|
||||
}
|
||||
else {
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_32_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE3_MASK_32_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_RGBA;
|
||||
} else if (FreeImage_GetRedMask (dib) == GST_VIDEO_BYTE3_MASK_32_INT &&
|
||||
FreeImage_GetGreenMask (dib) == GST_VIDEO_BYTE2_MASK_32_INT &&
|
||||
FreeImage_GetBlueMask (dib) == GST_VIDEO_BYTE1_MASK_32_INT) {
|
||||
video_format = GST_VIDEO_FORMAT_BGRA;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* We could not find a supported format */
|
||||
if (video_format == -1) {
|
||||
caps = NULL;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
caps = gst_video_format_new_caps (video_format, width, height,
|
||||
fps_n, fps_d, 1, 1);
|
||||
fps_n, fps_d, 1, 1);
|
||||
}
|
||||
break;
|
||||
case FIT_UINT16:
|
||||
endianness = G_BYTE_ORDER;
|
||||
|
||||
caps = gst_caps_new_simple ("video/x-raw-gray",
|
||||
"width", G_TYPE_INT, width,
|
||||
"height", G_TYPE_INT, height,
|
||||
"bpp", G_TYPE_INT, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, endianness,
|
||||
"framerate", GST_TYPE_FRACTION, fps_n, fps_d,
|
||||
NULL);
|
||||
"width", G_TYPE_INT, width,
|
||||
"height", G_TYPE_INT, height,
|
||||
"bpp", G_TYPE_INT, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, endianness,
|
||||
"framerate", GST_TYPE_FRACTION, fps_n, fps_d, NULL);
|
||||
break;
|
||||
case FIT_INT16:
|
||||
endianness = G_BYTE_ORDER;
|
||||
|
||||
caps = gst_caps_new_simple ("video/x-raw-gray",
|
||||
"width", G_TYPE_INT, width,
|
||||
"height", G_TYPE_INT, height,
|
||||
"bpp", G_TYPE_INT, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, endianness,
|
||||
"framerate", GST_TYPE_FRACTION, fps_n, fps_d,
|
||||
"signed", G_TYPE_BOOLEAN, TRUE,
|
||||
NULL);
|
||||
"width", G_TYPE_INT, width,
|
||||
"height", G_TYPE_INT, height,
|
||||
"bpp", G_TYPE_INT, 16,
|
||||
"depth", G_TYPE_INT, 16,
|
||||
"endianness", G_TYPE_INT, endianness,
|
||||
"framerate", GST_TYPE_FRACTION, fps_n, fps_d,
|
||||
"signed", G_TYPE_BOOLEAN, TRUE, NULL);
|
||||
break;
|
||||
default:
|
||||
caps = NULL;
|
||||
@@ -105,20 +96,19 @@ gst_freeimageutils_caps_from_dib (FIBITMAP * dib, gint fps_n, gint fps_d)
|
||||
GstCaps *
|
||||
gst_freeimageutils_caps_from_freeimage_format (FREE_IMAGE_FORMAT fif)
|
||||
{
|
||||
GstCaps * caps = gst_caps_new_empty ();
|
||||
GstCaps *caps = gst_caps_new_empty ();
|
||||
|
||||
if (FreeImage_FIFSupportsExportType (fif, FIT_BITMAP)) {
|
||||
if (FreeImage_FIFSupportsExportBPP (fif, 1) ||
|
||||
FreeImage_FIFSupportsExportBPP (fif, 4) ||
|
||||
FreeImage_FIFSupportsExportBPP (fif, 8) ||
|
||||
FreeImage_FIFSupportsExportBPP (fif, 24)) {
|
||||
if (G_BYTE_ORDER == G_LITTLE_ENDIAN) {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGR));
|
||||
}
|
||||
else {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGB));
|
||||
}
|
||||
|
||||
FreeImage_FIFSupportsExportBPP (fif, 4) ||
|
||||
FreeImage_FIFSupportsExportBPP (fif, 8) ||
|
||||
FreeImage_FIFSupportsExportBPP (fif, 24)) {
|
||||
if (G_BYTE_ORDER == G_LITTLE_ENDIAN) {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGR));
|
||||
} else {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGB));
|
||||
}
|
||||
|
||||
}
|
||||
if (FreeImage_FIFSupportsExportBPP (fif, 16)) {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGB_15));
|
||||
@@ -127,20 +117,19 @@ gst_freeimageutils_caps_from_freeimage_format (FREE_IMAGE_FORMAT fif)
|
||||
if (FreeImage_FIFSupportsExportBPP (fif, 32)) {
|
||||
if (G_BYTE_ORDER == G_LITTLE_ENDIAN) {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGRA));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGBA));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
if (FreeImage_FIFSupportsExportType (fif, FIT_UINT16)) {
|
||||
if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
||||
gst_caps_append (caps, gst_caps_from_string (
|
||||
GST_VIDEO_CAPS_GRAY16 ("BIG_ENDIAN")));
|
||||
gst_caps_append (caps,
|
||||
gst_caps_from_string (GST_VIDEO_CAPS_GRAY16 ("BIG_ENDIAN")));
|
||||
else
|
||||
gst_caps_append (caps, gst_caps_from_string (
|
||||
GST_VIDEO_CAPS_GRAY16 ("LITTLE_ENDIAN")));
|
||||
gst_caps_append (caps,
|
||||
gst_caps_from_string (GST_VIDEO_CAPS_GRAY16 ("LITTLE_ENDIAN")));
|
||||
}
|
||||
if (FreeImage_FIFSupportsExportType (fif, FIT_INT16)) {
|
||||
}
|
||||
@@ -168,8 +157,7 @@ gst_freeimageutils_caps_from_freeimage_format (FREE_IMAGE_FORMAT fif)
|
||||
if (G_BYTE_ORDER == G_LITTLE_ENDIAN) {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGR));
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_BGRA));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGB));
|
||||
gst_caps_append (caps, gst_caps_from_string (GST_VIDEO_CAPS_RGBA));
|
||||
}
|
||||
@@ -183,7 +171,7 @@ gst_freeimageutils_parse_caps (const GstCaps * caps, FREE_IMAGE_TYPE * type,
|
||||
gint * width, gint * height, gint * bpp, guint32 * red_mask,
|
||||
guint32 * green_mask, guint32 * blue_mask)
|
||||
{
|
||||
GstStructure * s;
|
||||
GstStructure *s;
|
||||
|
||||
s = gst_caps_get_structure (caps, 0);
|
||||
|
||||
@@ -196,14 +184,13 @@ gst_freeimageutils_parse_caps (const GstCaps * caps, FREE_IMAGE_TYPE * type,
|
||||
gst_structure_get_int (s, "red_mask", red_mask);
|
||||
gst_structure_get_int (s, "green_mask", green_mask);
|
||||
gst_structure_get_int (s, "blue_mask", blue_mask);
|
||||
}
|
||||
else if (g_strcmp0 (gst_structure_get_name (s), "video/x-raw-gray") == 0) {
|
||||
} else if (g_strcmp0 (gst_structure_get_name (s), "video/x-raw-gray") == 0) {
|
||||
gboolean is_signed;
|
||||
if (!gst_structure_get_boolean (s, "signed", &is_signed))
|
||||
is_signed = FALSE;
|
||||
|
||||
if (*bpp == 8)
|
||||
*type = FIT_BITMAP; /* need to create palette for this later */
|
||||
*type = FIT_BITMAP; /* need to create palette for this later */
|
||||
else if (*bpp == 16 && is_signed == FALSE)
|
||||
*type = FIT_UINT16;
|
||||
else if (*bpp == 16 && is_signed == TRUE)
|
||||
@@ -213,4 +200,4 @@ gst_freeimageutils_parse_caps (const GstCaps * caps, FREE_IMAGE_TYPE * type,
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user