changeset 1856:ed6eb3e304cc libavcodec

av_log() cleanup null pointer segfaults dont print redundant spam dont print prefix if reference==NULL class -> av_class dont copy AVClass to every object, its a waste of memory and not a good idea at all
author michael
date Wed, 03 Mar 2004 17:53:55 +0000
parents bafde44145f9
children 00a6bfc81010
files avcodec.h utils.c
diffstat 2 files changed, 16 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/avcodec.h	Wed Mar 03 15:41:21 2004 +0000
+++ b/avcodec.h	Wed Mar 03 17:53:55 2004 +0000
@@ -589,7 +589,7 @@
      * Info on struct for av_log
      * - set by avcodec_alloc_context
      */
-    AVClass class;
+    AVClass *av_class;
     /**
      * the average bitrate.
      * - encoding: set by user. unused for constant quantizer encoding
--- a/utils.c	Wed Mar 03 15:41:21 2004 +0000
+++ b/utils.c	Wed Mar 03 17:53:55 2004 +0000
@@ -342,9 +342,21 @@
     return fmt[0];
 }
 
+static const char* context_to_name(void* ptr) {
+    AVCodecContext *avc= ptr;
+
+    if(avc && avc->codec && avc->codec->name)
+        return avc->codec->name; 
+    else
+        return "NULL";
+}
+
+static AVClass av_codec_context_class = { "AVCodecContext", context_to_name };
+
 void avcodec_get_context_defaults(AVCodecContext *s){
     memset(s, 0, sizeof(AVCodecContext));
 
+    s->av_class= &av_codec_context_class;
     s->bit_rate= 800*1000;
     s->bit_rate_tolerance= s->bit_rate*10;
     s->qmin= 2;
@@ -386,16 +398,11 @@
  * allocates a AVCodecContext and set it to defaults.
  * this can be deallocated by simply calling free() 
  */
-static const char* context_to_name(void* class_ptr) { return ((AVCodecContext*) class_ptr)->codec->name; }
-
-static AVClass av_codec_context_class = { "AVCodecContext", context_to_name };
-
 AVCodecContext *avcodec_alloc_context(void){
     AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext));
     
     if(avctx==NULL) return NULL;
     
-    avctx->class = av_codec_context_class;
     avcodec_get_context_defaults(avctx);
     
     return avctx;
@@ -840,23 +847,17 @@
 
 /* av_log API */
 
-static const char* null_to_name(void* class_ptr) { return "NULL"; }
-
-static AVClass av_null_class = { "NULL", null_to_name };
-
 static int av_log_level = AV_LOG_DEBUG;
 
 static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
 {
     static int print_prefix=1;
-    AVClass* avcl = ptr;
-    if(!avcl || !avcl->class_name)
-	avcl = &av_null_class;
+    AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
     if(level>av_log_level)
 	return;
 #undef fprintf
-    if(print_prefix) {
-	    fprintf(stderr, "[%s:%s @ %p]", avcl->class_name, avcl->item_name(avcl), avcl);
+    if(print_prefix && avc) {
+	    fprintf(stderr, "[%s @ %p]", avc->item_name(ptr), avc);
     }
 #define fprintf please_use_av_log