From ec18f8becf6804b8f8f6c60bf050297f4ba06e2b Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Thu, 24 Mar 2016 13:16:25 +0000 Subject: Re #1897: Updated ffmpeg_util.h/.c to support older ffmpeg. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5271 74dad513-b988-da41-8d7b-12977e46ad98 --- aconfigure | 113 ++++++++++++++++++++++++++++++-------- aconfigure.ac | 6 ++ pjmedia/src/pjmedia/ffmpeg_util.c | 50 ++++++++--------- pjmedia/src/pjmedia/ffmpeg_util.h | 10 ++++ 4 files changed, 132 insertions(+), 47 deletions(-) diff --git a/aconfigure b/aconfigure index 7bc24f3c..6a4c1702 100755 --- a/aconfigure +++ b/aconfigure @@ -2010,6 +2010,60 @@ $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -2273,7 +2327,7 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;} || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi done @@ -2416,7 +2470,7 @@ fi $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' @@ -2449,7 +2503,7 @@ fi $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' @@ -2482,7 +2536,7 @@ fi $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' @@ -2819,7 +2873,7 @@ fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -2934,7 +2988,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } @@ -2977,7 +3031,7 @@ else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 @@ -3036,7 +3090,7 @@ $as_echo "$ac_try_echo"; } >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi fi fi @@ -3088,7 +3142,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi @@ -4482,7 +4536,7 @@ else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi ac_ext=c @@ -4972,7 +5026,7 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac @@ -7076,6 +7130,21 @@ fi fi + ac_fn_c_check_type "$LINENO" "enum AVPixelFormat" "ac_cv_type_enum_AVPixelFormat" "#include + +" +if test "x$ac_cv_type_enum_AVPixelFormat" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_ENUM_AVPIXELFORMAT 1 +_ACEOF + + +else + ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_USE_OLD_FFMPEG=1" +fi + + LIBS="$LIBS $ac_ffmpeg_ldflags" export PKG_CONFIG_PATH=$SAVED_PKG_CONFIG_PATH @@ -7613,7 +7682,7 @@ else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Error: unable to recognize your IPP installation. Make sure the paths and ARCH suffix are set correctly, run with --help for more info -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext @@ -7669,13 +7738,13 @@ $as_echo_n "checking Intel IPP USC build location... " >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Unable to find to find built binaries under $IPPSAMPLES/speech-codecs/{bin,_bin}. Have you built the IPP samples? -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "unable to find $IPPSAMPLES/speech-codecs/bin/*gcc*/lib or $IPPSAMPLES/speech-codecs/_bin/*gcc*/lib directory. Have you built the samples? -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi # Test the directory @@ -7683,7 +7752,7 @@ See \`config.log' for more details" "$LINENO" 5; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "There's something wrong with this script, directory $IPPSAMP_DIR does not exist -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } exit 1; fi @@ -7697,14 +7766,14 @@ See \`config.log' for more details" "$LINENO" 5; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "bug in this script: unsupported IPP version -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi if test ! -f $IPPSAMP_DIR/$IPPSAMP_LIBS; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "$IPPSAMP_LIBS doesn't exist in $IPPSAMP_DIR -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPPSAMP_DIR" >&5 @@ -7740,7 +7809,7 @@ else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no -See \`config.log' for more details" "$LINENO" 5; } +See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext @@ -9138,7 +9207,7 @@ do "pjsip/build/os-auto.mak") CONFIG_FILES="$CONFIG_FILES pjsip/build/os-auto.mak" ;; "third_party/build/os-auto.mak") CONFIG_FILES="$CONFIG_FILES third_party/build/os-auto.mak" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done @@ -9455,7 +9524,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -9483,7 +9552,7 @@ do [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" @@ -9510,7 +9579,7 @@ $as_echo "$as_me: creating $ac_file" >&6;} case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac diff --git a/aconfigure.ac b/aconfigure.ac index 4eb0c3c5..13b1fb44 100644 --- a/aconfigure.ac +++ b/aconfigure.ac @@ -1097,6 +1097,12 @@ AC_ARG_ENABLE(ffmpeg, fi + AC_CHECK_TYPES(enum AVPixelFormat, + [], + [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_USE_OLD_FFMPEG=1"], + [[#include ]] + ) + LIBS="$LIBS $ac_ffmpeg_ldflags" export PKG_CONFIG_PATH=$SAVED_PKG_CONFIG_PATH ] diff --git a/pjmedia/src/pjmedia/ffmpeg_util.c b/pjmedia/src/pjmedia/ffmpeg_util.c index 92aebe8d..ba749412 100644 --- a/pjmedia/src/pjmedia/ffmpeg_util.c +++ b/pjmedia/src/pjmedia/ffmpeg_util.c @@ -33,19 +33,19 @@ static const struct ffmpeg_fmt_table_t enum AVPixelFormat pf; } ffmpeg_fmt_table[] = { - { PJMEDIA_FORMAT_RGBA, AV_PIX_FMT_RGBA}, - { PJMEDIA_FORMAT_RGB24,AV_PIX_FMT_BGR24}, - { PJMEDIA_FORMAT_BGRA, AV_PIX_FMT_BGRA}, - { PJMEDIA_FORMAT_GBRP, AV_PIX_FMT_GBRP}, - - { PJMEDIA_FORMAT_AYUV, AV_PIX_FMT_NONE}, - { PJMEDIA_FORMAT_YUY2, AV_PIX_FMT_YUYV422}, - { PJMEDIA_FORMAT_UYVY, AV_PIX_FMT_UYVY422}, - { PJMEDIA_FORMAT_I420, AV_PIX_FMT_YUV420P}, - //{ PJMEDIA_FORMAT_YV12, AV_PIX_FMT_YUV420P}, - { PJMEDIA_FORMAT_I422, AV_PIX_FMT_YUV422P}, - { PJMEDIA_FORMAT_I420JPEG, AV_PIX_FMT_YUVJ420P}, - { PJMEDIA_FORMAT_I422JPEG, AV_PIX_FMT_YUVJ422P}, + { PJMEDIA_FORMAT_RGBA, AV(PIX_FMT_RGBA)}, + { PJMEDIA_FORMAT_RGB24,AV(PIX_FMT_BGR24)}, + { PJMEDIA_FORMAT_BGRA, AV(PIX_FMT_BGRA)}, + { PJMEDIA_FORMAT_GBRP, AV(PIX_FMT_GBRP)}, + + { PJMEDIA_FORMAT_AYUV, AV(PIX_FMT_NONE)}, + { PJMEDIA_FORMAT_YUY2, AV(PIX_FMT_YUYV422)}, + { PJMEDIA_FORMAT_UYVY, AV(PIX_FMT_UYVY422)}, + { PJMEDIA_FORMAT_I420, AV(PIX_FMT_YUV420P)}, + //{ PJMEDIA_FORMAT_YV12, AV(PIX_FMT_YUV420P)}, + { PJMEDIA_FORMAT_I422, AV(PIX_FMT_YUV422P)}, + { PJMEDIA_FORMAT_I420JPEG, AV(PIX_FMT_YUVJ420P)}, + { PJMEDIA_FORMAT_I422JPEG, AV(PIX_FMT_YUVJ422P)}, }; /* Conversion table between pjmedia_format_id and CodecID */ @@ -55,14 +55,14 @@ static const struct ffmpeg_codec_table_t unsigned codec_id; } ffmpeg_codec_table[] = { - {PJMEDIA_FORMAT_H261, AV_CODEC_ID_H261}, - {PJMEDIA_FORMAT_H263, AV_CODEC_ID_H263}, - {PJMEDIA_FORMAT_H263P, AV_CODEC_ID_H263P}, - {PJMEDIA_FORMAT_H264, AV_CODEC_ID_H264}, - {PJMEDIA_FORMAT_MPEG1VIDEO, AV_CODEC_ID_MPEG1VIDEO}, - {PJMEDIA_FORMAT_MPEG2VIDEO, AV_CODEC_ID_MPEG2VIDEO}, - {PJMEDIA_FORMAT_MPEG4, AV_CODEC_ID_MPEG4}, - {PJMEDIA_FORMAT_MJPEG, AV_CODEC_ID_MJPEG} + {PJMEDIA_FORMAT_H261, AV(CODEC_ID_H261)}, + {PJMEDIA_FORMAT_H263, AV(CODEC_ID_H263)}, + {PJMEDIA_FORMAT_H263P, AV(CODEC_ID_H263P)}, + {PJMEDIA_FORMAT_H264, AV(CODEC_ID_H264)}, + {PJMEDIA_FORMAT_MPEG1VIDEO, AV(CODEC_ID_MPEG1VIDEO)}, + {PJMEDIA_FORMAT_MPEG2VIDEO, AV(CODEC_ID_MPEG2VIDEO)}, + {PJMEDIA_FORMAT_MPEG4, AV(CODEC_ID_MPEG4)}, + {PJMEDIA_FORMAT_MJPEG, AV(CODEC_ID_MJPEG)} }; static int pjmedia_ffmpeg_ref_cnt; @@ -131,13 +131,13 @@ pj_status_t pjmedia_format_id_to_PixelFormat(pjmedia_format_id fmt_id, unsigned i; for (i=0; iid==fmt_id && t->pf != AV_PIX_FMT_NONE) { + if (t->id==fmt_id && t->pf != AV(PIX_FMT_NONE)) { *pixel_format = t->pf; return PJ_SUCCESS; } } - *pixel_format = AV_PIX_FMT_NONE; + *pixel_format = AV(PIX_FMT_NONE); return PJ_ENOTFOUND; } @@ -162,13 +162,13 @@ pj_status_t pjmedia_format_id_to_CodecID(pjmedia_format_id fmt_id, unsigned i; for (i=0; iid==fmt_id && t->codec_id != AV_PIX_FMT_NONE) { + if (t->id==fmt_id && t->codec_id != AV(PIX_FMT_NONE)) { *codec_id = t->codec_id; return PJ_SUCCESS; } } - *codec_id = (unsigned)AV_PIX_FMT_NONE; + *codec_id = (unsigned)AV(PIX_FMT_NONE); return PJ_ENOTFOUND; } diff --git a/pjmedia/src/pjmedia/ffmpeg_util.h b/pjmedia/src/pjmedia/ffmpeg_util.h index 7fddb3ff..cd8283ed 100644 --- a/pjmedia/src/pjmedia/ffmpeg_util.h +++ b/pjmedia/src/pjmedia/ffmpeg_util.h @@ -37,6 +37,16 @@ #include #include + +#ifdef PJMEDIA_USE_OLD_FFMPEG +# define AVPixelFormat PixelFormat +# define AV(str) str +# define PIX_FMT_GBRP PIX_FMT_GBR24P +#else +# define AV(str) AV_ ## str +#endif + + void pjmedia_ffmpeg_add_ref(); void pjmedia_ffmpeg_dec_ref(); -- cgit v1.2.3