mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
ext/libpng/gstpngdec.c: Push a newsegment event, move some redundant code in a single place.
Original commit message from CVS: 2005-10-25 Julien MOUTTE <julien@moutte.net> * ext/libpng/gstpngdec.c: (user_info_callback), (gst_pngdec_caps_create_and_set), (gst_pngdec_task): Push a newsegment event, move some redundant code in a single place.
This commit is contained in:
parent
cc0c33355e
commit
2b5cfd86cf
2 changed files with 46 additions and 60 deletions
|
@ -1,3 +1,9 @@
|
|||
2005-10-25 Julien MOUTTE <julien@moutte.net>
|
||||
|
||||
* ext/libpng/gstpngdec.c: (user_info_callback),
|
||||
(gst_pngdec_caps_create_and_set), (gst_pngdec_task): Push
|
||||
a newsegment event, move some redundant code in a single place.
|
||||
|
||||
2005-10-25 Julien MOUTTE <julien@moutte.net>
|
||||
|
||||
* ext/libpng/gstpngdec.c: (user_info_callback),
|
||||
|
|
|
@ -175,8 +175,6 @@ user_info_callback (png_structp png_ptr, png_infop info)
|
|||
{
|
||||
GstPngDec *pngdec = NULL;
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
gint bpc = 0, color_type;
|
||||
png_uint_32 width, height;
|
||||
size_t buffer_size;
|
||||
GstBuffer *buffer = NULL;
|
||||
|
||||
|
@ -184,33 +182,6 @@ user_info_callback (png_structp png_ptr, png_infop info)
|
|||
|
||||
GST_LOG ("info ready");
|
||||
|
||||
/* Get bits per channel */
|
||||
bpc = png_get_bit_depth (pngdec->png, pngdec->info);
|
||||
|
||||
/* We don't handle 16 bits per color, strip down to 8 */
|
||||
if (bpc == 16) {
|
||||
GST_LOG ("this is a 16 bits per channel PNG image, strip down to 8 bits");
|
||||
png_set_strip_16 (pngdec->png);
|
||||
}
|
||||
|
||||
/* Get Color type */
|
||||
color_type = png_get_color_type (pngdec->png, pngdec->info);
|
||||
|
||||
/* HACK: The doc states that it's RGBA but apparently it's not... */
|
||||
if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||
png_set_bgr (pngdec->png);
|
||||
|
||||
/* Update the info structure */
|
||||
png_read_update_info (pngdec->png, pngdec->info);
|
||||
|
||||
/* Get IHDR header again after transformation settings */
|
||||
|
||||
png_get_IHDR (pngdec->png, pngdec->info, &width, &height,
|
||||
&bpc, &pngdec->color_type, NULL, NULL, NULL);
|
||||
|
||||
pngdec->width = width;
|
||||
pngdec->height = height;
|
||||
|
||||
/* Generate the caps and configure */
|
||||
ret = gst_pngdec_caps_create_and_set (pngdec);
|
||||
if (ret != GST_FLOW_OK) {
|
||||
|
@ -310,9 +281,39 @@ gst_pngdec_caps_create_and_set (GstPngDec * pngdec)
|
|||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
GstCaps *caps = NULL, *res = NULL;
|
||||
GstPadTemplate *templ = NULL;
|
||||
GstEvent *new_seg = NULL;
|
||||
gint bpc = 0, color_type;
|
||||
png_uint_32 width, height;
|
||||
|
||||
g_return_val_if_fail (GST_IS_PNGDEC (pngdec), GST_FLOW_ERROR);
|
||||
|
||||
/* Get bits per channel */
|
||||
bpc = png_get_bit_depth (pngdec->png, pngdec->info);
|
||||
|
||||
/* We don't handle 16 bits per color, strip down to 8 */
|
||||
if (bpc == 16) {
|
||||
GST_LOG ("this is a 16 bits per channel PNG image, strip down to 8 bits");
|
||||
png_set_strip_16 (pngdec->png);
|
||||
}
|
||||
|
||||
/* Get Color type */
|
||||
color_type = png_get_color_type (pngdec->png, pngdec->info);
|
||||
|
||||
/* HACK: The doc states that it's RGBA but apparently it's not... */
|
||||
if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||
png_set_bgr (pngdec->png);
|
||||
|
||||
/* Update the info structure */
|
||||
png_read_update_info (pngdec->png, pngdec->info);
|
||||
|
||||
/* Get IHDR header again after transformation settings */
|
||||
|
||||
png_get_IHDR (pngdec->png, pngdec->info, &width, &height,
|
||||
&bpc, &pngdec->color_type, NULL, NULL, NULL);
|
||||
|
||||
pngdec->width = width;
|
||||
pngdec->height = height;
|
||||
|
||||
GST_LOG ("this is a %dx%d PNG image", pngdec->width, pngdec->height);
|
||||
|
||||
switch (pngdec->color_type) {
|
||||
|
@ -351,6 +352,12 @@ gst_pngdec_caps_create_and_set (GstPngDec * pngdec)
|
|||
|
||||
gst_caps_unref (res);
|
||||
|
||||
/* Push a newsegment event */
|
||||
new_seg = gst_event_new_newsegment (FALSE, 1.0, GST_FORMAT_TIME, 0, -1, 0);
|
||||
if (GST_IS_EVENT (new_seg)) {
|
||||
gst_pad_push_event (pngdec->srcpad, new_seg);
|
||||
}
|
||||
|
||||
beach:
|
||||
return ret;
|
||||
}
|
||||
|
@ -361,9 +368,9 @@ gst_pngdec_task (GstPad * pad)
|
|||
GstPngDec *pngdec;
|
||||
GstBuffer *buffer = NULL;
|
||||
size_t buffer_size = 0;
|
||||
gint i = 0, bpc = 0, color_type;
|
||||
gint i = 0;
|
||||
png_bytep *rows, inp;
|
||||
png_uint_32 width, height, rowbytes;
|
||||
png_uint_32 rowbytes;
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
|
||||
pngdec = GST_PNGDEC (GST_OBJECT_PARENT (pad));
|
||||
|
@ -380,33 +387,6 @@ gst_pngdec_task (GstPad * pad)
|
|||
/* Read info */
|
||||
png_read_info (pngdec->png, pngdec->info);
|
||||
|
||||
/* Get bits per channel */
|
||||
bpc = png_get_bit_depth (pngdec->png, pngdec->info);
|
||||
|
||||
/* We don't handle 16 bits per color, strip down to 8 */
|
||||
if (bpc == 16) {
|
||||
GST_LOG ("this is a 16 bits per channel PNG image, strip down to 8 bits");
|
||||
png_set_strip_16 (pngdec->png);
|
||||
}
|
||||
|
||||
/* Get Color type */
|
||||
color_type = png_get_color_type (pngdec->png, pngdec->info);
|
||||
|
||||
/* HACK: The doc states that it's RGBA but apparently it's not... */
|
||||
if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||
png_set_bgr (pngdec->png);
|
||||
|
||||
/* Update the info structure */
|
||||
png_read_update_info (pngdec->png, pngdec->info);
|
||||
|
||||
/* Get IHDR header again after transformation settings */
|
||||
|
||||
png_get_IHDR (pngdec->png, pngdec->info, &width, &height,
|
||||
&bpc, &pngdec->color_type, NULL, NULL, NULL);
|
||||
|
||||
pngdec->width = width;
|
||||
pngdec->height = height;
|
||||
|
||||
/* Generate the caps and configure */
|
||||
ret = gst_pngdec_caps_create_and_set (pngdec);
|
||||
if (ret != GST_FLOW_OK) {
|
||||
|
@ -422,11 +402,11 @@ gst_pngdec_task (GstPad * pad)
|
|||
goto pause;
|
||||
}
|
||||
|
||||
rows = (png_bytep *) g_malloc (sizeof (png_bytep) * height);
|
||||
rows = (png_bytep *) g_malloc (sizeof (png_bytep) * pngdec->height);
|
||||
|
||||
inp = GST_BUFFER_DATA (buffer);
|
||||
|
||||
for (i = 0; i < height; i++) {
|
||||
for (i = 0; i < pngdec->height; i++) {
|
||||
rows[i] = inp;
|
||||
inp += GST_ROUND_UP_4 (rowbytes);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue