X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=gst-plugins-base-subtitles0.10%2Fgst%2Fffmpegcolorspace%2Futils.c;fp=gst-plugins-base-subtitles0.10%2Fgst%2Fffmpegcolorspace%2Futils.c;h=49d86e7890627313b9eef870035f5f58df6c6406;hb=57ba96e291a055f69dbfd4ae9f1ae2390e36986e;hp=0000000000000000000000000000000000000000;hpb=be2c98fb83895d10ac44af7b9a9c3e00ca54bf49;p=mafwsubrenderer diff --git a/gst-plugins-base-subtitles0.10/gst/ffmpegcolorspace/utils.c b/gst-plugins-base-subtitles0.10/gst/ffmpegcolorspace/utils.c new file mode 100644 index 0000000..49d86e7 --- /dev/null +++ b/gst-plugins-base-subtitles0.10/gst/ffmpegcolorspace/utils.c @@ -0,0 +1,159 @@ +/* + * utils for libavcodec + * Copyright (c) 2001 Fabrice Bellard. + * Copyright (c) 2003 Michel Bardiaux for the av_log API + * Copyright (c) 2002-2004 Michael Niedermayer + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/** + * @file utils.c + * utils. + */ + +#include "avcodec.h" +#include "dsputil.h" +#include +#include +#include +#include + +void * +av_mallocz (unsigned int size) +{ + void *ptr; + + ptr = av_malloc (size); + if (!ptr) + return NULL; + memset (ptr, 0, size); + return ptr; +} + +char * +av_strdup (const char *s) +{ + char *ptr; + int len; + + len = strlen (s) + 1; + ptr = av_malloc (len); + if (!ptr) + return NULL; + memcpy (ptr, s, len); + return ptr; +} + +/** + * realloc which does nothing if the block is large enough + */ +void * +av_fast_realloc (void *ptr, unsigned int *size, unsigned int min_size) +{ + if (min_size < *size) + return ptr; + + *size = 17 * min_size / 16 + 32; + + return av_realloc (ptr, *size); +} + + +static unsigned int last_static = 0; +static unsigned int allocated_static = 0; +static void **array_static = NULL; + +/** + * allocation of static arrays - do not use for normal allocation. + */ +void * +av_mallocz_static (unsigned int size) +{ + void *ptr = av_mallocz (size); + + if (ptr) { + array_static = + av_fast_realloc (array_static, &allocated_static, + sizeof (void *) * (last_static + 1)); + array_static[last_static++] = ptr; + } + + return ptr; +} + +/** + * free all static arrays and reset pointers to 0. + */ +void +av_free_static (void) +{ + while (last_static) { + av_freep (&array_static[--last_static]); + } + av_freep (&array_static); +} + +/** + * Frees memory and sets the pointer to NULL. + * @param arg pointer to the pointer which should be freed + */ +void +av_freep (void *arg) +{ + void **ptr = (void **) arg; + + av_free (*ptr); + *ptr = NULL; +} + +void +avcodec_get_context_defaults (AVCodecContext * s) +{ + memset (s, 0, sizeof (AVCodecContext)); + + s->frame_rate_base = 1; + s->frame_rate = 25; +} + +/** + * allocates a AVCodecContext and set it to defaults. + * this can be deallocated by simply calling free() + */ +AVCodecContext * +avcodec_alloc_context (void) +{ + AVCodecContext *avctx = av_malloc (sizeof (AVCodecContext)); + + if (avctx == NULL) + return NULL; + + avcodec_get_context_defaults (avctx); + + return avctx; +} + +/* must be called before any other functions */ +void +avcodec_init (void) +{ + static int inited = 0; + + if (inited != 0) + return; + inited = 1; + + dsputil_static_init (); +}