本文整理汇总了C++中GST_CAT_DEBUG函数的典型用法代码示例。如果您正苦于以下问题:C++ GST_CAT_DEBUG函数的具体用法?C++ GST_CAT_DEBUG怎么用?C++ GST_CAT_DEBUG使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GST_CAT_DEBUG函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: gst_pipeline_provide_clock_func
static GstClock *
gst_pipeline_provide_clock_func (GstElement * element)
{
GstClock *clock = NULL;
GstPipeline *pipeline = GST_PIPELINE (element);
/* if we have a fixed clock, use that one */
GST_OBJECT_LOCK (pipeline);
if (GST_OBJECT_FLAG_IS_SET (pipeline, GST_PIPELINE_FLAG_FIXED_CLOCK)) {
clock = pipeline->fixed_clock;
if (clock)
gst_object_ref (clock);
GST_OBJECT_UNLOCK (pipeline);
GST_CAT_DEBUG (GST_CAT_CLOCK, "pipeline using fixed clock %p (%s)",
clock, clock ? GST_STR_NULL (GST_OBJECT_NAME (clock)) : "-");
} else {
GST_OBJECT_UNLOCK (pipeline);
/* let the parent bin select a clock */
clock =
GST_ELEMENT_CLASS (parent_class)->provide_clock (GST_ELEMENT
(pipeline));
/* no clock, use a system clock */
if (!clock) {
clock = gst_system_clock_obtain ();
GST_CAT_DEBUG (GST_CAT_CLOCK, "pipeline obtained system clock: %p (%s)",
clock, clock ? GST_STR_NULL (GST_OBJECT_NAME (clock)) : "-");
} else {
GST_CAT_DEBUG (GST_CAT_CLOCK, "pipeline obtained clock: %p (%s)",
clock, clock ? GST_STR_NULL (GST_OBJECT_NAME (clock)) : "-");
}
}
return clock;
}
开发者ID:MathieuDuponchelle,项目名称:gstreamer,代码行数:35,代码来源:gstpipeline.c
示例2: gst_meta_api_type_register
/**
* gst_meta_api_type_register:
* @api: an API to register
* @tags: tags for @api
*
* Register and return a GType for the @api and associate it with
* @tags.
*
* Returns: a unique GType for @api.
*/
GType
gst_meta_api_type_register (const gchar * api, const gchar ** tags)
{
GType type;
g_return_val_if_fail (api != NULL, 0);
g_return_val_if_fail (tags != NULL, 0);
GST_CAT_DEBUG (GST_CAT_META, "register API \"%s\"", api);
type = g_pointer_type_register_static (api);
if (type != 0) {
gint i;
for (i = 0; tags[i]; i++) {
GST_CAT_DEBUG (GST_CAT_META, " adding tag \"%s\"", tags[i]);
g_type_set_qdata (type, g_quark_from_string (tags[i]),
GINT_TO_POINTER (TRUE));
}
}
g_type_set_qdata (type, g_quark_from_string ("tags"),
g_strdupv ((gchar **) tags));
return type;
}
开发者ID:BigBrother-International,项目名称:gstreamer,代码行数:36,代码来源:gstmeta.c
示例3: gst_memory_make_mapped
/**
* gst_memory_make_mapped:
* @mem: (transfer full): a #GstMemory
* @info: (out): pointer for info
* @flags: mapping flags
*
* Create a #GstMemory object that is mapped with @flags. If @mem is mappable
* with @flags, this function returns the mapped @mem directly. Otherwise a
* mapped copy of @mem is returned.
*
* This function takes ownership of old @mem and returns a reference to a new
* #GstMemory.
*
* Returns: (transfer full) (nullable): a #GstMemory object mapped
* with @flags or %NULL when a mapping is not possible.
*/
GstMemory *
gst_memory_make_mapped (GstMemory * mem, GstMapInfo * info, GstMapFlags flags)
{
GstMemory *result;
if (gst_memory_map (mem, info, flags)) {
result = mem;
} else {
result = gst_memory_copy (mem, 0, -1);
gst_memory_unref (mem);
if (result == NULL)
goto cannot_copy;
if (!gst_memory_map (result, info, flags))
goto cannot_map;
}
return result;
/* ERRORS */
cannot_copy:
{
GST_CAT_DEBUG (GST_CAT_MEMORY, "cannot copy memory %p", mem);
return NULL;
}
cannot_map:
{
GST_CAT_DEBUG (GST_CAT_MEMORY, "cannot map memory %p with flags %d", mem,
flags);
gst_memory_unref (result);
return NULL;
}
}
开发者ID:BigBrother-International,项目名称:gstreamer,代码行数:49,代码来源:gstmemory.c
示例4: gst_memory_init
/**
* gst_memory_init: (skip)
* @mem: a #GstMemory
* @flags: #GstMemoryFlags
* @allocator: the #GstAllocator
* @parent: the parent of @mem
* @maxsize: the total size of the memory
* @align: the alignment of the memory
* @offset: The offset in the memory
* @size: the size of valid data in the memory
* Initializes a newly allocated @mem with the given parameters. This function
* will call gst_mini_object_init() with the default memory parameters.
*/
void
gst_memory_init (GstMemory * mem, GstMemoryFlags flags,
GstAllocator * allocator, GstMemory * parent, gsize maxsize, gsize align,
gsize offset, gsize size)
{
gst_mini_object_init (GST_MINI_OBJECT_CAST (mem),
flags | GST_MINI_OBJECT_FLAG_LOCKABLE, GST_TYPE_MEMORY,
(GstMiniObjectCopyFunction) _gst_memory_copy, NULL,
(GstMiniObjectFreeFunction) _gst_memory_free);
mem->allocator = gst_object_ref (allocator);
if (parent) {
gst_memory_lock (parent, GST_LOCK_FLAG_EXCLUSIVE);
gst_memory_ref (parent);
}
mem->parent = parent;
mem->maxsize = maxsize;
mem->align = align;
mem->offset = offset;
mem->size = size;
GST_CAT_DEBUG (GST_CAT_MEMORY, "new memory %p, maxsize:%" G_GSIZE_FORMAT
" offset:%" G_GSIZE_FORMAT " size:%" G_GSIZE_FORMAT, mem, maxsize,
offset, size);
}
开发者ID:BigBrother-International,项目名称:gstreamer,代码行数:39,代码来源:gstmemory.c
示例5: gst_gl_base_memory_memcpy
/**
* gst_gl_base_memory_memcpy:
* @src: the source #GstGLBaseMemory
* @dest: the destination #GstGLBaseMemory
* @offset: the offset to start at
* @size: the number of bytes to copy
*
* Returns: whether the copy suceeded.
*/
gboolean
gst_gl_base_memory_memcpy (GstGLBaseMemory * src, GstGLBaseMemory * dest,
gssize offset, gssize size)
{
GstMapInfo sinfo, dinfo;
if (!gst_gl_base_memory_alloc_data (GST_GL_BASE_MEMORY_CAST (dest)))
return FALSE;
if (!gst_memory_map ((GstMemory *) src, &sinfo, GST_MAP_READ)) {
GST_CAT_WARNING (GST_CAT_GL_BASE_MEMORY,
"could not read map source memory %p", src);
return FALSE;
}
if (!gst_memory_map ((GstMemory *) dest, &dinfo, GST_MAP_WRITE)) {
GST_CAT_WARNING (GST_CAT_GL_BASE_MEMORY,
"could not write map dest memory %p", dest);
gst_memory_unmap ((GstMemory *) src, &sinfo);
return FALSE;
}
if (size == -1)
size = sinfo.size > offset ? sinfo.size - offset : 0;
GST_CAT_DEBUG (GST_CAT_GL_BASE_MEMORY,
"memcpy %" G_GSSIZE_FORMAT " memory %p -> %p", size, src, dest);
memcpy (dinfo.data, sinfo.data + offset, size);
gst_memory_unmap ((GstMemory *) dest, &dinfo);
gst_memory_unmap ((GstMemory *) src, &sinfo);
return TRUE;
}
开发者ID:asrashley,项目名称:gst-plugins-bad,代码行数:42,代码来源:gstglbasememory.c
示例6: _fallback_mem_copy
static GstMemory *
_fallback_mem_copy (GstMemory * mem, gssize offset, gssize size)
{
GstMemory *copy;
GstMapInfo sinfo, dinfo;
GstAllocationParams params = { 0, mem->align, 0, 0, };
GstAllocator *allocator;
if (!gst_memory_map (mem, &sinfo, GST_MAP_READ))
return NULL;
if (size == -1)
size = sinfo.size > offset ? sinfo.size - offset : 0;
/* use the same allocator as the memory we copy */
allocator = mem->allocator;
if (GST_OBJECT_FLAG_IS_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC))
allocator = NULL;
copy = gst_allocator_alloc (allocator, size, ¶ms);
if (!gst_memory_map (copy, &dinfo, GST_MAP_WRITE)) {
GST_CAT_WARNING (GST_CAT_MEMORY, "could not write map memory %p", copy);
gst_allocator_free (mem->allocator, copy);
gst_memory_unmap (mem, &sinfo);
return NULL;
}
GST_CAT_DEBUG (GST_CAT_PERFORMANCE,
"memcpy %" G_GSSIZE_FORMAT " memory %p -> %p", size, mem, copy);
memcpy (dinfo.data, sinfo.data + offset, size);
gst_memory_unmap (copy, &dinfo);
gst_memory_unmap (mem, &sinfo);
return copy;
}
开发者ID:collects,项目名称:gstreamer,代码行数:35,代码来源:gstallocator.c
示例7: gst_gl_base_buffer_memcpy
gboolean
gst_gl_base_buffer_memcpy (GstGLBaseBuffer * src, GstGLBaseBuffer * dest,
gssize offset, gssize size)
{
GstMapInfo sinfo, dinfo;
if (!gst_memory_map ((GstMemory *) src, &sinfo, GST_MAP_READ)) {
GST_CAT_WARNING (GST_CAT_GL_BASE_BUFFER,
"could not read map source memory %p", src);
return FALSE;
}
if (!gst_memory_map ((GstMemory *) dest, &dinfo, GST_MAP_WRITE)) {
GST_CAT_WARNING (GST_CAT_GL_BASE_BUFFER,
"could not write map dest memory %p", dest);
gst_memory_unmap ((GstMemory *) src, &sinfo);
return FALSE;
}
GST_CAT_DEBUG (GST_CAT_GL_BASE_BUFFER,
"memcpy %" G_GSSIZE_FORMAT " memory %p -> %p", size, src, dest);
memcpy (dinfo.data, sinfo.data + offset, size);
gst_memory_unmap ((GstMemory *) dest, &dinfo);
gst_memory_unmap ((GstMemory *) src, &sinfo);
return TRUE;
}
开发者ID:ikonst,项目名称:gst-plugins-bad,代码行数:27,代码来源:gstglbasebuffer.c
示例8: gst_meta_register
const GstMetaInfo *
gst_meta_register (GType api, const gchar * impl, gsize size,
GstMetaInitFunction init_func, GstMetaFreeFunction free_func,
GstMetaTransformFunction transform_func)
{
GstMetaInfo *info;
g_return_val_if_fail (api != 0, NULL);
g_return_val_if_fail (impl != NULL, NULL);
g_return_val_if_fail (size != 0, NULL);
info = g_slice_new (GstMetaInfo);
info->api = api;
info->type = g_pointer_type_register_static (impl);
info->size = size;
info->init_func = init_func;
info->free_func = free_func;
info->transform_func = transform_func;
GST_CAT_DEBUG (GST_CAT_META,
"register \"%s\" implementing \"%s\" of size %" G_GSIZE_FORMAT, impl,
g_type_name (api), size);
g_rw_lock_writer_lock (&lock);
g_hash_table_insert (metainfo, (gpointer) impl, (gpointer) info);
g_rw_lock_writer_unlock (&lock);
return info;
}
开发者ID:PeterXu,项目名称:gst-mobile,代码行数:29,代码来源:gstmeta.c
示例9: gst_event_new_custom
/**
* gst_event_new_custom:
* @type: The type of the new event
* @structure: (transfer full): the structure for the event. The event will
* take ownership of the structure.
*
* Create a new custom-typed event. This can be used for anything not
* handled by other event-specific functions to pass an event to another
* element.
*
* Make sure to allocate an event type with the #GST_EVENT_MAKE_TYPE macro,
* assigning a free number and filling in the correct direction and
* serialization flags.
*
* New custom events can also be created by subclassing the event type if
* needed.
*
* Returns: (transfer full): the new custom event.
*/
GstEvent *
gst_event_new_custom (GstEventType type, GstStructure * structure)
{
GstEventImpl *event;
event = g_slice_new0 (GstEventImpl);
GST_CAT_DEBUG (GST_CAT_EVENT, "creating new event %p %s %d", event,
gst_event_type_get_name (type), type);
if (structure) {
/* structure must not have a parent */
if (!gst_structure_set_parent_refcount (structure,
&event->event.mini_object.refcount))
goto had_parent;
}
gst_event_init (event, type);
GST_EVENT_STRUCTURE (event) = structure;
return GST_EVENT_CAST (event);
/* ERRORS */
had_parent:
{
g_slice_free1 (sizeof (GstEventImpl), event);
g_warning ("structure is already owned by another object");
return NULL;
}
}
开发者ID:Grobik1,项目名称:gstreamer,代码行数:50,代码来源:gstevent.c
示例10: dshow_adec_register
gboolean
dshow_adec_register (GstPlugin * plugin)
{
GTypeInfo info = {
sizeof (GstDshowAudioDecClass),
(GBaseInitFunc) gst_dshowaudiodec_base_init,
NULL,
(GClassInitFunc) gst_dshowaudiodec_class_init,
NULL,
NULL,
sizeof (GstDshowAudioDec),
0,
(GInstanceInitFunc) gst_dshowaudiodec_init,
};
gint i;
HRESULT hr;
GST_DEBUG_CATEGORY_INIT (dshowaudiodec_debug, "dshowaudiodec", 0,
"Directshow filter audio decoder");
hr = CoInitialize(0);
for (i = 0; i < sizeof (audio_dec_codecs) / sizeof (AudioCodecEntry); i++) {
GType type;
CComPtr<IBaseFilter> filter;
GUID insubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (audio_dec_codecs[i].format);
GUID outsubtype = GUID_MEDIASUBTYPE_FROM_FOURCC (WAVE_FORMAT_PCM);
filter = gst_dshow_find_filter (MEDIATYPE_Audio,
insubtype,
MEDIATYPE_Audio,
outsubtype,
audio_dec_codecs[i].preferred_filters);
if (filter)
{
GST_DEBUG ("Registering %s", audio_dec_codecs[i].element_name);
tmp = &audio_dec_codecs[i];
type = g_type_register_static (GST_TYPE_ELEMENT,
audio_dec_codecs[i].element_name, &info, (GTypeFlags)0);
if (!gst_element_register (plugin, audio_dec_codecs[i].element_name,
GST_RANK_SECONDARY, type)) {
return FALSE;
}
GST_CAT_DEBUG (dshowaudiodec_debug, "Registered %s",
audio_dec_codecs[i].element_name);
}
else {
GST_DEBUG ("Element %s not registered "
"(the format is not supported by the system)",
audio_dec_codecs[i].element_name);
}
}
if (SUCCEEDED(hr))
CoUninitialize ();
return TRUE;
}
开发者ID:spunktsch,项目名称:svtplayer,代码行数:59,代码来源:gstdshowaudiodec.cpp
示例11: gst_mini_object_lock
/**
* gst_mini_object_lock:
* @object: the mini-object to lock
* @flags: #GstLockFlags
*
* Lock the mini-object with the specified access mode in @flags.
*
* Returns: %TRUE if @object could be locked.
*/
gboolean
gst_mini_object_lock (GstMiniObject * object, GstLockFlags flags)
{
gint access_mode, state, newstate;
g_return_val_if_fail (object != NULL, FALSE);
g_return_val_if_fail (GST_MINI_OBJECT_IS_LOCKABLE (object), FALSE);
if (G_UNLIKELY (object->flags & GST_MINI_OBJECT_FLAG_LOCK_READONLY &&
flags & GST_LOCK_FLAG_WRITE))
return FALSE;
do {
access_mode = flags & FLAG_MASK;
newstate = state = g_atomic_int_get (&object->lockstate);
GST_CAT_TRACE (GST_CAT_LOCKING, "lock %p: state %08x, access_mode %d",
object, state, access_mode);
if (access_mode & GST_LOCK_FLAG_EXCLUSIVE) {
/* shared ref */
newstate += SHARE_ONE;
access_mode &= ~GST_LOCK_FLAG_EXCLUSIVE;
}
/* shared counter > 1 and write access is not allowed */
if (((state & GST_LOCK_FLAG_WRITE) != 0
|| (access_mode & GST_LOCK_FLAG_WRITE) != 0)
&& IS_SHARED (newstate))
goto lock_failed;
if (access_mode) {
if ((state & LOCK_FLAG_MASK) == 0) {
/* nothing mapped, set access_mode */
newstate |= access_mode;
} else {
/* access_mode must match */
if ((state & access_mode) != access_mode)
goto lock_failed;
}
/* increase refcount */
newstate += LOCK_ONE;
}
} while (!g_atomic_int_compare_and_exchange (&object->lockstate, state,
newstate));
return TRUE;
lock_failed:
{
GST_CAT_DEBUG (GST_CAT_LOCKING,
"lock failed %p: state %08x, access_mode %d", object, state,
access_mode);
return FALSE;
}
}
开发者ID:GrokImageCompression,项目名称:gstreamer,代码行数:65,代码来源:gstminiobject.c
示例12: gst_buffer_span
/**
* gst_buffer_span:
* @buf1: the first source #GstBuffer to merge.
* @offset: the offset in the first buffer from where the new
* buffer should start.
* @buf2: the second source #GstBuffer to merge.
* @len: the total length of the new buffer.
*
* Creates a new buffer that consists of part of buf1 and buf2.
* Logically, buf1 and buf2 are concatenated into a single larger
* buffer, and a new buffer is created at the given offset inside
* this space, with a given length.
*
* If the two source buffers are children of the same larger buffer,
* and are contiguous, the new buffer will be a child of the shared
* parent, and thus no copying is necessary. you can use
* gst_buffer_is_span_fast() to determine if a memcpy will be needed.
*
* MT safe.
* Returns: the new #GstBuffer that spans the two source buffers.
* Returns NULL if the arguments are invalid.
*/
GstBuffer *
gst_buffer_span (GstBuffer * buf1, guint32 offset, GstBuffer * buf2,
guint32 len)
{
GstBuffer *newbuf;
g_return_val_if_fail (buf1 != NULL && buf2 != NULL, NULL);
g_return_val_if_fail (buf1->mini_object.refcount > 0, NULL);
g_return_val_if_fail (buf2->mini_object.refcount > 0, NULL);
g_return_val_if_fail (len > 0, NULL);
g_return_val_if_fail (len <= buf1->size + buf2->size - offset, NULL);
/* if the two buffers have the same parent and are adjacent */
if (gst_buffer_is_span_fast (buf1, buf2)) {
GstBuffer *parent = GST_SUBBUFFER_CAST (buf1)->parent;
/* we simply create a subbuffer of the common parent */
newbuf = gst_buffer_create_sub (parent,
buf1->data - parent->data + offset, len);
} else {
GST_CAT_DEBUG (GST_CAT_BUFFER,
"slow path taken while spanning buffers %p and %p", buf1, buf2);
/* otherwise we simply have to brute-force copy the buffers */
newbuf = gst_buffer_new_and_alloc (len);
/* copy the first buffer's data across */
memcpy (newbuf->data, buf1->data + offset, buf1->size - offset);
/* copy the second buffer's data across */
memcpy (newbuf->data + (buf1->size - offset), buf2->data,
len - (buf1->size - offset));
}
/* if the offset is 0, the new buffer has the same timestamp as buf1 */
if (offset == 0) {
GST_BUFFER_OFFSET (newbuf) = GST_BUFFER_OFFSET (buf1);
GST_BUFFER_TIMESTAMP (newbuf) = GST_BUFFER_TIMESTAMP (buf1);
/* if we completely merged the two buffers (appended), we can
* calculate the duration too. Also make sure we's not messing with
* invalid DURATIONS */
if (buf1->size + buf2->size == len) {
if (GST_BUFFER_DURATION_IS_VALID (buf1) &&
GST_BUFFER_DURATION_IS_VALID (buf2)) {
/* add duration */
GST_BUFFER_DURATION (newbuf) = GST_BUFFER_DURATION (buf1) +
GST_BUFFER_DURATION (buf2);
}
if (GST_BUFFER_OFFSET_END_IS_VALID (buf2)) {
/* add offset_end */
GST_BUFFER_OFFSET_END (newbuf) = GST_BUFFER_OFFSET_END (buf2);
}
}
}
return newbuf;
}
开发者ID:wosigh,项目名称:gstreamer,代码行数:77,代码来源:gstbuffer.c
示例13: gst_dwl_allocator_init
static void
gst_dwl_allocator_init (GstDwlAllocator * allocator)
{
DWLInitParam_t params;
GST_CAT_DEBUG (GST_CAT_MEMORY, "init allocator %p", allocator);
/* Use H264 as client, not really needed for anything but as a container */
params.clientType = DWL_CLIENT_TYPE_H264_DEC;
allocator->dwl = DWLInit (¶ms);
}
开发者ID:alexandrebelloni,项目名称:gst1-hantro-g1,代码行数:11,代码来源:gstdwlallocator.c
示例14: fs_rtp_special_source_class_add_blueprint
static GList*
fs_rtp_special_source_class_add_blueprint (FsRtpSpecialSourceClass *klass,
GList *blueprints)
{
if (klass->add_blueprint)
return klass->add_blueprint (klass, blueprints);
else
GST_CAT_DEBUG (fsrtpconference_disco,
"Class %s has no add_blueprint function", G_OBJECT_CLASS_NAME(klass));
return blueprints;
}
开发者ID:wang-zhao,项目名称:gstreamer-win,代码行数:12,代码来源:fs-rtp-special-source.c
示例15: _gst_clock_id_free
static void
_gst_clock_id_free (GstClockID id)
{
g_return_if_fail (id != NULL);
GST_CAT_DEBUG (GST_CAT_CLOCK, "freed entry %p", id);
#ifndef GST_DISABLE_TRACE
gst_alloc_trace_free (_gst_clock_entry_trace, id);
#endif
g_slice_free (GstClockEntry, id);
}
开发者ID:zsx,项目名称:ossbuild,代码行数:12,代码来源:gstclock.c
示例16: _gst_memory_free
static void
_gst_memory_free (GstMemory * mem)
{
GST_CAT_DEBUG (GST_CAT_MEMORY, "free memory %p", mem);
if (mem->parent) {
gst_memory_unlock (mem->parent, GST_LOCK_FLAG_EXCLUSIVE);
gst_memory_unref (mem->parent);
}
gst_allocator_free (mem->allocator, mem);
}
开发者ID:PeterXu,项目名称:gst-mobile,代码行数:12,代码来源:gstmemory.c
示例17: gst_allocator_register
/**
* gst_allocator_register:
* @name: the name of the allocator
* @allocator: (transfer full): #GstAllocator
*
* Registers the memory @allocator with @name. This function takes ownership of
* @allocator.
*/
void
gst_allocator_register (const gchar * name, GstAllocator * allocator)
{
g_return_if_fail (name != NULL);
g_return_if_fail (allocator != NULL);
GST_CAT_DEBUG (GST_CAT_MEMORY, "registering allocator %p with name \"%s\"",
allocator, name);
g_rw_lock_writer_lock (&lock);
g_hash_table_insert (allocators, (gpointer) name, (gpointer) allocator);
g_rw_lock_writer_unlock (&lock);
}
开发者ID:collects,项目名称:gstreamer,代码行数:21,代码来源:gstallocator.c
示例18: got_egl_error
static gboolean
got_egl_error (const char *wtf)
{
EGLint error;
if ((error = eglGetError ()) != EGL_SUCCESS) {
GST_CAT_DEBUG (GST_CAT_DEFAULT, "EGL ERROR: %s returned 0x%04x", wtf,
error);
return TRUE;
}
return FALSE;
}
开发者ID:01org,项目名称:gst-omx,代码行数:13,代码来源:testegl.c
示例19: fs_rtp_special_source_class_negotiation_filter
static GList*
fs_rtp_special_source_class_negotiation_filter (FsRtpSpecialSourceClass *klass,
GList *codec_associations)
{
if (klass->negotiation_filter)
return klass->negotiation_filter (klass, codec_associations);
else
GST_CAT_DEBUG (fsrtpconference_disco,
"Class %s has no negotiation_filter function",
G_OBJECT_CLASS_NAME(klass));
return codec_associations;
}
开发者ID:wang-zhao,项目名称:gstreamer-win,代码行数:13,代码来源:fs-rtp-special-source.c
示例20: gst_adapter_peek
/**
* gst_adapter_peek:
* @adapter: a #GstAdapter
* @size: the number of bytes to peek
*
* Gets the first @size bytes stored in the @adapter. The returned pointer is
* valid until the next function is called on the adapter.
*
* Note that setting the returned pointer as the data of a #GstBuffer is
* incorrect for general-purpose plugins. The reason is that if a downstream
* element stores the buffer so that it has access to it outside of the bounds
* of its chain function, the buffer will have an invalid data pointer after
* your element flushes the bytes. In that case you should use
* gst_adapter_take(), which returns a freshly-allocated buffer that you can set
* as #GstBuffer malloc_data or the potentially more performant
* gst_adapter_take_buffer().
*
* Returns #NULL if @size bytes are not available.
*
* Returns: a pointer to the first @size bytes of data, or NULL.
*/
const guint8 *
gst_adapter_peek (GstAdapter * adapter, guint size)
{
GstBuffer *cur;
guint skip;
g_return_val_if_fail (GST_IS_ADAPTER (adapter), NULL);
g_return_val_if_fail (size > 0, NULL);
/* we don't have enough data, return NULL. This is unlikely
* as one usually does an _available() first instead of peeking a
* random size. */
if (G_UNLIKELY (size > adapter->size))
return NULL;
/* we have enough assembled data, return it */
if (adapter->assembled_len >= size)
return adapter->assembled_data;
/* our head buffer has enough data left, return it */
cur = adapter->buflist->data;
skip = adapter->skip;
if (GST_BUFFER_SIZE (cur) >= size + skip)
return GST_BUFFER_DATA (cur) + skip;
/* We may be able to efficiently merge buffers in our pool to
* gather a big enough chunk to return it from the head buffer directly */
if (gst_adapter_try_to_merge_up (adapter, size)) {
/* Merged something! Check if there's enough avail now */
cur = adapter->buflist->data;
if (GST_BUFFER_SIZE (cur) >= size + skip)
return GST_BUFFER_DATA (cur) + skip;
}
/* Gonna need to copy stuff out */
if (G_UNLIKELY (adapter->assembled_size < size)) {
adapter->assembled_size = (size / DEFAULT_SIZE + 1) * DEFAULT_SIZE;
GST_DEBUG_OBJECT (adapter, "resizing internal buffer to %u",
adapter->assembled_size);
/* no g_realloc to avoid a memcpy that is not desired here since we are
* going to copy new data into the area below */
g_free (adapter->assembled_data);
adapter->assembled_data = g_malloc (adapter->assembled_size);
}
adapter->assembled_len = size;
GST_CAT_DEBUG (GST_CAT_PERFORMANCE, "copy data from adapter");
copy_into_unchecked (adapter, adapter->assembled_data, skip, size);
return adapter->assembled_data;
}
开发者ID:genesi,项目名称:gstreamer,代码行数:72,代码来源:gstadapter.c
注:本文中的GST_CAT_DEBUG函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论