Conflicts: Changelog doc/APIchanges doc/optimization.txt libavformat/avio.h Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n0.8
| @@ -1,5 +1,5 @@ | |||||
| This file contains the names of some of the people who have contributed to | This file contains the names of some of the people who have contributed to | ||||
| FFmpeg. The names are sorted alphabetically by last name. As this file is | |||||
| Libav/FFmpeg. The names are sorted alphabetically by last name. As this file is | |||||
| currently quite outdated and git serves as a much better tool for determining | currently quite outdated and git serves as a much better tool for determining | ||||
| authorship, it remains here for historical reasons only. | authorship, it remains here for historical reasons only. | ||||
| @@ -79,6 +79,7 @@ version <next>: | |||||
| - Bink version 'b' audio and video decoder | - Bink version 'b' audio and video decoder | ||||
| - Bitmap Brothers JV playback system | - Bitmap Brothers JV playback system | ||||
| - Linux framebuffer input device added | - Linux framebuffer input device added | ||||
| - Apple HTTP Live Streaming protocol handler | |||||
| version 0.6: | version 0.6: | ||||
| @@ -25,7 +25,7 @@ DOXYFILE_ENCODING = UTF-8 | |||||
| # The PROJECT_NAME tag is a single word (or a sequence of words surrounded | # The PROJECT_NAME tag is a single word (or a sequence of words surrounded | ||||
| # by quotes) that should identify the project. | # by quotes) that should identify the project. | ||||
| PROJECT_NAME = FFmpeg | |||||
| PROJECT_NAME = Libav | |||||
| # The PROJECT_NUMBER tag can be used to enter a project or revision number. | # The PROJECT_NUMBER tag can be used to enter a project or revision number. | ||||
| # This could be handy for archiving the generated documentation or | # This could be handy for archiving the generated documentation or | ||||
| @@ -2,10 +2,10 @@ | |||||
| 1) Type './configure' to create the configuration. A list of configure | 1) Type './configure' to create the configuration. A list of configure | ||||
| options is printed by running 'configure --help'. | options is printed by running 'configure --help'. | ||||
| 'configure' can be launched from a directory different from the FFmpeg | |||||
| 'configure' can be launched from a directory different from the Libav | |||||
| sources to build the objects out of tree. To do this, use an absolute | sources to build the objects out of tree. To do this, use an absolute | ||||
| path when launching 'configure', e.g. '/ffmpegdir/ffmpeg/configure'. | |||||
| path when launching 'configure', e.g. '/libavdir/libav/configure'. | |||||
| 2) Then type 'make' to build FFmpeg. GNU Make 3.81 or later is required. | |||||
| 2) Then type 'make' to build Libav. GNU Make 3.81 or later is required. | |||||
| 3) Type 'make install' to install all binaries and libraries you built. | 3) Type 'make install' to install all binaries and libraries you built. | ||||
| @@ -1,17 +1,17 @@ | |||||
| FFmpeg: | |||||
| Libav: | |||||
| ------- | ------- | ||||
| Most files in FFmpeg are under the GNU Lesser General Public License version 2.1 | |||||
| Most files in Libav are under the GNU Lesser General Public License version 2.1 | |||||
| or later (LGPL v2.1+). Read the file COPYING.LGPLv2.1 for details. Some other | or later (LGPL v2.1+). Read the file COPYING.LGPLv2.1 for details. Some other | ||||
| files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to | files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to | ||||
| FFmpeg. | |||||
| Libav. | |||||
| Some optional parts of FFmpeg are licensed under the GNU General Public License | |||||
| Some optional parts of Libav are licensed under the GNU General Public License | |||||
| version 2 or later (GPL v2+). See the file COPYING.GPLv2 for details. None of | version 2 or later (GPL v2+). See the file COPYING.GPLv2 for details. None of | ||||
| these parts are used by default, you have to explicitly pass --enable-gpl to | these parts are used by default, you have to explicitly pass --enable-gpl to | ||||
| configure to activate them. In this case, FFmpeg's license changes to GPL v2+. | |||||
| configure to activate them. In this case, Libav's license changes to GPL v2+. | |||||
| Specifically, the GPL parts of FFmpeg are | |||||
| Specifically, the GPL parts of Libav are | |||||
| - libpostproc | - libpostproc | ||||
| - optional x86 optimizations in the files | - optional x86 optimizations in the files | ||||
| @@ -33,14 +33,14 @@ external libraries: | |||||
| ------------------- | ------------------- | ||||
| Some external libraries, e.g. libx264, are under GPL and can be used in | Some external libraries, e.g. libx264, are under GPL and can be used in | ||||
| conjunction with FFmpeg. They require --enable-gpl to be passed to configure | |||||
| conjunction with Libav. They require --enable-gpl to be passed to configure | |||||
| as well. | as well. | ||||
| The OpenCORE external libraries are under the Apache License 2.0. That license | The OpenCORE external libraries are under the Apache License 2.0. That license | ||||
| is incompatible with the LGPL v2.1 and the GPL v2, but not with version 3 of | is incompatible with the LGPL v2.1 and the GPL v2, but not with version 3 of | ||||
| those licenses. So to combine the OpenCORE libraries with FFmpeg, the license | |||||
| those licenses. So to combine the OpenCORE libraries with Libav, the license | |||||
| version needs to be upgraded by passing --enable-version3 to configure. | version needs to be upgraded by passing --enable-version3 to configure. | ||||
| The nonfree external library libfaac can be hooked up in FFmpeg. You need to | |||||
| The nonfree external library libfaac can be hooked up in Libav. You need to | |||||
| pass --enable-nonfree to configure to enable it. Employ this option with care | pass --enable-nonfree to configure to enable it. Employ this option with care | ||||
| as FFmpeg then becomes nonfree and unredistributable. | |||||
| as Libav then becomes nonfree and unredistributable. | |||||
| @@ -177,7 +177,7 @@ distclean:: | |||||
| $(RM) version.h config.* libavutil/avconfig.h | $(RM) version.h config.* libavutil/avconfig.h | ||||
| config: | config: | ||||
| $(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION) | |||||
| $(SRC_PATH)/configure $(value LIBAV_CONFIGURATION) | |||||
| # regression tests | # regression tests | ||||
| @@ -1,4 +1,4 @@ | |||||
| FFmpeg README | |||||
| Libav README | |||||
| ------------- | ------------- | ||||
| 1) Documentation | 1) Documentation | ||||
| @@ -399,7 +399,7 @@ static int warned_cfg = 0; | |||||
| } \ | } \ | ||||
| if (flags & SHOW_CONFIG) { \ | if (flags & SHOW_CONFIG) { \ | ||||
| const char *cfg = libname##_configuration(); \ | const char *cfg = libname##_configuration(); \ | ||||
| if (strcmp(FFMPEG_CONFIGURATION, cfg)) { \ | |||||
| if (strcmp(LIBAV_CONFIGURATION, cfg)) { \ | |||||
| if (!warned_cfg) { \ | if (!warned_cfg) { \ | ||||
| fprintf(outstream, \ | fprintf(outstream, \ | ||||
| "%sWARNING: library configuration mismatch\n", \ | "%sWARNING: library configuration mismatch\n", \ | ||||
| @@ -425,17 +425,17 @@ static void print_all_libs_info(FILE* outstream, int flags) | |||||
| void show_banner(void) | void show_banner(void) | ||||
| { | { | ||||
| fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-%d the FFmpeg developers\n", | |||||
| fprintf(stderr, "%s version " LIBAV_VERSION ", Copyright (c) %d-%d the Libav developers\n", | |||||
| program_name, program_birth_year, this_year); | program_name, program_birth_year, this_year); | ||||
| fprintf(stderr, " built on %s %s with %s %s\n", | fprintf(stderr, " built on %s %s with %s %s\n", | ||||
| __DATE__, __TIME__, CC_TYPE, CC_VERSION); | __DATE__, __TIME__, CC_TYPE, CC_VERSION); | ||||
| fprintf(stderr, " configuration: " FFMPEG_CONFIGURATION "\n"); | |||||
| fprintf(stderr, " configuration: " LIBAV_CONFIGURATION "\n"); | |||||
| print_all_libs_info(stderr, INDENT|SHOW_CONFIG); | print_all_libs_info(stderr, INDENT|SHOW_CONFIG); | ||||
| print_all_libs_info(stderr, INDENT|SHOW_VERSION); | print_all_libs_info(stderr, INDENT|SHOW_VERSION); | ||||
| } | } | ||||
| void show_version(void) { | void show_version(void) { | ||||
| printf("%s " FFMPEG_VERSION "\n", program_name); | |||||
| printf("%s " LIBAV_VERSION "\n", program_name); | |||||
| print_all_libs_info(stdout, SHOW_VERSION); | print_all_libs_info(stdout, SHOW_VERSION); | ||||
| } | } | ||||
| @@ -1,6 +1,6 @@ | |||||
| #!/bin/sh | #!/bin/sh | ||||
| # | # | ||||
| # FFmpeg configure script | |||||
| # Libav configure script | |||||
| # | # | ||||
| # Copyright (c) 2000-2002 Fabrice Bellard | # Copyright (c) 2000-2002 Fabrice Bellard | ||||
| # Copyright (c) 2005-2008 Diego Biurrun | # Copyright (c) 2005-2008 Diego Biurrun | ||||
| @@ -44,9 +44,9 @@ if test "$E1" != 0 || test "$E2" = 0; then | |||||
| echo "No compatible shell script interpreter found." | echo "No compatible shell script interpreter found." | ||||
| echo "This configure script requires a POSIX-compatible shell" | echo "This configure script requires a POSIX-compatible shell" | ||||
| echo "such as bash or ksh." | echo "such as bash or ksh." | ||||
| echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH." | |||||
| echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH." | |||||
| echo "Instead, install a working POSIX-compatible shell." | echo "Instead, install a working POSIX-compatible shell." | ||||
| echo "Disabling this configure test will create a broken FFmpeg." | |||||
| echo "Disabling this configure test will create a broken Libav." | |||||
| if test "$BASH_VERSION" = '2.04.0(1)-release'; then | if test "$BASH_VERSION" = '2.04.0(1)-release'; then | ||||
| echo "This bash version ($BASH_VERSION) is broken on your platform." | echo "This bash version ($BASH_VERSION) is broken on your platform." | ||||
| echo "Upgrade to a later version if available." | echo "Upgrade to a later version if available." | ||||
| @@ -238,7 +238,7 @@ Advanced options (experts only): | |||||
| --enable-sram allow use of on-chip SRAM | --enable-sram allow use of on-chip SRAM | ||||
| --disable-symver disable symbol versioning | --disable-symver disable symbol versioning | ||||
| Developer options (useful when working on FFmpeg itself): | |||||
| Developer options (useful when working on Libav itself): | |||||
| --disable-debug disable debugging symbols | --disable-debug disable debugging symbols | ||||
| --enable-debug=LEVEL set the debug level [$debuglevel] | --enable-debug=LEVEL set the debug level [$debuglevel] | ||||
| --disable-optimizations disable compiler optimizations | --disable-optimizations disable compiler optimizations | ||||
| @@ -280,7 +280,7 @@ die(){ | |||||
| If you think configure made a mistake, make sure you are using the latest | If you think configure made a mistake, make sure you are using the latest | ||||
| version from Git. If the latest version fails, report the problem to the | version from Git. If the latest version fails, report the problem to the | ||||
| ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net. | |||||
| libav-user@libav.org mailing list or IRC #libav on irc.freenode.net. | |||||
| EOF | EOF | ||||
| if disabled logging; then | if disabled logging; then | ||||
| cat <<EOF | cat <<EOF | ||||
| @@ -1672,7 +1672,7 @@ for v in "$@"; do | |||||
| r=${v#*=} | r=${v#*=} | ||||
| l=${v%"$r"} | l=${v%"$r"} | ||||
| r=$(sh_quote "$r") | r=$(sh_quote "$r") | ||||
| FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}" | |||||
| LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}" | |||||
| done | done | ||||
| find_things(){ | find_things(){ | ||||
| @@ -1784,7 +1784,7 @@ done | |||||
| disabled logging && logfile=/dev/null | disabled logging && logfile=/dev/null | ||||
| echo "# $0 $FFMPEG_CONFIGURATION" > $logfile | |||||
| echo "# $0 $LIBAV_CONFIGURATION" > $logfile | |||||
| set >> $logfile | set >> $logfile | ||||
| test -n "$cross_prefix" && enable cross_compile | test -n "$cross_prefix" && enable cross_compile | ||||
| @@ -2344,7 +2344,7 @@ case $target_os in | |||||
| openbsd) | openbsd) | ||||
| enable malloc_aligned | enable malloc_aligned | ||||
| # On OpenBSD 4.5. the compiler does not use PIC unless | # On OpenBSD 4.5. the compiler does not use PIC unless | ||||
| # explicitly using -fPIC. FFmpeg builds fine without PIC, | |||||
| # explicitly using -fPIC. Libav builds fine without PIC, | |||||
| # however the generated executable will not do anything | # however the generated executable will not do anything | ||||
| # (simply quits with exit-code 1, no crash, no output). | # (simply quits with exit-code 1, no crash, no output). | ||||
| # Thus explicitly enable PIC here. | # Thus explicitly enable PIC here. | ||||
| @@ -2369,7 +2369,8 @@ case $target_os in | |||||
| enable malloc_aligned | enable malloc_aligned | ||||
| gas="gas-preprocessor.pl $cc" | gas="gas-preprocessor.pl $cc" | ||||
| enabled ppc && add_asflags -force_cpusubtype_ALL | enabled ppc && add_asflags -force_cpusubtype_ALL | ||||
| SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress' | |||||
| SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)' | |||||
| enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress | |||||
| strip="${strip} -x" | strip="${strip} -x" | ||||
| add_ldflags -Wl,-dynamic,-search_paths_first | add_ldflags -Wl,-dynamic,-search_paths_first | ||||
| SLIBSUF=".dylib" | SLIBSUF=".dylib" | ||||
| @@ -2478,7 +2479,7 @@ case $target_os in | |||||
| ;; | ;; | ||||
| esac | esac | ||||
| echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate | |||||
| echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$LIBAV_CONFIGURATION" >config.fate | |||||
| check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic | check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic | ||||
| @@ -3201,9 +3202,9 @@ config_files="$TMPH config.mak" | |||||
| cat > config.mak <<EOF | cat > config.mak <<EOF | ||||
| # Automatically generated by configure - do not modify! | # Automatically generated by configure - do not modify! | ||||
| ifndef FFMPEG_CONFIG_MAK | |||||
| FFMPEG_CONFIG_MAK=1 | |||||
| FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION | |||||
| ifndef LIBAV_CONFIG_MAK | |||||
| LIBAV_CONFIG_MAK=1 | |||||
| LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION | |||||
| prefix=$prefix | prefix=$prefix | ||||
| LIBDIR=\$(DESTDIR)$libdir | LIBDIR=\$(DESTDIR)$libdir | ||||
| SHLIBDIR=\$(DESTDIR)$shlibdir | SHLIBDIR=\$(DESTDIR)$shlibdir | ||||
| @@ -3292,10 +3293,10 @@ get_version LIBAVFILTER libavfilter/avfilter.h | |||||
| cat > $TMPH <<EOF | cat > $TMPH <<EOF | ||||
| /* Automatically generated by configure - do not modify! */ | /* Automatically generated by configure - do not modify! */ | ||||
| #ifndef FFMPEG_CONFIG_H | |||||
| #define FFMPEG_CONFIG_H | |||||
| #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)" | |||||
| #define FFMPEG_LICENSE "$(c_escape $license)" | |||||
| #ifndef LIBAV_CONFIG_H | |||||
| #define LIBAV_CONFIG_H | |||||
| #define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)" | |||||
| #define LIBAV_LICENSE "$(c_escape $license)" | |||||
| #define FFMPEG_DATADIR "$(eval c_escape $datadir)" | #define FFMPEG_DATADIR "$(eval c_escape $datadir)" | ||||
| #define CC_TYPE "$cc_type" | #define CC_TYPE "$cc_type" | ||||
| #define CC_VERSION $cc_version | #define CC_VERSION $cc_version | ||||
| @@ -3346,8 +3347,8 @@ LAVFI_TESTS=$(print_enabled -n _test $LAVFI_TESTS) | |||||
| SEEK_TESTS=$(print_enabled -n _test $SEEK_TESTS) | SEEK_TESTS=$(print_enabled -n _test $SEEK_TESTS) | ||||
| EOF | EOF | ||||
| echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH | |||||
| echo "endif # FFMPEG_CONFIG_MAK" >> config.mak | |||||
| echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH | |||||
| echo "endif # LIBAV_CONFIG_MAK" >> config.mak | |||||
| # Do not overwrite an unchanged config.h to avoid superfluous rebuilds. | # Do not overwrite an unchanged config.h to avoid superfluous rebuilds. | ||||
| cp_if_changed $TMPH config.h | cp_if_changed $TMPH config.h | ||||
| @@ -3411,10 +3412,10 @@ Cflags: -I\${includedir} | |||||
| EOF | EOF | ||||
| } | } | ||||
| pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" | |||||
| pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" | |||||
| pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION" | |||||
| pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION" | |||||
| pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" | |||||
| pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" | |||||
| pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION" | |||||
| pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" | |||||
| pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs" | |||||
| pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION" | |||||
| pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION" | |||||
| pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" | |||||
| pkgconfig_generate libpostproc "Libav post processing library" "$LIBPOSTPROC_VERSION" | |||||
| pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION" | |||||
| @@ -15,6 +15,11 @@ API changes, most recent first: | |||||
| 2011-XX-XX - XXXXXXX - lavu XX.XXX.X - pixfmt.h | 2011-XX-XX - XXXXXXX - lavu XX.XXX.X - pixfmt.h | ||||
| Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats | Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats | ||||
| 2011-03-02 - 863c471 - lavf 52.103.0 - av_pkt_dump2, av_pkt_dump_log2 | |||||
| Add new functions av_pkt_dump2, av_pkt_dump_log2 that uses the | |||||
| source stream timebase for outputting timestamps. Deprecate | |||||
| av_pkt_dump and av_pkt_dump_log. | |||||
| 2011-02-20 - e731b8d - lavf 52.102.0 - avio.h | 2011-02-20 - e731b8d - lavf 52.102.0 - avio.h | ||||
| * e731b8d - rename init_put_byte() to ffio_init_context(), deprecating the | * e731b8d - rename init_put_byte() to ffio_init_context(), deprecating the | ||||
| original, and move it to a private header so it is no longer | original, and move it to a private header so it is no longer | ||||
| @@ -1,7 +1,7 @@ | |||||
| @chapter Bitstream Filters | @chapter Bitstream Filters | ||||
| @c man begin BITSTREAM FILTERS | @c man begin BITSTREAM FILTERS | ||||
| When you configure your FFmpeg build, all the supported bitstream | |||||
| When you configure your Libav build, all the supported bitstream | |||||
| filters are enabled by default. You can list all available ones using | filters are enabled by default. You can list all available ones using | ||||
| the configure option @code{--list-bsfs}. | the configure option @code{--list-bsfs}. | ||||
| @@ -1,4 +1,4 @@ | |||||
| FFmpeg currently uses a custom build system, this text attempts to document | |||||
| Libav currently uses a custom build system, this text attempts to document | |||||
| some of its obscure features and options. | some of its obscure features and options. | ||||
| Options to make: | Options to make: | ||||
| @@ -1,10 +1,10 @@ | |||||
| @chapter Demuxers | @chapter Demuxers | ||||
| @c man begin DEMUXERS | @c man begin DEMUXERS | ||||
| Demuxers are configured elements in FFmpeg which allow to read the | |||||
| Demuxers are configured elements in Libav which allow to read the | |||||
| multimedia streams from a particular type of file. | multimedia streams from a particular type of file. | ||||
| When you configure your FFmpeg build, all the supported demuxers | |||||
| When you configure your Libav build, all the supported demuxers | |||||
| are enabled by default. You can list all available ones using the | are enabled by default. You can list all available ones using the | ||||
| configure option "--list-demuxers". | configure option "--list-demuxers". | ||||
| @@ -32,12 +32,12 @@ generated by ./configure to understand what is needed. | |||||
| You can use libavcodec or libavformat in your commercial program, but | You can use libavcodec or libavformat in your commercial program, but | ||||
| @emph{any patch you make must be published}. The best way to proceed is | @emph{any patch you make must be published}. The best way to proceed is | ||||
| to send your patches to the FFmpeg mailing list. | |||||
| to send your patches to the Libav mailing list. | |||||
| @anchor{Coding Rules} | @anchor{Coding Rules} | ||||
| @section Coding Rules | @section Coding Rules | ||||
| FFmpeg is programmed in the ISO C90 language with a few additional | |||||
| Libav is programmed in the ISO C90 language with a few additional | |||||
| features from ISO C99, namely: | features from ISO C99, namely: | ||||
| @itemize @bullet | @itemize @bullet | ||||
| @item | @item | ||||
| @@ -54,7 +54,7 @@ These features are supported by all compilers we care about, so we will not | |||||
| accept patches to remove their use unless they absolutely do not impair | accept patches to remove their use unless they absolutely do not impair | ||||
| clarity and performance. | clarity and performance. | ||||
| All code must compile with GCC 2.95 and GCC 3.3. Currently, FFmpeg also | |||||
| All code must compile with GCC 2.95 and GCC 3.3. Currently, Libav also | |||||
| compiles with several other compilers, such as the Compaq ccc compiler | compiles with several other compilers, such as the Compaq ccc compiler | ||||
| or Sun Studio 9, and we would like to keep it that way unless it would | or Sun Studio 9, and we would like to keep it that way unless it would | ||||
| be exceedingly involved. To ensure compatibility, please do not use any | be exceedingly involved. To ensure compatibility, please do not use any | ||||
| @@ -76,7 +76,7 @@ The TAB character is forbidden outside of Makefiles as is any | |||||
| form of trailing whitespace. Commits containing either will be | form of trailing whitespace. Commits containing either will be | ||||
| rejected by the Subversion repository. | rejected by the Subversion repository. | ||||
| The main priority in FFmpeg is simplicity and small code size in order to | |||||
| The main priority in Libav is simplicity and small code size in order to | |||||
| minimize the bug count. | minimize the bug count. | ||||
| Comments: Use the JavaDoc/Doxygen | Comments: Use the JavaDoc/Doxygen | ||||
| @@ -129,7 +129,7 @@ should also be avoided if they don't make the code easier to understand. | |||||
| an "or any later version" clause is also acceptable, but LGPL is | an "or any later version" clause is also acceptable, but LGPL is | ||||
| preferred. | preferred. | ||||
| @item | @item | ||||
| You must not commit code which breaks FFmpeg! (Meaning unfinished but | |||||
| You must not commit code which breaks Libav! (Meaning unfinished but | |||||
| enabled code which breaks compilation or compiles but does not work or | enabled code which breaks compilation or compiles but does not work or | ||||
| breaks the regression tests) | breaks the regression tests) | ||||
| You can commit unfinished stuff (for testing etc), but it must be disabled | You can commit unfinished stuff (for testing etc), but it must be disabled | ||||
| @@ -168,7 +168,7 @@ should also be avoided if they don't make the code easier to understand. | |||||
| with functional changes, such commits will be rejected and removed. Every | with functional changes, such commits will be rejected and removed. Every | ||||
| developer has his own indentation style, you should not change it. Of course | developer has his own indentation style, you should not change it. Of course | ||||
| if you (re)write something, you can use your own style, even though we would | if you (re)write something, you can use your own style, even though we would | ||||
| prefer if the indentation throughout FFmpeg was consistent (Many projects | |||||
| prefer if the indentation throughout Libav was consistent (Many projects | |||||
| force a given indentation style - we do not.). If you really need to make | force a given indentation style - we do not.). If you really need to make | ||||
| indentation changes (try to avoid this), separate them strictly from real | indentation changes (try to avoid this), separate them strictly from real | ||||
| changes. | changes. | ||||
| @@ -253,7 +253,7 @@ keeping it as a logical unit that contains an individual change, even | |||||
| if it spans multiple files. This makes reviewing your patches much easier | if it spans multiple files. This makes reviewing your patches much easier | ||||
| for us and greatly increases your chances of getting your patch applied. | for us and greatly increases your chances of getting your patch applied. | ||||
| Use the patcheck tool of FFmpeg to check your patch. | |||||
| Use the patcheck tool of Libav to check your patch. | |||||
| The tool is located in the tools directory. | The tool is located in the tools directory. | ||||
| Run the regression tests before submitting a patch so that you can | Run the regression tests before submitting a patch so that you can | ||||
| @@ -275,7 +275,7 @@ Your patch will be reviewed on the mailing list. You will likely be asked | |||||
| to make some changes and are expected to send in an improved version that | to make some changes and are expected to send in an improved version that | ||||
| incorporates the requests from the review. This process may go through | incorporates the requests from the review. This process may go through | ||||
| several iterations. Once your patch is deemed good enough, some developer | several iterations. Once your patch is deemed good enough, some developer | ||||
| will pick it up and commit it to the official FFmpeg tree. | |||||
| will pick it up and commit it to the official Libav tree. | |||||
| Give us a few days to react. But if some time passes without reaction, | Give us a few days to react. But if some time passes without reaction, | ||||
| send a reminder by email. Your patch should eventually be dealt with. | send a reminder by email. Your patch should eventually be dealt with. | ||||
| @@ -325,7 +325,7 @@ send a reminder by email. Your patch should eventually be dealt with. | |||||
| @item | @item | ||||
| Is the patch a unified diff? | Is the patch a unified diff? | ||||
| @item | @item | ||||
| Is the patch against latest FFmpeg git master branch? | |||||
| Is the patch against latest Libav git master branch? | |||||
| @item | @item | ||||
| Are you subscribed to ffmpeg-dev? | Are you subscribed to ffmpeg-dev? | ||||
| (the list is subscribers only due to spam) | (the list is subscribers only due to spam) | ||||
| @@ -374,7 +374,7 @@ send a reminder by email. Your patch should eventually be dealt with. | |||||
| patch easily? | patch easily? | ||||
| @item | @item | ||||
| If you added a new file, did you insert a license header? It should be | If you added a new file, did you insert a license header? It should be | ||||
| taken from FFmpeg, not randomly copied and pasted from somewhere else. | |||||
| taken from Libav, not randomly copied and pasted from somewhere else. | |||||
| @item | @item | ||||
| You should maintain alphabetical order in alphabetically ordered lists as | You should maintain alphabetical order in alphabetically ordered lists as | ||||
| long as doing so does not break API/ABI compatibility. | long as doing so does not break API/ABI compatibility. | ||||
| @@ -1,10 +1,10 @@ | |||||
| @chapter Encoders | @chapter Encoders | ||||
| @c man begin ENCODERS | @c man begin ENCODERS | ||||
| Encoders are configured elements in FFmpeg which allow the encoding of | |||||
| Encoders are configured elements in Libav which allow the encoding of | |||||
| multimedia streams. | multimedia streams. | ||||
| When you configure your FFmpeg build, all the supported native encoders | |||||
| When you configure your Libav build, all the supported native encoders | |||||
| are enabled by default. Encoders requiring an external library must be enabled | are enabled by default. Encoders requiring an external library must be enabled | ||||
| manually via the corresponding @code{--enable-lib} option. You can list all | manually via the corresponding @code{--enable-lib} option. You can list all | ||||
| available encoders using the configure option @code{--list-encoders}. | available encoders using the configure option @code{--list-encoders}. | ||||
| @@ -1,7 +1,7 @@ | |||||
| @chapter Expression Evaluation | @chapter Expression Evaluation | ||||
| @c man begin EXPRESSION EVALUATION | @c man begin EXPRESSION EVALUATION | ||||
| When evaluating an arithemetic expression, FFmpeg uses an internal | |||||
| When evaluating an arithemetic expression, Libav uses an internal | |||||
| formula evaluator, implemented through the @file{libavutil/eval.h} | formula evaluator, implemented through the @file{libavutil/eval.h} | ||||
| interface. | interface. | ||||
| @@ -1,8 +1,8 @@ | |||||
| \input texinfo @c -*- texinfo -*- | \input texinfo @c -*- texinfo -*- | ||||
| @settitle FFmpeg FAQ | |||||
| @settitle Libav FAQ | |||||
| @titlepage | @titlepage | ||||
| @center @titlefont{FFmpeg FAQ} | |||||
| @center @titlefont{Libav FAQ} | |||||
| @end titlepage | @end titlepage | ||||
| @top | @top | ||||
| @@ -11,33 +11,33 @@ | |||||
| @chapter General Questions | @chapter General Questions | ||||
| @section When will the next FFmpeg version be released? / Why are FFmpeg releases so few and far between? | |||||
| @section When will the next Libav version be released? / Why are Libav releases so few and far between? | |||||
| Like most open source projects FFmpeg suffers from a certain lack of | |||||
| Like most open source projects Libav suffers from a certain lack of | |||||
| manpower. For this reason the developers have to prioritize the work | manpower. For this reason the developers have to prioritize the work | ||||
| they do and putting out releases is not at the top of the list, fixing | they do and putting out releases is not at the top of the list, fixing | ||||
| bugs and reviewing patches takes precedence. Please don't complain or | bugs and reviewing patches takes precedence. Please don't complain or | ||||
| request more timely and/or frequent releases unless you are willing to | request more timely and/or frequent releases unless you are willing to | ||||
| help out creating them. | help out creating them. | ||||
| @section I have a problem with an old version of FFmpeg; where should I report it? | |||||
| Nowhere. We do not support old FFmpeg versions in any way, we simply lack | |||||
| @section I have a problem with an old version of Libav; where should I report it? | |||||
| Nowhere. We do not support old Libav versions in any way, we simply lack | |||||
| the time, motivation and manpower to do so. If you have a problem with an | the time, motivation and manpower to do so. If you have a problem with an | ||||
| old version of FFmpeg, upgrade to the latest Subversion snapshot. If you | |||||
| old version of Libav, upgrade to the latest Subversion snapshot. If you | |||||
| still experience the problem, then you can report it according to the | still experience the problem, then you can report it according to the | ||||
| guidelines in @url{http://ffmpeg.org/bugreports.html}. | guidelines in @url{http://ffmpeg.org/bugreports.html}. | ||||
| @section Why doesn't FFmpeg support feature [xyz]? | |||||
| @section Why doesn't Libav support feature [xyz]? | |||||
| Because no one has taken on that task yet. FFmpeg development is | |||||
| Because no one has taken on that task yet. Libav development is | |||||
| driven by the tasks that are important to the individual developers. | driven by the tasks that are important to the individual developers. | ||||
| If there is a feature that is important to you, the best way to get | If there is a feature that is important to you, the best way to get | ||||
| it implemented is to undertake the task yourself or sponsor a developer. | it implemented is to undertake the task yourself or sponsor a developer. | ||||
| @section FFmpeg does not support codec XXX. Can you include a Windows DLL loader to support it? | |||||
| @section Libav does not support codec XXX. Can you include a Windows DLL loader to support it? | |||||
| No. Windows DLLs are not portable, bloated and often slow. | No. Windows DLLs are not portable, bloated and often slow. | ||||
| Moreover FFmpeg strives to support all codecs natively. | |||||
| Moreover Libav strives to support all codecs natively. | |||||
| A DLL loader is not conducive to that goal. | A DLL loader is not conducive to that goal. | ||||
| @section My bug report/mail to ffmpeg-devel/user has not received any replies. | @section My bug report/mail to ffmpeg-devel/user has not received any replies. | ||||
| @@ -55,10 +55,10 @@ libav* from another application. | |||||
| @item You speak about a video having problems on playback but | @item You speak about a video having problems on playback but | ||||
| not what you use to play it. | not what you use to play it. | ||||
| @item We have no faint clue what you are talking about besides | @item We have no faint clue what you are talking about besides | ||||
| that it is related to FFmpeg. | |||||
| that it is related to Libav. | |||||
| @end itemize | @end itemize | ||||
| @section Is there a forum for FFmpeg? I do not like mailing lists. | |||||
| @section Is there a forum for Libav? I do not like mailing lists. | |||||
| You may view our mailing lists with a more forum-alike look here: | You may view our mailing lists with a more forum-alike look here: | ||||
| @url{http://dir.gmane.org/gmane.comp.video.ffmpeg.user}, | @url{http://dir.gmane.org/gmane.comp.video.ffmpeg.user}, | ||||
| @@ -272,7 +272,7 @@ material, and try '-top 0/1' if the result looks really messed-up. | |||||
| @section How can I read DirectShow files? | @section How can I read DirectShow files? | ||||
| If you have built FFmpeg with @code{./configure --enable-avisynth} | |||||
| If you have built Libav with @code{./configure --enable-avisynth} | |||||
| (only possible on MinGW/Cygwin platforms), | (only possible on MinGW/Cygwin platforms), | ||||
| then you may use any file that DirectShow can read as input. | then you may use any file that DirectShow can read as input. | ||||
| @@ -368,11 +368,11 @@ examining all of the vbv_delay values and making complicated computations." | |||||
| @chapter Development | @chapter Development | ||||
| @section Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat? | |||||
| @section Are there examples illustrating how to use the Libav libraries, particularly libavcodec and libavformat? | |||||
| Yes. Read the Developers Guide of the FFmpeg documentation. Alternatively, | |||||
| Yes. Read the Developers Guide of the Libav documentation. Alternatively, | |||||
| examine the source code for one of the many open source projects that | examine the source code for one of the many open source projects that | ||||
| already incorporate FFmpeg at (@url{projects.html}). | |||||
| already incorporate Libav at (@url{projects.html}). | |||||
| @section Can you support my C compiler XXX? | @section Can you support my C compiler XXX? | ||||
| @@ -383,14 +383,14 @@ with @code{#ifdef}s related to the compiler. | |||||
| @section Is Microsoft Visual C++ supported? | @section Is Microsoft Visual C++ supported? | ||||
| No. Microsoft Visual C++ is not compliant to the C99 standard and does | No. Microsoft Visual C++ is not compliant to the C99 standard and does | ||||
| not - among other things - support the inline assembly used in FFmpeg. | |||||
| not - among other things - support the inline assembly used in Libav. | |||||
| If you wish to use MSVC++ for your | If you wish to use MSVC++ for your | ||||
| project then you can link the MSVC++ code with libav* as long as | project then you can link the MSVC++ code with libav* as long as | ||||
| you compile the latter with a working C compiler. For more information, see | you compile the latter with a working C compiler. For more information, see | ||||
| the @emph{Microsoft Visual C++ compatibility} section in the FFmpeg | |||||
| the @emph{Microsoft Visual C++ compatibility} section in the Libav | |||||
| documentation. | documentation. | ||||
| There have been efforts to make FFmpeg compatible with MSVC++ in the | |||||
| There have been efforts to make Libav compatible with MSVC++ in the | |||||
| past. However, they have all been rejected as too intrusive, especially | past. However, they have all been rejected as too intrusive, especially | ||||
| since MinGW does the job adequately. None of the core developers | since MinGW does the job adequately. None of the core developers | ||||
| work with MSVC++ and thus this item is low priority. Should you find | work with MSVC++ and thus this item is low priority. Should you find | ||||
| @@ -398,13 +398,13 @@ the silver bullet that solves this problem, feel free to shoot it at us. | |||||
| We strongly recommend you to move over from MSVC++ to MinGW tools. | We strongly recommend you to move over from MSVC++ to MinGW tools. | ||||
| @section Can I use FFmpeg or libavcodec under Windows? | |||||
| @section Can I use Libav or libavcodec under Windows? | |||||
| Yes, but the Cygwin or MinGW tools @emph{must} be used to compile FFmpeg. | |||||
| Read the @emph{Windows} section in the FFmpeg documentation to find more | |||||
| Yes, but the Cygwin or MinGW tools @emph{must} be used to compile Libav. | |||||
| Read the @emph{Windows} section in the Libav documentation to find more | |||||
| information. | information. | ||||
| To get help and instructions for building FFmpeg under Windows, check out | |||||
| To get help and instructions for building Libav under Windows, check out | |||||
| the FFmpeg Windows Help Forum at | the FFmpeg Windows Help Forum at | ||||
| @url{http://ffmpeg.arrozcru.org/}. | @url{http://ffmpeg.arrozcru.org/}. | ||||
| @@ -414,7 +414,7 @@ No. These tools are too bloated and they complicate the build. | |||||
| @section Why not rewrite ffmpeg in object-oriented C++? | @section Why not rewrite ffmpeg in object-oriented C++? | ||||
| FFmpeg is already organized in a highly modular manner and does not need to | |||||
| Libav is already organized in a highly modular manner and does not need to | |||||
| be rewritten in a formal object language. Further, many of the developers | be rewritten in a formal object language. Further, many of the developers | ||||
| favor straight C; it works for them. For more arguments on this matter, | favor straight C; it works for them. For more arguments on this matter, | ||||
| read "Programming Religion" at (@url{http://www.tux.org/lkml/#s15}). | read "Programming Religion" at (@url{http://www.tux.org/lkml/#s15}). | ||||
| @@ -441,16 +441,16 @@ the compilation failure then you are probably not qualified for this. | |||||
| @section I'm using libavcodec from within my C++ application but the linker complains about missing symbols which seem to be available. | @section I'm using libavcodec from within my C++ application but the linker complains about missing symbols which seem to be available. | ||||
| FFmpeg is a pure C project, so to use the libraries within your C++ application | |||||
| Libav is a pure C project, so to use the libraries within your C++ application | |||||
| you need to explicitly state that you are using a C library. You can do this by | you need to explicitly state that you are using a C library. You can do this by | ||||
| encompassing your FFmpeg includes using @code{extern "C"}. | |||||
| encompassing your Libav includes using @code{extern "C"}. | |||||
| See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3} | See @url{http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.3} | ||||
| @section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat? | @section I have a file in memory / a API different from *open/*read/ libc how do I use it with libavformat? | ||||
| You have to implement a URLProtocol, see @file{libavformat/file.c} in | You have to implement a URLProtocol, see @file{libavformat/file.c} in | ||||
| FFmpeg and @file{libmpdemux/demux_lavf.c} in MPlayer sources. | |||||
| Libav and @file{libmpdemux/demux_lavf.c} in MPlayer sources. | |||||
| @section I get "No compatible shell script interpreter found." in MSys. | @section I get "No compatible shell script interpreter found." in MSys. | ||||
| @@ -735,7 +735,7 @@ A preset file contains a sequence of @var{option}=@var{value} pairs, | |||||
| one for each line, specifying a sequence of options which would be | one for each line, specifying a sequence of options which would be | ||||
| awkward to specify on the command line. Lines starting with the hash | awkward to specify on the command line. Lines starting with the hash | ||||
| ('#') character are ignored and are used to provide comments. Check | ('#') character are ignored and are used to provide comments. Check | ||||
| the @file{ffpresets} directory in the FFmpeg source tree for examples. | |||||
| the @file{ffpresets} directory in the Libav source tree for examples. | |||||
| Preset files are specified with the @code{vpre}, @code{apre}, | Preset files are specified with the @code{vpre}, @code{apre}, | ||||
| @code{spre}, and @code{fpre} options. The @code{fpre} option takes the | @code{spre}, and @code{fpre} options. The @code{fpre} option takes the | ||||
| @@ -997,11 +997,11 @@ file to which you want to add them. | |||||
| @settitle FFmpeg video converter | @settitle FFmpeg video converter | ||||
| @c man begin SEEALSO | @c man begin SEEALSO | ||||
| ffplay(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation | |||||
| ffplay(1), ffprobe(1), ffserver(1) and the Libav HTML documentation | |||||
| @c man end | @c man end | ||||
| @c man begin AUTHORS | @c man begin AUTHORS | ||||
| The FFmpeg developers | |||||
| The Libav developers | |||||
| @c man end | @c man end | ||||
| @end ignore | @end ignore | ||||
| @@ -20,9 +20,9 @@ ffplay [options] @file{input_file} | |||||
| @chapter Description | @chapter Description | ||||
| @c man begin DESCRIPTION | @c man begin DESCRIPTION | ||||
| FFplay is a very simple and portable media player using the FFmpeg | |||||
| FFplay is a very simple and portable media player using the Libav | |||||
| libraries and the SDL library. It is mostly used as a testbed for the | libraries and the SDL library. It is mostly used as a testbed for the | ||||
| various FFmpeg APIs. | |||||
| various Libav APIs. | |||||
| @c man end | @c man end | ||||
| @chapter Options | @chapter Options | ||||
| @@ -169,11 +169,11 @@ Seek to percentage in file corresponding to fraction of width. | |||||
| @settitle FFplay media player | @settitle FFplay media player | ||||
| @c man begin SEEALSO | @c man begin SEEALSO | ||||
| ffmpeg(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation | |||||
| ffmpeg(1), ffprobe(1), ffserver(1) and the Libav HTML documentation | |||||
| @c man end | @c man end | ||||
| @c man begin AUTHORS | @c man begin AUTHORS | ||||
| The FFmpeg developers | |||||
| The Libav developers | |||||
| @c man end | @c man end | ||||
| @end ignore | @end ignore | ||||
| @@ -122,11 +122,11 @@ with name "STREAM". | |||||
| @settitle FFprobe media prober | @settitle FFprobe media prober | ||||
| @c man begin SEEALSO | @c man begin SEEALSO | ||||
| ffmpeg(1), ffplay(1), ffserver(1) and the FFmpeg HTML documentation | |||||
| ffmpeg(1), ffplay(1), ffserver(1) and the Libav HTML documentation | |||||
| @c man end | @c man end | ||||
| @c man begin AUTHORS | @c man begin AUTHORS | ||||
| The FFmpeg developers | |||||
| The Libav developers | |||||
| @c man end | @c man end | ||||
| @end ignore | @end ignore | ||||
| @@ -266,11 +266,11 @@ rather than as a daemon. | |||||
| @c man begin SEEALSO | @c man begin SEEALSO | ||||
| ffmpeg(1), ffplay(1), ffprobe(1), the @file{ffmpeg/doc/ffserver.conf} | ffmpeg(1), ffplay(1), ffprobe(1), the @file{ffmpeg/doc/ffserver.conf} | ||||
| example and the FFmpeg HTML documentation | |||||
| example and the Libav HTML documentation | |||||
| @c man end | @c man end | ||||
| @c man begin AUTHORS | @c man begin AUTHORS | ||||
| The FFmpeg developers | |||||
| The Libav developers | |||||
| @c man end | @c man end | ||||
| @end ignore | @end ignore | ||||
| @@ -88,6 +88,6 @@ can be disabled setting the environment variable | |||||
| @env{FFMPEG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting | @env{FFMPEG_FORCE_NOCOLOR} or @env{NO_COLOR}, or can be forced setting | ||||
| the environment variable @env{FFMPEG_FORCE_COLOR}. | the environment variable @env{FFMPEG_FORCE_COLOR}. | ||||
| The use of the environment variable @env{NO_COLOR} is deprecated and | The use of the environment variable @env{NO_COLOR} is deprecated and | ||||
| will be dropped in a following FFmpeg version. | |||||
| will be dropped in a following Libav version. | |||||
| @end table | @end table | ||||
| @@ -92,7 +92,7 @@ Follows a BNF description for the filtergraph syntax: | |||||
| @chapter Audio Filters | @chapter Audio Filters | ||||
| @c man begin AUDIO FILTERS | @c man begin AUDIO FILTERS | ||||
| When you configure your FFmpeg build, you can disable any of the | |||||
| When you configure your Libav build, you can disable any of the | |||||
| existing filters using --disable-filters. | existing filters using --disable-filters. | ||||
| The configure output will show the audio filters included in your | The configure output will show the audio filters included in your | ||||
| build. | build. | ||||
| @@ -155,7 +155,7 @@ tools. | |||||
| @chapter Video Filters | @chapter Video Filters | ||||
| @c man begin VIDEO FILTERS | @c man begin VIDEO FILTERS | ||||
| When you configure your FFmpeg build, you can disable any of the | |||||
| When you configure your Libav build, you can disable any of the | |||||
| existing filters using --disable-filters. | existing filters using --disable-filters. | ||||
| The configure output will show the video filters included in your | The configure output will show the video filters included in your | ||||
| build. | build. | ||||
| @@ -531,7 +531,7 @@ format=yuv420p:yuv444p:yuv410p | |||||
| Apply a frei0r effect to the input video. | Apply a frei0r effect to the input video. | ||||
| To enable compilation of this filter you need to install the frei0r | To enable compilation of this filter you need to install the frei0r | ||||
| header and configure FFmpeg with --enable-frei0r. | |||||
| header and configure Libav with --enable-frei0r. | |||||
| The filter supports the syntax: | The filter supports the syntax: | ||||
| @example | @example | ||||
| @@ -669,7 +669,7 @@ Pass the video source unchanged to the output. | |||||
| Apply video transform using libopencv. | Apply video transform using libopencv. | ||||
| To enable this filter install libopencv library and headers and | To enable this filter install libopencv library and headers and | ||||
| configure FFmpeg with --enable-libopencv. | |||||
| configure Libav with --enable-libopencv. | |||||
| The filter takes the parameters: @var{filter_name}@{:=@}@var{filter_params}. | The filter takes the parameters: @var{filter_name}@{:=@}@var{filter_params}. | ||||
| @@ -1314,7 +1314,7 @@ timebase. The expression can contain the constants "PI", "E", "PHI", | |||||
| Provide a frei0r source. | Provide a frei0r source. | ||||
| To enable compilation of this filter you need to install the frei0r | To enable compilation of this filter you need to install the frei0r | ||||
| header and configure FFmpeg with --enable-frei0r. | |||||
| header and configure Libav with --enable-frei0r. | |||||
| The source supports the syntax: | The source supports the syntax: | ||||
| @example | @example | ||||
| @@ -11,13 +11,13 @@ | |||||
| @chapter external libraries | @chapter external libraries | ||||
| FFmpeg can be hooked up with a number of external libraries to add support | |||||
| Libav can be hooked up with a number of external libraries to add support | |||||
| for more formats. None of them are used by default, their use has to be | for more formats. None of them are used by default, their use has to be | ||||
| explicitly requested by passing the appropriate flags to @file{./configure}. | explicitly requested by passing the appropriate flags to @file{./configure}. | ||||
| @section OpenCORE AMR | @section OpenCORE AMR | ||||
| FFmpeg can make use of the OpenCORE libraries for AMR-NB | |||||
| Libav can make use of the OpenCORE libraries for AMR-NB | |||||
| decoding/encoding and AMR-WB decoding. | decoding/encoding and AMR-WB decoding. | ||||
| Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the instructions for | Go to @url{http://sourceforge.net/projects/opencore-amr/} and follow the instructions for | ||||
| @@ -27,7 +27,7 @@ installing the libraries. Then pass @code{--enable-libopencore-amrnb} and/or | |||||
| Note that OpenCORE is under the Apache License 2.0 (see | Note that OpenCORE is under the Apache License 2.0 (see | ||||
| @url{http://www.apache.org/licenses/LICENSE-2.0} for details), which is | @url{http://www.apache.org/licenses/LICENSE-2.0} for details), which is | ||||
| incompatible with the LGPL version 2.1 and GPL version 2. You have to | incompatible with the LGPL version 2.1 and GPL version 2. You have to | ||||
| upgrade FFmpeg's license to LGPL version 3 (or if you have enabled | |||||
| upgrade Libav's license to LGPL version 3 (or if you have enabled | |||||
| GPL components, GPL version 3) to use it. | GPL components, GPL version 3) to use it. | ||||
| @@ -37,7 +37,7 @@ You can use the @code{-formats} and @code{-codecs} options to have an exhaustive | |||||
| @section File Formats | @section File Formats | ||||
| FFmpeg supports the following file formats through the @code{libavformat} | |||||
| Libav supports the following file formats through the @code{libavformat} | |||||
| library: | library: | ||||
| @multitable @columnfractions .4 .1 .1 .4 | @multitable @columnfractions .4 .1 .1 .4 | ||||
| @@ -751,18 +751,18 @@ Using a cross-compiler is preferred for various reasons. | |||||
| @subsection DJGPP | @subsection DJGPP | ||||
| FFmpeg cannot be compiled because of broken system headers, add | |||||
| Libav cannot be compiled because of broken system headers, add | |||||
| @code{--extra-cflags=-U__STRICT_ANSI__} to the configure options as a | @code{--extra-cflags=-U__STRICT_ANSI__} to the configure options as a | ||||
| workaround. | workaround. | ||||
| @section OS/2 | @section OS/2 | ||||
| For information about compiling FFmpeg on OS/2 see | |||||
| For information about compiling Libav on OS/2 see | |||||
| @url{http://www.edm2.com/index.php/FFmpeg}. | @url{http://www.edm2.com/index.php/FFmpeg}. | ||||
| @section Unix-like | @section Unix-like | ||||
| Some parts of FFmpeg cannot be built with version 2.15 of the GNU | |||||
| Some parts of Libav cannot be built with version 2.15 of the GNU | |||||
| assembler which is still provided by a few AMD64 distributions. To | assembler which is still provided by a few AMD64 distributions. To | ||||
| make sure your compiler really uses the required version of gas | make sure your compiler really uses the required version of gas | ||||
| after a binutils upgrade, run: | after a binutils upgrade, run: | ||||
| @@ -777,7 +777,7 @@ to configure. | |||||
| @subsection BSD | @subsection BSD | ||||
| BSD make will not build FFmpeg, you need to install and use GNU Make | |||||
| BSD make will not build Libav, you need to install and use GNU Make | |||||
| (@file{gmake}). | (@file{gmake}). | ||||
| @subsubsection FreeBSD | @subsubsection FreeBSD | ||||
| @@ -790,7 +790,7 @@ getting the system headers fixed. | |||||
| @subsection (Open)Solaris | @subsection (Open)Solaris | ||||
| GNU Make is required to build FFmpeg, so you have to invoke (@file{gmake}), | |||||
| GNU Make is required to build Libav, so you have to invoke (@file{gmake}), | |||||
| standard Solaris Make will not work. When building with a non-c99 front-end | standard Solaris Make will not work. When building with a non-c99 front-end | ||||
| (gcc, generic suncc) add either @code{--extra-libs=/usr/lib/values-xpg6.o} | (gcc, generic suncc) add either @code{--extra-libs=/usr/lib/values-xpg6.o} | ||||
| or @code{--extra-libs=/usr/lib/64/values-xpg6.o} to the configure options | or @code{--extra-libs=/usr/lib/64/values-xpg6.o} to the configure options | ||||
| @@ -808,22 +808,22 @@ bash ./configure | |||||
| MacOS X on PowerPC or ARM (iPhone) requires a preprocessor from | MacOS X on PowerPC or ARM (iPhone) requires a preprocessor from | ||||
| @url{http://github.com/yuvi/gas-preprocessor} to build the optimized | @url{http://github.com/yuvi/gas-preprocessor} to build the optimized | ||||
| assembler functions. Just download the Perl script and put it somewhere | assembler functions. Just download the Perl script and put it somewhere | ||||
| in your PATH, FFmpeg's configure will pick it up automatically. | |||||
| in your PATH, Libav's configure will pick it up automatically. | |||||
| @section Windows | @section Windows | ||||
| To get help and instructions for building FFmpeg under Windows, check out | |||||
| To get help and instructions for building Libav under Windows, check out | |||||
| the FFmpeg Windows Help Forum at | the FFmpeg Windows Help Forum at | ||||
| @url{http://ffmpeg.arrozcru.org/}. | @url{http://ffmpeg.arrozcru.org/}. | ||||
| @subsection Native Windows compilation | @subsection Native Windows compilation | ||||
| FFmpeg can be built to run natively on Windows using the MinGW tools. Install | |||||
| Libav can be built to run natively on Windows using the MinGW tools. Install | |||||
| the latest versions of MSYS and MinGW from @url{http://www.mingw.org/}. | the latest versions of MSYS and MinGW from @url{http://www.mingw.org/}. | ||||
| You can find detailed installation | You can find detailed installation | ||||
| instructions in the download section and the FAQ. | instructions in the download section and the FAQ. | ||||
| FFmpeg does not build out-of-the-box with the packages the automated MinGW | |||||
| Libav does not build out-of-the-box with the packages the automated MinGW | |||||
| installer provides. It also requires coreutils to be installed and many other | installer provides. It also requires coreutils to be installed and many other | ||||
| packages updated to the latest version. The minimum version for some packages | packages updated to the latest version. The minimum version for some packages | ||||
| are listed below: | are listed below: | ||||
| @@ -835,7 +835,7 @@ are listed below: | |||||
| @item mingw-runtime 3.15 | @item mingw-runtime 3.15 | ||||
| @end itemize | @end itemize | ||||
| FFmpeg automatically passes @code{-fno-common} to the compiler to work around | |||||
| Libav automatically passes @code{-fno-common} to the compiler to work around | |||||
| a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}). | a GCC bug (see @url{http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37216}). | ||||
| Within the MSYS shell, configure and make with: | Within the MSYS shell, configure and make with: | ||||
| @@ -866,14 +866,14 @@ Edit the @file{bin/sdl-config} script so that it points to the correct prefix | |||||
| where SDL was installed. Verify that @file{sdl-config} can be launched from | where SDL was installed. Verify that @file{sdl-config} can be launched from | ||||
| the MSYS command line. | the MSYS command line. | ||||
| @item By using @code{./configure --enable-shared} when configuring FFmpeg, | |||||
| @item By using @code{./configure --enable-shared} when configuring Libav, | |||||
| you can build libavutil, libavcodec and libavformat as DLLs. | you can build libavutil, libavcodec and libavformat as DLLs. | ||||
| @end itemize | @end itemize | ||||
| @subsection Microsoft Visual C++ compatibility | @subsection Microsoft Visual C++ compatibility | ||||
| As stated in the FAQ, FFmpeg will not compile under MSVC++. However, if you | |||||
| As stated in the FAQ, Libav will not compile under MSVC++. However, if you | |||||
| want to use the libav* libraries in your own applications, you can still | want to use the libav* libraries in your own applications, you can still | ||||
| compile those applications using MSVC++. But the libav* libraries you link | compile those applications using MSVC++. But the libav* libraries you link | ||||
| to @emph{must} be built with MinGW. However, you will not be able to debug | to @emph{must} be built with MinGW. However, you will not be able to debug | ||||
| @@ -881,13 +881,13 @@ inside the libav* libraries, since MSVC++ does not recognize the debug | |||||
| symbols generated by GCC. | symbols generated by GCC. | ||||
| We strongly recommend you to move over from MSVC++ to MinGW tools. | We strongly recommend you to move over from MSVC++ to MinGW tools. | ||||
| This description of how to use the FFmpeg libraries with MSVC++ is based on | |||||
| This description of how to use the Libav libraries with MSVC++ is based on | |||||
| Microsoft Visual C++ 2005 Express Edition. If you have a different version, | Microsoft Visual C++ 2005 Express Edition. If you have a different version, | ||||
| you might have to modify the procedures slightly. | you might have to modify the procedures slightly. | ||||
| @subsubsection Using static libraries | @subsubsection Using static libraries | ||||
| Assuming you have just built and installed FFmpeg in @file{/usr/local}. | |||||
| Assuming you have just built and installed Libav in @file{/usr/local}. | |||||
| @enumerate | @enumerate | ||||
| @@ -898,13 +898,13 @@ Application Wizard, uncheck the "Precompiled headers" option. | |||||
| @item Write the source code for your application, or, for testing, just | @item Write the source code for your application, or, for testing, just | ||||
| copy the code from an existing sample application into the source file | copy the code from an existing sample application into the source file | ||||
| that MSVC++ has already created for you. For example, you can copy | that MSVC++ has already created for you. For example, you can copy | ||||
| @file{libavformat/output-example.c} from the FFmpeg distribution. | |||||
| @file{libavformat/output-example.c} from the Libav distribution. | |||||
| @item Open the "Project / Properties" dialog box. In the "Configuration" | @item Open the "Project / Properties" dialog box. In the "Configuration" | ||||
| combo box, select "All Configurations" so that the changes you make will | combo box, select "All Configurations" so that the changes you make will | ||||
| affect both debug and release builds. In the tree view on the left hand | affect both debug and release builds. In the tree view on the left hand | ||||
| side, select "C/C++ / General", then edit the "Additional Include | side, select "C/C++ / General", then edit the "Additional Include | ||||
| Directories" setting to contain the path where the FFmpeg includes were | |||||
| Directories" setting to contain the path where the Libav includes were | |||||
| installed (i.e. @file{c:\msys\1.0\local\include}). | installed (i.e. @file{c:\msys\1.0\local\include}). | ||||
| Do not add MinGW's include directory here, or the include files will | Do not add MinGW's include directory here, or the include files will | ||||
| conflict with MSVC's. | conflict with MSVC's. | ||||
| @@ -912,7 +912,7 @@ conflict with MSVC's. | |||||
| @item Still in the "Project / Properties" dialog box, select | @item Still in the "Project / Properties" dialog box, select | ||||
| "Linker / General" from the tree view and edit the | "Linker / General" from the tree view and edit the | ||||
| "Additional Library Directories" setting to contain the @file{lib} | "Additional Library Directories" setting to contain the @file{lib} | ||||
| directory where FFmpeg was installed (i.e. @file{c:\msys\1.0\local\lib}), | |||||
| directory where Libav was installed (i.e. @file{c:\msys\1.0\local\lib}), | |||||
| the directory where MinGW libs are installed (i.e. @file{c:\mingw\lib}), | the directory where MinGW libs are installed (i.e. @file{c:\mingw\lib}), | ||||
| and the directory where MinGW's GCC libs are installed | and the directory where MinGW's GCC libs are installed | ||||
| (i.e. @file{C:\mingw\lib\gcc\mingw32\4.2.1-sjlj}). Then select | (i.e. @file{C:\mingw\lib\gcc\mingw32\4.2.1-sjlj}). Then select | ||||
| @@ -929,13 +929,13 @@ set to "Multi-threaded DLL". | |||||
| @item Click "OK" to close the "Project / Properties" dialog box. | @item Click "OK" to close the "Project / Properties" dialog box. | ||||
| @item MSVC++ lacks some C99 header files that are fundamental for FFmpeg. | |||||
| @item MSVC++ lacks some C99 header files that are fundamental for Libav. | |||||
| Get msinttypes from @url{http://code.google.com/p/msinttypes/downloads/list} | Get msinttypes from @url{http://code.google.com/p/msinttypes/downloads/list} | ||||
| and install it in MSVC++'s include directory | and install it in MSVC++'s include directory | ||||
| (i.e. @file{C:\Program Files\Microsoft Visual Studio 8\VC\include}). | (i.e. @file{C:\Program Files\Microsoft Visual Studio 8\VC\include}). | ||||
| @item MSVC++ also does not understand the @code{inline} keyword used by | @item MSVC++ also does not understand the @code{inline} keyword used by | ||||
| FFmpeg, so you must add this line before @code{#include}ing libav*: | |||||
| Libav, so you must add this line before @code{#include}ing libav*: | |||||
| @example | @example | ||||
| #define inline _inline | #define inline _inline | ||||
| @end example | @end example | ||||
| @@ -968,10 +968,10 @@ and run @file{c:\msys\1.0\msys.bat} from there. | |||||
| @item Within the MSYS shell, run @code{lib.exe}. If you get a help message | @item Within the MSYS shell, run @code{lib.exe}. If you get a help message | ||||
| from @file{Microsoft (R) Library Manager}, this means your environment | from @file{Microsoft (R) Library Manager}, this means your environment | ||||
| variables are set up correctly, the @file{Microsoft (R) Library Manager} | variables are set up correctly, the @file{Microsoft (R) Library Manager} | ||||
| is on the path and will be used by FFmpeg to create | |||||
| is on the path and will be used by Libav to create | |||||
| MSVC++-compatible import libraries. | MSVC++-compatible import libraries. | ||||
| @item Build FFmpeg with | |||||
| @item Build Libav with | |||||
| @example | @example | ||||
| ./configure --enable-shared --enable-memalign-hack | ./configure --enable-shared --enable-memalign-hack | ||||
| @@ -1000,7 +1000,7 @@ of DLL files, but the ones that are actually used to run your application | |||||
| are the ones with a major version number in their filenames | are the ones with a major version number in their filenames | ||||
| (i.e. @file{avcodec-51.dll}). | (i.e. @file{avcodec-51.dll}). | ||||
| FFmpeg headers do not declare global data for Windows DLLs through the usual | |||||
| Libav headers do not declare global data for Windows DLLs through the usual | |||||
| dllexport/dllimport interface. Such data will be exported properly while | dllexport/dllimport interface. Such data will be exported properly while | ||||
| building, but to use them in your MSVC++ code you will have to edit the | building, but to use them in your MSVC++ code you will have to edit the | ||||
| appropriate headers and mark the data as dllimport. For example, in | appropriate headers and mark the data as dllimport. For example, in | ||||
| @@ -1014,14 +1014,14 @@ extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[]; | |||||
| You must use the MinGW cross compilation tools available at | You must use the MinGW cross compilation tools available at | ||||
| @url{http://www.mingw.org/}. | @url{http://www.mingw.org/}. | ||||
| Then configure FFmpeg with the following options: | |||||
| Then configure Libav with the following options: | |||||
| @example | @example | ||||
| ./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc- | ./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc- | ||||
| @end example | @end example | ||||
| (you can change the cross-prefix according to the prefix chosen for the | (you can change the cross-prefix according to the prefix chosen for the | ||||
| MinGW tools). | MinGW tools). | ||||
| Then you can easily test FFmpeg with Wine | |||||
| Then you can easily test Libav with Wine | |||||
| (@url{http://www.winehq.com/}). | (@url{http://www.winehq.com/}). | ||||
| @subsection Compilation under Cygwin | @subsection Compilation under Cygwin | ||||
| @@ -1055,7 +1055,7 @@ shared libraries: | |||||
| ./configure --enable-shared --disable-static --extra-cflags=-fno-reorder-functions | ./configure --enable-shared --disable-static --extra-cflags=-fno-reorder-functions | ||||
| @end example | @end example | ||||
| If you want to build FFmpeg with additional libraries, download Cygwin | |||||
| If you want to build Libav with additional libraries, download Cygwin | |||||
| "Devel" packages for Ogg and Vorbis from any Cygwin packages repository: | "Devel" packages for Ogg and Vorbis from any Cygwin packages repository: | ||||
| @example | @example | ||||
| libogg-devel, libvorbis-devel | libogg-devel, libvorbis-devel | ||||
| @@ -28,9 +28,9 @@ Consult these resources whenever you have problems, they are quite exhaustive. | |||||
| You do not need a special username or password. | You do not need a special username or password. | ||||
| All you need is to provide a ssh public key to the Git server admin. | All you need is to provide a ssh public key to the Git server admin. | ||||
| What follows now is a basic introduction to Git and some FFmpeg-specific | |||||
| What follows now is a basic introduction to Git and some Libav-specific | |||||
| guidelines. Read it at least once, if you are granted commit privileges to the | guidelines. Read it at least once, if you are granted commit privileges to the | ||||
| FFmpeg project you are expected to be familiar with these rules. | |||||
| Libav project you are expected to be familiar with these rules. | |||||
| @@ -46,11 +46,11 @@ I. BASICS: | |||||
| git clone git://git.videolan.org/ffmpeg <target> | git clone git://git.videolan.org/ffmpeg <target> | ||||
| This will put the FFmpeg sources into the directory <target>. | |||||
| This will put the Libav sources into the directory <target>. | |||||
| git clone git@git.videolan.org:ffmpeg <target> | git clone git@git.videolan.org:ffmpeg <target> | ||||
| This will put the FFmpeg sources into the directory <target> and let | |||||
| This will put the Libav sources into the directory <target> and let | |||||
| you push back your changes to the remote repository. | you push back your changes to the remote repository. | ||||
| @@ -72,7 +72,7 @@ I. BASICS: | |||||
| fetches the changes from the main repository and replays your local commits | fetches the changes from the main repository and replays your local commits | ||||
| over it. This is required to keep all your local changes at the top of | over it. This is required to keep all your local changes at the top of | ||||
| FFmpeg's master tree. The master tree will reject pushes with merge commits. | |||||
| Libav's master tree. The master tree will reject pushes with merge commits. | |||||
| 3. Adding/removing files/directories: | 3. Adding/removing files/directories: | ||||
| @@ -1,10 +1,10 @@ | |||||
| @chapter Input Devices | @chapter Input Devices | ||||
| @c man begin INPUT DEVICES | @c man begin INPUT DEVICES | ||||
| Input devices are configured elements in FFmpeg which allow to access | |||||
| Input devices are configured elements in Libav which allow to access | |||||
| the data coming from a multimedia device attached to your system. | the data coming from a multimedia device attached to your system. | ||||
| When you configure your FFmpeg build, all the supported input devices | |||||
| When you configure your Libav build, all the supported input devices | |||||
| are enabled by default. You can list all available ones using the | are enabled by default. You can list all available ones using the | ||||
| configure option "--list-indevs". | configure option "--list-indevs". | ||||
| @@ -95,7 +95,7 @@ A JACK input device creates one or more JACK writable clients, one for | |||||
| each audio channel, with name @var{client_name}:input_@var{N}, where | each audio channel, with name @var{client_name}:input_@var{N}, where | ||||
| @var{client_name} is the name provided by the application, and @var{N} | @var{client_name} is the name provided by the application, and @var{N} | ||||
| is a number which identifies the channel. | is a number which identifies the channel. | ||||
| Each writable client will send the acquired data to the FFmpeg input | |||||
| Each writable client will send the acquired data to the Libav input | |||||
| device. | device. | ||||
| Once you have created one or more JACK readable clients, you need to | Once you have created one or more JACK readable clients, you need to | ||||
| @@ -1,11 +1,11 @@ | |||||
| FFmpeg's bug/patch/feature request tracker manual | |||||
| ================================================= | |||||
| Libav's bug/patch/feature request tracker manual | |||||
| ================================================ | |||||
| NOTE: This is a draft. | NOTE: This is a draft. | ||||
| Overview: | Overview: | ||||
| --------- | --------- | ||||
| FFmpeg uses Roundup for tracking issues, new issues and changes to | |||||
| Libav uses Roundup for tracking issues, new issues and changes to | |||||
| existing issues can be done through a web interface and through email. | existing issues can be done through a web interface and through email. | ||||
| It is possible to subscribe to individual issues by adding yourself to the | It is possible to subscribe to individual issues by adding yourself to the | ||||
| nosy list or to subscribe to the ffmpeg-issues mailing list which receives | nosy list or to subscribe to the ffmpeg-issues mailing list which receives | ||||
| @@ -60,7 +60,7 @@ critical | |||||
| No feature request can be critical. | No feature request can be critical. | ||||
| important | important | ||||
| Bugs which make FFmpeg unusable for a significant number of users, and | |||||
| Bugs which make Libav unusable for a significant number of users, and | |||||
| patches fixing them. | patches fixing them. | ||||
| Examples here might be completely broken MPEG-4 decoding or a build issue | Examples here might be completely broken MPEG-4 decoding or a build issue | ||||
| on Linux. | on Linux. | ||||
| @@ -81,7 +81,7 @@ minor | |||||
| wish | wish | ||||
| Something that is desirable to have but that there is no urgency at | Something that is desirable to have but that there is no urgency at | ||||
| all to implement, e.g. something completely cosmetic like a website | all to implement, e.g. something completely cosmetic like a website | ||||
| restyle or a personalized doxy template or the FFmpeg logo. | |||||
| restyle or a personalized doxy template or the Libav logo. | |||||
| This priority is not valid for bugs. | This priority is not valid for bugs. | ||||
| @@ -11,10 +11,10 @@ | |||||
| @chapter Introduction | @chapter Introduction | ||||
| Libavfilter is the filtering API of FFmpeg. It is the substitute of the | |||||
| Libavfilter is the filtering API of Libav. It is the substitute of the | |||||
| now deprecated 'vhooks' and started as a Google Summer of Code project. | now deprecated 'vhooks' and started as a Google Summer of Code project. | ||||
| Integrating libavfilter into the main FFmpeg repository is a work in | |||||
| Integrating libavfilter into the main Libav repository is a work in | |||||
| progress. If you wish to try the unfinished development code of | progress. If you wish to try the unfinished development code of | ||||
| libavfilter then check it out from the libavfilter repository into | libavfilter then check it out from the libavfilter repository into | ||||
| some directory of your choice by: | some directory of your choice by: | ||||
| @@ -74,7 +74,7 @@ not have video output. | |||||
| @chapter graph2dot | @chapter graph2dot | ||||
| The @file{graph2dot} program included in the FFmpeg @file{tools} | |||||
| The @file{graph2dot} program included in the Libav @file{tools} | |||||
| directory can be used to parse a filter graph description and issue a | directory can be used to parse a filter graph description and issue a | ||||
| corresponding textual representation in the dot language. | corresponding textual representation in the dot language. | ||||
| @@ -1,7 +1,7 @@ | |||||
| @chapter Metadata | @chapter Metadata | ||||
| @c man begin METADATA | @c man begin METADATA | ||||
| FFmpeg is able to dump metadata from media files into a simple UTF-8-encoded | |||||
| Libav is able to dump metadata from media files into a simple UTF-8-encoded | |||||
| INI-like text file and then load it back using the metadata muxer/demuxer. | INI-like text file and then load it back using the metadata muxer/demuxer. | ||||
| The file format is as follows: | The file format is as follows: | ||||
| @@ -53,7 +53,7 @@ A ffmetadata file might look like this: | |||||
| ;FFMETADATA1 | ;FFMETADATA1 | ||||
| title=bike\\shed | title=bike\\shed | ||||
| ;this is a comment | ;this is a comment | ||||
| artist=FFmpeg troll team | |||||
| artist=Libav troll team | |||||
| [CHAPTER] | [CHAPTER] | ||||
| TIMEBASE=1/1000 | TIMEBASE=1/1000 | ||||
| @@ -1,7 +1,7 @@ | |||||
| FFmpeg multithreading methods | |||||
| Libav multithreading methods | |||||
| ============================================== | ============================================== | ||||
| FFmpeg provides two methods for multithreading codecs. | |||||
| Libav provides two methods for multithreading codecs. | |||||
| Slice threading decodes multiple parts of a frame at the same time, using | Slice threading decodes multiple parts of a frame at the same time, using | ||||
| AVCodecContext execute() and execute2(). | AVCodecContext execute() and execute2(). | ||||
| @@ -1,10 +1,10 @@ | |||||
| @chapter Muxers | @chapter Muxers | ||||
| @c man begin MUXERS | @c man begin MUXERS | ||||
| Muxers are configured elements in FFmpeg which allow writing | |||||
| Muxers are configured elements in Libav which allow writing | |||||
| multimedia streams to a particular type of file. | multimedia streams to a particular type of file. | ||||
| When you configure your FFmpeg build, all the supported muxers | |||||
| When you configure your Libav build, all the supported muxers | |||||
| are enabled by default. You can list all available muxers using the | are enabled by default. You can list all available muxers using the | ||||
| configure option @code{--list-muxers}. | configure option @code{--list-muxers}. | ||||
| @@ -201,7 +201,7 @@ Inline asm vs. external asm | |||||
| --------------------------- | --------------------------- | ||||
| Both inline asm (__asm__("..") in a .c file, handled by a compiler such as gcc) | Both inline asm (__asm__("..") in a .c file, handled by a compiler such as gcc) | ||||
| and external asm (.s or .asm files, handled by an assembler such as yasm/nasm) | and external asm (.s or .asm files, handled by an assembler such as yasm/nasm) | ||||
| are accepted in FFmpeg. Which one to use differs per specific case. | |||||
| are accepted in Libav. Which one to use differs per specific case. | |||||
| - if your code is intended to be inlined in a C function, inline asm is always | - if your code is intended to be inlined in a C function, inline asm is always | ||||
| better, because external asm cannot be inlined | better, because external asm cannot be inlined | ||||
| @@ -1,10 +1,10 @@ | |||||
| @chapter Output Devices | @chapter Output Devices | ||||
| @c man begin OUTPUT DEVICES | @c man begin OUTPUT DEVICES | ||||
| Output devices are configured elements in FFmpeg which allow to write | |||||
| Output devices are configured elements in Libav which allow to write | |||||
| multimedia data to an output device attached to your system. | multimedia data to an output device attached to your system. | ||||
| When you configure your FFmpeg build, all the supported output devices | |||||
| When you configure your Libav build, all the supported output devices | |||||
| are enabled by default. You can list all available ones using the | are enabled by default. You can list all available ones using the | ||||
| configure option "--list-outdevs". | configure option "--list-outdevs". | ||||
| @@ -1,10 +1,10 @@ | |||||
| @chapter Protocols | @chapter Protocols | ||||
| @c man begin PROTOCOLS | @c man begin PROTOCOLS | ||||
| Protocols are configured elements in FFmpeg which allow to access | |||||
| Protocols are configured elements in Libav which allow to access | |||||
| resources which require the use of a particular protocol. | resources which require the use of a particular protocol. | ||||
| When you configure your FFmpeg build, all the supported protocols are | |||||
| When you configure your Libav build, all the supported protocols are | |||||
| enabled by default. You can list all available ones using the | enabled by default. You can list all available ones using the | ||||
| configure option "--list-protocols". | configure option "--list-protocols". | ||||
| @@ -25,8 +25,9 @@ Read Apple HTTP Live Streaming compliant segmented stream as | |||||
| a uniform one. The M3U8 playlists describing the segments can be | a uniform one. The M3U8 playlists describing the segments can be | ||||
| remote HTTP resources or local files, accessed using the standard | remote HTTP resources or local files, accessed using the standard | ||||
| file protocol. | file protocol. | ||||
| HTTP is default, specific protocol can be declared using the "+" | |||||
| specifier. | |||||
| HTTP is default, specific protocol can be declared by specifying | |||||
| "+@var{proto}" after the applehttp URI scheme name, where @var{proto} | |||||
| is either "file" or "http". | |||||
| @example | @example | ||||
| applehttp://host/path/to/remote/resource.m3u8 | applehttp://host/path/to/remote/resource.m3u8 | ||||
| @@ -34,7 +35,6 @@ applehttp+http://host/path/to/remote/resource.m3u8 | |||||
| applehttp+file://path/to/local/resource.m3u8 | applehttp+file://path/to/local/resource.m3u8 | ||||
| @end example | @end example | ||||
| @section concat | @section concat | ||||
| Physical concatenation protocol. | Physical concatenation protocol. | ||||
| @@ -8,9 +8,9 @@ it's a little late for this year's soc (2006). | |||||
| The Goal: | The Goal: | ||||
| Our goal in respect to soc is and must be of course exactly one thing and | Our goal in respect to soc is and must be of course exactly one thing and | ||||
| that is to improve FFmpeg, to reach this goal, code must | |||||
| that is to improve Libav, to reach this goal, code must | |||||
| * conform to the development policy and patch submission guidelines | * conform to the development policy and patch submission guidelines | ||||
| * must improve FFmpeg somehow (faster, smaller, "better", | |||||
| * must improve Libav somehow (faster, smaller, "better", | |||||
| more codecs supported, fewer bugs, cleaner, ...) | more codecs supported, fewer bugs, cleaner, ...) | ||||
| for mentors and other developers to help students to reach that goal it is | for mentors and other developers to help students to reach that goal it is | ||||
| @@ -20,5 +20,5 @@ easy reviewable that again leads us to: | |||||
| * separation of cosmetic from non-cosmetic changes (this is almost entirely | * separation of cosmetic from non-cosmetic changes (this is almost entirely | ||||
| ignored by mentors and students in soc 2006 which might lead to a suprise | ignored by mentors and students in soc 2006 which might lead to a suprise | ||||
| when the code will be reviewed at the end before a possible inclusion in | when the code will be reviewed at the end before a possible inclusion in | ||||
| FFmpeg, individual changes were generally not reviewable due to cosmetics). | |||||
| Libav, individual changes were generally not reviewable due to cosmetics). | |||||
| * frequent commits, so that comments can be provided early | * frequent commits, so that comments can be provided early | ||||
| @@ -1861,7 +1861,7 @@ static void fmt_bytecount(AVIOContext *pb, int64_t count) | |||||
| for (s = suffix; count >= 100000 && s[1]; count /= 1000, s++); | for (s = suffix; count >= 100000 && s[1]; count /= 1000, s++); | ||||
| url_fprintf(pb, "%"PRId64"%c", count, *s); | |||||
| avio_printf(pb, "%"PRId64"%c", count, *s); | |||||
| } | } | ||||
| static void compute_status(HTTPContext *c) | static void compute_status(HTTPContext *c) | ||||
| @@ -1880,20 +1880,20 @@ static void compute_status(HTTPContext *c) | |||||
| return; | return; | ||||
| } | } | ||||
| url_fprintf(pb, "HTTP/1.0 200 OK\r\n"); | |||||
| url_fprintf(pb, "Content-type: %s\r\n", "text/html"); | |||||
| url_fprintf(pb, "Pragma: no-cache\r\n"); | |||||
| url_fprintf(pb, "\r\n"); | |||||
| avio_printf(pb, "HTTP/1.0 200 OK\r\n"); | |||||
| avio_printf(pb, "Content-type: %s\r\n", "text/html"); | |||||
| avio_printf(pb, "Pragma: no-cache\r\n"); | |||||
| avio_printf(pb, "\r\n"); | |||||
| url_fprintf(pb, "<html><head><title>%s Status</title>\n", program_name); | |||||
| avio_printf(pb, "<html><head><title>%s Status</title>\n", program_name); | |||||
| if (c->stream->feed_filename[0]) | if (c->stream->feed_filename[0]) | ||||
| url_fprintf(pb, "<link rel=\"shortcut icon\" href=\"%s\">\n", c->stream->feed_filename); | |||||
| url_fprintf(pb, "</head>\n<body>"); | |||||
| url_fprintf(pb, "<h1>%s Status</h1>\n", program_name); | |||||
| avio_printf(pb, "<link rel=\"shortcut icon\" href=\"%s\">\n", c->stream->feed_filename); | |||||
| avio_printf(pb, "</head>\n<body>"); | |||||
| avio_printf(pb, "<h1>%s Status</h1>\n", program_name); | |||||
| /* format status */ | /* format status */ | ||||
| url_fprintf(pb, "<h2>Available Streams</h2>\n"); | |||||
| url_fprintf(pb, "<table cellspacing=0 cellpadding=4>\n"); | |||||
| url_fprintf(pb, "<tr><th valign=top>Path<th align=left>Served<br>Conns<th><br>bytes<th valign=top>Format<th>Bit rate<br>kbits/s<th align=left>Video<br>kbits/s<th><br>Codec<th align=left>Audio<br>kbits/s<th><br>Codec<th align=left valign=top>Feed\n"); | |||||
| avio_printf(pb, "<h2>Available Streams</h2>\n"); | |||||
| avio_printf(pb, "<table cellspacing=0 cellpadding=4>\n"); | |||||
| avio_printf(pb, "<tr><th valign=top>Path<th align=left>Served<br>Conns<th><br>bytes<th valign=top>Format<th>Bit rate<br>kbits/s<th align=left>Video<br>kbits/s<th><br>Codec<th align=left>Audio<br>kbits/s<th><br>Codec<th align=left valign=top>Feed\n"); | |||||
| stream = first_stream; | stream = first_stream; | ||||
| while (stream != NULL) { | while (stream != NULL) { | ||||
| char sfilename[1024]; | char sfilename[1024]; | ||||
| @@ -1921,9 +1921,9 @@ static void compute_status(HTTPContext *c) | |||||
| } | } | ||||
| } | } | ||||
| url_fprintf(pb, "<tr><td><a href=\"/%s\">%s</a> ", | |||||
| avio_printf(pb, "<tr><td><a href=\"/%s\">%s</a> ", | |||||
| sfilename, stream->filename); | sfilename, stream->filename); | ||||
| url_fprintf(pb, "<td align=right> %d <td align=right> ", | |||||
| avio_printf(pb, "<td align=right> %d <td align=right> ", | |||||
| stream->conns_served); | stream->conns_served); | ||||
| fmt_bytecount(pb, stream->bytes_served); | fmt_bytecount(pb, stream->bytes_served); | ||||
| switch(stream->stream_type) { | switch(stream->stream_type) { | ||||
| @@ -1962,33 +1962,33 @@ static void compute_status(HTTPContext *c) | |||||
| abort(); | abort(); | ||||
| } | } | ||||
| } | } | ||||
| url_fprintf(pb, "<td align=center> %s <td align=right> %d <td align=right> %d <td> %s %s <td align=right> %d <td> %s %s", | |||||
| avio_printf(pb, "<td align=center> %s <td align=right> %d <td align=right> %d <td> %s %s <td align=right> %d <td> %s %s", | |||||
| stream->fmt->name, | stream->fmt->name, | ||||
| stream->bandwidth, | stream->bandwidth, | ||||
| video_bit_rate / 1000, video_codec_name, video_codec_name_extra, | video_bit_rate / 1000, video_codec_name, video_codec_name_extra, | ||||
| audio_bit_rate / 1000, audio_codec_name, audio_codec_name_extra); | audio_bit_rate / 1000, audio_codec_name, audio_codec_name_extra); | ||||
| if (stream->feed) | if (stream->feed) | ||||
| url_fprintf(pb, "<td>%s", stream->feed->filename); | |||||
| avio_printf(pb, "<td>%s", stream->feed->filename); | |||||
| else | else | ||||
| url_fprintf(pb, "<td>%s", stream->feed_filename); | |||||
| url_fprintf(pb, "\n"); | |||||
| avio_printf(pb, "<td>%s", stream->feed_filename); | |||||
| avio_printf(pb, "\n"); | |||||
| } | } | ||||
| break; | break; | ||||
| default: | default: | ||||
| url_fprintf(pb, "<td align=center> - <td align=right> - <td align=right> - <td><td align=right> - <td>\n"); | |||||
| avio_printf(pb, "<td align=center> - <td align=right> - <td align=right> - <td><td align=right> - <td>\n"); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| stream = stream->next; | stream = stream->next; | ||||
| } | } | ||||
| url_fprintf(pb, "</table>\n"); | |||||
| avio_printf(pb, "</table>\n"); | |||||
| stream = first_stream; | stream = first_stream; | ||||
| while (stream != NULL) { | while (stream != NULL) { | ||||
| if (stream->feed == stream) { | if (stream->feed == stream) { | ||||
| url_fprintf(pb, "<h2>Feed %s</h2>", stream->filename); | |||||
| avio_printf(pb, "<h2>Feed %s</h2>", stream->filename); | |||||
| if (stream->pid) { | if (stream->pid) { | ||||
| url_fprintf(pb, "Running as pid %d.\n", stream->pid); | |||||
| avio_printf(pb, "Running as pid %d.\n", stream->pid); | |||||
| #if defined(linux) && !defined(CONFIG_NOCUTILS) | #if defined(linux) && !defined(CONFIG_NOCUTILS) | ||||
| { | { | ||||
| @@ -2007,7 +2007,7 @@ static void compute_status(HTTPContext *c) | |||||
| if (fscanf(pid_stat, "%10s %64s", cpuperc, | if (fscanf(pid_stat, "%10s %64s", cpuperc, | ||||
| cpuused) == 2) { | cpuused) == 2) { | ||||
| url_fprintf(pb, "Currently using %s%% of the cpu. Total time used %s.\n", | |||||
| avio_printf(pb, "Currently using %s%% of the cpu. Total time used %s.\n", | |||||
| cpuperc, cpuused); | cpuperc, cpuused); | ||||
| } | } | ||||
| fclose(pid_stat); | fclose(pid_stat); | ||||
| @@ -2015,9 +2015,9 @@ static void compute_status(HTTPContext *c) | |||||
| } | } | ||||
| #endif | #endif | ||||
| url_fprintf(pb, "<p>"); | |||||
| avio_printf(pb, "<p>"); | |||||
| } | } | ||||
| url_fprintf(pb, "<table cellspacing=0 cellpadding=4><tr><th>Stream<th>type<th>kbits/s<th align=left>codec<th align=left>Parameters\n"); | |||||
| avio_printf(pb, "<table cellspacing=0 cellpadding=4><tr><th>Stream<th>type<th>kbits/s<th align=left>codec<th align=left>Parameters\n"); | |||||
| for (i = 0; i < stream->nb_streams; i++) { | for (i = 0; i < stream->nb_streams; i++) { | ||||
| AVStream *st = stream->streams[i]; | AVStream *st = stream->streams[i]; | ||||
| @@ -2040,26 +2040,26 @@ static void compute_status(HTTPContext *c) | |||||
| default: | default: | ||||
| abort(); | abort(); | ||||
| } | } | ||||
| url_fprintf(pb, "<tr><td align=right>%d<td>%s<td align=right>%d<td>%s<td>%s\n", | |||||
| avio_printf(pb, "<tr><td align=right>%d<td>%s<td align=right>%d<td>%s<td>%s\n", | |||||
| i, type, st->codec->bit_rate/1000, codec ? codec->name : "", parameters); | i, type, st->codec->bit_rate/1000, codec ? codec->name : "", parameters); | ||||
| } | } | ||||
| url_fprintf(pb, "</table>\n"); | |||||
| avio_printf(pb, "</table>\n"); | |||||
| } | } | ||||
| stream = stream->next; | stream = stream->next; | ||||
| } | } | ||||
| /* connection status */ | /* connection status */ | ||||
| url_fprintf(pb, "<h2>Connection Status</h2>\n"); | |||||
| avio_printf(pb, "<h2>Connection Status</h2>\n"); | |||||
| url_fprintf(pb, "Number of connections: %d / %d<br>\n", | |||||
| avio_printf(pb, "Number of connections: %d / %d<br>\n", | |||||
| nb_connections, nb_max_connections); | nb_connections, nb_max_connections); | ||||
| url_fprintf(pb, "Bandwidth in use: %"PRIu64"k / %"PRIu64"k<br>\n", | |||||
| avio_printf(pb, "Bandwidth in use: %"PRIu64"k / %"PRIu64"k<br>\n", | |||||
| current_bandwidth, max_bandwidth); | current_bandwidth, max_bandwidth); | ||||
| url_fprintf(pb, "<table>\n"); | |||||
| url_fprintf(pb, "<tr><th>#<th>File<th>IP<th>Proto<th>State<th>Target bits/sec<th>Actual bits/sec<th>Bytes transferred\n"); | |||||
| avio_printf(pb, "<table>\n"); | |||||
| avio_printf(pb, "<tr><th>#<th>File<th>IP<th>Proto<th>State<th>Target bits/sec<th>Actual bits/sec<th>Bytes transferred\n"); | |||||
| c1 = first_http_ctx; | c1 = first_http_ctx; | ||||
| i = 0; | i = 0; | ||||
| while (c1 != NULL) { | while (c1 != NULL) { | ||||
| @@ -2078,7 +2078,7 @@ static void compute_status(HTTPContext *c) | |||||
| i++; | i++; | ||||
| p = inet_ntoa(c1->from_addr.sin_addr); | p = inet_ntoa(c1->from_addr.sin_addr); | ||||
| url_fprintf(pb, "<tr><td><b>%d</b><td>%s%s<td>%s<td>%s<td>%s<td align=right>", | |||||
| avio_printf(pb, "<tr><td><b>%d</b><td>%s%s<td>%s<td>%s<td>%s<td align=right>", | |||||
| i, | i, | ||||
| c1->stream ? c1->stream->filename : "", | c1->stream ? c1->stream->filename : "", | ||||
| c1->state == HTTPSTATE_RECEIVE_DATA ? "(input)" : "", | c1->state == HTTPSTATE_RECEIVE_DATA ? "(input)" : "", | ||||
| @@ -2086,20 +2086,20 @@ static void compute_status(HTTPContext *c) | |||||
| c1->protocol, | c1->protocol, | ||||
| http_state[c1->state]); | http_state[c1->state]); | ||||
| fmt_bytecount(pb, bitrate); | fmt_bytecount(pb, bitrate); | ||||
| url_fprintf(pb, "<td align=right>"); | |||||
| avio_printf(pb, "<td align=right>"); | |||||
| fmt_bytecount(pb, compute_datarate(&c1->datarate, c1->data_count) * 8); | fmt_bytecount(pb, compute_datarate(&c1->datarate, c1->data_count) * 8); | ||||
| url_fprintf(pb, "<td align=right>"); | |||||
| avio_printf(pb, "<td align=right>"); | |||||
| fmt_bytecount(pb, c1->data_count); | fmt_bytecount(pb, c1->data_count); | ||||
| url_fprintf(pb, "\n"); | |||||
| avio_printf(pb, "\n"); | |||||
| c1 = c1->next; | c1 = c1->next; | ||||
| } | } | ||||
| url_fprintf(pb, "</table>\n"); | |||||
| avio_printf(pb, "</table>\n"); | |||||
| /* date */ | /* date */ | ||||
| ti = time(NULL); | ti = time(NULL); | ||||
| p = ctime(&ti); | p = ctime(&ti); | ||||
| url_fprintf(pb, "<hr size=1 noshade>Generated at %s", p); | |||||
| url_fprintf(pb, "</body>\n</html>\n"); | |||||
| avio_printf(pb, "<hr size=1 noshade>Generated at %s", p); | |||||
| avio_printf(pb, "</body>\n</html>\n"); | |||||
| len = url_close_dyn_buf(pb, &c->pb_buffer); | len = url_close_dyn_buf(pb, &c->pb_buffer); | ||||
| c->buffer_ptr = c->pb_buffer; | c->buffer_ptr = c->pb_buffer; | ||||
| @@ -2721,7 +2721,8 @@ static int http_receive_data(HTTPContext *c) | |||||
| if (!fmt_in) | if (!fmt_in) | ||||
| goto fail; | goto fail; | ||||
| url_open_buf(&pb, c->buffer, c->buffer_end - c->buffer, URL_RDONLY); | |||||
| pb = avio_alloc_context(c->buffer, c->buffer_end - c->buffer, | |||||
| 0, NULL, NULL, NULL, NULL); | |||||
| pb->is_streamed = 1; | pb->is_streamed = 1; | ||||
| if (av_open_input_stream(&s, pb, c->stream->feed_filename, fmt_in, NULL) < 0) { | if (av_open_input_stream(&s, pb, c->stream->feed_filename, fmt_in, NULL) < 0) { | ||||
| @@ -2812,20 +2813,20 @@ static void rtsp_reply_header(HTTPContext *c, enum RTSPStatusCode error_number) | |||||
| break; | break; | ||||
| } | } | ||||
| url_fprintf(c->pb, "RTSP/1.0 %d %s\r\n", error_number, str); | |||||
| url_fprintf(c->pb, "CSeq: %d\r\n", c->seq); | |||||
| avio_printf(c->pb, "RTSP/1.0 %d %s\r\n", error_number, str); | |||||
| avio_printf(c->pb, "CSeq: %d\r\n", c->seq); | |||||
| /* output GMT time */ | /* output GMT time */ | ||||
| ti = time(NULL); | ti = time(NULL); | ||||
| tm = gmtime(&ti); | tm = gmtime(&ti); | ||||
| strftime(buf2, sizeof(buf2), "%a, %d %b %Y %H:%M:%S", tm); | strftime(buf2, sizeof(buf2), "%a, %d %b %Y %H:%M:%S", tm); | ||||
| url_fprintf(c->pb, "Date: %s GMT\r\n", buf2); | |||||
| avio_printf(c->pb, "Date: %s GMT\r\n", buf2); | |||||
| } | } | ||||
| static void rtsp_reply_error(HTTPContext *c, enum RTSPStatusCode error_number) | static void rtsp_reply_error(HTTPContext *c, enum RTSPStatusCode error_number) | ||||
| { | { | ||||
| rtsp_reply_header(c, error_number); | rtsp_reply_header(c, error_number); | ||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| } | } | ||||
| static int rtsp_parse_request(HTTPContext *c) | static int rtsp_parse_request(HTTPContext *c) | ||||
| @@ -2970,10 +2971,10 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer, | |||||
| static void rtsp_cmd_options(HTTPContext *c, const char *url) | static void rtsp_cmd_options(HTTPContext *c, const char *url) | ||||
| { | { | ||||
| // rtsp_reply_header(c, RTSP_STATUS_OK); | // rtsp_reply_header(c, RTSP_STATUS_OK); | ||||
| url_fprintf(c->pb, "RTSP/1.0 %d %s\r\n", RTSP_STATUS_OK, "OK"); | |||||
| url_fprintf(c->pb, "CSeq: %d\r\n", c->seq); | |||||
| url_fprintf(c->pb, "Public: %s\r\n", "OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE"); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "RTSP/1.0 %d %s\r\n", RTSP_STATUS_OK, "OK"); | |||||
| avio_printf(c->pb, "CSeq: %d\r\n", c->seq); | |||||
| avio_printf(c->pb, "Public: %s\r\n", "OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE"); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| } | } | ||||
| static void rtsp_cmd_describe(HTTPContext *c, const char *url) | static void rtsp_cmd_describe(HTTPContext *c, const char *url) | ||||
| @@ -3014,10 +3015,10 @@ static void rtsp_cmd_describe(HTTPContext *c, const char *url) | |||||
| return; | return; | ||||
| } | } | ||||
| rtsp_reply_header(c, RTSP_STATUS_OK); | rtsp_reply_header(c, RTSP_STATUS_OK); | ||||
| url_fprintf(c->pb, "Content-Base: %s/\r\n", url); | |||||
| url_fprintf(c->pb, "Content-Type: application/sdp\r\n"); | |||||
| url_fprintf(c->pb, "Content-Length: %d\r\n", content_length); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "Content-Base: %s/\r\n", url); | |||||
| avio_printf(c->pb, "Content-Type: application/sdp\r\n"); | |||||
| avio_printf(c->pb, "Content-Length: %d\r\n", content_length); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| avio_write(c->pb, content, content_length); | avio_write(c->pb, content, content_length); | ||||
| av_free(content); | av_free(content); | ||||
| } | } | ||||
| @@ -3163,30 +3164,30 @@ static void rtsp_cmd_setup(HTTPContext *c, const char *url, | |||||
| /* now everything is OK, so we can send the connection parameters */ | /* now everything is OK, so we can send the connection parameters */ | ||||
| rtsp_reply_header(c, RTSP_STATUS_OK); | rtsp_reply_header(c, RTSP_STATUS_OK); | ||||
| /* session ID */ | /* session ID */ | ||||
| url_fprintf(c->pb, "Session: %s\r\n", rtp_c->session_id); | |||||
| avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id); | |||||
| switch(rtp_c->rtp_protocol) { | switch(rtp_c->rtp_protocol) { | ||||
| case RTSP_LOWER_TRANSPORT_UDP: | case RTSP_LOWER_TRANSPORT_UDP: | ||||
| rtp_port = rtp_get_local_rtp_port(rtp_c->rtp_handles[stream_index]); | rtp_port = rtp_get_local_rtp_port(rtp_c->rtp_handles[stream_index]); | ||||
| rtcp_port = rtp_get_local_rtcp_port(rtp_c->rtp_handles[stream_index]); | rtcp_port = rtp_get_local_rtcp_port(rtp_c->rtp_handles[stream_index]); | ||||
| url_fprintf(c->pb, "Transport: RTP/AVP/UDP;unicast;" | |||||
| avio_printf(c->pb, "Transport: RTP/AVP/UDP;unicast;" | |||||
| "client_port=%d-%d;server_port=%d-%d", | "client_port=%d-%d;server_port=%d-%d", | ||||
| th->client_port_min, th->client_port_max, | th->client_port_min, th->client_port_max, | ||||
| rtp_port, rtcp_port); | rtp_port, rtcp_port); | ||||
| break; | break; | ||||
| case RTSP_LOWER_TRANSPORT_TCP: | case RTSP_LOWER_TRANSPORT_TCP: | ||||
| url_fprintf(c->pb, "Transport: RTP/AVP/TCP;interleaved=%d-%d", | |||||
| avio_printf(c->pb, "Transport: RTP/AVP/TCP;interleaved=%d-%d", | |||||
| stream_index * 2, stream_index * 2 + 1); | stream_index * 2, stream_index * 2 + 1); | ||||
| break; | break; | ||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| if (setup.transport_option[0] != '\0') | if (setup.transport_option[0] != '\0') | ||||
| url_fprintf(c->pb, ";%s", setup.transport_option); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, ";%s", setup.transport_option); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| } | } | ||||
| @@ -3248,8 +3249,8 @@ static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPMessageHeader *h) | |||||
| /* now everything is OK, so we can send the connection parameters */ | /* now everything is OK, so we can send the connection parameters */ | ||||
| rtsp_reply_header(c, RTSP_STATUS_OK); | rtsp_reply_header(c, RTSP_STATUS_OK); | ||||
| /* session ID */ | /* session ID */ | ||||
| url_fprintf(c->pb, "Session: %s\r\n", rtp_c->session_id); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| } | } | ||||
| static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h) | static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h) | ||||
| @@ -3273,8 +3274,8 @@ static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h | |||||
| /* now everything is OK, so we can send the connection parameters */ | /* now everything is OK, so we can send the connection parameters */ | ||||
| rtsp_reply_header(c, RTSP_STATUS_OK); | rtsp_reply_header(c, RTSP_STATUS_OK); | ||||
| /* session ID */ | /* session ID */ | ||||
| url_fprintf(c->pb, "Session: %s\r\n", rtp_c->session_id); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| } | } | ||||
| static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h) | static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h) | ||||
| @@ -3296,8 +3297,8 @@ static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader | |||||
| /* now everything is OK, so we can send the connection parameters */ | /* now everything is OK, so we can send the connection parameters */ | ||||
| rtsp_reply_header(c, RTSP_STATUS_OK); | rtsp_reply_header(c, RTSP_STATUS_OK); | ||||
| /* session ID */ | /* session ID */ | ||||
| url_fprintf(c->pb, "Session: %s\r\n", session_id); | |||||
| url_fprintf(c->pb, "\r\n"); | |||||
| avio_printf(c->pb, "Session: %s\r\n", session_id); | |||||
| avio_printf(c->pb, "\r\n"); | |||||
| } | } | ||||
| @@ -146,34 +146,34 @@ static av_always_inline float quantize_and_encode_band_cost_template( | |||||
| curidx *= range; | curidx *= range; | ||||
| curidx += quants[j] + off; | curidx += quants[j] + off; | ||||
| } | } | ||||
| curbits = ff_aac_spectral_bits[cb-1][curidx]; | |||||
| vec = &ff_aac_codebook_vectors[cb-1][curidx*dim]; | |||||
| if (BT_UNSIGNED) { | |||||
| for (k = 0; k < dim; k++) { | |||||
| float t = fabsf(in[i+k]); | |||||
| float di; | |||||
| if (BT_ESC && vec[k] == 64.0f) { //FIXME: slow | |||||
| if (t >= CLIPPED_ESCAPE) { | |||||
| di = t - CLIPPED_ESCAPE; | |||||
| curbits += 21; | |||||
| } else { | |||||
| int c = av_clip(quant(t, Q), 0, 8191); | |||||
| di = t - c*cbrtf(c)*IQ; | |||||
| curbits += av_log2(c)*2 - 4 + 1; | |||||
| } | |||||
| curbits = ff_aac_spectral_bits[cb-1][curidx]; | |||||
| vec = &ff_aac_codebook_vectors[cb-1][curidx*dim]; | |||||
| if (BT_UNSIGNED) { | |||||
| for (k = 0; k < dim; k++) { | |||||
| float t = fabsf(in[i+k]); | |||||
| float di; | |||||
| if (BT_ESC && vec[k] == 64.0f) { //FIXME: slow | |||||
| if (t >= CLIPPED_ESCAPE) { | |||||
| di = t - CLIPPED_ESCAPE; | |||||
| curbits += 21; | |||||
| } else { | } else { | ||||
| di = t - vec[k]*IQ; | |||||
| int c = av_clip(quant(t, Q), 0, 8191); | |||||
| di = t - c*cbrtf(c)*IQ; | |||||
| curbits += av_log2(c)*2 - 4 + 1; | |||||
| } | } | ||||
| if (vec[k] != 0.0f) | |||||
| curbits++; | |||||
| rd += di*di; | |||||
| } | |||||
| } else { | |||||
| for (k = 0; k < dim; k++) { | |||||
| float di = in[i+k] - vec[k]*IQ; | |||||
| rd += di*di; | |||||
| } else { | |||||
| di = t - vec[k]*IQ; | |||||
| } | } | ||||
| if (vec[k] != 0.0f) | |||||
| curbits++; | |||||
| rd += di*di; | |||||
| } | } | ||||
| } else { | |||||
| for (k = 0; k < dim; k++) { | |||||
| float di = in[i+k] - vec[k]*IQ; | |||||
| rd += di*di; | |||||
| } | |||||
| } | |||||
| cost += rd * lambda + curbits; | cost += rd * lambda + curbits; | ||||
| resbits += curbits; | resbits += curbits; | ||||
| if (cost >= uplim) | if (cost >= uplim) | ||||
| @@ -575,7 +575,7 @@ static void search_for_quantizers_anmr(AVCodecContext *avctx, AACEncContext *s, | |||||
| int qnrg = av_clip_uint8(log2f(sqrtf(qnrgf/qcnt))*4 - 31 + SCALE_ONE_POS - SCALE_DIV_512); | int qnrg = av_clip_uint8(log2f(sqrtf(qnrgf/qcnt))*4 - 31 + SCALE_ONE_POS - SCALE_DIV_512); | ||||
| q1 = qnrg + 30; | q1 = qnrg + 30; | ||||
| q0 = qnrg - 30; | q0 = qnrg - 30; | ||||
| //av_log(NULL, AV_LOG_ERROR, "q0 %d, q1 %d\n", q0, q1); | |||||
| //av_log(NULL, AV_LOG_ERROR, "q0 %d, q1 %d\n", q0, q1); | |||||
| if (q0 < q0low) { | if (q0 < q0low) { | ||||
| q1 += q0low - q0; | q1 += q0low - q0; | ||||
| q0 = q0low; | q0 = q0low; | ||||
| @@ -723,7 +723,7 @@ static void search_for_quantizers_twoloop(AVCodecContext *avctx, | |||||
| sce->zeroes[w*16+g] = !nz; | sce->zeroes[w*16+g] = !nz; | ||||
| if (nz) | if (nz) | ||||
| minthr = FFMIN(minthr, uplim); | minthr = FFMIN(minthr, uplim); | ||||
| allz = FFMAX(allz, nz); | |||||
| allz |= nz; | |||||
| } | } | ||||
| } | } | ||||
| for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) { | for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) { | ||||
| @@ -39,8 +39,8 @@ | |||||
| * constants for 3GPP AAC psychoacoustic model | * constants for 3GPP AAC psychoacoustic model | ||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| #define PSY_3GPP_SPREAD_HI 1.5f // spreading factor for ascending threshold spreading (15 dB/Bark) | |||||
| #define PSY_3GPP_SPREAD_LOW 3.0f // spreading factor for descending threshold spreading (30 dB/Bark) | |||||
| #define PSY_3GPP_THR_SPREAD_HI 1.5f // spreading factor for low-to-hi threshold spreading (15 dB/Bark) | |||||
| #define PSY_3GPP_THR_SPREAD_LOW 3.0f // spreading factor for hi-to-low threshold spreading (30 dB/Bark) | |||||
| #define PSY_3GPP_RPEMIN 0.01f | #define PSY_3GPP_RPEMIN 0.01f | ||||
| #define PSY_3GPP_RPELEV 2.0f | #define PSY_3GPP_RPELEV 2.0f | ||||
| @@ -61,9 +61,7 @@ | |||||
| */ | */ | ||||
| typedef struct AacPsyBand{ | typedef struct AacPsyBand{ | ||||
| float energy; ///< band energy | float energy; ///< band energy | ||||
| float ffac; ///< form factor | |||||
| float thr; ///< energy threshold | float thr; ///< energy threshold | ||||
| float min_snr; ///< minimal SNR | |||||
| float thr_quiet; ///< threshold in quiet | float thr_quiet; ///< threshold in quiet | ||||
| }AacPsyBand; | }AacPsyBand; | ||||
| @@ -88,17 +86,18 @@ typedef struct AacPsyChannel{ | |||||
| * psychoacoustic model frame type-dependent coefficients | * psychoacoustic model frame type-dependent coefficients | ||||
| */ | */ | ||||
| typedef struct AacPsyCoeffs{ | typedef struct AacPsyCoeffs{ | ||||
| float ath [64]; ///< absolute threshold of hearing per bands | |||||
| float barks [64]; ///< Bark value for each spectral band in long frame | |||||
| float spread_low[64]; ///< spreading factor for low-to-high threshold spreading in long frame | |||||
| float spread_hi [64]; ///< spreading factor for high-to-low threshold spreading in long frame | |||||
| float ath; ///< absolute threshold of hearing per bands | |||||
| float barks; ///< Bark value for each spectral band in long frame | |||||
| float spread_low[2]; ///< spreading factor for low-to-high threshold spreading in long frame | |||||
| float spread_hi [2]; ///< spreading factor for high-to-low threshold spreading in long frame | |||||
| float min_snr; ///< minimal SNR | |||||
| }AacPsyCoeffs; | }AacPsyCoeffs; | ||||
| /** | /** | ||||
| * 3GPP TS26.403-inspired psychoacoustic model specific data | * 3GPP TS26.403-inspired psychoacoustic model specific data | ||||
| */ | */ | ||||
| typedef struct AacPsyContext{ | typedef struct AacPsyContext{ | ||||
| AacPsyCoeffs psy_coef[2]; | |||||
| AacPsyCoeffs psy_coef[2][64]; | |||||
| AacPsyChannel *ch; | AacPsyChannel *ch; | ||||
| }AacPsyContext; | }AacPsyContext; | ||||
| @@ -243,27 +242,30 @@ static av_cold int psy_3gpp_init(FFPsyContext *ctx) { | |||||
| minath = ath(3410, ATH_ADD); | minath = ath(3410, ATH_ADD); | ||||
| for (j = 0; j < 2; j++) { | for (j = 0; j < 2; j++) { | ||||
| AacPsyCoeffs *coeffs = &pctx->psy_coef[j]; | |||||
| AacPsyCoeffs *coeffs = pctx->psy_coef[j]; | |||||
| const uint8_t *band_sizes = ctx->bands[j]; | |||||
| float line_to_frequency = ctx->avctx->sample_rate / (j ? 256.f : 2048.0f); | float line_to_frequency = ctx->avctx->sample_rate / (j ? 256.f : 2048.0f); | ||||
| i = 0; | i = 0; | ||||
| prev = 0.0; | prev = 0.0; | ||||
| for (g = 0; g < ctx->num_bands[j]; g++) { | for (g = 0; g < ctx->num_bands[j]; g++) { | ||||
| i += ctx->bands[j][g]; | |||||
| i += band_sizes[g]; | |||||
| bark = calc_bark((i-1) * line_to_frequency); | bark = calc_bark((i-1) * line_to_frequency); | ||||
| coeffs->barks[g] = (bark + prev) / 2.0; | |||||
| coeffs[g].barks = (bark + prev) / 2.0; | |||||
| prev = bark; | prev = bark; | ||||
| } | } | ||||
| for (g = 0; g < ctx->num_bands[j] - 1; g++) { | for (g = 0; g < ctx->num_bands[j] - 1; g++) { | ||||
| coeffs->spread_low[g] = pow(10.0, -(coeffs->barks[g+1] - coeffs->barks[g]) * PSY_3GPP_SPREAD_LOW); | |||||
| coeffs->spread_hi [g] = pow(10.0, -(coeffs->barks[g+1] - coeffs->barks[g]) * PSY_3GPP_SPREAD_HI); | |||||
| AacPsyCoeffs *coeff = &coeffs[g]; | |||||
| float bark_width = coeffs[g+1].barks - coeffs->barks; | |||||
| coeff->spread_low[0] = pow(10.0, -bark_width * PSY_3GPP_THR_SPREAD_LOW); | |||||
| coeff->spread_hi [0] = pow(10.0, -bark_width * PSY_3GPP_THR_SPREAD_HI); | |||||
| } | } | ||||
| start = 0; | start = 0; | ||||
| for (g = 0; g < ctx->num_bands[j]; g++) { | for (g = 0; g < ctx->num_bands[j]; g++) { | ||||
| minscale = ath(start * line_to_frequency, ATH_ADD); | minscale = ath(start * line_to_frequency, ATH_ADD); | ||||
| for (i = 1; i < ctx->bands[j][g]; i++) | |||||
| for (i = 1; i < band_sizes[g]; i++) | |||||
| minscale = FFMIN(minscale, ath((start + i) * line_to_frequency, ATH_ADD)); | minscale = FFMIN(minscale, ath((start + i) * line_to_frequency, ATH_ADD)); | ||||
| coeffs->ath[g] = minscale - minath; | |||||
| start += ctx->bands[j][g]; | |||||
| coeffs[g].ath = minscale - minath; | |||||
| start += band_sizes[g]; | |||||
| } | } | ||||
| } | } | ||||
| @@ -393,9 +395,9 @@ static void psy_3gpp_analyze(FFPsyContext *ctx, int channel, | |||||
| AacPsyChannel *pch = &pctx->ch[channel]; | AacPsyChannel *pch = &pctx->ch[channel]; | ||||
| int start = 0; | int start = 0; | ||||
| int i, w, g; | int i, w, g; | ||||
| const int num_bands = ctx->num_bands[wi->num_windows == 8]; | |||||
| const uint8_t* band_sizes = ctx->bands[wi->num_windows == 8]; | |||||
| AacPsyCoeffs *coeffs = &pctx->psy_coef[wi->num_windows == 8]; | |||||
| const int num_bands = ctx->num_bands[wi->num_windows == 8]; | |||||
| const uint8_t *band_sizes = ctx->bands[wi->num_windows == 8]; | |||||
| AacPsyCoeffs *coeffs = &pctx->psy_coef[wi->num_windows == 8]; | |||||
| //calculate energies, initial thresholds and related values - 5.4.2 "Threshold Calculation" | //calculate energies, initial thresholds and related values - 5.4.2 "Threshold Calculation" | ||||
| for (w = 0; w < wi->num_windows*16; w += 16) { | for (w = 0; w < wi->num_windows*16; w += 16) { | ||||
| @@ -406,26 +408,37 @@ static void psy_3gpp_analyze(FFPsyContext *ctx, int channel, | |||||
| band->energy += coefs[start+i] * coefs[start+i]; | band->energy += coefs[start+i] * coefs[start+i]; | ||||
| band->thr = band->energy * 0.001258925f; | band->thr = band->energy * 0.001258925f; | ||||
| start += band_sizes[g]; | start += band_sizes[g]; | ||||
| ctx->psy_bands[channel*PSY_MAX_BANDS+w+g].energy = band->energy; | |||||
| } | } | ||||
| } | } | ||||
| //modify thresholds - spread, threshold in quiet - 5.4.3 "Spreaded Energy Calculation" | |||||
| //modify thresholds and energies - spread, threshold in quiet, pre-echo control | |||||
| for (w = 0; w < wi->num_windows*16; w += 16) { | for (w = 0; w < wi->num_windows*16; w += 16) { | ||||
| AacPsyBand *band = &pch->band[w]; | |||||
| AacPsyBand *bands = &pch->band[w]; | |||||
| //5.4.2.3 "Spreading" & 5.4.3 "Spreaded Energy Calculation" | |||||
| for (g = 1; g < num_bands; g++) | for (g = 1; g < num_bands; g++) | ||||
| band[g].thr = FFMAX(band[g].thr, band[g-1].thr * coeffs->spread_hi [g]); | |||||
| bands[g].thr = FFMAX(bands[g].thr, bands[g-1].thr * coeffs[g].spread_hi[0]); | |||||
| for (g = num_bands - 2; g >= 0; g--) | for (g = num_bands - 2; g >= 0; g--) | ||||
| band[g].thr = FFMAX(band[g].thr, band[g+1].thr * coeffs->spread_low[g]); | |||||
| bands[g].thr = FFMAX(bands[g].thr, bands[g+1].thr * coeffs[g].spread_low[0]); | |||||
| //5.4.2.4 "Threshold in quiet" | |||||
| for (g = 0; g < num_bands; g++) { | for (g = 0; g < num_bands; g++) { | ||||
| band[g].thr_quiet = band[g].thr = FFMAX(band[g].thr, coeffs->ath[g]); | |||||
| AacPsyBand *band = &bands[g]; | |||||
| band->thr_quiet = band->thr = FFMAX(band->thr, coeffs[g].ath); | |||||
| //5.4.2.5 "Pre-echo control" | |||||
| if (!(wi->window_type[0] == LONG_STOP_SEQUENCE || (wi->window_type[1] == LONG_START_SEQUENCE && !w))) | if (!(wi->window_type[0] == LONG_STOP_SEQUENCE || (wi->window_type[1] == LONG_START_SEQUENCE && !w))) | ||||
| band[g].thr = FFMAX(PSY_3GPP_RPEMIN*band[g].thr, FFMIN(band[g].thr, | |||||
| PSY_3GPP_RPELEV*pch->prev_band[w+g].thr_quiet)); | |||||
| band->thr = FFMAX(PSY_3GPP_RPEMIN*band->thr, FFMIN(band->thr, | |||||
| PSY_3GPP_RPELEV*pch->prev_band[w+g].thr_quiet)); | |||||
| } | |||||
| } | |||||
| for (w = 0; w < wi->num_windows*16; w += 16) { | |||||
| for (g = 0; g < num_bands; g++) { | |||||
| AacPsyBand *band = &pch->band[w+g]; | |||||
| FFPsyBand *psy_band = &ctx->psy_bands[channel*PSY_MAX_BANDS+w+g]; | |||||
| ctx->psy_bands[channel*PSY_MAX_BANDS+w+g].threshold = band[g].thr; | |||||
| psy_band->threshold = band->thr; | |||||
| psy_band->energy = band->energy; | |||||
| } | } | ||||
| } | } | ||||
| memcpy(pch->prev_band, pch->band, sizeof(pch->band)); | memcpy(pch->prev_band, pch->band, sizeof(pch->band)); | ||||
| } | } | ||||
| @@ -553,22 +566,9 @@ static FFPsyWindowInfo psy_lame_window(FFPsyContext *ctx, | |||||
| if (pch->prev_attack == 3 || att_sum) { | if (pch->prev_attack == 3 || att_sum) { | ||||
| uselongblock = 0; | uselongblock = 0; | ||||
| if (attacks[1] && attacks[0]) | |||||
| attacks[1] = 0; | |||||
| if (attacks[2] && attacks[1]) | |||||
| attacks[2] = 0; | |||||
| if (attacks[3] && attacks[2]) | |||||
| attacks[3] = 0; | |||||
| if (attacks[4] && attacks[3]) | |||||
| attacks[4] = 0; | |||||
| if (attacks[5] && attacks[4]) | |||||
| attacks[5] = 0; | |||||
| if (attacks[6] && attacks[5]) | |||||
| attacks[6] = 0; | |||||
| if (attacks[7] && attacks[6]) | |||||
| attacks[7] = 0; | |||||
| if (attacks[8] && attacks[7]) | |||||
| attacks[8] = 0; | |||||
| for (i = 1; i < AAC_NUM_BLOCKS_SHORT + 1; i++) | |||||
| if (attacks[i] && attacks[i-1]) | |||||
| attacks[i] = 0; | |||||
| } | } | ||||
| } else { | } else { | ||||
| /* We have no lookahead info, so just use same type as the previous sequence. */ | /* We have no lookahead info, so just use same type as the previous sequence. */ | ||||
| @@ -222,6 +222,12 @@ static void bswap_buf(uint32_t *dst, const uint32_t *src, int w){ | |||||
| } | } | ||||
| } | } | ||||
| static void bswap16_buf(uint16_t *dst, const uint16_t *src, int len) | |||||
| { | |||||
| while (len--) | |||||
| *dst++ = av_bswap16(*src++); | |||||
| } | |||||
| static int sse4_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) | static int sse4_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) | ||||
| { | { | ||||
| int s, i; | int s, i; | ||||
| @@ -4324,6 +4330,7 @@ av_cold void dsputil_init(DSPContext* c, AVCodecContext *avctx) | |||||
| c->add_hfyu_left_prediction = add_hfyu_left_prediction_c; | c->add_hfyu_left_prediction = add_hfyu_left_prediction_c; | ||||
| c->add_hfyu_left_prediction_bgr32 = add_hfyu_left_prediction_bgr32_c; | c->add_hfyu_left_prediction_bgr32 = add_hfyu_left_prediction_bgr32_c; | ||||
| c->bswap_buf= bswap_buf; | c->bswap_buf= bswap_buf; | ||||
| c->bswap16_buf = bswap16_buf; | |||||
| #if CONFIG_PNG_DECODER | #if CONFIG_PNG_DECODER | ||||
| c->add_png_paeth_prediction= ff_add_png_paeth_prediction; | c->add_png_paeth_prediction= ff_add_png_paeth_prediction; | ||||
| #endif | #endif | ||||
| @@ -369,6 +369,7 @@ typedef struct DSPContext { | |||||
| /* this might write to dst[w] */ | /* this might write to dst[w] */ | ||||
| void (*add_png_paeth_prediction)(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp); | void (*add_png_paeth_prediction)(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp); | ||||
| void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w); | void (*bswap_buf)(uint32_t *dst, const uint32_t *src, int w); | ||||
| void (*bswap16_buf)(uint16_t *dst, const uint16_t *src, int len); | |||||
| void (*h263_v_loop_filter)(uint8_t *src, int stride, int qscale); | void (*h263_v_loop_filter)(uint8_t *src, int stride, int qscale); | ||||
| void (*h263_h_loop_filter)(uint8_t *src, int stride, int qscale); | void (*h263_h_loop_filter)(uint8_t *src, int stride, int qscale); | ||||
| @@ -1078,13 +1078,13 @@ unsigned avcodec_version( void ) | |||||
| const char *avcodec_configuration(void) | const char *avcodec_configuration(void) | ||||
| { | { | ||||
| return FFMPEG_CONFIGURATION; | |||||
| return LIBAV_CONFIGURATION; | |||||
| } | } | ||||
| const char *avcodec_license(void) | const char *avcodec_license(void) | ||||
| { | { | ||||
| #define LICENSE_PREFIX "libavcodec license: " | #define LICENSE_PREFIX "libavcodec license: " | ||||
| return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; | |||||
| return LICENSE_PREFIX LIBAV_LICENSE + sizeof(LICENSE_PREFIX) - 1; | |||||
| } | } | ||||
| void avcodec_init(void) | void avcodec_init(void) | ||||
| @@ -26,24 +26,45 @@ | |||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||
| #if ARCH_X86_32 | #if ARCH_X86_32 | ||||
| #define MULL(ra, rb, shift) \ | |||||
| ({ int rt, dummy; __asm__ (\ | |||||
| "imull %3 \n\t"\ | |||||
| "shrdl %4, %%edx, %%eax \n\t"\ | |||||
| : "=a"(rt), "=d"(dummy)\ | |||||
| : "a" ((int)(ra)), "rm" ((int)(rb)), "i"(shift));\ | |||||
| rt; }) | |||||
| #define MULH(ra, rb) \ | |||||
| ({ int rt, dummy;\ | |||||
| __asm__ ("imull %3\n\t" : "=d"(rt), "=a"(dummy): "a" ((int)(ra)), "rm" ((int)(rb)));\ | |||||
| rt; }) | |||||
| #define MULL MULL | |||||
| static av_always_inline av_const int MULL(int a, int b, unsigned shift) | |||||
| { | |||||
| int rt, dummy; | |||||
| __asm__ ( | |||||
| "imull %3 \n\t" | |||||
| "shrdl %4, %%edx, %%eax \n\t" | |||||
| :"=a"(rt), "=d"(dummy) | |||||
| :"a"(a), "rm"(b), "ci"((uint8_t)shift) | |||||
| ); | |||||
| return rt; | |||||
| } | |||||
| #define MUL64(ra, rb) \ | |||||
| ({ int64_t rt;\ | |||||
| __asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)(ra)), "g" ((int)(rb)));\ | |||||
| rt; }) | |||||
| #endif | |||||
| #define MULH MULH | |||||
| static av_always_inline av_const int MULH(int a, int b) | |||||
| { | |||||
| int rt, dummy; | |||||
| __asm__ ( | |||||
| "imull %3" | |||||
| :"=d"(rt), "=a"(dummy) | |||||
| :"a"(a), "rm"(b) | |||||
| ); | |||||
| return rt; | |||||
| } | |||||
| #define MUL64 MUL64 | |||||
| static av_always_inline av_const int64_t MUL64(int a, int b) | |||||
| { | |||||
| int64_t rt; | |||||
| __asm__ ( | |||||
| "imull %2" | |||||
| :"=A"(rt) | |||||
| :"a"(a), "rm"(b) | |||||
| ); | |||||
| return rt; | |||||
| } | |||||
| #endif /* ARCH_X86_32 */ | |||||
| #if HAVE_CMOV | #if HAVE_CMOV | ||||
| /* median of 3 */ | /* median of 3 */ | ||||
| @@ -25,11 +25,11 @@ unsigned avdevice_version(void) | |||||
| const char * avdevice_configuration(void) | const char * avdevice_configuration(void) | ||||
| { | { | ||||
| return FFMPEG_CONFIGURATION; | |||||
| return LIBAV_CONFIGURATION; | |||||
| } | } | ||||
| const char * avdevice_license(void) | const char * avdevice_license(void) | ||||
| { | { | ||||
| #define LICENSE_PREFIX "libavdevice license: " | #define LICENSE_PREFIX "libavdevice license: " | ||||
| return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; | |||||
| return LICENSE_PREFIX LIBAV_LICENSE + sizeof(LICENSE_PREFIX) - 1; | |||||
| } | } | ||||
| @@ -34,13 +34,13 @@ unsigned avfilter_version(void) { | |||||
| const char *avfilter_configuration(void) | const char *avfilter_configuration(void) | ||||
| { | { | ||||
| return FFMPEG_CONFIGURATION; | |||||
| return LIBAV_CONFIGURATION; | |||||
| } | } | ||||
| const char *avfilter_license(void) | const char *avfilter_license(void) | ||||
| { | { | ||||
| #define LICENSE_PREFIX "libavfilter license: " | #define LICENSE_PREFIX "libavfilter license: " | ||||
| return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; | |||||
| return LICENSE_PREFIX LIBAV_LICENSE + sizeof(LICENSE_PREFIX) - 1; | |||||
| } | } | ||||
| AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask) | AVFilterBufferRef *avfilter_ref_buffer(AVFilterBufferRef *ref, int pmask) | ||||
| @@ -106,7 +106,7 @@ static int fourxm_read_header(AVFormatContext *s, | |||||
| fourxm->fps = 1.0; | fourxm->fps = 1.0; | ||||
| /* skip the first 3 32-bit numbers */ | /* skip the first 3 32-bit numbers */ | ||||
| avio_seek(pb, 12, SEEK_CUR); | |||||
| avio_skip(pb, 12); | |||||
| /* check for LIST-HEAD */ | /* check for LIST-HEAD */ | ||||
| GET_LIST_HEADER(); | GET_LIST_HEADER(); | ||||
| @@ -322,12 +322,12 @@ static int fourxm_read_packet(AVFormatContext *s, | |||||
| fourxm->tracks[track_number].audio_pts += audio_frame_count; | fourxm->tracks[track_number].audio_pts += audio_frame_count; | ||||
| } else { | } else { | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| } | } | ||||
| break; | break; | ||||
| default: | default: | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -131,9 +131,9 @@ OBJS-$(CONFIG_MMF_MUXER) += mmf.o riff.o | |||||
| OBJS-$(CONFIG_MOV_DEMUXER) += mov.o riff.o isom.o | OBJS-$(CONFIG_MOV_DEMUXER) += mov.o riff.o isom.o | ||||
| OBJS-$(CONFIG_MOV_MUXER) += movenc.o riff.o isom.o avc.o \ | OBJS-$(CONFIG_MOV_MUXER) += movenc.o riff.o isom.o avc.o \ | ||||
| movenchint.o rtpenc_chain.o | movenchint.o rtpenc_chain.o | ||||
| OBJS-$(CONFIG_MP2_MUXER) += mp3enc.o | |||||
| OBJS-$(CONFIG_MP2_MUXER) += mp3enc.o rawenc.o | |||||
| OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o | OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o | ||||
| OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o | |||||
| OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o | |||||
| OBJS-$(CONFIG_MPC_DEMUXER) += mpc.o apetag.o | OBJS-$(CONFIG_MPC_DEMUXER) += mpc.o apetag.o | ||||
| OBJS-$(CONFIG_MPC8_DEMUXER) += mpc8.o | OBJS-$(CONFIG_MPC8_DEMUXER) += mpc8.o | ||||
| OBJS-$(CONFIG_MPEG1SYSTEM_MUXER) += mpegenc.o | OBJS-$(CONFIG_MPEG1SYSTEM_MUXER) += mpegenc.o | ||||
| @@ -149,7 +149,7 @@ static int a64_write_packet(struct AVFormatContext *s, AVPacket *pkt) | |||||
| break; | break; | ||||
| } | } | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -132,7 +132,7 @@ static int adts_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| } | } | ||||
| } | } | ||||
| avio_write(pb, pkt->data, pkt->size); | avio_write(pb, pkt->data, pkt->size); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -62,9 +62,9 @@ static int aea_read_header(AVFormatContext *s, | |||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| /* Parse the amount of channels and skip to pos 2048(0x800) */ | /* Parse the amount of channels and skip to pos 2048(0x800) */ | ||||
| avio_seek(s->pb, 264, SEEK_CUR); | |||||
| avio_skip(s->pb, 264); | |||||
| st->codec->channels = avio_r8(s->pb); | st->codec->channels = avio_r8(s->pb); | ||||
| avio_seek(s->pb, 1783, SEEK_CUR); | |||||
| avio_skip(s->pb, 1783); | |||||
| st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | st->codec->codec_type = AVMEDIA_TYPE_AUDIO; | ||||
| @@ -70,7 +70,7 @@ static void get_meta(AVFormatContext *s, const char *key, int size) | |||||
| int res; | int res; | ||||
| if (!str) { | if (!str) { | ||||
| avio_seek(s->pb, size, SEEK_CUR); | |||||
| avio_skip(s->pb, size); | |||||
| return; | return; | ||||
| } | } | ||||
| @@ -152,7 +152,7 @@ static unsigned int get_aiff_header(AVIOContext *pb, AVCodecContext *codec, | |||||
| /* Chunk is over */ | /* Chunk is over */ | ||||
| if (size) | if (size) | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| return num_frames; | return num_frames; | ||||
| } | } | ||||
| @@ -242,7 +242,7 @@ static int aiff_read_header(AVFormatContext *s, | |||||
| av_log(s, AV_LOG_ERROR, "file is not seekable\n"); | av_log(s, AV_LOG_ERROR, "file is not seekable\n"); | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| avio_seek(pb, size - 8, SEEK_CUR); | |||||
| avio_skip(pb, size - 8); | |||||
| break; | break; | ||||
| case MKTAG('w', 'a', 'v', 'e'): | case MKTAG('w', 'a', 'v', 'e'): | ||||
| if ((uint64_t)size > (1<<30)) | if ((uint64_t)size > (1<<30)) | ||||
| @@ -256,7 +256,7 @@ static int aiff_read_header(AVFormatContext *s, | |||||
| default: /* Jump */ | default: /* Jump */ | ||||
| if (size & 1) /* Always even aligned */ | if (size & 1) /* Always even aligned */ | ||||
| size++; | size++; | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| } | } | ||||
| } | } | ||||
| @@ -98,7 +98,7 @@ static int aiff_write_header(AVFormatContext *s) | |||||
| av_set_pts_info(s->streams[0], 64, 1, s->streams[0]->codec->sample_rate); | av_set_pts_info(s->streams[0], 64, 1, s->streams[0]->codec->sample_rate); | ||||
| /* Data is starting here */ | /* Data is starting here */ | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -140,7 +140,7 @@ static int aiff_write_trailer(AVFormatContext *s) | |||||
| /* return to the end */ | /* return to the end */ | ||||
| avio_seek(pb, end_size, SEEK_SET); | avio_seek(pb, end_size, SEEK_SET); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| } | } | ||||
| return 0; | return 0; | ||||
| @@ -50,14 +50,14 @@ static int amr_write_header(AVFormatContext *s) | |||||
| { | { | ||||
| return -1; | return -1; | ||||
| } | } | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| static int amr_write_packet(AVFormatContext *s, AVPacket *pkt) | static int amr_write_packet(AVFormatContext *s, AVPacket *pkt) | ||||
| { | { | ||||
| avio_write(s->pb, pkt->data, pkt->size); | avio_write(s->pb, pkt->data, pkt->size); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| #endif /* CONFIG_AMR_MUXER */ | #endif /* CONFIG_AMR_MUXER */ | ||||
| @@ -83,7 +83,7 @@ static int read_header(AVFormatContext *s, | |||||
| AVStream *st; | AVStream *st; | ||||
| int i, ret; | int i, ret; | ||||
| avio_seek(pb, 4, SEEK_CUR); /* magic number */ | |||||
| avio_skip(pb, 4); /* magic number */ | |||||
| if (avio_rl16(pb) != MAX_PAGES) { | if (avio_rl16(pb) != MAX_PAGES) { | ||||
| av_log_ask_for_sample(s, "max_pages != " AV_STRINGIFY(MAX_PAGES) "\n"); | av_log_ask_for_sample(s, "max_pages != " AV_STRINGIFY(MAX_PAGES) "\n"); | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| @@ -91,7 +91,7 @@ static int read_header(AVFormatContext *s, | |||||
| anm->nb_pages = avio_rl16(pb); | anm->nb_pages = avio_rl16(pb); | ||||
| anm->nb_records = avio_rl32(pb); | anm->nb_records = avio_rl32(pb); | ||||
| avio_seek(pb, 2, SEEK_CUR); /* max records per page */ | |||||
| avio_skip(pb, 2); /* max records per page */ | |||||
| anm->page_table_offset = avio_rl16(pb); | anm->page_table_offset = avio_rl16(pb); | ||||
| if (avio_rl32(pb) != ANIM_TAG) | if (avio_rl32(pb) != ANIM_TAG) | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| @@ -107,13 +107,13 @@ static int read_header(AVFormatContext *s, | |||||
| st->codec->height = avio_rl16(pb); | st->codec->height = avio_rl16(pb); | ||||
| if (avio_r8(pb) != 0) | if (avio_r8(pb) != 0) | ||||
| goto invalid; | goto invalid; | ||||
| avio_seek(pb, 1, SEEK_CUR); /* frame rate multiplier info */ | |||||
| avio_skip(pb, 1); /* frame rate multiplier info */ | |||||
| /* ignore last delta record (used for looping) */ | /* ignore last delta record (used for looping) */ | ||||
| if (avio_r8(pb)) /* has_last_delta */ | if (avio_r8(pb)) /* has_last_delta */ | ||||
| anm->nb_records = FFMAX(anm->nb_records - 1, 0); | anm->nb_records = FFMAX(anm->nb_records - 1, 0); | ||||
| avio_seek(pb, 1, SEEK_CUR); /* last_delta_valid */ | |||||
| avio_skip(pb, 1); /* last_delta_valid */ | |||||
| if (avio_r8(pb) != 0) | if (avio_r8(pb) != 0) | ||||
| goto invalid; | goto invalid; | ||||
| @@ -121,15 +121,15 @@ static int read_header(AVFormatContext *s, | |||||
| if (avio_r8(pb) != 1) | if (avio_r8(pb) != 1) | ||||
| goto invalid; | goto invalid; | ||||
| avio_seek(pb, 1, SEEK_CUR); /* other recs per frame */ | |||||
| avio_skip(pb, 1); /* other recs per frame */ | |||||
| if (avio_r8(pb) != 1) | if (avio_r8(pb) != 1) | ||||
| goto invalid; | goto invalid; | ||||
| avio_seek(pb, 32, SEEK_CUR); /* record_types */ | |||||
| avio_skip(pb, 32); /* record_types */ | |||||
| st->nb_frames = avio_rl32(pb); | st->nb_frames = avio_rl32(pb); | ||||
| av_set_pts_info(st, 64, 1, avio_rl16(pb)); | av_set_pts_info(st, 64, 1, avio_rl16(pb)); | ||||
| avio_seek(pb, 58, SEEK_CUR); | |||||
| avio_skip(pb, 58); | |||||
| /* color cycling and palette data */ | /* color cycling and palette data */ | ||||
| st->codec->extradata_size = 16*8 + 4*256; | st->codec->extradata_size = 16*8 + 4*256; | ||||
| @@ -193,7 +193,7 @@ repeat: | |||||
| /* parse page header */ | /* parse page header */ | ||||
| if (anm->record < 0) { | if (anm->record < 0) { | ||||
| avio_seek(pb, anm->page_table_offset + MAX_PAGES*6 + (anm->page<<16), SEEK_SET); | avio_seek(pb, anm->page_table_offset + MAX_PAGES*6 + (anm->page<<16), SEEK_SET); | ||||
| avio_seek(pb, 8 + 2*p->nb_records, SEEK_CUR); | |||||
| avio_skip(pb, 8 + 2*p->nb_records); | |||||
| anm->record = 0; | anm->record = 0; | ||||
| } | } | ||||
| @@ -187,7 +187,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) | |||||
| /* Skip any unknown bytes at the end of the descriptor. | /* Skip any unknown bytes at the end of the descriptor. | ||||
| This is for future compatibility */ | This is for future compatibility */ | ||||
| if (ape->descriptorlength > 52) | if (ape->descriptorlength > 52) | ||||
| avio_seek(pb, ape->descriptorlength - 52, SEEK_CUR); | |||||
| avio_skip(pb, ape->descriptorlength - 52); | |||||
| /* Read header data */ | /* Read header data */ | ||||
| ape->compressiontype = avio_rl16(pb); | ape->compressiontype = avio_rl16(pb); | ||||
| @@ -212,7 +212,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) | |||||
| ape->finalframeblocks = avio_rl32(pb); | ape->finalframeblocks = avio_rl32(pb); | ||||
| if (ape->formatflags & MAC_FORMAT_FLAG_HAS_PEAK_LEVEL) { | if (ape->formatflags & MAC_FORMAT_FLAG_HAS_PEAK_LEVEL) { | ||||
| avio_seek(pb, 4, SEEK_CUR); /* Skip the peak level */ | |||||
| avio_skip(pb, 4); /* Skip the peak level */ | |||||
| ape->headerlength += 4; | ape->headerlength += 4; | ||||
| } | } | ||||
| @@ -239,7 +239,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) | |||||
| /* Skip any stored wav header */ | /* Skip any stored wav header */ | ||||
| if (!(ape->formatflags & MAC_FORMAT_FLAG_CREATE_WAV_HEADER)) | if (!(ape->formatflags & MAC_FORMAT_FLAG_CREATE_WAV_HEADER)) | ||||
| avio_seek(pb, ape->wavheaderlength, SEEK_CUR); | |||||
| avio_skip(pb, ape->wavheaderlength); | |||||
| } | } | ||||
| if(!ape->totalframes){ | if(!ape->totalframes){ | ||||
| @@ -86,57 +86,6 @@ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen) | |||||
| return len; | return len; | ||||
| } | } | ||||
| static void make_absolute_url(char *buf, int size, const char *base, | |||||
| const char *rel) | |||||
| { | |||||
| char *sep; | |||||
| /* Absolute path, relative to the current server */ | |||||
| if (base && strstr(base, "://") && rel[0] == '/') { | |||||
| if (base != buf) | |||||
| av_strlcpy(buf, base, size); | |||||
| sep = strstr(buf, "://"); | |||||
| if (sep) { | |||||
| sep += 3; | |||||
| sep = strchr(sep, '/'); | |||||
| if (sep) | |||||
| *sep = '\0'; | |||||
| } | |||||
| av_strlcat(buf, rel, size); | |||||
| return; | |||||
| } | |||||
| /* If rel actually is an absolute url, just copy it */ | |||||
| if (!base || strstr(rel, "://") || rel[0] == '/') { | |||||
| av_strlcpy(buf, rel, size); | |||||
| return; | |||||
| } | |||||
| if (base != buf) | |||||
| av_strlcpy(buf, base, size); | |||||
| /* Remove the file name from the base url */ | |||||
| sep = strrchr(buf, '/'); | |||||
| if (sep) | |||||
| sep[1] = '\0'; | |||||
| else | |||||
| buf[0] = '\0'; | |||||
| while (av_strstart(rel, "../", NULL) && sep) { | |||||
| /* Remove the path delimiter at the end */ | |||||
| sep[0] = '\0'; | |||||
| sep = strrchr(buf, '/'); | |||||
| /* If the next directory name to pop off is "..", break here */ | |||||
| if (!strcmp(sep ? &sep[1] : buf, "..")) { | |||||
| /* Readd the slash we just removed */ | |||||
| av_strlcat(buf, "/", size); | |||||
| break; | |||||
| } | |||||
| /* Cut off the directory name */ | |||||
| if (sep) | |||||
| sep[1] = '\0'; | |||||
| else | |||||
| buf[0] = '\0'; | |||||
| rel += 3; | |||||
| } | |||||
| av_strlcat(buf, rel, size); | |||||
| } | |||||
| static void free_segment_list(struct variant *var) | static void free_segment_list(struct variant *var) | ||||
| { | { | ||||
| int i; | int i; | ||||
| @@ -183,7 +132,7 @@ static struct variant *new_variant(AppleHTTPContext *c, int bandwidth, | |||||
| return NULL; | return NULL; | ||||
| reset_packet(&var->pkt); | reset_packet(&var->pkt); | ||||
| var->bandwidth = bandwidth; | var->bandwidth = bandwidth; | ||||
| make_absolute_url(var->url, sizeof(var->url), base, url); | |||||
| ff_make_absolute_url(var->url, sizeof(var->url), base, url); | |||||
| dynarray_add(&c->variants, &c->n_variants, var); | dynarray_add(&c->variants, &c->n_variants, var); | ||||
| return var; | return var; | ||||
| } | } | ||||
| @@ -274,7 +223,7 @@ static int parse_playlist(AppleHTTPContext *c, const char *url, | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| seg->duration = duration; | seg->duration = duration; | ||||
| make_absolute_url(seg->url, sizeof(seg->url), url, line); | |||||
| ff_make_absolute_url(seg->url, sizeof(seg->url), url, line); | |||||
| dynarray_add(&var->segments, &var->n_segments, seg); | dynarray_add(&var->segments, &var->n_segments, seg); | ||||
| is_segment = 0; | is_segment = 0; | ||||
| } | } | ||||
| @@ -519,7 +468,7 @@ reload: | |||||
| c->max_start_seq - c->cur_seq_no); | c->max_start_seq - c->cur_seq_no); | ||||
| c->cur_seq_no = c->max_start_seq; | c->cur_seq_no = c->max_start_seq; | ||||
| } | } | ||||
| /* If more segments exit, open the next one */ | |||||
| /* If more segments exist, open the next one */ | |||||
| if (c->cur_seq_no < c->min_end_seq) | if (c->cur_seq_no < c->min_end_seq) | ||||
| goto start; | goto start; | ||||
| /* We've reached the end of the playlists - return eof if this is a | /* We've reached the end of the playlists - return eof if this is a | ||||
| @@ -75,57 +75,6 @@ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen) | |||||
| return len; | return len; | ||||
| } | } | ||||
| static void make_absolute_url(char *buf, int size, const char *base, | |||||
| const char *rel) | |||||
| { | |||||
| char *sep; | |||||
| /* Absolute path, relative to the current server */ | |||||
| if (base && strstr(base, "://") && rel[0] == '/') { | |||||
| if (base != buf) | |||||
| av_strlcpy(buf, base, size); | |||||
| sep = strstr(buf, "://"); | |||||
| if (sep) { | |||||
| sep += 3; | |||||
| sep = strchr(sep, '/'); | |||||
| if (sep) | |||||
| *sep = '\0'; | |||||
| } | |||||
| av_strlcat(buf, rel, size); | |||||
| return; | |||||
| } | |||||
| /* If rel actually is an absolute url, just copy it */ | |||||
| if (!base || strstr(rel, "://") || rel[0] == '/') { | |||||
| av_strlcpy(buf, rel, size); | |||||
| return; | |||||
| } | |||||
| if (base != buf) | |||||
| av_strlcpy(buf, base, size); | |||||
| /* Remove the file name from the base url */ | |||||
| sep = strrchr(buf, '/'); | |||||
| if (sep) | |||||
| sep[1] = '\0'; | |||||
| else | |||||
| buf[0] = '\0'; | |||||
| while (av_strstart(rel, "../", NULL) && sep) { | |||||
| /* Remove the path delimiter at the end */ | |||||
| sep[0] = '\0'; | |||||
| sep = strrchr(buf, '/'); | |||||
| /* If the next directory name to pop off is "..", break here */ | |||||
| if (!strcmp(sep ? &sep[1] : buf, "..")) { | |||||
| /* Readd the slash we just removed */ | |||||
| av_strlcat(buf, "/", size); | |||||
| break; | |||||
| } | |||||
| /* Cut off the directory name */ | |||||
| if (sep) | |||||
| sep[1] = '\0'; | |||||
| else | |||||
| buf[0] = '\0'; | |||||
| rel += 3; | |||||
| } | |||||
| av_strlcat(buf, rel, size); | |||||
| } | |||||
| static void free_segment_list(AppleHTTPContext *s) | static void free_segment_list(AppleHTTPContext *s) | ||||
| { | { | ||||
| int i; | int i; | ||||
| @@ -201,7 +150,7 @@ static int parse_playlist(URLContext *h, const char *url) | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| seg->duration = duration; | seg->duration = duration; | ||||
| make_absolute_url(seg->url, sizeof(seg->url), url, line); | |||||
| ff_make_absolute_url(seg->url, sizeof(seg->url), url, line); | |||||
| dynarray_add(&s->segments, &s->n_segments, seg); | dynarray_add(&s->segments, &s->n_segments, seg); | ||||
| is_segment = 0; | is_segment = 0; | ||||
| } else if (is_variant) { | } else if (is_variant) { | ||||
| @@ -211,7 +160,7 @@ static int parse_playlist(URLContext *h, const char *url) | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| var->bandwidth = bandwidth; | var->bandwidth = bandwidth; | ||||
| make_absolute_url(var->url, sizeof(var->url), url, line); | |||||
| ff_make_absolute_url(var->url, sizeof(var->url), url, line); | |||||
| dynarray_add(&s->variants, &s->n_variants, var); | dynarray_add(&s->variants, &s->n_variants, var); | ||||
| is_variant = 0; | is_variant = 0; | ||||
| } | } | ||||
| @@ -349,7 +349,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) | |||||
| avio_rl16(pb); /* panes */ | avio_rl16(pb); /* panes */ | ||||
| st->codec->bits_per_coded_sample = avio_rl16(pb); /* depth */ | st->codec->bits_per_coded_sample = avio_rl16(pb); /* depth */ | ||||
| tag1 = avio_rl32(pb); | tag1 = avio_rl32(pb); | ||||
| avio_seek(pb, 20, SEEK_CUR); | |||||
| avio_skip(pb, 20); | |||||
| // av_log(s, AV_LOG_DEBUG, "size:%d tsize:%d sizeX:%d\n", size, total_size, sizeX); | // av_log(s, AV_LOG_DEBUG, "size:%d tsize:%d sizeX:%d\n", size, total_size, sizeX); | ||||
| if (sizeX > 40) { | if (sizeX > 40) { | ||||
| st->codec->extradata_size = sizeX - 40; | st->codec->extradata_size = sizeX - 40; | ||||
| @@ -387,7 +387,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) | |||||
| st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; | st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; | ||||
| } | } | ||||
| pos2 = avio_tell(pb); | pos2 = avio_tell(pb); | ||||
| avio_seek(pb, size - (pos2 - pos1 + 24), SEEK_CUR); | |||||
| avio_skip(pb, size - (pos2 - pos1 + 24)); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -427,14 +427,14 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, int64_t size) | |||||
| for (i=0; i<stream_ct; i++){ | for (i=0; i<stream_ct; i++){ | ||||
| avio_rl16(pb); | avio_rl16(pb); | ||||
| ext_len = avio_rl16(pb); | ext_len = avio_rl16(pb); | ||||
| avio_seek(pb, ext_len, SEEK_CUR); | |||||
| avio_skip(pb, ext_len); | |||||
| } | } | ||||
| for (i=0; i<payload_ext_ct; i++){ | for (i=0; i<payload_ext_ct; i++){ | ||||
| ff_get_guid(pb, &g); | ff_get_guid(pb, &g); | ||||
| ext_d=avio_rl16(pb); | ext_d=avio_rl16(pb); | ||||
| ext_len=avio_rl32(pb); | ext_len=avio_rl32(pb); | ||||
| avio_seek(pb, ext_len, SEEK_CUR); | |||||
| avio_skip(pb, ext_len); | |||||
| } | } | ||||
| return 0; | return 0; | ||||
| @@ -454,7 +454,7 @@ static int asf_read_content_desc(AVFormatContext *s, int64_t size) | |||||
| get_tag(s, "author" , 0, len2); | get_tag(s, "author" , 0, len2); | ||||
| get_tag(s, "copyright", 0, len3); | get_tag(s, "copyright", 0, len3); | ||||
| get_tag(s, "comment" , 0, len4); | get_tag(s, "comment" , 0, len4); | ||||
| avio_seek(pb, len5, SEEK_CUR); | |||||
| avio_skip(pb, len5); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -474,7 +474,7 @@ static int asf_read_ext_content_desc(AVFormatContext *s, int64_t size) | |||||
| if (name_len%2) // must be even, broken lavf versions wrote len-1 | if (name_len%2) // must be even, broken lavf versions wrote len-1 | ||||
| name_len += 1; | name_len += 1; | ||||
| if ((ret = avio_get_str16le(pb, name_len, name, sizeof(name))) < name_len) | if ((ret = avio_get_str16le(pb, name_len, name, sizeof(name))) < name_len) | ||||
| avio_seek(pb, name_len - ret, SEEK_CUR); | |||||
| avio_skip(pb, name_len - ret); | |||||
| value_type = avio_rl16(pb); | value_type = avio_rl16(pb); | ||||
| value_len = avio_rl16(pb); | value_len = avio_rl16(pb); | ||||
| if (!value_type && value_len%2) | if (!value_type && value_len%2) | ||||
| @@ -504,7 +504,7 @@ static int asf_read_language_list(AVFormatContext *s, int64_t size) | |||||
| char lang[6]; | char lang[6]; | ||||
| unsigned int lang_len = avio_r8(pb); | unsigned int lang_len = avio_r8(pb); | ||||
| if ((ret = avio_get_str16le(pb, lang_len, lang, sizeof(lang))) < lang_len) | if ((ret = avio_get_str16le(pb, lang_len, lang, sizeof(lang))) < lang_len) | ||||
| avio_seek(pb, lang_len - ret, SEEK_CUR); | |||||
| avio_skip(pb, lang_len - ret); | |||||
| if (j < 128) | if (j < 128) | ||||
| av_strlcpy(asf->stream_languages[j], lang, sizeof(*asf->stream_languages)); | av_strlcpy(asf->stream_languages[j], lang, sizeof(*asf->stream_languages)); | ||||
| } | } | ||||
| @@ -530,10 +530,10 @@ static int asf_read_metadata(AVFormatContext *s, int64_t size) | |||||
| value_len= avio_rl32(pb); | value_len= avio_rl32(pb); | ||||
| if ((ret = avio_get_str16le(pb, name_len, name, sizeof(name))) < name_len) | if ((ret = avio_get_str16le(pb, name_len, name, sizeof(name))) < name_len) | ||||
| avio_seek(pb, name_len - ret, SEEK_CUR); | |||||
| avio_skip(pb, name_len - ret); | |||||
| //av_log(s, AV_LOG_ERROR, "%d %d %d %d %d <%s>\n", i, stream_num, name_len, value_type, value_len, name); | //av_log(s, AV_LOG_ERROR, "%d %d %d %d %d <%s>\n", i, stream_num, name_len, value_type, value_len, name); | ||||
| value_num= avio_rl16(pb);//we should use get_value() here but it does not work 2 is le16 here but le32 elsewhere | value_num= avio_rl16(pb);//we should use get_value() here but it does not work 2 is le16 here but le32 elsewhere | ||||
| avio_seek(pb, value_len - 2, SEEK_CUR); | |||||
| avio_skip(pb, value_len - 2); | |||||
| if(stream_num<128){ | if(stream_num<128){ | ||||
| if (!strcmp(name, "AspectRatioX")) asf->dar[stream_num].num= value_num; | if (!strcmp(name, "AspectRatioX")) asf->dar[stream_num].num= value_num; | ||||
| @@ -570,7 +570,7 @@ static int asf_read_marker(AVFormatContext *s, int64_t size) | |||||
| avio_rl32(pb); // flags | avio_rl32(pb); // flags | ||||
| name_len = avio_rl32(pb); // name length | name_len = avio_rl32(pb); // name length | ||||
| if ((ret = avio_get_str16le(pb, name_len * 2, name, sizeof(name))) < name_len) | if ((ret = avio_get_str16le(pb, name_len * 2, name, sizeof(name))) < name_len) | ||||
| avio_seek(pb, name_len - ret, SEEK_CUR); | |||||
| avio_skip(pb, name_len - ret); | |||||
| ff_new_chapter(s, i, (AVRational){1, 10000000}, pres_time, AV_NOPTS_VALUE, name ); | ff_new_chapter(s, i, (AVRational){1, 10000000}, pres_time, AV_NOPTS_VALUE, name ); | ||||
| } | } | ||||
| @@ -825,16 +825,16 @@ static int asf_read_frame_header(AVFormatContext *s, AVIOContext *pb){ | |||||
| // for(i=0; i<asf->packet_replic_size-8; i++) | // for(i=0; i<asf->packet_replic_size-8; i++) | ||||
| // av_log(s, AV_LOG_DEBUG, "%02X ",avio_r8(pb)); | // av_log(s, AV_LOG_DEBUG, "%02X ",avio_r8(pb)); | ||||
| // av_log(s, AV_LOG_DEBUG, "\n"); | // av_log(s, AV_LOG_DEBUG, "\n"); | ||||
| avio_seek(pb, 10, SEEK_CUR); | |||||
| avio_skip(pb, 10); | |||||
| ts0= avio_rl64(pb); | ts0= avio_rl64(pb); | ||||
| ts1= avio_rl64(pb); | ts1= avio_rl64(pb); | ||||
| avio_seek(pb, 12, SEEK_CUR); | |||||
| avio_skip(pb, 12); | |||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| avio_seek(pb, asf->packet_replic_size - 8 - 38 - 4, SEEK_CUR); | |||||
| avio_skip(pb, asf->packet_replic_size - 8 - 38 - 4); | |||||
| if(ts0!= -1) asf->packet_frag_timestamp= ts0/10000; | if(ts0!= -1) asf->packet_frag_timestamp= ts0/10000; | ||||
| else asf->packet_frag_timestamp= AV_NOPTS_VALUE; | else asf->packet_frag_timestamp= AV_NOPTS_VALUE; | ||||
| }else | }else | ||||
| avio_seek(pb, asf->packet_replic_size - 8, SEEK_CUR); | |||||
| avio_skip(pb, asf->packet_replic_size - 8); | |||||
| rsize += asf->packet_replic_size; // FIXME - check validity | rsize += asf->packet_replic_size; // FIXME - check validity | ||||
| } else if (asf->packet_replic_size==1){ | } else if (asf->packet_replic_size==1){ | ||||
| // multipacket - frag_offset is beginning timestamp | // multipacket - frag_offset is beginning timestamp | ||||
| @@ -894,7 +894,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk | |||||
| //printf("PacketLeftSize:%d Pad:%d Pos:%"PRId64"\n", asf->packet_size_left, asf->packet_padsize, avio_tell(pb)); | //printf("PacketLeftSize:%d Pad:%d Pos:%"PRId64"\n", asf->packet_size_left, asf->packet_padsize, avio_tell(pb)); | ||||
| assert(ret>=0); | assert(ret>=0); | ||||
| /* fail safe */ | /* fail safe */ | ||||
| avio_seek(pb, ret, SEEK_CUR); | |||||
| avio_skip(pb, ret); | |||||
| asf->packet_pos= avio_tell(pb); | asf->packet_pos= avio_tell(pb); | ||||
| if (asf->data_object_size != (uint64_t)-1 && | if (asf->data_object_size != (uint64_t)-1 && | ||||
| @@ -913,7 +913,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk | |||||
| ) { | ) { | ||||
| asf->packet_time_start = 0; | asf->packet_time_start = 0; | ||||
| /* unhandled packet (should not happen) */ | /* unhandled packet (should not happen) */ | ||||
| avio_seek(pb, asf->packet_frag_size, SEEK_CUR); | |||||
| avio_skip(pb, asf->packet_frag_size); | |||||
| asf->packet_size_left -= asf->packet_frag_size; | asf->packet_size_left -= asf->packet_frag_size; | ||||
| if(asf->stream_index < 0) | if(asf->stream_index < 0) | ||||
| av_log(s, AV_LOG_ERROR, "ff asf skip %d (unknown stream)\n", asf->packet_frag_size); | av_log(s, AV_LOG_ERROR, "ff asf skip %d (unknown stream)\n", asf->packet_frag_size); | ||||
| @@ -933,7 +933,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk | |||||
| if (asf->packet_multi_size < asf->packet_obj_size) | if (asf->packet_multi_size < asf->packet_obj_size) | ||||
| { | { | ||||
| asf->packet_time_start = 0; | asf->packet_time_start = 0; | ||||
| avio_seek(pb, asf->packet_multi_size, SEEK_CUR); | |||||
| avio_skip(pb, asf->packet_multi_size); | |||||
| asf->packet_size_left -= asf->packet_multi_size; | asf->packet_size_left -= asf->packet_multi_size; | ||||
| continue; | continue; | ||||
| } | } | ||||
| @@ -1198,7 +1198,7 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index) | |||||
| avio_seek(s->pb, current_pos, SEEK_SET); | avio_seek(s->pb, current_pos, SEEK_SET); | ||||
| return; | return; | ||||
| } | } | ||||
| avio_seek(s->pb, gsize-24, SEEK_CUR); | |||||
| avio_skip(s->pb, gsize-24); | |||||
| ff_get_guid(s->pb, &g); | ff_get_guid(s->pb, &g); | ||||
| } | } | ||||
| @@ -574,7 +574,7 @@ static int asf_write_header(AVFormatContext *s) | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| asf->packet_nb_payloads = 0; | asf->packet_nb_payloads = 0; | ||||
| asf->packet_timestamp_start = -1; | asf->packet_timestamp_start = -1; | ||||
| @@ -672,7 +672,7 @@ static void flush_packet(AVFormatContext *s) | |||||
| avio_write(s->pb, asf->packet_buf, s->packet_size - packet_hdr_size); | avio_write(s->pb, asf->packet_buf, s->packet_size - packet_hdr_size); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| asf->nb_packets++; | asf->nb_packets++; | ||||
| asf->packet_nb_payloads = 0; | asf->packet_nb_payloads = 0; | ||||
| asf->packet_timestamp_start = -1; | asf->packet_timestamp_start = -1; | ||||
| @@ -864,7 +864,7 @@ static int asf_write_trailer(AVFormatContext *s) | |||||
| if ((!asf->is_streamed) && (asf->nb_index_count != 0)) { | if ((!asf->is_streamed) && (asf->nb_index_count != 0)) { | ||||
| asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->nb_index_count); | asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->nb_index_count); | ||||
| } | } | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| if (asf->is_streamed || url_is_streamed(s->pb)) { | if (asf->is_streamed || url_is_streamed(s->pb)) { | ||||
| put_chunk(s, 0x4524, 0, 0); /* end of stream */ | put_chunk(s, 0x4524, 0, 0); /* end of stream */ | ||||
| @@ -875,7 +875,7 @@ static int asf_write_trailer(AVFormatContext *s) | |||||
| asf_write_header1(s, file_size, data_size - asf->data_offset); | asf_write_header1(s, file_size, data_size - asf->data_offset); | ||||
| } | } | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| av_free(asf->index_ptr); | av_free(asf->index_ptr); | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -50,7 +50,7 @@ static int write_header(AVFormatContext *s) | |||||
| last=p; | last=p; | ||||
| } | } | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -59,7 +59,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| { | { | ||||
| avio_write(s->pb, pkt->data, pkt->size); | avio_write(s->pb, pkt->data, pkt->size); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -72,7 +72,7 @@ static int write_trailer(AVFormatContext *s) | |||||
| avio_write(s->pb, avctx->extradata + ass->extra_index, | avio_write(s->pb, avctx->extradata + ass->extra_index, | ||||
| avctx->extradata_size - ass->extra_index); | avctx->extradata_size - ass->extra_index); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -74,7 +74,7 @@ static int au_write_header(AVFormatContext *s) | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -99,7 +99,7 @@ static int au_write_trailer(AVFormatContext *s) | |||||
| avio_wb32(pb, (uint32_t)(file_size - 24)); | avio_wb32(pb, (uint32_t)(file_size - 24)); | ||||
| avio_seek(pb, file_size, SEEK_SET); | avio_seek(pb, file_size, SEEK_SET); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| } | } | ||||
| return 0; | return 0; | ||||
| @@ -147,7 +147,7 @@ static int au_read_header(AVFormatContext *s, | |||||
| if (size >= 24) { | if (size >= 24) { | ||||
| /* skip unused data */ | /* skip unused data */ | ||||
| avio_seek(pb, size - 24, SEEK_CUR); | |||||
| avio_skip(pb, size - 24); | |||||
| } | } | ||||
| /* now we are ready: build format streams */ | /* now we are ready: build format streams */ | ||||
| @@ -321,12 +321,12 @@ static void avi_read_nikon(AVFormatContext *s, uint64_t end) | |||||
| } | } | ||||
| if (name) | if (name) | ||||
| av_metadata_set2(&s->metadata, name, buffer, 0); | av_metadata_set2(&s->metadata, name, buffer, 0); | ||||
| avio_seek(s->pb, size, SEEK_CUR); | |||||
| avio_skip(s->pb, size); | |||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| default: | default: | ||||
| avio_seek(s->pb, size, SEEK_CUR); | |||||
| avio_skip(s->pb, size); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -392,13 +392,13 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| unsigned char date[64] = {0}; | unsigned char date[64] = {0}; | ||||
| size += (size & 1); | size += (size & 1); | ||||
| size -= avio_read(pb, date, FFMIN(size, sizeof(date)-1)); | size -= avio_read(pb, date, FFMIN(size, sizeof(date)-1)); | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| avi_metadata_creation_time(&s->metadata, date); | avi_metadata_creation_time(&s->metadata, date); | ||||
| break; | break; | ||||
| } | } | ||||
| case MKTAG('d', 'm', 'l', 'h'): | case MKTAG('d', 'm', 'l', 'h'): | ||||
| avi->is_odml = 1; | avi->is_odml = 1; | ||||
| avio_seek(pb, size + (size & 1), SEEK_CUR); | |||||
| avio_skip(pb, size + (size & 1)); | |||||
| break; | break; | ||||
| case MKTAG('a', 'm', 'v', 'h'): | case MKTAG('a', 'm', 'v', 'h'): | ||||
| amv_file_format=1; | amv_file_format=1; | ||||
| @@ -410,13 +410,13 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| avi->non_interleaved |= avio_rl32(pb) & AVIF_MUSTUSEINDEX; | avi->non_interleaved |= avio_rl32(pb) & AVIF_MUSTUSEINDEX; | ||||
| avio_seek(pb, 2 * 4, SEEK_CUR); | |||||
| avio_skip(pb, 2 * 4); | |||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| avih_width=avio_rl32(pb); | avih_width=avio_rl32(pb); | ||||
| avih_height=avio_rl32(pb); | avih_height=avio_rl32(pb); | ||||
| avio_seek(pb, size - 10 * 4, SEEK_CUR); | |||||
| avio_skip(pb, size - 10 * 4); | |||||
| break; | break; | ||||
| case MKTAG('s', 't', 'r', 'h'): | case MKTAG('s', 't', 'r', 'h'): | ||||
| /* stream header */ | /* stream header */ | ||||
| @@ -425,7 +425,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| handler = avio_rl32(pb); /* codec tag */ | handler = avio_rl32(pb); /* codec tag */ | ||||
| if(tag1 == MKTAG('p', 'a', 'd', 's')){ | if(tag1 == MKTAG('p', 'a', 'd', 's')){ | ||||
| avio_seek(pb, size - 8, SEEK_CUR); | |||||
| avio_skip(pb, size - 8); | |||||
| break; | break; | ||||
| }else{ | }else{ | ||||
| stream_index++; | stream_index++; | ||||
| @@ -469,10 +469,10 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| s->streams[0]->priv_data = ast; | s->streams[0]->priv_data = ast; | ||||
| avio_seek(pb, 3 * 4, SEEK_CUR); | |||||
| avio_skip(pb, 3 * 4); | |||||
| ast->scale = avio_rl32(pb); | ast->scale = avio_rl32(pb); | ||||
| ast->rate = avio_rl32(pb); | ast->rate = avio_rl32(pb); | ||||
| avio_seek(pb, 4, SEEK_CUR); /* start time */ | |||||
| avio_skip(pb, 4); /* start time */ | |||||
| dv_dur = avio_rl32(pb); | dv_dur = avio_rl32(pb); | ||||
| if (ast->scale > 0 && ast->rate > 0 && dv_dur > 0) { | if (ast->scale > 0 && ast->rate > 0 && dv_dur > 0) { | ||||
| @@ -485,7 +485,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| */ | */ | ||||
| stream_index = s->nb_streams - 1; | stream_index = s->nb_streams - 1; | ||||
| avio_seek(pb, size - 9*4, SEEK_CUR); | |||||
| avio_skip(pb, size - 9*4); | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -542,12 +542,12 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| if(ast->sample_size == 0) | if(ast->sample_size == 0) | ||||
| st->duration = st->nb_frames; | st->duration = st->nb_frames; | ||||
| ast->frame_offset= ast->cum_len; | ast->frame_offset= ast->cum_len; | ||||
| avio_seek(pb, size - 12 * 4, SEEK_CUR); | |||||
| avio_skip(pb, size - 12 * 4); | |||||
| break; | break; | ||||
| case MKTAG('s', 't', 'r', 'f'): | case MKTAG('s', 't', 'r', 'f'): | ||||
| /* stream header */ | /* stream header */ | ||||
| if (stream_index >= (unsigned)s->nb_streams || avi->dv_demux) { | if (stream_index >= (unsigned)s->nb_streams || avi->dv_demux) { | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| } else { | } else { | ||||
| uint64_t cur_pos = avio_tell(pb); | uint64_t cur_pos = avio_tell(pb); | ||||
| if (cur_pos < list_end) | if (cur_pos < list_end) | ||||
| @@ -560,7 +560,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| st->codec->height=avih_height; | st->codec->height=avih_height; | ||||
| st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | ||||
| st->codec->codec_id = CODEC_ID_AMV; | st->codec->codec_id = CODEC_ID_AMV; | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| break; | break; | ||||
| } | } | ||||
| tag1 = ff_get_bmp_header(pb, st); | tag1 = ff_get_bmp_header(pb, st); | ||||
| @@ -620,7 +620,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| } | } | ||||
| st->codec->height= FFABS(st->codec->height); | st->codec->height= FFABS(st->codec->height); | ||||
| // avio_seek(pb, size - 5 * 4, SEEK_CUR); | |||||
| // avio_skip(pb, size - 5 * 4); | |||||
| break; | break; | ||||
| case AVMEDIA_TYPE_AUDIO: | case AVMEDIA_TYPE_AUDIO: | ||||
| ff_get_wav_header(pb, st->codec, size); | ff_get_wav_header(pb, st->codec, size); | ||||
| @@ -630,7 +630,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| ast->sample_size= st->codec->block_align; | ast->sample_size= st->codec->block_align; | ||||
| } | } | ||||
| if (size&1) /* 2-aligned (fix for Stargate SG-1 - 3x18 - Shades of Grey.avi) */ | if (size&1) /* 2-aligned (fix for Stargate SG-1 - 3x18 - Shades of Grey.avi) */ | ||||
| avio_seek(pb, 1, SEEK_CUR); | |||||
| avio_skip(pb, 1); | |||||
| /* Force parsing as several audio frames can be in | /* Force parsing as several audio frames can be in | ||||
| * one packet and timestamps refer to packet start. */ | * one packet and timestamps refer to packet start. */ | ||||
| st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; | st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; | ||||
| @@ -658,7 +658,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| st->codec->codec_type = AVMEDIA_TYPE_DATA; | st->codec->codec_type = AVMEDIA_TYPE_DATA; | ||||
| st->codec->codec_id= CODEC_ID_NONE; | st->codec->codec_id= CODEC_ID_NONE; | ||||
| st->codec->codec_tag= 0; | st->codec->codec_tag= 0; | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -693,7 +693,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| } | } | ||||
| size -= 9*4; | size -= 9*4; | ||||
| } | } | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| break; | break; | ||||
| case MKTAG('s', 't', 'r', 'n'): | case MKTAG('s', 't', 'r', 'n'): | ||||
| if(s->nb_streams){ | if(s->nb_streams){ | ||||
| @@ -710,7 +710,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| } | } | ||||
| /* skip tag */ | /* skip tag */ | ||||
| size += (size & 1); | size += (size & 1); | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -762,7 +762,7 @@ static int read_gab2_sub(AVStream *st, AVPacket *pkt) { | |||||
| goto error; | goto error; | ||||
| ret = avio_get_str16le(pb, desc_len, desc, sizeof(desc)); | ret = avio_get_str16le(pb, desc_len, desc, sizeof(desc)); | ||||
| avio_seek(pb, desc_len - ret, SEEK_CUR); | |||||
| avio_skip(pb, desc_len - ret); | |||||
| if (*desc) | if (*desc) | ||||
| av_metadata_set2(&st->metadata, "title", desc, 0); | av_metadata_set2(&st->metadata, "title", desc, 0); | ||||
| @@ -1008,14 +1008,14 @@ resync: | |||||
| //parse JUNK | //parse JUNK | ||||
| ||(d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K') | ||(d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K') | ||||
| ||(d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1')){ | ||(d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1')){ | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| //av_log(s, AV_LOG_DEBUG, "SKIP\n"); | //av_log(s, AV_LOG_DEBUG, "SKIP\n"); | ||||
| goto resync; | goto resync; | ||||
| } | } | ||||
| //parse stray LIST | //parse stray LIST | ||||
| if(d[0] == 'L' && d[1] == 'I' && d[2] == 'S' && d[3] == 'T'){ | if(d[0] == 'L' && d[1] == 'I' && d[2] == 'S' && d[3] == 'T'){ | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| goto resync; | goto resync; | ||||
| } | } | ||||
| @@ -1026,7 +1026,7 @@ resync: | |||||
| //detect ##ix chunk and skip | //detect ##ix chunk and skip | ||||
| if(d[2] == 'i' && d[3] == 'x' && n < s->nb_streams){ | if(d[2] == 'i' && d[3] == 'x' && n < s->nb_streams){ | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| goto resync; | goto resync; | ||||
| } | } | ||||
| @@ -1060,7 +1060,7 @@ resync: | |||||
| /*|| (st->discard >= AVDISCARD_NONKEY && !(pkt->flags & AV_PKT_FLAG_KEY))*/ //FIXME needs a little reordering | /*|| (st->discard >= AVDISCARD_NONKEY && !(pkt->flags & AV_PKT_FLAG_KEY))*/ //FIXME needs a little reordering | ||||
| || st->discard >= AVDISCARD_ALL){ | || st->discard >= AVDISCARD_ALL){ | ||||
| ast->frame_offset += get_duration(ast, size); | ast->frame_offset += get_duration(ast, size); | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| goto resync; | goto resync; | ||||
| } | } | ||||
| @@ -1225,7 +1225,7 @@ static int avi_load_index(AVFormatContext *s) | |||||
| default: | default: | ||||
| skip: | skip: | ||||
| size += (size & 1); | size += (size & 1); | ||||
| if (avio_seek(pb, size, SEEK_CUR) < 0) | |||||
| if (avio_skip(pb, size) < 0) | |||||
| goto the_end; // something is wrong here | goto the_end; // something is wrong here | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -393,7 +393,7 @@ static int avi_write_header(AVFormatContext *s) | |||||
| avi->movi_list = ff_start_tag(pb, "LIST"); | avi->movi_list = ff_start_tag(pb, "LIST"); | ||||
| ffio_wfourcc(pb, "movi"); | ffio_wfourcc(pb, "movi"); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -438,15 +438,15 @@ static int avi_write_ix(AVFormatContext *s) | |||||
| avio_wl32(pb, ((uint32_t)ie->len & ~0x80000000) | | avio_wl32(pb, ((uint32_t)ie->len & ~0x80000000) | | ||||
| (ie->flags & 0x10 ? 0 : 0x80000000)); | (ie->flags & 0x10 ? 0 : 0x80000000)); | ||||
| } | } | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| pos = avio_tell(pb); | pos = avio_tell(pb); | ||||
| /* Updating one entry in the AVI OpenDML master index */ | /* Updating one entry in the AVI OpenDML master index */ | ||||
| avio_seek(pb, avist->indexes.indx_start - 8, SEEK_SET); | avio_seek(pb, avist->indexes.indx_start - 8, SEEK_SET); | ||||
| ffio_wfourcc(pb, "indx"); /* enabling this entry */ | ffio_wfourcc(pb, "indx"); /* enabling this entry */ | ||||
| avio_seek(pb, 8, SEEK_CUR); | |||||
| avio_skip(pb, 8); | |||||
| avio_wl32(pb, avi->riff_id); /* nEntriesInUse */ | avio_wl32(pb, avi->riff_id); /* nEntriesInUse */ | ||||
| avio_seek(pb, 16*avi->riff_id, SEEK_CUR); | |||||
| avio_skip(pb, 16*avi->riff_id); | |||||
| avio_wl64(pb, ix); /* qwOffset */ | avio_wl64(pb, ix); /* qwOffset */ | ||||
| avio_wl32(pb, pos - ix); /* dwSize */ | avio_wl32(pb, pos - ix); /* dwSize */ | ||||
| avio_wl32(pb, avist->indexes.entry); /* dwDuration */ | avio_wl32(pb, avist->indexes.entry); /* dwDuration */ | ||||
| @@ -578,7 +578,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| if (size & 1) | if (size & 1) | ||||
| avio_w8(pb, 0); | avio_w8(pb, 0); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -603,7 +603,7 @@ static int avi_write_trailer(AVFormatContext *s) | |||||
| file_size = avio_tell(pb); | file_size = avio_tell(pb); | ||||
| avio_seek(pb, avi->odml_list - 8, SEEK_SET); | avio_seek(pb, avi->odml_list - 8, SEEK_SET); | ||||
| ffio_wfourcc(pb, "LIST"); /* Making this AVI OpenDML one */ | ffio_wfourcc(pb, "LIST"); /* Making this AVI OpenDML one */ | ||||
| avio_seek(pb, 16, SEEK_CUR); | |||||
| avio_skip(pb, 16); | |||||
| for (n=nb_frames=0;n<s->nb_streams;n++) { | for (n=nb_frames=0;n<s->nb_streams;n++) { | ||||
| AVCodecContext *stream = s->streams[n]->codec; | AVCodecContext *stream = s->streams[n]->codec; | ||||
| @@ -624,7 +624,7 @@ static int avi_write_trailer(AVFormatContext *s) | |||||
| avi_write_counters(s, avi->riff_id); | avi_write_counters(s, avi->riff_id); | ||||
| } | } | ||||
| } | } | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| for (i=0; i<s->nb_streams; i++) { | for (i=0; i<s->nb_streams; i++) { | ||||
| AVIStream *avist= s->streams[i]->priv_data; | AVIStream *avist= s->streams[i]->priv_data; | ||||
| @@ -429,6 +429,13 @@ attribute_deprecated int64_t url_ftell(AVIOContext *s); | |||||
| attribute_deprecated int64_t url_fsize(AVIOContext *s); | attribute_deprecated int64_t url_fsize(AVIOContext *s); | ||||
| #define URL_EOF (-1) | #define URL_EOF (-1) | ||||
| attribute_deprecated int url_fgetc(AVIOContext *s); | attribute_deprecated int url_fgetc(AVIOContext *s); | ||||
| attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size); | |||||
| #ifdef __GNUC__ | |||||
| attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); | |||||
| #else | |||||
| attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...); | |||||
| #endif | |||||
| attribute_deprecated void put_flush_packet(AVIOContext *s); | |||||
| /** | /** | ||||
| * @} | * @} | ||||
| */ | */ | ||||
| @@ -488,7 +495,10 @@ int64_t avio_skip(AVIOContext *s, int64_t offset); | |||||
| * ftell() equivalent for AVIOContext. | * ftell() equivalent for AVIOContext. | ||||
| * @return position or AVERROR. | * @return position or AVERROR. | ||||
| */ | */ | ||||
| #define avio_tell(s) avio_seek((s), 0, SEEK_CUR) | |||||
| static av_always_inline int64_t avio_tell(AVIOContext *s) | |||||
| { | |||||
| return avio_seek(s, 0, SEEK_CUR); | |||||
| } | |||||
| /** | /** | ||||
| * Get the filesize. | * Get the filesize. | ||||
| @@ -508,9 +518,9 @@ int64_t av_url_read_fseek(AVIOContext *h, int stream_index, | |||||
| /** @warning currently size is limited */ | /** @warning currently size is limited */ | ||||
| #ifdef __GNUC__ | #ifdef __GNUC__ | ||||
| int url_fprintf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); | |||||
| int avio_printf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); | |||||
| #else | #else | ||||
| int url_fprintf(AVIOContext *s, const char *fmt, ...); | |||||
| int avio_printf(AVIOContext *s, const char *fmt, ...); | |||||
| #endif | #endif | ||||
| #if FF_API_OLD_AVIO | #if FF_API_OLD_AVIO | ||||
| @@ -519,7 +529,7 @@ int url_fprintf(AVIOContext *s, const char *fmt, ...); | |||||
| attribute_deprecated char *url_fgets(AVIOContext *s, char *buf, int buf_size); | attribute_deprecated char *url_fgets(AVIOContext *s, char *buf, int buf_size); | ||||
| #endif | #endif | ||||
| void put_flush_packet(AVIOContext *s); | |||||
| void avio_flush(AVIOContext *s); | |||||
| /** | /** | ||||
| @@ -570,8 +580,6 @@ unsigned int avio_rb24(AVIOContext *s); | |||||
| unsigned int avio_rb32(AVIOContext *s); | unsigned int avio_rb32(AVIOContext *s); | ||||
| uint64_t avio_rb64(AVIOContext *s); | uint64_t avio_rb64(AVIOContext *s); | ||||
| uint64_t ff_get_v(AVIOContext *bc); | |||||
| static inline int url_is_streamed(AVIOContext *s) | static inline int url_is_streamed(AVIOContext *s) | ||||
| { | { | ||||
| return s->is_streamed; | return s->is_streamed; | ||||
| @@ -590,8 +598,6 @@ static inline int url_is_streamed(AVIOContext *s) | |||||
| */ | */ | ||||
| int url_fdopen(AVIOContext **s, URLContext *h); | int url_fdopen(AVIOContext **s, URLContext *h); | ||||
| /** @warning must be called before any I/O */ | |||||
| int url_setbufsize(AVIOContext *s, int buf_size); | |||||
| #if FF_API_URL_RESETBUF | #if FF_API_URL_RESETBUF | ||||
| /** Reset the buffer for reading or writing. | /** Reset the buffer for reading or writing. | ||||
| * @note Will drop any data currently in the buffer without transmitting it. | * @note Will drop any data currently in the buffer without transmitting it. | ||||
| @@ -623,12 +629,12 @@ URLContext *url_fileno(AVIOContext *s); | |||||
| * @deprecated use AVIOContext.max_packet_size directly. | * @deprecated use AVIOContext.max_packet_size directly. | ||||
| */ | */ | ||||
| attribute_deprecated int url_fget_max_packet_size(AVIOContext *s); | attribute_deprecated int url_fget_max_packet_size(AVIOContext *s); | ||||
| #endif | |||||
| int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags); | |||||
| attribute_deprecated int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags); | |||||
| /** return the written or read size */ | /** return the written or read size */ | ||||
| int url_close_buf(AVIOContext *s); | |||||
| attribute_deprecated int url_close_buf(AVIOContext *s); | |||||
| #endif | |||||
| /** | /** | ||||
| * Open a write only memory stream. | * Open a write only memory stream. | ||||
| @@ -61,4 +61,9 @@ static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s) | |||||
| */ | */ | ||||
| int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char *buf, int buf_size); | int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char *buf, int buf_size); | ||||
| uint64_t ffio_read_varlen(AVIOContext *bc); | |||||
| /** @warning must be called before any I/O */ | |||||
| int ffio_set_buf_size(AVIOContext *s, int buf_size); | |||||
| #endif // AVFORMAT_AVIO_INTERNAL_H | #endif // AVFORMAT_AVIO_INTERNAL_H | ||||
| @@ -170,7 +170,7 @@ void avio_write(AVIOContext *s, const unsigned char *buf, int size) | |||||
| } | } | ||||
| } | } | ||||
| void put_flush_packet(AVIOContext *s) | |||||
| void avio_flush(AVIOContext *s) | |||||
| { | { | ||||
| flush_buffer(s); | flush_buffer(s); | ||||
| s->must_flush = 0; | s->must_flush = 0; | ||||
| @@ -386,6 +386,26 @@ int64_t url_fsize(AVIOContext *s) | |||||
| { | { | ||||
| return avio_size(s); | return avio_size(s); | ||||
| } | } | ||||
| int url_setbufsize(AVIOContext *s, int buf_size) | |||||
| { | |||||
| return ffio_set_buf_size(s, buf_size); | |||||
| } | |||||
| int url_fprintf(AVIOContext *s, const char *fmt, ...) | |||||
| { | |||||
| va_list ap; | |||||
| char buf[4096]; | |||||
| int ret; | |||||
| va_start(ap, fmt); | |||||
| ret = vsnprintf(buf, sizeof(buf), fmt, ap); | |||||
| va_end(ap); | |||||
| avio_write(s, buf, strlen(buf)); | |||||
| return ret; | |||||
| } | |||||
| void put_flush_packet(AVIOContext *s) | |||||
| { | |||||
| avio_flush(s); | |||||
| } | |||||
| #endif | #endif | ||||
| int avio_put_str(AVIOContext *s, const char *str) | int avio_put_str(AVIOContext *s, const char *str) | ||||
| @@ -499,7 +519,7 @@ static void fill_buffer(AVIOContext *s) | |||||
| /* make buffer smaller in case it ended up large after probing */ | /* make buffer smaller in case it ended up large after probing */ | ||||
| if (s->buffer_size > max_buffer_size) { | if (s->buffer_size > max_buffer_size) { | ||||
| url_setbufsize(s, max_buffer_size); | |||||
| ffio_set_buf_size(s, max_buffer_size); | |||||
| s->checksum_ptr = dst = s->buffer; | s->checksum_ptr = dst = s->buffer; | ||||
| len = s->buffer_size; | len = s->buffer_size; | ||||
| @@ -762,7 +782,7 @@ uint64_t avio_rb64(AVIOContext *s) | |||||
| return val; | return val; | ||||
| } | } | ||||
| uint64_t ff_get_v(AVIOContext *bc){ | |||||
| uint64_t ffio_read_varlen(AVIOContext *bc){ | |||||
| uint64_t val = 0; | uint64_t val = 0; | ||||
| int tmp; | int tmp; | ||||
| @@ -810,7 +830,7 @@ int url_fdopen(AVIOContext **s, URLContext *h) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| int url_setbufsize(AVIOContext *s, int buf_size) | |||||
| int ffio_set_buf_size(AVIOContext *s, int buf_size) | |||||
| { | { | ||||
| uint8_t *buffer; | uint8_t *buffer; | ||||
| buffer = av_malloc(buf_size); | buffer = av_malloc(buf_size); | ||||
| @@ -917,8 +937,7 @@ URLContext *url_fileno(AVIOContext *s) | |||||
| return s->opaque; | return s->opaque; | ||||
| } | } | ||||
| #if CONFIG_MUXERS | |||||
| int url_fprintf(AVIOContext *s, const char *fmt, ...) | |||||
| int avio_printf(AVIOContext *s, const char *fmt, ...) | |||||
| { | { | ||||
| va_list ap; | va_list ap; | ||||
| char buf[4096]; | char buf[4096]; | ||||
| @@ -930,7 +949,6 @@ int url_fprintf(AVIOContext *s, const char *fmt, ...) | |||||
| avio_write(s, buf, strlen(buf)); | avio_write(s, buf, strlen(buf)); | ||||
| return ret; | return ret; | ||||
| } | } | ||||
| #endif //CONFIG_MUXERS | |||||
| #if FF_API_OLD_AVIO | #if FF_API_OLD_AVIO | ||||
| char *url_fgets(AVIOContext *s, char *buf, int buf_size) | char *url_fgets(AVIOContext *s, char *buf, int buf_size) | ||||
| @@ -991,6 +1009,7 @@ int64_t av_url_read_fseek(AVIOContext *s, int stream_index, | |||||
| * back to the server even if CONFIG_MUXERS is false. */ | * back to the server even if CONFIG_MUXERS is false. */ | ||||
| #if CONFIG_MUXERS || CONFIG_NETWORK | #if CONFIG_MUXERS || CONFIG_NETWORK | ||||
| /* buffer handling */ | /* buffer handling */ | ||||
| #if FF_API_OLD_AVIO | |||||
| int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags) | int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags) | ||||
| { | { | ||||
| int ret; | int ret; | ||||
| @@ -1007,9 +1026,10 @@ int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags) | |||||
| int url_close_buf(AVIOContext *s) | int url_close_buf(AVIOContext *s) | ||||
| { | { | ||||
| put_flush_packet(s); | |||||
| avio_flush(s); | |||||
| return s->buf_ptr - s->buffer; | return s->buf_ptr - s->buffer; | ||||
| } | } | ||||
| #endif | |||||
| /* output in a dynamic buffer */ | /* output in a dynamic buffer */ | ||||
| @@ -1134,7 +1154,7 @@ int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) | |||||
| padding = FF_INPUT_BUFFER_PADDING_SIZE; | padding = FF_INPUT_BUFFER_PADDING_SIZE; | ||||
| } | } | ||||
| put_flush_packet(s); | |||||
| avio_flush(s); | |||||
| *pbuffer = d->buffer; | *pbuffer = d->buffer; | ||||
| size = d->size; | size = d->size; | ||||
| @@ -61,7 +61,7 @@ static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap) | |||||
| s->ctx_flags |= AVFMTCTX_NOHEADER; | s->ctx_flags |= AVFMTCTX_NOHEADER; | ||||
| avio_seek(s->pb, 4, SEEK_CUR); | |||||
| avio_skip(s->pb, 4); | |||||
| avs->width = avio_rl16(s->pb); | avs->width = avio_rl16(s->pb); | ||||
| avs->height = avio_rl16(s->pb); | avs->height = avio_rl16(s->pb); | ||||
| avs->bits_per_sample = avio_rl16(s->pb); | avs->bits_per_sample = avio_rl16(s->pb); | ||||
| @@ -204,7 +204,7 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) | |||||
| break; | break; | ||||
| default: | default: | ||||
| avio_seek(s->pb, size - 4, SEEK_CUR); | |||||
| avio_skip(s->pb, size - 4); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -67,7 +67,7 @@ static int vid_read_header(AVFormatContext *s, | |||||
| * bytes: 'V' 'I' 'D' | * bytes: 'V' 'I' 'D' | ||||
| * int16s: always_512, nframes, width, height, delay, always_14 | * int16s: always_512, nframes, width, height, delay, always_14 | ||||
| */ | */ | ||||
| avio_seek(pb, 5, SEEK_CUR); | |||||
| avio_skip(pb, 5); | |||||
| vid->nframes = avio_rl16(pb); | vid->nframes = avio_rl16(pb); | ||||
| stream = av_new_stream(s, 0); | stream = av_new_stream(s, 0); | ||||
| @@ -65,19 +65,19 @@ static int bfi_read_header(AVFormatContext * s, AVFormatParameters * ap) | |||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| /* Set the total number of frames. */ | /* Set the total number of frames. */ | ||||
| avio_seek(pb, 8, SEEK_CUR); | |||||
| avio_skip(pb, 8); | |||||
| chunk_header = avio_rl32(pb); | chunk_header = avio_rl32(pb); | ||||
| bfi->nframes = avio_rl32(pb); | bfi->nframes = avio_rl32(pb); | ||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| avio_rl32(pb); | avio_rl32(pb); | ||||
| fps = avio_rl32(pb); | fps = avio_rl32(pb); | ||||
| avio_seek(pb, 12, SEEK_CUR); | |||||
| avio_skip(pb, 12); | |||||
| vstream->codec->width = avio_rl32(pb); | vstream->codec->width = avio_rl32(pb); | ||||
| vstream->codec->height = avio_rl32(pb); | vstream->codec->height = avio_rl32(pb); | ||||
| /*Load the palette to extradata */ | /*Load the palette to extradata */ | ||||
| avio_seek(pb, 8, SEEK_CUR); | |||||
| avio_skip(pb, 8); | |||||
| vstream->codec->extradata = av_malloc(768); | vstream->codec->extradata = av_malloc(768); | ||||
| vstream->codec->extradata_size = 768; | vstream->codec->extradata_size = 768; | ||||
| avio_read(pb, vstream->codec->extradata, | avio_read(pb, vstream->codec->extradata, | ||||
| @@ -98,7 +98,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| return AVERROR(EIO); | return AVERROR(EIO); | ||||
| } | } | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| vst->codec->width = avio_rl32(pb); | vst->codec->width = avio_rl32(pb); | ||||
| vst->codec->height = avio_rl32(pb); | vst->codec->height = avio_rl32(pb); | ||||
| @@ -127,7 +127,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| } | } | ||||
| if (bink->num_audio_tracks) { | if (bink->num_audio_tracks) { | ||||
| avio_seek(pb, 4 * bink->num_audio_tracks, SEEK_CUR); | |||||
| avio_skip(pb, 4 * bink->num_audio_tracks); | |||||
| for (i = 0; i < bink->num_audio_tracks; i++) { | for (i = 0; i < bink->num_audio_tracks; i++) { | ||||
| ast = av_new_stream(s, 1); | ast = av_new_stream(s, 1); | ||||
| @@ -169,7 +169,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| keyframe ? AVINDEX_KEYFRAME : 0); | keyframe ? AVINDEX_KEYFRAME : 0); | ||||
| } | } | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| bink->current_track = -1; | bink->current_track = -1; | ||||
| return 0; | return 0; | ||||
| @@ -225,7 +225,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| AV_RL32(pkt->data) / (2 * s->streams[bink->current_track]->codec->channels); | AV_RL32(pkt->data) / (2 * s->streams[bink->current_track]->codec->channels); | ||||
| return 0; | return 0; | ||||
| } else { | } else { | ||||
| avio_seek(pb, audio_size, SEEK_CUR); | |||||
| avio_skip(pb, audio_size); | |||||
| } | } | ||||
| } | } | ||||
| @@ -122,7 +122,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| c93->audio->codec->codec_type = AVMEDIA_TYPE_AUDIO; | c93->audio->codec->codec_type = AVMEDIA_TYPE_AUDIO; | ||||
| } | } | ||||
| avio_seek(pb, 26, SEEK_CUR); /* VOC header */ | |||||
| avio_skip(pb, 26); /* VOC header */ | |||||
| ret = voc_get_packet(s, pkt, c93->audio, datasize - 26); | ret = voc_get_packet(s, pkt, c93->audio, datasize - 26); | ||||
| if (ret > 0) { | if (ret > 0) { | ||||
| pkt->stream_index = 1; | pkt->stream_index = 1; | ||||
| @@ -114,22 +114,22 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) | |||||
| av_log(s, AV_LOG_ERROR, "invalid AAC magic cookie\n"); | av_log(s, AV_LOG_ERROR, "invalid AAC magic cookie\n"); | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| } | } | ||||
| avio_seek(pb, skip, SEEK_CUR); | |||||
| avio_skip(pb, skip); | |||||
| } else if (st->codec->codec_id == CODEC_ID_ALAC) { | } else if (st->codec->codec_id == CODEC_ID_ALAC) { | ||||
| #define ALAC_PREAMBLE 12 | #define ALAC_PREAMBLE 12 | ||||
| #define ALAC_HEADER 36 | #define ALAC_HEADER 36 | ||||
| if (size < ALAC_PREAMBLE + ALAC_HEADER) { | if (size < ALAC_PREAMBLE + ALAC_HEADER) { | ||||
| av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n"); | av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n"); | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| } | } | ||||
| avio_seek(pb, ALAC_PREAMBLE, SEEK_CUR); | |||||
| avio_skip(pb, ALAC_PREAMBLE); | |||||
| st->codec->extradata = av_mallocz(ALAC_HEADER + FF_INPUT_BUFFER_PADDING_SIZE); | st->codec->extradata = av_mallocz(ALAC_HEADER + FF_INPUT_BUFFER_PADDING_SIZE); | ||||
| if (!st->codec->extradata) | if (!st->codec->extradata) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| avio_read(pb, st->codec->extradata, ALAC_HEADER); | avio_read(pb, st->codec->extradata, ALAC_HEADER); | ||||
| st->codec->extradata_size = ALAC_HEADER; | st->codec->extradata_size = ALAC_HEADER; | ||||
| avio_seek(pb, size - ALAC_PREAMBLE - ALAC_HEADER, SEEK_CUR); | |||||
| avio_skip(pb, size - ALAC_PREAMBLE - ALAC_HEADER); | |||||
| } else { | } else { | ||||
| st->codec->extradata = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); | st->codec->extradata = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); | ||||
| if (!st->codec->extradata) | if (!st->codec->extradata) | ||||
| @@ -201,7 +201,7 @@ static int read_header(AVFormatContext *s, | |||||
| int found_data, ret; | int found_data, ret; | ||||
| int64_t size; | int64_t size; | ||||
| avio_seek(pb, 8, SEEK_CUR); /* magic, version, file flags */ | |||||
| avio_skip(pb, 8); /* magic, version, file flags */ | |||||
| /* audio description chunk */ | /* audio description chunk */ | ||||
| if (avio_rb32(pb) != MKBETAG('d','e','s','c')) { | if (avio_rb32(pb) != MKBETAG('d','e','s','c')) { | ||||
| @@ -233,11 +233,11 @@ static int read_header(AVFormatContext *s, | |||||
| switch (tag) { | switch (tag) { | ||||
| case MKBETAG('d','a','t','a'): | case MKBETAG('d','a','t','a'): | ||||
| avio_seek(pb, 4, SEEK_CUR); /* edit count */ | |||||
| avio_skip(pb, 4); /* edit count */ | |||||
| caf->data_start = avio_tell(pb); | caf->data_start = avio_tell(pb); | ||||
| caf->data_size = size < 0 ? -1 : size - 4; | caf->data_size = size < 0 ? -1 : size - 4; | ||||
| if (caf->data_size > 0 && !url_is_streamed(pb)) | if (caf->data_size > 0 && !url_is_streamed(pb)) | ||||
| avio_seek(pb, caf->data_size, SEEK_CUR); | |||||
| avio_skip(pb, caf->data_size); | |||||
| found_data = 1; | found_data = 1; | ||||
| break; | break; | ||||
| @@ -265,7 +265,7 @@ static int read_header(AVFormatContext *s, | |||||
| case MKBETAG('f','r','e','e'): | case MKBETAG('f','r','e','e'): | ||||
| if (size < 0) | if (size < 0) | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| avio_seek(pb, size, SEEK_CUR); | |||||
| avio_skip(pb, size); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -50,7 +50,7 @@ static int crc_write_trailer(struct AVFormatContext *s) | |||||
| snprintf(buf, sizeof(buf), "CRC=0x%08x\n", crc->crcval); | snprintf(buf, sizeof(buf), "CRC=0x%08x\n", crc->crcval); | ||||
| avio_write(s->pb, buf, strlen(buf)); | avio_write(s->pb, buf, strlen(buf)); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -60,7 +60,7 @@ static int daud_write_packet(struct AVFormatContext *s, AVPacket *pkt) | |||||
| avio_wb16(s->pb, pkt->size); | avio_wb16(s->pb, pkt->size); | ||||
| avio_wb16(s->pb, 0x8010); // unknown | avio_wb16(s->pb, 0x8010); // unknown | ||||
| avio_write(s->pb, pkt->data, pkt->size); | avio_write(s->pb, pkt->data, pkt->size); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -382,7 +382,7 @@ static int dv_write_packet(struct AVFormatContext *s, AVPacket *pkt) | |||||
| pkt->data, pkt->size, &frame); | pkt->data, pkt->size, &frame); | ||||
| if (fsize > 0) { | if (fsize > 0) { | ||||
| avio_write(s->pb, frame, fsize); | avio_write(s->pb, frame, fsize); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| } | } | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -96,7 +96,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| c->has_sound = 1; | c->has_sound = 1; | ||||
| size = avio_rb32(pb); | size = avio_rb32(pb); | ||||
| c->vidpos = avio_tell(pb) + size; | c->vidpos = avio_tell(pb) + size; | ||||
| avio_seek(pb, 16, SEEK_CUR); | |||||
| avio_skip(pb, 16); | |||||
| fsize = avio_rl32(pb); | fsize = avio_rl32(pb); | ||||
| ast = av_new_stream(s, 0); | ast = av_new_stream(s, 0); | ||||
| @@ -108,7 +108,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| tag = avio_rl32(pb); | tag = avio_rl32(pb); | ||||
| fsize = avio_rl32(pb); | fsize = avio_rl32(pb); | ||||
| if(tag == MKTAG('d', 'a', 't', 'a')) break; | if(tag == MKTAG('d', 'a', 't', 'a')) break; | ||||
| avio_seek(pb, fsize, SEEK_CUR); | |||||
| avio_skip(pb, fsize); | |||||
| } | } | ||||
| c->bpc = (fsize + c->frames - 1) / c->frames; | c->bpc = (fsize + c->frames - 1) / c->frames; | ||||
| if(ast->codec->block_align) | if(ast->codec->block_align) | ||||
| @@ -62,7 +62,7 @@ static int cdata_read_header(AVFormatContext *s, AVFormatParameters *ap) | |||||
| }; | }; | ||||
| sample_rate = avio_rb16(pb); | sample_rate = avio_rb16(pb); | ||||
| avio_seek(pb, 12, SEEK_CUR); | |||||
| avio_skip(pb, 12); | |||||
| st = av_new_stream(s, 0); | st = av_new_stream(s, 0); | ||||
| if (!st) | if (!st) | ||||
| @@ -222,7 +222,7 @@ static int process_audio_header_eacs(AVFormatContext *s) | |||||
| ea->bytes = avio_r8(pb); /* 1=8-bit, 2=16-bit */ | ea->bytes = avio_r8(pb); /* 1=8-bit, 2=16-bit */ | ||||
| ea->num_channels = avio_r8(pb); | ea->num_channels = avio_r8(pb); | ||||
| compression_type = avio_r8(pb); | compression_type = avio_r8(pb); | ||||
| avio_seek(pb, 13, SEEK_CUR); | |||||
| avio_skip(pb, 13); | |||||
| switch (compression_type) { | switch (compression_type) { | ||||
| case 0: | case 0: | ||||
| @@ -261,7 +261,7 @@ static int process_video_header_mdec(AVFormatContext *s) | |||||
| { | { | ||||
| EaDemuxContext *ea = s->priv_data; | EaDemuxContext *ea = s->priv_data; | ||||
| AVIOContext *pb = s->pb; | AVIOContext *pb = s->pb; | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| ea->width = avio_rl16(pb); | ea->width = avio_rl16(pb); | ||||
| ea->height = avio_rl16(pb); | ea->height = avio_rl16(pb); | ||||
| ea->time_base = (AVRational){1,15}; | ea->time_base = (AVRational){1,15}; | ||||
| @@ -274,7 +274,7 @@ static int process_video_header_vp6(AVFormatContext *s) | |||||
| EaDemuxContext *ea = s->priv_data; | EaDemuxContext *ea = s->priv_data; | ||||
| AVIOContext *pb = s->pb; | AVIOContext *pb = s->pb; | ||||
| avio_seek(pb, 16, SEEK_CUR); | |||||
| avio_skip(pb, 16); | |||||
| ea->time_base.den = avio_rl32(pb); | ea->time_base.den = avio_rl32(pb); | ||||
| ea->time_base.num = avio_rl32(pb); | ea->time_base.num = avio_rl32(pb); | ||||
| ea->video_codec = CODEC_ID_VP6; | ea->video_codec = CODEC_ID_VP6; | ||||
| @@ -316,7 +316,7 @@ static int process_ea_header(AVFormatContext *s) { | |||||
| case SHEN_TAG : | case SHEN_TAG : | ||||
| blockid = avio_rl32(pb); | blockid = avio_rl32(pb); | ||||
| if (blockid == GSTR_TAG) { | if (blockid == GSTR_TAG) { | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| } else if ((blockid & 0xFFFF)!=PT00_TAG) { | } else if ((blockid & 0xFFFF)!=PT00_TAG) { | ||||
| av_log (s, AV_LOG_ERROR, "unknown SCHl headerid\n"); | av_log (s, AV_LOG_ERROR, "unknown SCHl headerid\n"); | ||||
| return 0; | return 0; | ||||
| @@ -474,19 +474,19 @@ static int ea_read_packet(AVFormatContext *s, | |||||
| /* audio data */ | /* audio data */ | ||||
| case ISNh_TAG: | case ISNh_TAG: | ||||
| /* header chunk also contains data; skip over the header portion*/ | /* header chunk also contains data; skip over the header portion*/ | ||||
| avio_seek(pb, 32, SEEK_CUR); | |||||
| avio_skip(pb, 32); | |||||
| chunk_size -= 32; | chunk_size -= 32; | ||||
| case ISNd_TAG: | case ISNd_TAG: | ||||
| case SCDl_TAG: | case SCDl_TAG: | ||||
| case SNDC_TAG: | case SNDC_TAG: | ||||
| case SDEN_TAG: | case SDEN_TAG: | ||||
| if (!ea->audio_codec) { | if (!ea->audio_codec) { | ||||
| avio_seek(pb, chunk_size, SEEK_CUR); | |||||
| avio_skip(pb, chunk_size); | |||||
| break; | break; | ||||
| } else if (ea->audio_codec == CODEC_ID_PCM_S16LE_PLANAR || | } else if (ea->audio_codec == CODEC_ID_PCM_S16LE_PLANAR || | ||||
| ea->audio_codec == CODEC_ID_MP3) { | ea->audio_codec == CODEC_ID_MP3) { | ||||
| num_samples = avio_rl32(pb); | num_samples = avio_rl32(pb); | ||||
| avio_seek(pb, 8, SEEK_CUR); | |||||
| avio_skip(pb, 8); | |||||
| chunk_size -= 12; | chunk_size -= 12; | ||||
| } | } | ||||
| ret = av_get_packet(pb, pkt, chunk_size); | ret = av_get_packet(pb, pkt, chunk_size); | ||||
| @@ -541,7 +541,7 @@ static int ea_read_packet(AVFormatContext *s, | |||||
| goto get_video_packet; | goto get_video_packet; | ||||
| case mTCD_TAG: | case mTCD_TAG: | ||||
| avio_seek(pb, 8, SEEK_CUR); // skip ea dct header | |||||
| avio_skip(pb, 8); // skip ea dct header | |||||
| chunk_size -= 8; | chunk_size -= 8; | ||||
| goto get_video_packet; | goto get_video_packet; | ||||
| @@ -560,7 +560,7 @@ get_video_packet: | |||||
| break; | break; | ||||
| default: | default: | ||||
| avio_seek(pb, chunk_size, SEEK_CUR); | |||||
| avio_skip(pb, chunk_size); | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -187,7 +187,7 @@ static int64_t get_dts(AVFormatContext *s, int64_t pos) | |||||
| int64_t dts; | int64_t dts; | ||||
| ffm_seek1(s, pos); | ffm_seek1(s, pos); | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| dts = avio_rb64(pb); | dts = avio_rb64(pb); | ||||
| #ifdef DEBUG_SEEK | #ifdef DEBUG_SEEK | ||||
| av_log(s, AV_LOG_DEBUG, "dts=%0.6f\n", dts / 1000000.0); | av_log(s, AV_LOG_DEBUG, "dts=%0.6f\n", dts / 1000000.0); | ||||
| @@ -44,7 +44,7 @@ static void flush_packet(AVFormatContext *s) | |||||
| h |= 0x8000; | h |= 0x8000; | ||||
| avio_wb16(pb, h); | avio_wb16(pb, h); | ||||
| avio_write(pb, ffm->packet, ffm->packet_end - ffm->packet); | avio_write(pb, ffm->packet, ffm->packet_end - ffm->packet); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| /* prepare next packet */ | /* prepare next packet */ | ||||
| ffm->frame_offset = 0; /* no key frame */ | ffm->frame_offset = 0; /* no key frame */ | ||||
| @@ -187,7 +187,7 @@ static int ffm_write_header(AVFormatContext *s) | |||||
| while ((avio_tell(pb) % ffm->packet_size) != 0) | while ((avio_tell(pb) % ffm->packet_size) != 0) | ||||
| avio_w8(pb, 0); | avio_w8(pb, 0); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| /* init packet mux */ | /* init packet mux */ | ||||
| ffm->packet_ptr = ffm->packet; | ffm->packet_ptr = ffm->packet; | ||||
| @@ -235,7 +235,7 @@ static int ffm_write_trailer(AVFormatContext *s) | |||||
| if (ffm->packet_ptr > ffm->packet) | if (ffm->packet_ptr > ffm->packet) | ||||
| flush_packet(s); | flush_packet(s); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -53,7 +53,7 @@ static int write_header(AVFormatContext *s) | |||||
| avio_write(s->pb, ID_STRING, sizeof(ID_STRING) - 1); | avio_write(s->pb, ID_STRING, sizeof(ID_STRING) - 1); | ||||
| avio_w8(s->pb, '1'); // version | avio_w8(s->pb, '1'); // version | ||||
| avio_w8(s->pb, '\n'); | avio_w8(s->pb, '\n'); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -73,13 +73,13 @@ static int write_trailer(AVFormatContext *s) | |||||
| AVChapter *ch = s->chapters[i]; | AVChapter *ch = s->chapters[i]; | ||||
| avio_write(s->pb, ID_CHAPTER, sizeof(ID_CHAPTER) - 1); | avio_write(s->pb, ID_CHAPTER, sizeof(ID_CHAPTER) - 1); | ||||
| avio_w8(s->pb, '\n'); | avio_w8(s->pb, '\n'); | ||||
| url_fprintf(s->pb, "TIMEBASE=%d/%d\n", ch->time_base.num, ch->time_base.den); | |||||
| url_fprintf(s->pb, "START=%"PRId64"\n", ch->start); | |||||
| url_fprintf(s->pb, "END=%"PRId64"\n", ch->end); | |||||
| avio_printf(s->pb, "TIMEBASE=%d/%d\n", ch->time_base.num, ch->time_base.den); | |||||
| avio_printf(s->pb, "START=%"PRId64"\n", ch->start); | |||||
| avio_printf(s->pb, "END=%"PRId64"\n", ch->end); | |||||
| write_tags(s->pb, ch->metadata); | write_tags(s->pb, ch->metadata); | ||||
| } | } | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -59,7 +59,7 @@ static int read_header(AVFormatContext *s, | |||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| } | } | ||||
| avio_seek(pb, 2, SEEK_CUR); | |||||
| avio_skip(pb, 2); | |||||
| st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | st->codec->codec_type = AVMEDIA_TYPE_VIDEO; | ||||
| st->codec->codec_id = CODEC_ID_RAWVIDEO; | st->codec->codec_id = CODEC_ID_RAWVIDEO; | ||||
| st->codec->pix_fmt = PIX_FMT_RGBA; | st->codec->pix_fmt = PIX_FMT_RGBA; | ||||
| @@ -84,7 +84,7 @@ static int read_packet(AVFormatContext *s, | |||||
| return AVERROR(EIO); | return AVERROR(EIO); | ||||
| pkt->dts = avio_tell(s->pb) / (st->codec->width * (st->codec->height + film->leading) * 4); | pkt->dts = avio_tell(s->pb) / (st->codec->width * (st->codec->height + film->leading) * 4); | ||||
| pkt->size = av_get_packet(s->pb, pkt, st->codec->width * st->codec->height * 4); | pkt->size = av_get_packet(s->pb, pkt, st->codec->width * st->codec->height * 4); | ||||
| avio_seek(s->pb, st->codec->width * film->leading * 4, SEEK_CUR); | |||||
| avio_skip(s->pb, st->codec->width * film->leading * 4); | |||||
| if (pkt->size < 0) | if (pkt->size < 0) | ||||
| return pkt->size; | return pkt->size; | ||||
| pkt->flags |= AV_PKT_FLAG_KEY; | pkt->flags |= AV_PKT_FLAG_KEY; | ||||
| @@ -67,7 +67,7 @@ static int write_trailer(AVFormatContext *s) | |||||
| avio_wb16(pb, 1/av_q2d(st->codec->time_base)); | avio_wb16(pb, 1/av_q2d(st->codec->time_base)); | ||||
| for (i = 0; i < 16; i++) | for (i = 0; i < 16; i++) | ||||
| avio_w8(pb, 0x00); // reserved | avio_w8(pb, 0x00); // reserved | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -65,7 +65,7 @@ static int flac_read_header(AVFormatContext *s, | |||||
| break; | break; | ||||
| /* skip metadata block for unsupported types */ | /* skip metadata block for unsupported types */ | ||||
| default: | default: | ||||
| ret = avio_seek(s->pb, metadata_size, SEEK_CUR); | |||||
| ret = avio_skip(s->pb, metadata_size); | |||||
| if (ret < 0) | if (ret < 0) | ||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -104,7 +104,7 @@ static int flac_write_trailer(struct AVFormatContext *s) | |||||
| avio_seek(pb, 8, SEEK_SET); | avio_seek(pb, 8, SEEK_SET); | ||||
| avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE); | avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE); | ||||
| avio_seek(pb, file_size, SEEK_SET); | avio_seek(pb, file_size, SEEK_SET); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| } else { | } else { | ||||
| av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n"); | av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n"); | ||||
| } | } | ||||
| @@ -114,7 +114,7 @@ static int flac_write_trailer(struct AVFormatContext *s) | |||||
| static int flac_write_packet(struct AVFormatContext *s, AVPacket *pkt) | static int flac_write_packet(struct AVFormatContext *s, AVPacket *pkt) | ||||
| { | { | ||||
| avio_write(s->pb, pkt->data, pkt->size); | avio_write(s->pb, pkt->data, pkt->size); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -239,7 +239,7 @@ static int flic_read_packet(AVFormatContext *s, | |||||
| } | } | ||||
| /* skip useless 10B sub-header (yes, it's not accounted for in the chunk header) */ | /* skip useless 10B sub-header (yes, it's not accounted for in the chunk header) */ | ||||
| avio_seek(pb, 10, SEEK_CUR); | |||||
| avio_skip(pb, 10); | |||||
| pkt->stream_index = flic->audio_stream_index; | pkt->stream_index = flic->audio_stream_index; | ||||
| pkt->pos = avio_tell(pb); | pkt->pos = avio_tell(pb); | ||||
| @@ -253,7 +253,7 @@ static int flic_read_packet(AVFormatContext *s, | |||||
| packet_read = 1; | packet_read = 1; | ||||
| } else { | } else { | ||||
| /* not interested in this chunk */ | /* not interested in this chunk */ | ||||
| avio_seek(pb, size - 6, SEEK_CUR); | |||||
| avio_skip(pb, size - 6); | |||||
| } | } | ||||
| } | } | ||||
| @@ -113,7 +113,7 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, int flv_co | |||||
| static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize) { | static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize) { | ||||
| int length = avio_rb16(ioc); | int length = avio_rb16(ioc); | ||||
| if(length >= buffsize) { | if(length >= buffsize) { | ||||
| avio_seek(ioc, length, SEEK_CUR); | |||||
| avio_skip(ioc, length); | |||||
| return -1; | return -1; | ||||
| } | } | ||||
| @@ -149,7 +149,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst | |||||
| unsigned int keylen; | unsigned int keylen; | ||||
| while(avio_tell(ioc) < max_pos - 2 && (keylen = avio_rb16(ioc))) { | while(avio_tell(ioc) < max_pos - 2 && (keylen = avio_rb16(ioc))) { | ||||
| avio_seek(ioc, keylen, SEEK_CUR); //skip key string | |||||
| avio_skip(ioc, keylen); //skip key string | |||||
| if(amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) < 0) | if(amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) < 0) | ||||
| return -1; //if we couldn't skip, bomb out. | return -1; //if we couldn't skip, bomb out. | ||||
| } | } | ||||
| @@ -162,7 +162,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst | |||||
| case AMF_DATA_TYPE_UNSUPPORTED: | case AMF_DATA_TYPE_UNSUPPORTED: | ||||
| break; //these take up no additional space | break; //these take up no additional space | ||||
| case AMF_DATA_TYPE_MIXEDARRAY: | case AMF_DATA_TYPE_MIXEDARRAY: | ||||
| avio_seek(ioc, 4, SEEK_CUR); //skip 32-bit max array index | |||||
| avio_skip(ioc, 4); //skip 32-bit max array index | |||||
| while(avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { | while(avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { | ||||
| //this is the only case in which we would want a nested parse to not skip over the object | //this is the only case in which we would want a nested parse to not skip over the object | ||||
| if(amf_parse_object(s, astream, vstream, str_val, max_pos, depth + 1) < 0) | if(amf_parse_object(s, astream, vstream, str_val, max_pos, depth + 1) < 0) | ||||
| @@ -182,7 +182,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst | |||||
| } | } | ||||
| break; | break; | ||||
| case AMF_DATA_TYPE_DATE: | case AMF_DATA_TYPE_DATE: | ||||
| avio_seek(ioc, 8 + 2, SEEK_CUR); //timestamp (double) and UTC offset (int16) | |||||
| avio_skip(ioc, 8 + 2); //timestamp (double) and UTC offset (int16) | |||||
| break; | break; | ||||
| default: //unsupported type, we couldn't skip | default: //unsupported type, we couldn't skip | ||||
| return -1; | return -1; | ||||
| @@ -254,7 +254,7 @@ static int flv_read_header(AVFormatContext *s, | |||||
| { | { | ||||
| int offset, flags; | int offset, flags; | ||||
| avio_seek(s->pb, 4, SEEK_CUR); | |||||
| avio_skip(s->pb, 4); | |||||
| flags = avio_r8(s->pb); | flags = avio_r8(s->pb); | ||||
| /* old flvtool cleared this field */ | /* old flvtool cleared this field */ | ||||
| /* FIXME: better fix needed */ | /* FIXME: better fix needed */ | ||||
| @@ -278,7 +278,7 @@ static int flv_read_header(AVFormatContext *s, | |||||
| offset = avio_rb32(s->pb); | offset = avio_rb32(s->pb); | ||||
| avio_seek(s->pb, offset, SEEK_SET); | avio_seek(s->pb, offset, SEEK_SET); | ||||
| avio_seek(s->pb, 4, SEEK_CUR); | |||||
| avio_skip(s->pb, 4); | |||||
| s->start_time = 0; | s->start_time = 0; | ||||
| @@ -304,7 +304,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| int64_t dts, pts = AV_NOPTS_VALUE; | int64_t dts, pts = AV_NOPTS_VALUE; | ||||
| AVStream *st = NULL; | AVStream *st = NULL; | ||||
| for(;;avio_seek(s->pb, 4, SEEK_CUR)){ /* pkt size is repeated at end. skip it */ | |||||
| for(;;avio_skip(s->pb, 4)){ /* pkt size is repeated at end. skip it */ | |||||
| pos = avio_tell(s->pb); | pos = avio_tell(s->pb); | ||||
| type = avio_r8(s->pb); | type = avio_r8(s->pb); | ||||
| size = avio_rb24(s->pb); | size = avio_rb24(s->pb); | ||||
| @@ -313,7 +313,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| // av_log(s, AV_LOG_DEBUG, "type:%d, size:%d, dts:%d\n", type, size, dts); | // av_log(s, AV_LOG_DEBUG, "type:%d, size:%d, dts:%d\n", type, size, dts); | ||||
| if (url_feof(s->pb)) | if (url_feof(s->pb)) | ||||
| return AVERROR_EOF; | return AVERROR_EOF; | ||||
| avio_seek(s->pb, 3, SEEK_CUR); /* stream id, always 0 */ | |||||
| avio_skip(s->pb, 3); /* stream id, always 0 */ | |||||
| flags = 0; | flags = 0; | ||||
| if(size == 0) | if(size == 0) | ||||
| @@ -454,7 +454,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| pkt->flags |= AV_PKT_FLAG_KEY; | pkt->flags |= AV_PKT_FLAG_KEY; | ||||
| leave: | leave: | ||||
| avio_seek(s->pb, 4, SEEK_CUR); | |||||
| avio_skip(s->pb, 4); | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| @@ -291,7 +291,7 @@ static int flv_write_header(AVFormatContext *s) | |||||
| data_size= avio_tell(pb) - metadata_size_pos - 10; | data_size= avio_tell(pb) - metadata_size_pos - 10; | ||||
| avio_seek(pb, metadata_size_pos, SEEK_SET); | avio_seek(pb, metadata_size_pos, SEEK_SET); | ||||
| avio_wb24(pb, data_size); | avio_wb24(pb, data_size); | ||||
| avio_seek(pb, data_size + 10 - 3, SEEK_CUR); | |||||
| avio_skip(pb, data_size + 10 - 3); | |||||
| avio_wb32(pb, data_size + 11); | avio_wb32(pb, data_size + 11); | ||||
| for (i = 0; i < s->nb_streams; i++) { | for (i = 0; i < s->nb_streams; i++) { | ||||
| @@ -318,7 +318,7 @@ static int flv_write_header(AVFormatContext *s) | |||||
| data_size = avio_tell(pb) - pos; | data_size = avio_tell(pb) - pos; | ||||
| avio_seek(pb, -data_size - 10, SEEK_CUR); | avio_seek(pb, -data_size - 10, SEEK_CUR); | ||||
| avio_wb24(pb, data_size); | avio_wb24(pb, data_size); | ||||
| avio_seek(pb, data_size + 10 - 3, SEEK_CUR); | |||||
| avio_skip(pb, data_size + 10 - 3); | |||||
| avio_wb32(pb, data_size + 11); // previous tag size | avio_wb32(pb, data_size + 11); // previous tag size | ||||
| } | } | ||||
| } | } | ||||
| @@ -430,7 +430,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| avio_wb32(pb,size+flags_size+11); // previous tag size | avio_wb32(pb,size+flags_size+11); // previous tag size | ||||
| flv->duration = FFMAX(flv->duration, pkt->pts + flv->delay + pkt->duration); | flv->duration = FFMAX(flv->duration, pkt->pts + flv->delay + pkt->duration); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| av_free(data); | av_free(data); | ||||
| @@ -29,7 +29,7 @@ static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt) | |||||
| snprintf(buf, sizeof(buf), "%d, %"PRId64", %d, 0x%08x\n", pkt->stream_index, pkt->dts, pkt->size, crc); | snprintf(buf, sizeof(buf), "%d, %"PRId64", %d, 0x%08x\n", pkt->stream_index, pkt->dts, pkt->size, crc); | ||||
| avio_write(s->pb, buf, strlen(buf)); | avio_write(s->pb, buf, strlen(buf)); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -287,7 +287,7 @@ static int gif_write_header(AVFormatContext *s) | |||||
| gif_image_write_header(pb, width, height, loop_count, NULL); | gif_image_write_header(pb, width, height, loop_count, NULL); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -322,7 +322,7 @@ static int gif_write_video(AVFormatContext *s, | |||||
| gif_image_write_image(pb, 0, 0, enc->width, enc->height, | gif_image_write_image(pb, 0, 0, enc->width, enc->height, | ||||
| buf, enc->width * 3, PIX_FMT_RGB24); | buf, enc->width * 3, PIX_FMT_RGB24); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -340,7 +340,7 @@ static int gif_write_trailer(AVFormatContext *s) | |||||
| AVIOContext *pb = s->pb; | AVIOContext *pb = s->pb; | ||||
| avio_w8(pb, 0x3b); | avio_w8(pb, 0x3b); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -174,7 +174,7 @@ static void gxf_material_tags(AVIOContext *pb, int *len, struct gxf_stream_info | |||||
| else if (tag == MAT_LAST_FIELD) | else if (tag == MAT_LAST_FIELD) | ||||
| si->last_field = value; | si->last_field = value; | ||||
| } else | } else | ||||
| avio_seek(pb, tlen, SEEK_CUR); | |||||
| avio_skip(pb, tlen); | |||||
| } | } | ||||
| } | } | ||||
| @@ -223,7 +223,7 @@ static void gxf_track_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si | |||||
| else if (tag == TRACK_FPF && (value == 1 || value == 2)) | else if (tag == TRACK_FPF && (value == 1 || value == 2)) | ||||
| si->fields_per_frame = value; | si->fields_per_frame = value; | ||||
| } else | } else | ||||
| avio_seek(pb, tlen, SEEK_CUR); | |||||
| avio_skip(pb, tlen); | |||||
| } | } | ||||
| } | } | ||||
| @@ -238,7 +238,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) { | |||||
| int i; | int i; | ||||
| pkt_len -= 8; | pkt_len -= 8; | ||||
| if (s->flags & AVFMT_FLAG_IGNIDX) { | if (s->flags & AVFMT_FLAG_IGNIDX) { | ||||
| avio_seek(pb, pkt_len, SEEK_CUR); | |||||
| avio_skip(pb, pkt_len); | |||||
| return; | return; | ||||
| } | } | ||||
| if (map_cnt > 1000) { | if (map_cnt > 1000) { | ||||
| @@ -247,7 +247,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) { | |||||
| } | } | ||||
| if (pkt_len < 4 * map_cnt) { | if (pkt_len < 4 * map_cnt) { | ||||
| av_log(s, AV_LOG_ERROR, "invalid index length\n"); | av_log(s, AV_LOG_ERROR, "invalid index length\n"); | ||||
| avio_seek(pb, pkt_len, SEEK_CUR); | |||||
| avio_skip(pb, pkt_len); | |||||
| return; | return; | ||||
| } | } | ||||
| pkt_len -= 4 * map_cnt; | pkt_len -= 4 * map_cnt; | ||||
| @@ -255,7 +255,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) { | |||||
| for (i = 0; i < map_cnt; i++) | for (i = 0; i < map_cnt; i++) | ||||
| av_add_index_entry(st, (uint64_t)avio_rl32(pb) * 1024, | av_add_index_entry(st, (uint64_t)avio_rl32(pb) * 1024, | ||||
| i * (uint64_t)fields_per_map + 1, 0, 0, 0); | i * (uint64_t)fields_per_map + 1, 0, 0, 0); | ||||
| avio_seek(pb, pkt_len, SEEK_CUR); | |||||
| avio_skip(pb, pkt_len); | |||||
| } | } | ||||
| static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | ||||
| @@ -283,7 +283,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | |||||
| } | } | ||||
| map_len -= len; | map_len -= len; | ||||
| gxf_material_tags(pb, &len, &si); | gxf_material_tags(pb, &len, &si); | ||||
| avio_seek(pb, len, SEEK_CUR); | |||||
| avio_skip(pb, len); | |||||
| map_len -= 2; | map_len -= 2; | ||||
| len = avio_rb16(pb); // length of track description | len = avio_rb16(pb); // length of track description | ||||
| if (len > map_len) { | if (len > map_len) { | ||||
| @@ -301,7 +301,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | |||||
| track_len = avio_rb16(pb); | track_len = avio_rb16(pb); | ||||
| len -= track_len; | len -= track_len; | ||||
| gxf_track_tags(pb, &track_len, &si); | gxf_track_tags(pb, &track_len, &si); | ||||
| avio_seek(pb, track_len, SEEK_CUR); | |||||
| avio_skip(pb, track_len); | |||||
| if (!(track_type & 0x80)) { | if (!(track_type & 0x80)) { | ||||
| av_log(s, AV_LOG_ERROR, "invalid track type %x\n", track_type); | av_log(s, AV_LOG_ERROR, "invalid track type %x\n", track_type); | ||||
| continue; | continue; | ||||
| @@ -326,7 +326,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | |||||
| if (len < 0) | if (len < 0) | ||||
| av_log(s, AV_LOG_ERROR, "invalid track description length specified\n"); | av_log(s, AV_LOG_ERROR, "invalid track description length specified\n"); | ||||
| if (map_len) | if (map_len) | ||||
| avio_seek(pb, map_len, SEEK_CUR); | |||||
| avio_skip(pb, map_len); | |||||
| if (!parse_packet_header(pb, &pkt_type, &len)) { | if (!parse_packet_header(pb, &pkt_type, &len)) { | ||||
| av_log(s, AV_LOG_ERROR, "sync lost in header\n"); | av_log(s, AV_LOG_ERROR, "sync lost in header\n"); | ||||
| return -1; | return -1; | ||||
| @@ -342,8 +342,8 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | |||||
| if (len >= 0x39) { | if (len >= 0x39) { | ||||
| AVRational fps; | AVRational fps; | ||||
| len -= 0x39; | len -= 0x39; | ||||
| avio_seek(pb, 5, SEEK_CUR); // preamble | |||||
| avio_seek(pb, 0x30, SEEK_CUR); // payload description | |||||
| avio_skip(pb, 5); // preamble | |||||
| avio_skip(pb, 0x30); // payload description | |||||
| fps = fps_umf2avr(avio_rl32(pb)); | fps = fps_umf2avr(avio_rl32(pb)); | ||||
| if (!main_timebase.num || !main_timebase.den) { | if (!main_timebase.num || !main_timebase.den) { | ||||
| // this may not always be correct, but simply the best we can get | // this may not always be correct, but simply the best we can get | ||||
| @@ -354,7 +354,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { | |||||
| av_log(s, AV_LOG_INFO, "UMF packet too short\n"); | av_log(s, AV_LOG_INFO, "UMF packet too short\n"); | ||||
| } else | } else | ||||
| av_log(s, AV_LOG_INFO, "UMF packet missing\n"); | av_log(s, AV_LOG_INFO, "UMF packet missing\n"); | ||||
| avio_seek(pb, len, SEEK_CUR); | |||||
| avio_skip(pb, len); | |||||
| // set a fallback value, 60000/1001 is specified for audio-only files | // set a fallback value, 60000/1001 is specified for audio-only files | ||||
| // so use that regardless of why we do not know the video frame rate. | // so use that regardless of why we do not know the video frame rate. | ||||
| if (!main_timebase.num || !main_timebase.den) | if (!main_timebase.num || !main_timebase.den) | ||||
| @@ -437,7 +437,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { | |||||
| continue; | continue; | ||||
| } | } | ||||
| if (pkt_type != PKT_MEDIA) { | if (pkt_type != PKT_MEDIA) { | ||||
| avio_seek(pb, pkt_len, SEEK_CUR); | |||||
| avio_skip(pb, pkt_len); | |||||
| continue; | continue; | ||||
| } | } | ||||
| if (pkt_len < 16) { | if (pkt_len < 16) { | ||||
| @@ -462,7 +462,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { | |||||
| int last = field_info & 0xffff; // last is exclusive | int last = field_info & 0xffff; // last is exclusive | ||||
| int bps = av_get_bits_per_sample(st->codec->codec_id)>>3; | int bps = av_get_bits_per_sample(st->codec->codec_id)>>3; | ||||
| if (first <= last && last*bps <= pkt_len) { | if (first <= last && last*bps <= pkt_len) { | ||||
| avio_seek(pb, first*bps, SEEK_CUR); | |||||
| avio_skip(pb, first*bps); | |||||
| skip = pkt_len - last*bps; | skip = pkt_len - last*bps; | ||||
| pkt_len = (last-first)*bps; | pkt_len = (last-first)*bps; | ||||
| } else | } else | ||||
| @@ -470,7 +470,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { | |||||
| } | } | ||||
| ret = av_get_packet(pb, pkt, pkt_len); | ret = av_get_packet(pb, pkt, pkt_len); | ||||
| if (skip) | if (skip) | ||||
| avio_seek(pb, skip, SEEK_CUR); | |||||
| avio_skip(pb, skip); | |||||
| pkt->stream_index = stream_index; | pkt->stream_index = stream_index; | ||||
| pkt->dts = field_nr; | pkt->dts = field_nr; | ||||
| return ret; | return ret; | ||||
| @@ -753,7 +753,7 @@ static int gxf_write_header(AVFormatContext *s) | |||||
| gxf->packet_count = 3; | gxf->packet_count = 3; | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -781,12 +781,12 @@ static int gxf_write_trailer(AVFormatContext *s) | |||||
| gxf_write_map_packet(s, 1); | gxf_write_map_packet(s, 1); | ||||
| gxf_write_flt_packet(s); | gxf_write_flt_packet(s); | ||||
| gxf_write_umf_packet(s); | gxf_write_umf_packet(s); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| /* update duration in all map packets */ | /* update duration in all map packets */ | ||||
| for (i = 1; i < gxf->map_offsets_nb; i++) { | for (i = 1; i < gxf->map_offsets_nb; i++) { | ||||
| avio_seek(pb, gxf->map_offsets[i], SEEK_SET); | avio_seek(pb, gxf->map_offsets[i], SEEK_SET); | ||||
| gxf_write_map_packet(s, 1); | gxf_write_map_packet(s, 1); | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| } | } | ||||
| avio_seek(pb, end, SEEK_SET); | avio_seek(pb, end, SEEK_SET); | ||||
| @@ -895,7 +895,7 @@ static int gxf_write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| gxf->packet_count = 0; | gxf->packet_count = 0; | ||||
| } | } | ||||
| put_flush_packet(pb); | |||||
| avio_flush(pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -136,6 +136,52 @@ static void read_ttag(AVFormatContext *s, AVIOContext *pb, int taglen, const cha | |||||
| av_metadata_set2(&s->metadata, key, val, AV_METADATA_DONT_OVERWRITE); | av_metadata_set2(&s->metadata, key, val, AV_METADATA_DONT_OVERWRITE); | ||||
| } | } | ||||
| static int is_number(const char *str) | |||||
| { | |||||
| while (*str >= '0' && *str <= '9') str++; | |||||
| return !*str; | |||||
| } | |||||
| static AVMetadataTag* get_date_tag(AVMetadata *m, const char *tag) | |||||
| { | |||||
| AVMetadataTag *t; | |||||
| if ((t = av_metadata_get(m, tag, NULL, AV_METADATA_MATCH_CASE)) && | |||||
| strlen(t->value) == 4 && is_number(t->value)) | |||||
| return t; | |||||
| return NULL; | |||||
| } | |||||
| static void merge_date(AVMetadata **m) | |||||
| { | |||||
| AVMetadataTag *t; | |||||
| char date[17] = {0}; // YYYY-MM-DD hh:mm | |||||
| if (!(t = get_date_tag(*m, "TYER")) && | |||||
| !(t = get_date_tag(*m, "TYE"))) | |||||
| return; | |||||
| av_strlcpy(date, t->value, 5); | |||||
| av_metadata_set2(m, "TYER", NULL, 0); | |||||
| av_metadata_set2(m, "TYE", NULL, 0); | |||||
| if (!(t = get_date_tag(*m, "TDAT")) && | |||||
| !(t = get_date_tag(*m, "TDA"))) | |||||
| goto finish; | |||||
| snprintf(date + 4, sizeof(date) - 4, "-%.2s-%.2s", t->value + 2, t->value); | |||||
| av_metadata_set2(m, "TDAT", NULL, 0); | |||||
| av_metadata_set2(m, "TDA", NULL, 0); | |||||
| if (!(t = get_date_tag(*m, "TIME")) && | |||||
| !(t = get_date_tag(*m, "TIM"))) | |||||
| goto finish; | |||||
| snprintf(date + 10, sizeof(date) - 10, " %.2s:%.2s", t->value, t->value + 2); | |||||
| av_metadata_set2(m, "TIME", NULL, 0); | |||||
| av_metadata_set2(m, "TIM", NULL, 0); | |||||
| finish: | |||||
| if (date[0]) | |||||
| av_metadata_set2(m, "date", date, 0); | |||||
| } | |||||
| static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t flags) | static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t flags) | ||||
| { | { | ||||
| int isv34, unsync; | int isv34, unsync; | ||||
| @@ -172,7 +218,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t | |||||
| unsync = flags & 0x80; | unsync = flags & 0x80; | ||||
| if (isv34 && flags & 0x40) /* Extended header present, just skip over it */ | if (isv34 && flags & 0x40) /* Extended header present, just skip over it */ | ||||
| avio_seek(s->pb, get_size(s->pb, 4), SEEK_CUR); | |||||
| avio_skip(s->pb, get_size(s->pb, 4)); | |||||
| while (len >= taghdrlen) { | while (len >= taghdrlen) { | ||||
| unsigned int tflags; | unsigned int tflags; | ||||
| @@ -208,7 +254,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t | |||||
| if (tflags & (ID3v2_FLAG_ENCRYPTION | ID3v2_FLAG_COMPRESSION)) { | if (tflags & (ID3v2_FLAG_ENCRYPTION | ID3v2_FLAG_COMPRESSION)) { | ||||
| av_log(s, AV_LOG_WARNING, "Skipping encrypted/compressed ID3v2 frame %s.\n", tag); | av_log(s, AV_LOG_WARNING, "Skipping encrypted/compressed ID3v2 frame %s.\n", tag); | ||||
| avio_seek(s->pb, tlen, SEEK_CUR); | |||||
| avio_skip(s->pb, tlen); | |||||
| } else if (tag[0] == 'T') { | } else if (tag[0] == 'T') { | ||||
| if (unsync || tunsync) { | if (unsync || tunsync) { | ||||
| int i, j; | int i, j; | ||||
| @@ -229,7 +275,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t | |||||
| else if (!tag[0]) { | else if (!tag[0]) { | ||||
| if (tag[1]) | if (tag[1]) | ||||
| av_log(s, AV_LOG_WARNING, "invalid frame id, assuming padding"); | av_log(s, AV_LOG_WARNING, "invalid frame id, assuming padding"); | ||||
| avio_seek(s->pb, tlen, SEEK_CUR); | |||||
| avio_skip(s->pb, tlen); | |||||
| break; | break; | ||||
| } | } | ||||
| /* Skip to end of tag */ | /* Skip to end of tag */ | ||||
| @@ -238,10 +284,10 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t | |||||
| if (len > 0) { | if (len > 0) { | ||||
| /* Skip padding */ | /* Skip padding */ | ||||
| avio_seek(s->pb, len, SEEK_CUR); | |||||
| avio_skip(s->pb, len); | |||||
| } | } | ||||
| if (version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip over it */ | if (version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip over it */ | ||||
| avio_seek(s->pb, 10, SEEK_CUR); | |||||
| avio_skip(s->pb, 10); | |||||
| av_free(buffer); | av_free(buffer); | ||||
| return; | return; | ||||
| @@ -280,6 +326,7 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic) | |||||
| ff_metadata_conv(&s->metadata, NULL, ff_id3v2_34_metadata_conv); | ff_metadata_conv(&s->metadata, NULL, ff_id3v2_34_metadata_conv); | ||||
| ff_metadata_conv(&s->metadata, NULL, ff_id3v2_2_metadata_conv); | ff_metadata_conv(&s->metadata, NULL, ff_id3v2_2_metadata_conv); | ||||
| ff_metadata_conv(&s->metadata, NULL, ff_id3v2_4_metadata_conv); | ff_metadata_conv(&s->metadata, NULL, ff_id3v2_4_metadata_conv); | ||||
| merge_date(&s->metadata); | |||||
| } | } | ||||
| const AVMetadataConv ff_id3v2_34_metadata_conv[] = { | const AVMetadataConv ff_id3v2_34_metadata_conv[] = { | ||||
| @@ -257,7 +257,7 @@ static int idcin_read_packet(AVFormatContext *s, | |||||
| chunk_size = avio_rl32(pb); | chunk_size = avio_rl32(pb); | ||||
| /* skip the number of decoded bytes (always equal to width * height) */ | /* skip the number of decoded bytes (always equal to width * height) */ | ||||
| avio_seek(pb, 4, SEEK_CUR); | |||||
| avio_skip(pb, 4); | |||||
| chunk_size -= 4; | chunk_size -= 4; | ||||
| ret= av_get_packet(pb, pkt, chunk_size); | ret= av_get_packet(pb, pkt, chunk_size); | ||||
| if (ret < 0) | if (ret < 0) | ||||
| @@ -136,14 +136,14 @@ static int roq_read_packet(AVFormatContext *s, | |||||
| break; | break; | ||||
| } | } | ||||
| /* don't care about this chunk anymore */ | /* don't care about this chunk anymore */ | ||||
| avio_seek(pb, RoQ_CHUNK_PREAMBLE_SIZE, SEEK_CUR); | |||||
| avio_skip(pb, RoQ_CHUNK_PREAMBLE_SIZE); | |||||
| break; | break; | ||||
| case RoQ_QUAD_CODEBOOK: | case RoQ_QUAD_CODEBOOK: | ||||
| /* packet needs to contain both this codebook and next VQ chunk */ | /* packet needs to contain both this codebook and next VQ chunk */ | ||||
| codebook_offset = avio_tell(pb) - RoQ_CHUNK_PREAMBLE_SIZE; | codebook_offset = avio_tell(pb) - RoQ_CHUNK_PREAMBLE_SIZE; | ||||
| codebook_size = chunk_size; | codebook_size = chunk_size; | ||||
| avio_seek(pb, codebook_size, SEEK_CUR); | |||||
| avio_skip(pb, codebook_size); | |||||
| if (avio_read(pb, preamble, RoQ_CHUNK_PREAMBLE_SIZE) != | if (avio_read(pb, preamble, RoQ_CHUNK_PREAMBLE_SIZE) != | ||||
| RoQ_CHUNK_PREAMBLE_SIZE) | RoQ_CHUNK_PREAMBLE_SIZE) | ||||
| return AVERROR(EIO); | return AVERROR(EIO); | ||||
| @@ -30,7 +30,7 @@ static int roq_write_header(struct AVFormatContext *s) | |||||
| }; | }; | ||||
| avio_write(s->pb, header, 8); | avio_write(s->pb, header, 8); | ||||
| put_flush_packet(s->pb); | |||||
| avio_flush(s->pb); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -134,7 +134,7 @@ static int iff_read_header(AVFormatContext *s, | |||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| st->codec->channels = 1; | st->codec->channels = 1; | ||||
| avio_seek(pb, 8, SEEK_CUR); | |||||
| avio_skip(pb, 8); | |||||
| // codec_tag used by ByteRun1 decoder to distinguish progressive (PBM) and interlaced (ILBM) content | // codec_tag used by ByteRun1 decoder to distinguish progressive (PBM) and interlaced (ILBM) content | ||||
| st->codec->codec_tag = avio_rl32(pb); | st->codec->codec_tag = avio_rl32(pb); | ||||
| @@ -152,10 +152,10 @@ static int iff_read_header(AVFormatContext *s, | |||||
| if (data_size < 14) | if (data_size < 14) | ||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| avio_seek(pb, 12, SEEK_CUR); | |||||
| avio_skip(pb, 12); | |||||
| st->codec->sample_rate = avio_rb16(pb); | st->codec->sample_rate = avio_rb16(pb); | ||||
| if (data_size >= 16) { | if (data_size >= 16) { | ||||
| avio_seek(pb, 1, SEEK_CUR); | |||||
| avio_skip(pb, 1); | |||||
| compression = avio_r8(pb); | compression = avio_r8(pb); | ||||
| } | } | ||||
| break; | break; | ||||
| @@ -186,14 +186,14 @@ static int iff_read_header(AVFormatContext *s, | |||||
| return AVERROR_INVALIDDATA; | return AVERROR_INVALIDDATA; | ||||
| st->codec->width = avio_rb16(pb); | st->codec->width = avio_rb16(pb); | ||||
| st->codec->height = avio_rb16(pb); | st->codec->height = avio_rb16(pb); | ||||
| avio_seek(pb, 4, SEEK_CUR); // x, y offset | |||||
| avio_skip(pb, 4); // x, y offset | |||||
| st->codec->bits_per_coded_sample = avio_r8(pb); | st->codec->bits_per_coded_sample = avio_r8(pb); | ||||
| if (data_size >= 11) { | if (data_size >= 11) { | ||||
| avio_seek(pb, 1, SEEK_CUR); // masking | |||||
| avio_skip(pb, 1); // masking | |||||
| compression = avio_r8(pb); | compression = avio_r8(pb); | ||||
| } | } | ||||
| if (data_size >= 16) { | if (data_size >= 16) { | ||||
| avio_seek(pb, 3, SEEK_CUR); // paddding, transparent | |||||
| avio_skip(pb, 3); // paddding, transparent | |||||
| st->sample_aspect_ratio.num = avio_r8(pb); | st->sample_aspect_ratio.num = avio_r8(pb); | ||||
| st->sample_aspect_ratio.den = avio_r8(pb); | st->sample_aspect_ratio.den = avio_r8(pb); | ||||
| } | } | ||||
| @@ -223,7 +223,7 @@ static int iff_read_header(AVFormatContext *s, | |||||
| return res; | return res; | ||||
| } | } | ||||
| } | } | ||||
| avio_seek(pb, data_size - (avio_tell(pb) - orig_pos) + (data_size & 1), SEEK_CUR); | |||||
| avio_skip(pb, data_size - (avio_tell(pb) - orig_pos) + (data_size & 1)); | |||||
| } | } | ||||
| avio_seek(pb, iff->body_pos, SEEK_SET); | avio_seek(pb, iff->body_pos, SEEK_SET); | ||||
| @@ -372,8 +372,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| avio_write(pb[0], pkt->data , ysize); | avio_write(pb[0], pkt->data , ysize); | ||||
| avio_write(pb[1], pkt->data + ysize, (pkt->size - ysize)/2); | avio_write(pb[1], pkt->data + ysize, (pkt->size - ysize)/2); | ||||
| avio_write(pb[2], pkt->data + ysize +(pkt->size - ysize)/2, (pkt->size - ysize)/2); | avio_write(pb[2], pkt->data + ysize +(pkt->size - ysize)/2, (pkt->size - ysize)/2); | ||||
| put_flush_packet(pb[1]); | |||||
| put_flush_packet(pb[2]); | |||||
| avio_flush(pb[1]); | |||||
| avio_flush(pb[2]); | |||||
| avio_close(pb[1]); | avio_close(pb[1]); | ||||
| avio_close(pb[2]); | avio_close(pb[2]); | ||||
| }else{ | }else{ | ||||
| @@ -402,7 +402,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| } | } | ||||
| avio_write(pb[0], pkt->data, pkt->size); | avio_write(pb[0], pkt->data, pkt->size); | ||||
| } | } | ||||
| put_flush_packet(pb[0]); | |||||
| avio_flush(pb[0]); | |||||
| if (!img->is_pipe) { | if (!img->is_pipe) { | ||||
| avio_close(pb[0]); | avio_close(pb[0]); | ||||
| } | } | ||||
| @@ -35,11 +35,11 @@ static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| w = avio_rl16(s->pb); | w = avio_rl16(s->pb); | ||||
| h = avio_rl16(s->pb); | h = avio_rl16(s->pb); | ||||
| avio_seek(s->pb, 8, SEEK_CUR); // zero + size (padded?) | |||||
| avio_seek(s->pb, 2, SEEK_CUR); | |||||
| avio_skip(s->pb, 8); // zero + size (padded?) | |||||
| avio_skip(s->pb, 2); | |||||
| unk1 = avio_rl16(s->pb); | unk1 = avio_rl16(s->pb); | ||||
| unk2 = avio_rl16(s->pb); | unk2 = avio_rl16(s->pb); | ||||
| avio_seek(s->pb, 22, SEEK_CUR); // ASCII timestamp | |||||
| avio_skip(s->pb, 22); // ASCII timestamp | |||||
| av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", | av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", | ||||
| size, w, h, unk1, unk2); | size, w, h, unk1, unk2); | ||||
| @@ -239,4 +239,15 @@ AVChapter *ff_new_chapter(AVFormatContext *s, int id, AVRational time_base, | |||||
| */ | */ | ||||
| void ff_reduce_index(AVFormatContext *s, int stream_index); | void ff_reduce_index(AVFormatContext *s, int stream_index); | ||||
| /* | |||||
| * Convert a relative url into an absolute url, given a base url. | |||||
| * | |||||
| * @param buf the buffer where output absolute url is written | |||||
| * @param size the size of buf | |||||
| * @param base the base url, may be equal to buf. | |||||
| * @param rel the new url, which is interpreted relative to base | |||||
| */ | |||||
| void ff_make_absolute_url(char *buf, int size, const char *base, | |||||
| const char *rel); | |||||
| #endif /* AVFORMAT_INTERNAL_H */ | #endif /* AVFORMAT_INTERNAL_H */ | ||||
| @@ -299,12 +299,12 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| case OPCODE_END_OF_STREAM: | case OPCODE_END_OF_STREAM: | ||||
| debug_ipmovie("end of stream\n"); | debug_ipmovie("end of stream\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_END_OF_CHUNK: | case OPCODE_END_OF_CHUNK: | ||||
| debug_ipmovie("end of chunk\n"); | debug_ipmovie("end of chunk\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_CREATE_TIMER: | case OPCODE_CREATE_TIMER: | ||||
| @@ -359,7 +359,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| case OPCODE_START_STOP_AUDIO: | case OPCODE_START_STOP_AUDIO: | ||||
| debug_ipmovie("start/stop audio\n"); | debug_ipmovie("start/stop audio\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_INIT_VIDEO_BUFFERS: | case OPCODE_INIT_VIDEO_BUFFERS: | ||||
| @@ -393,12 +393,12 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| case OPCODE_UNKNOWN_14: | case OPCODE_UNKNOWN_14: | ||||
| case OPCODE_UNKNOWN_15: | case OPCODE_UNKNOWN_15: | ||||
| debug_ipmovie("unknown (but documented) opcode %02X\n", opcode_type); | debug_ipmovie("unknown (but documented) opcode %02X\n", opcode_type); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_SEND_BUFFER: | case OPCODE_SEND_BUFFER: | ||||
| debug_ipmovie("send buffer\n"); | debug_ipmovie("send buffer\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_AUDIO_FRAME: | case OPCODE_AUDIO_FRAME: | ||||
| @@ -407,22 +407,22 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| /* log position and move on for now */ | /* log position and move on for now */ | ||||
| s->audio_chunk_offset = avio_tell(pb); | s->audio_chunk_offset = avio_tell(pb); | ||||
| s->audio_chunk_size = opcode_size; | s->audio_chunk_size = opcode_size; | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_SILENCE_FRAME: | case OPCODE_SILENCE_FRAME: | ||||
| debug_ipmovie("silence frame\n"); | debug_ipmovie("silence frame\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_INIT_VIDEO_MODE: | case OPCODE_INIT_VIDEO_MODE: | ||||
| debug_ipmovie("initialize video mode\n"); | debug_ipmovie("initialize video mode\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_CREATE_GRADIENT: | case OPCODE_CREATE_GRADIENT: | ||||
| debug_ipmovie("create gradient\n"); | debug_ipmovie("create gradient\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_SET_PALETTE: | case OPCODE_SET_PALETTE: | ||||
| @@ -464,7 +464,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| case OPCODE_SET_PALETTE_COMPRESSED: | case OPCODE_SET_PALETTE_COMPRESSED: | ||||
| debug_ipmovie("set palette compressed\n"); | debug_ipmovie("set palette compressed\n"); | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_SET_DECODING_MAP: | case OPCODE_SET_DECODING_MAP: | ||||
| @@ -473,7 +473,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| /* log position and move on for now */ | /* log position and move on for now */ | ||||
| s->decode_map_chunk_offset = avio_tell(pb); | s->decode_map_chunk_offset = avio_tell(pb); | ||||
| s->decode_map_chunk_size = opcode_size; | s->decode_map_chunk_size = opcode_size; | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| case OPCODE_VIDEO_DATA: | case OPCODE_VIDEO_DATA: | ||||
| @@ -482,7 +482,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, | |||||
| /* log position and move on for now */ | /* log position and move on for now */ | ||||
| s->video_chunk_offset = avio_tell(pb); | s->video_chunk_offset = avio_tell(pb); | ||||
| s->video_chunk_size = opcode_size; | s->video_chunk_size = opcode_size; | ||||
| avio_seek(pb, opcode_size, SEEK_CUR); | |||||
| avio_skip(pb, opcode_size); | |||||
| break; | break; | ||||
| default: | default: | ||||