[FFmpeg-devel] libavcodec/pthread.c:138: error: no previous prototype for 'avcodec_thread_execute2'

Benoit Fouet benoit.fouet
Tue Mar 9 09:45:51 CET 2010


On Mon, 08 Mar 2010 16:16:57 +0000 M?ns Rullg?rd wrote:
> Benoit Fouet <benoit.fouet at free.fr> writes:
> 
> > On Mon, 08 Mar 2010 14:52:44 +0000 M?ns Rullg?rd wrote:
> >> Benoit Fouet <benoit.fouet at free.fr> writes:
> >>
> >> > On Mon, 08 Mar 2010 14:17:01 +0000 M?ns Rullg?rd wrote:
> >> >> Benoit Fouet <benoit.fouet at free.fr> writes:
> >> >>
> >> >> > On Mon, 08 Mar 2010 13:58:49 +0100 Andreas ?man wrote:
> >> >> >> Georgi Chorbadzhiyski wrote:
> >> >> >> > Around 03/08/10 12:43, Benoit Fouet scribbled:
> >> >> >> >> On Mon, 08 Mar 2010 12:28:37 +0200 Georgi Chorbadzhiyski wrote:
> >> >> >> >>> gf at gf:~/ffmpeg$ make
> >> >> >> >>> CC      libavcodec/pthread.o
> >> >> >> >>> libavcodec/pthread.c:138: error: no previous prototype for 'avcodec_thread_execute2'
> >> >> >> >>> make: *** [libavcodec/pthread.o] Error 1
> >> >> >> >>>
> >> >> >> >>> This fixes it but I don't think this is the correct fix. It should not give error
> >> >> >> >>> here.
> >> >> >> >> missing prototypes now results in an error.
> >> >> >> >
> >> >> >> > I've missed this. This is a good change.
> >> >> >>
> >> >> >> Fixed, and for w32thread.c as well.
> >> >> >
> >> >> > Your fix is not in line with what exists e.g. for avcodec_thread_execute
> >> >> > I don't know which solution we should aim at, but now we're somewhere
> >> >> > in between, and IMHO, that needs to be fixed: either make
> >> >> > avcodec_thread_execute2 part of the API, or remove the other ones from
> >> >> > the API.
> >> >>
> >> >> Neither of them make sense in the public API.  There is no sensible
> >> >> way for an application to use them.
> >> >>
> >> >
> >> > this is fine by me.
> >> > If my understanding is correct, anyone can add his own thread
> >> > management, right ? Then I guess we should provide function pointer
> >> > prototypes, instead of providing these.
> >>
> >> We already have AVCodecContext.execute as a function pointer.
> >>
> >
> > let's drop what's unused in avcodec.h then.
> > Patch below to do that (I also made thread_func in OS/2 static, though
> > I can do it in a separate patch if needed, and if correct (maybe there
> > is some black magic things there preventing that to work correctly)),
> > does that look ok ?
> 
> Skip the ifdeffery, just drop the prototypes.  These being in the
> public header file is an error, and nobody should be using them.
> 

here is the patch without the ifdeffery, I'll apply whichever is picked up...

Index: libavcodec/w32thread.c                                                                                                                          
===================================================================                                                                                    
--- libavcodec/w32thread.c      (revision 22379)                                                                                                       
+++ libavcodec/w32thread.c      (working copy)                                                                                                         
@@ -93,7 +93,7 @@ void avcodec_thread_free(AVCodecContext                                                                                              
     av_freep(&s->thread_opaque);                                                                                                                      
 }                                                                                                                                                     
                                                                                                                                                       
-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){                  
+static int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){           
     ThreadContext *c= s->thread_opaque;                                                                                                               
     int i;                                                                                                                                            
     int jobnr = 0;                                                                                                                                    
Index: libavcodec/options.c                                                                                                                            
===================================================================                                                                                    
--- libavcodec/options.c        (revision 22379)                                                                                                       
+++ libavcodec/options.c        (working copy)                                                                                                         
@@ -26,6 +26,7 @@                                                                                                                                      
                                                                                                                                                       
 #include "avcodec.h"                                                                                                                                  
 #include "opt.h"                                                                                                                                      
+#include "internal.h"                                                                                                                                 
 #include <float.h>              /* FLT_MIN, FLT_MAX */                                                                                                
                                                                                                                                                       
 static const char* context_to_name(void* ptr) {                                                                                                       
Index: libavcodec/internal.h                                                                                                                           
===================================================================                                                                                    
--- libavcodec/internal.h       (revision 22379)                                                                                                       
+++ libavcodec/internal.h       (working copy)                                                                                                         
@@ -48,4 +48,7 @@ AVHWAccel *ff_find_hwaccel(enum CodecID                                                                                              
  */                                                                                                                                                   
 int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);

+int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
+int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
+
 #endif /* AVCODEC_INTERNAL_H */
Index: libavcodec/avcodec.h
===================================================================
--- libavcodec/avcodec.h        (revision 22379)
+++ libavcodec/avcodec.h        (working copy)
@@ -3256,9 +3256,6 @@ enum PixelFormat avcodec_default_get_for

 int avcodec_thread_init(AVCodecContext *s, int thread_count);
 void avcodec_thread_free(AVCodecContext *s);
-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
-int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
-int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
 //FIXME func typedef

 /**
Index: libavcodec/beosthread.c
===================================================================
--- libavcodec/beosthread.c     (revision 22379)
+++ libavcodec/beosthread.c     (working copy)
@@ -92,7 +92,7 @@ void avcodec_thread_free(AVCodecContext
     av_freep(&s->thread_opaque);
 }

-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
+static int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
     ThreadContext *c= s->thread_opaque;
     int i;

Index: libavcodec/os2thread.c
===================================================================
--- libavcodec/os2thread.c      (revision 22379)
+++ libavcodec/os2thread.c      (working copy)
@@ -39,7 +39,7 @@ typedef struct ThreadContext{
 }ThreadContext;


-void attribute_align_arg thread_func(void *v){
+static void attribute_align_arg thread_func(void *v){
     ThreadContext *c= v;

     for(;;){
@@ -81,7 +81,7 @@ void avcodec_thread_free(AVCodecContext
     av_freep(&s->thread_opaque);
 }

-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
+static int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
     ThreadContext *c= s->thread_opaque;
     int i;

Index: libavcodec/pthread.c
===================================================================
--- libavcodec/pthread.c        (revision 22379)
+++ libavcodec/pthread.c        (working copy)
@@ -104,7 +104,7 @@ void avcodec_thread_free(AVCodecContext
     av_freep(&avctx->thread_opaque);
 }

-int avcodec_thread_execute(AVCodecContext *avctx, action_func* func, void *arg, int *ret, int job_count, int job_size)
+static int avcodec_thread_execute(AVCodecContext *avctx, action_func* func, void *arg, int *ret, int job_count, int job_size)
 {
     ThreadContext *c= avctx->thread_opaque;
     int dummy_ret;



More information about the ffmpeg-devel mailing list