mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
gst/gstbuffer.c: Avoid function call for known types by keeping the buffer and subbuffer GType global.
Original commit message from CVS: * gst/gstbuffer.c: (gst_buffer_get_type), (gst_buffer_new), (gst_subbuffer_get_type), (gst_buffer_create_sub): Avoid function call for known types by keeping the buffer and subbuffer GType global. * plugins/elements/gstfilesrc.c: (gst_file_src_create_read): Random silly optimisations in read() path.
This commit is contained in:
parent
2444ba9601
commit
c75651326f
3 changed files with 29 additions and 20 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2006-07-26 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* gst/gstbuffer.c: (gst_buffer_get_type), (gst_buffer_new),
|
||||||
|
(gst_subbuffer_get_type), (gst_buffer_create_sub):
|
||||||
|
Avoid function call for known types by keeping the buffer and
|
||||||
|
subbuffer GType global.
|
||||||
|
|
||||||
|
* plugins/elements/gstfilesrc.c: (gst_file_src_create_read):
|
||||||
|
Random silly optimisations in read() path.
|
||||||
|
|
||||||
2006-07-26 Jan Schmidt <thaytan@mad.scientist.com>
|
2006-07-26 Jan Schmidt <thaytan@mad.scientist.com>
|
||||||
|
|
||||||
* tools/gst-launch.c: (main):
|
* tools/gst-launch.c: (main):
|
||||||
|
|
|
@ -116,13 +116,15 @@
|
||||||
#include "gstutils.h"
|
#include "gstutils.h"
|
||||||
#include "gstminiobject.h"
|
#include "gstminiobject.h"
|
||||||
|
|
||||||
|
|
||||||
static void gst_buffer_init (GTypeInstance * instance, gpointer g_class);
|
static void gst_buffer_init (GTypeInstance * instance, gpointer g_class);
|
||||||
static void gst_buffer_class_init (gpointer g_class, gpointer class_data);
|
static void gst_buffer_class_init (gpointer g_class, gpointer class_data);
|
||||||
static void gst_buffer_finalize (GstBuffer * buffer);
|
static void gst_buffer_finalize (GstBuffer * buffer);
|
||||||
static GstBuffer *_gst_buffer_copy (GstBuffer * buffer);
|
static GstBuffer *_gst_buffer_copy (GstBuffer * buffer);
|
||||||
static GType gst_subbuffer_get_type (void);
|
static GType gst_subbuffer_get_type (void);
|
||||||
|
|
||||||
|
static GType _gst_subbuffer_type = 0;
|
||||||
|
static GType _gst_buffer_type = 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
_gst_buffer_initialize (void)
|
_gst_buffer_initialize (void)
|
||||||
{
|
{
|
||||||
|
@ -141,8 +143,6 @@ _gst_buffer_initialize (void)
|
||||||
GType
|
GType
|
||||||
gst_buffer_get_type (void)
|
gst_buffer_get_type (void)
|
||||||
{
|
{
|
||||||
static GType _gst_buffer_type = 0;
|
|
||||||
|
|
||||||
if (G_UNLIKELY (_gst_buffer_type == 0)) {
|
if (G_UNLIKELY (_gst_buffer_type == 0)) {
|
||||||
static const GTypeInfo buffer_info = {
|
static const GTypeInfo buffer_info = {
|
||||||
sizeof (GstBufferClass),
|
sizeof (GstBufferClass),
|
||||||
|
@ -256,7 +256,7 @@ gst_buffer_new (void)
|
||||||
{
|
{
|
||||||
GstBuffer *newbuf;
|
GstBuffer *newbuf;
|
||||||
|
|
||||||
newbuf = (GstBuffer *) gst_mini_object_new (GST_TYPE_BUFFER);
|
newbuf = (GstBuffer *) gst_mini_object_new (_gst_buffer_type);
|
||||||
|
|
||||||
GST_CAT_LOG (GST_CAT_BUFFER, "new %p", newbuf);
|
GST_CAT_LOG (GST_CAT_BUFFER, "new %p", newbuf);
|
||||||
|
|
||||||
|
@ -388,10 +388,7 @@ gst_buffer_make_metadata_writable (GstBuffer * buf)
|
||||||
typedef struct _GstSubBuffer GstSubBuffer;
|
typedef struct _GstSubBuffer GstSubBuffer;
|
||||||
typedef struct _GstSubBufferClass GstSubBufferClass;
|
typedef struct _GstSubBufferClass GstSubBufferClass;
|
||||||
|
|
||||||
#define GST_TYPE_SUBBUFFER (gst_subbuffer_get_type())
|
#define GST_IS_SUBBUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), _gst_subbuffer_type))
|
||||||
|
|
||||||
#define GST_IS_SUBBUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SUBBUFFER))
|
|
||||||
#define GST_SUBBUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SUBBUFFER, GstSubBuffer))
|
|
||||||
#define GST_SUBBUFFER_CAST(obj) ((GstSubBuffer *)(obj))
|
#define GST_SUBBUFFER_CAST(obj) ((GstSubBuffer *)(obj))
|
||||||
|
|
||||||
struct _GstSubBuffer
|
struct _GstSubBuffer
|
||||||
|
@ -415,8 +412,6 @@ static void gst_subbuffer_finalize (GstSubBuffer * buffer);
|
||||||
static GType
|
static GType
|
||||||
gst_subbuffer_get_type (void)
|
gst_subbuffer_get_type (void)
|
||||||
{
|
{
|
||||||
static GType _gst_subbuffer_type = 0;
|
|
||||||
|
|
||||||
if (G_UNLIKELY (_gst_subbuffer_type == 0)) {
|
if (G_UNLIKELY (_gst_subbuffer_type == 0)) {
|
||||||
static const GTypeInfo subbuffer_info = {
|
static const GTypeInfo subbuffer_info = {
|
||||||
sizeof (GstSubBufferClass),
|
sizeof (GstSubBufferClass),
|
||||||
|
@ -499,7 +494,7 @@ gst_buffer_create_sub (GstBuffer * buffer, guint offset, guint size)
|
||||||
gst_buffer_ref (parent);
|
gst_buffer_ref (parent);
|
||||||
|
|
||||||
/* create the new buffer */
|
/* create the new buffer */
|
||||||
subbuffer = (GstSubBuffer *) gst_mini_object_new (GST_TYPE_SUBBUFFER);
|
subbuffer = (GstSubBuffer *) gst_mini_object_new (_gst_subbuffer_type);
|
||||||
subbuffer->parent = parent;
|
subbuffer->parent = parent;
|
||||||
|
|
||||||
GST_CAT_LOG (GST_CAT_BUFFER, "new subbuffer %p (parent %p)", subbuffer,
|
GST_CAT_LOG (GST_CAT_BUFFER, "new subbuffer %p (parent %p)", subbuffer,
|
||||||
|
|
|
@ -751,11 +751,11 @@ gst_file_src_create_read (GstFileSrc * src, guint64 offset, guint length,
|
||||||
int ret;
|
int ret;
|
||||||
GstBuffer *buf;
|
GstBuffer *buf;
|
||||||
|
|
||||||
if (src->read_position != offset) {
|
if (G_UNLIKELY (src->read_position != offset)) {
|
||||||
off_t res;
|
off_t res;
|
||||||
|
|
||||||
res = lseek (src->fd, offset, SEEK_SET);
|
res = lseek (src->fd, offset, SEEK_SET);
|
||||||
if (res < 0 || res != offset)
|
if (G_UNLIKELY (res < 0 || res != offset))
|
||||||
goto seek_failed;
|
goto seek_failed;
|
||||||
|
|
||||||
src->read_position = offset;
|
src->read_position = offset;
|
||||||
|
@ -765,19 +765,17 @@ gst_file_src_create_read (GstFileSrc * src, guint64 offset, guint length,
|
||||||
|
|
||||||
GST_LOG_OBJECT (src, "Reading %d bytes", length);
|
GST_LOG_OBJECT (src, "Reading %d bytes", length);
|
||||||
ret = read (src->fd, GST_BUFFER_DATA (buf), length);
|
ret = read (src->fd, GST_BUFFER_DATA (buf), length);
|
||||||
if (ret < 0)
|
if (G_UNLIKELY (ret < 0))
|
||||||
goto could_not_read;
|
goto could_not_read;
|
||||||
|
|
||||||
/* regular files should have given us what we expected */
|
/* regular files should have given us what we expected */
|
||||||
if ((guint) ret < length && src->is_regular)
|
if (G_UNLIKELY ((guint) ret < length && src->is_regular))
|
||||||
goto unexpected_eos;
|
goto unexpected_eos;
|
||||||
|
|
||||||
/* other files should eos if they read 0 */
|
/* other files should eos if they read 0 */
|
||||||
if (ret == 0) {
|
if (G_UNLIKELY (ret == 0))
|
||||||
GST_DEBUG ("non-regular file hits EOS");
|
goto eos;
|
||||||
gst_buffer_unref (buf);
|
|
||||||
return GST_FLOW_UNEXPECTED;
|
|
||||||
}
|
|
||||||
length = ret;
|
length = ret;
|
||||||
|
|
||||||
GST_BUFFER_SIZE (buf) = length;
|
GST_BUFFER_SIZE (buf) = length;
|
||||||
|
@ -809,6 +807,12 @@ unexpected_eos:
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
eos:
|
||||||
|
{
|
||||||
|
GST_DEBUG ("non-regular file hits EOS");
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
return GST_FLOW_UNEXPECTED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
|
Loading…
Reference in a new issue