freeimage: Add more buffer metadata
This commit is contained in:
parent
8549479892
commit
fbe6b50379
@ -1,12 +1,16 @@
|
|||||||
add_definitions(-DHAVE_CONFIG_H)
|
add_definitions(-DHAVE_CONFIG_H)
|
||||||
|
|
||||||
set ( SOURCES
|
set ( SOURCES
|
||||||
gstfreeimage.c
|
gstfreeimage.c
|
||||||
gstfreeimagedec.c)
|
gstfreeimagedec.c
|
||||||
|
gstfreeimageenc.c
|
||||||
|
gstfreeimageutils.c)
|
||||||
|
|
||||||
set ( HEADERS
|
set ( HEADERS
|
||||||
gstfreeimage.h
|
gstfreeimage.h
|
||||||
gstfreeimagedec.h)
|
gstfreeimagedec.h
|
||||||
|
gstfreeimageenc.h
|
||||||
|
gstfreeimageutils.h)
|
||||||
|
|
||||||
include_directories ( AFTER
|
include_directories ( AFTER
|
||||||
${FREEIMAGE_INCLUDE_DIR} )
|
${FREEIMAGE_INCLUDE_DIR} )
|
||||||
|
|||||||
@ -100,7 +100,7 @@ gst_freeimagedec_user_tell (fi_handle handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned DLL_CALLCONV
|
unsigned DLL_CALLCONV
|
||||||
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;
|
GstFreeImageDec *freeimagedec;
|
||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
@ -235,6 +235,7 @@ gst_freeimagedec_init (GstFreeImageDec * freeimagedec)
|
|||||||
|
|
||||||
freeimagedec->in_timestamp = GST_CLOCK_TIME_NONE;
|
freeimagedec->in_timestamp = GST_CLOCK_TIME_NONE;
|
||||||
freeimagedec->in_duration = GST_CLOCK_TIME_NONE;
|
freeimagedec->in_duration = GST_CLOCK_TIME_NONE;
|
||||||
|
freeimagedec->in_offset = GST_BUFFER_OFFSET_NONE;
|
||||||
|
|
||||||
freeimagedec->fps_n = 0;
|
freeimagedec->fps_n = 0;
|
||||||
freeimagedec->fps_d = 1;
|
freeimagedec->fps_d = 1;
|
||||||
@ -242,7 +243,7 @@ gst_freeimagedec_init (GstFreeImageDec * freeimagedec)
|
|||||||
gst_segment_init (&freeimagedec->segment, GST_FORMAT_UNDEFINED);
|
gst_segment_init (&freeimagedec->segment, GST_FORMAT_UNDEFINED);
|
||||||
|
|
||||||
/* Set user IO functions to FreeImageIO struct */
|
/* Set user IO functions to FreeImageIO struct */
|
||||||
freeimagedec->fiio.read_proc = user_read;
|
freeimagedec->fiio.read_proc = gst_freeimagedec_user_read;
|
||||||
freeimagedec->fiio.write_proc = NULL;
|
freeimagedec->fiio.write_proc = NULL;
|
||||||
freeimagedec->fiio.seek_proc = gst_freeimagedec_user_seek;
|
freeimagedec->fiio.seek_proc = gst_freeimagedec_user_seek;
|
||||||
freeimagedec->fiio.tell_proc = gst_freeimagedec_user_tell;
|
freeimagedec->fiio.tell_proc = gst_freeimagedec_user_tell;
|
||||||
@ -485,6 +486,10 @@ gst_freeimagedec_sink_event (GstPad * pad, GstEvent * event)
|
|||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set offset of outgoing buffers */
|
||||||
|
freeimagedec->in_offset = 0;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
@ -661,15 +666,26 @@ gst_freeimagedec_push_dib (GstFreeImageDec * freeimagedec)
|
|||||||
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))
|
||||||
if (GST_CLOCK_TIME_IS_VALID (freeimagedec->in_timestamp))
|
|
||||||
GST_BUFFER_TIMESTAMP (buffer) = freeimagedec->in_timestamp;
|
GST_BUFFER_TIMESTAMP (buffer) = freeimagedec->in_timestamp;
|
||||||
if (GST_CLOCK_TIME_IS_VALID (freeimagedec->in_duration))
|
else
|
||||||
GST_BUFFER_DURATION (buffer) = freeimagedec->in_duration;
|
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_OFFSET (buffer) = freeimagedec->in_offset;
|
||||||
|
GST_BUFFER_OFFSET_END (buffer) = freeimagedec->in_offset;
|
||||||
|
|
||||||
/* Push the raw frame */
|
/* Push the raw frame */
|
||||||
ret = gst_pad_push (freeimagedec->srcpad, buffer);
|
ret = gst_pad_push (freeimagedec->srcpad, buffer);
|
||||||
|
|
||||||
|
/* increment output buffer offset */
|
||||||
|
freeimagedec->in_offset++;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -51,6 +51,7 @@ struct _GstFreeImageDec
|
|||||||
|
|
||||||
guint64 in_timestamp;
|
guint64 in_timestamp;
|
||||||
guint64 in_duration;
|
guint64 in_duration;
|
||||||
|
guint64 in_offset;
|
||||||
|
|
||||||
gboolean framed;
|
gboolean framed;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user