#!/bin/sh
proprietary_path="proprietary"
source_path=$(dirname "$(realpath "$0")")/ffmpeg
find_things_extern(){
thing=$1
pattern=$2
file=$3
out=${4:-$thing}
sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$out/p" "$file"
}
find_filters_extern(){
src_file="$1"
sed -n 's/^extern const AVFilter ff_[avfsinkrc]\{2,5\}_\([[:alnum:]_]\{1,\}\);/\1_filter/p' "$src_file"
}
insert_filter() {
extra="extern const AVFilter ff_"
file=libavfilter/filter_list.c
echo "/* Auto insert filters */" > "$file.tmp"
for c in $1; do
eval c=\$full_filter_name_${c%_filter}
echo "$extra$c;" >> "$file.tmp"
done
cat "$file" >> "$file.tmp" && mv "$file.tmp" "$file"
}
insert_codec() {
extra="extern const FFCodec ff_"
file=libavcodec/codec_list.c
echo "$1" | awk -v p="$extra" '{for(i=1;i<=NF;i++) print p $i ";"}' > "$file.tmp" &&
cat "$file" >> "$file.tmp" && mv "$file.tmp" "$file"
}
insert_demuxer() {
extra="extern const FFInputFormat ff_"
file=libavformat/demuxer_list.c
echo "$1" | awk -v p="$extra" '{for(i=1;i<=NF;i++) print p $i ";"}' > "$file.tmp" &&
cat "$file" >> "$file.tmp" && mv "$file.tmp" "$file"
}
insert_muxer() {
extra="extern const FFOutputFormat ff_"
file=libavformat/muxer_list.c
echo "$1" | awk -v p="$extra" '{for(i=1;i<=NF;i++) print p $i ";"}' > "$file.tmp" &&
cat "$file" >> "$file.tmp" && mv "$file.tmp" "$file"
}
FILTER_LIST=$(find_filters_extern $source_path/libavfilter/allfilters.c)
ENCODER_LIST=$(find_things_extern encoder FFCodec $source_path/libavcodec/allcodecs.c)
DECODER_LIST=$(find_things_extern decoder FFCodec $source_path/libavcodec/allcodecs.c)
DEMUXER_LIST=$(find_things_extern demuxer FFInputFormat $source_path/libavformat/allformats.c)
MUXER_LIST=$(find_things_extern muxer FFOutputFormat $source_path/libavformat/allformats.c)
if [ -n "$CONFIG_LIB_FFMPEG_EXTERNAL_LIBRARIES" ]; then
OLD_IFS="$IFS"
IFS=':'
for extern_path in $CONFIG_LIB_FFMPEG_EXTERNAL_LIBRARIES; do
extern_path=$(echo "$extern_path" | xargs)
if [ -e "$APPDIR/$extern_path/libavfilter" ]; then
filter_path="$APPDIR/$extern_path/libavfilter"
eval "$(sed -n "s/^extern const AVFilter ff_\([avfsinkrc]\{2,5\}\)_\(.*\);/full_filter_name_\2=\1_\2/p" $filter_path/allfilters.c)"
EXT_FILTER_LIST=$(printf "%s\n%s" "$EXT_FILTER_LIST" "$(find_filters_extern $filter_path/allfilters.c)")
fi
if [ -e "$APPDIR/$extern_path/libavcodec" ]; then
codec_path="$APPDIR/$extern_path/libavcodec"
EXT_ENCODER_LIST=$(printf "%s\n%s" "$EXT_ENCODER_LIST" "$(find_things_extern encoder FFCodec $codec_path/allcodecs.c)")
EXT_DECODER_LIST=$(printf "%s\n%s" "$EXT_DECODER_LIST" "$(find_things_extern decoder FFCodec $codec_path/allcodecs.c)")
fi
if [ -e "$APPDIR/$extern_path/libavformat" ]; then
format_path="$APPDIR/$extern_path/libavformat"
EXT_DEMUXER_LIST=$(printf "%s\n%s" "$EXT_DEMUXER_LIST" "$(find_things_extern demuxer FFInputFormat $format_path/allformats.c)")
EXT_MUXER_LIST=$(printf "%s\n%s" "$EXT_MUXER_LIST" "$(find_things_extern muxer FFOutputFormat $format_path/allformats.c)")
fi
done
IFS="$OLD_IFS"
fi
FILTER_LIST=$(printf "%s\n%s" "$FILTER_LIST" "$EXT_FILTER_LIST")
ENCODER_LIST=$(printf "%s\n%s" "$ENCODER_LIST" "$EXT_ENCODER_LIST")
DECODER_LIST=$(printf "%s\n%s" "$DECODER_LIST" "$EXT_DECODER_LIST")
DEMUXER_LIST=$(printf "%s\n%s" "$DEMUXER_LIST" "$EXT_DEMUXER_LIST")
MUXER_LIST=$(printf "%s\n%s" "$MUXER_LIST" "$EXT_MUXER_LIST")
. $source_path/configure "$@"
configure_status=$?
[ -n "$EXT_FILTER_LIST" ] && insert_filter "$EXT_FILTER_LIST"
[ -n "$EXT_ENCODER_LIST" ] && insert_codec "$EXT_ENCODER_LIST"
[ -n "$EXT_DECODER_LIST" ] && insert_codec "$EXT_DECODER_LIST"
[ -n "$EXT_DEMUXER_LIST" ] && insert_demuxer "$EXT_DEMUXER_LIST"
[ -n "$EXT_MUXER_LIST" ] && insert_muxer "$EXT_MUXER_LIST"
exit $configure_status