mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
Merge remote-tracking branch 'newdev/master'
Conflicts: Changelog doc/APIchanges doc/optimization.txt libavformat/avio.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
0fecf2642b
2
CREDITS
2
CREDITS
@ -1,5 +1,5 @@
|
||||
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
|
||||
authorship, it remains here for historical reasons only.
|
||||
|
||||
|
@ -79,6 +79,7 @@ version <next>:
|
||||
- Bink version 'b' audio and video decoder
|
||||
- Bitmap Brothers JV playback system
|
||||
- Linux framebuffer input device added
|
||||
- Apple HTTP Live Streaming protocol handler
|
||||
|
||||
|
||||
version 0.6:
|
||||
|
2
Doxyfile
2
Doxyfile
@ -25,7 +25,7 @@ DOXYFILE_ENCODING = UTF-8
|
||||
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
|
||||
# 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.
|
||||
# This could be handy for archiving the generated documentation or
|
||||
|
6
INSTALL
6
INSTALL
@ -2,10 +2,10 @@
|
||||
1) Type './configure' to create the configuration. A list of configure
|
||||
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
|
||||
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.
|
||||
|
20
LICENSE
20
LICENSE
@ -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
|
||||
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
|
||||
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
|
||||
- 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
|
||||
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.
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
as FFmpeg then becomes nonfree and unredistributable.
|
||||
as Libav then becomes nonfree and unredistributable.
|
||||
|
2
Makefile
2
Makefile
@ -177,7 +177,7 @@ distclean::
|
||||
$(RM) version.h config.* libavutil/avconfig.h
|
||||
|
||||
config:
|
||||
$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)
|
||||
$(SRC_PATH)/configure $(value LIBAV_CONFIGURATION)
|
||||
|
||||
# regression tests
|
||||
|
||||
|
@ -399,7 +399,7 @@ static int warned_cfg = 0;
|
||||
} \
|
||||
if (flags & SHOW_CONFIG) { \
|
||||
const char *cfg = libname##_configuration(); \
|
||||
if (strcmp(FFMPEG_CONFIGURATION, cfg)) { \
|
||||
if (strcmp(LIBAV_CONFIGURATION, cfg)) { \
|
||||
if (!warned_cfg) { \
|
||||
fprintf(outstream, \
|
||||
"%sWARNING: library configuration mismatch\n", \
|
||||
@ -425,17 +425,17 @@ static void print_all_libs_info(FILE* outstream, int flags)
|
||||
|
||||
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);
|
||||
fprintf(stderr, " built on %s %s with %s %s\n",
|
||||
__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_VERSION);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
53
configure
vendored
53
configure
vendored
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# FFmpeg configure script
|
||||
# Libav configure script
|
||||
#
|
||||
# Copyright (c) 2000-2002 Fabrice Bellard
|
||||
# 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 "This configure script requires a POSIX-compatible shell"
|
||||
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 "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
|
||||
echo "This bash version ($BASH_VERSION) is broken on your platform."
|
||||
echo "Upgrade to a later version if available."
|
||||
@ -238,7 +238,7 @@ Advanced options (experts only):
|
||||
--enable-sram allow use of on-chip SRAM
|
||||
--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
|
||||
--enable-debug=LEVEL set the debug level [$debuglevel]
|
||||
--disable-optimizations disable compiler optimizations
|
||||
@ -280,7 +280,7 @@ die(){
|
||||
|
||||
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
|
||||
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
|
||||
if disabled logging; then
|
||||
cat <<EOF
|
||||
@ -1672,7 +1672,7 @@ for v in "$@"; do
|
||||
r=${v#*=}
|
||||
l=${v%"$r"}
|
||||
r=$(sh_quote "$r")
|
||||
FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
|
||||
LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
|
||||
done
|
||||
|
||||
find_things(){
|
||||
@ -1784,7 +1784,7 @@ done
|
||||
|
||||
disabled logging && logfile=/dev/null
|
||||
|
||||
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
|
||||
echo "# $0 $LIBAV_CONFIGURATION" > $logfile
|
||||
set >> $logfile
|
||||
|
||||
test -n "$cross_prefix" && enable cross_compile
|
||||
@ -2344,7 +2344,7 @@ case $target_os in
|
||||
openbsd)
|
||||
enable malloc_aligned
|
||||
# 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
|
||||
# (simply quits with exit-code 1, no crash, no output).
|
||||
# Thus explicitly enable PIC here.
|
||||
@ -2369,7 +2369,8 @@ case $target_os in
|
||||
enable malloc_aligned
|
||||
gas="gas-preprocessor.pl $cc"
|
||||
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"
|
||||
add_ldflags -Wl,-dynamic,-search_paths_first
|
||||
SLIBSUF=".dylib"
|
||||
@ -2478,7 +2479,7 @@ case $target_os in
|
||||
;;
|
||||
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
|
||||
|
||||
@ -3201,9 +3202,9 @@ config_files="$TMPH config.mak"
|
||||
|
||||
cat > config.mak <<EOF
|
||||
# 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
|
||||
LIBDIR=\$(DESTDIR)$libdir
|
||||
SHLIBDIR=\$(DESTDIR)$shlibdir
|
||||
@ -3292,10 +3293,10 @@ get_version LIBAVFILTER libavfilter/avfilter.h
|
||||
|
||||
cat > $TMPH <<EOF
|
||||
/* 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 CC_TYPE "$cc_type"
|
||||
#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)
|
||||
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.
|
||||
cp_if_changed $TMPH config.h
|
||||
@ -3411,10 +3412,10 @@ Cflags: -I\${includedir}
|
||||
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
|
||||
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
|
||||
* e731b8d - rename init_put_byte() to ffio_init_context(), deprecating the
|
||||
original, and move it to a private header so it is no longer
|
||||
|
@ -1,7 +1,7 @@
|
||||
@chapter 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
|
||||
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.
|
||||
|
||||
Options to make:
|
||||
|
@ -1,10 +1,10 @@
|
||||
@chapter 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.
|
||||
|
||||
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
|
||||
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
|
||||
@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}
|
||||
@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:
|
||||
@itemize @bullet
|
||||
@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
|
||||
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
|
||||
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
|
||||
@ -76,7 +76,7 @@ The TAB character is forbidden outside of Makefiles as is any
|
||||
form of trailing whitespace. Commits containing either will be
|
||||
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.
|
||||
|
||||
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
|
||||
preferred.
|
||||
@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
|
||||
breaks the regression tests)
|
||||
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
|
||||
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
|
||||
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
|
||||
indentation changes (try to avoid this), separate them strictly from real
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
incorporates the requests from the review. This process may go through
|
||||
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,
|
||||
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
|
||||
Is the patch a unified diff?
|
||||
@item
|
||||
Is the patch against latest FFmpeg git master branch?
|
||||
Is the patch against latest Libav git master branch?
|
||||
@item
|
||||
Are you subscribed to ffmpeg-dev?
|
||||
(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?
|
||||
@item
|
||||
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
|
||||
You should maintain alphabetical order in alphabetically ordered lists as
|
||||
long as doing so does not break API/ABI compatibility.
|
||||
|
@ -1,10 +1,10 @@
|
||||
@chapter 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.
|
||||
|
||||
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
|
||||
manually via the corresponding @code{--enable-lib} option. You can list all
|
||||
available encoders using the configure option @code{--list-encoders}.
|
||||
|
@ -1,7 +1,7 @@
|
||||
@chapter 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}
|
||||
interface.
|
||||
|
||||
|
56
doc/faq.texi
56
doc/faq.texi
@ -1,8 +1,8 @@
|
||||
\input texinfo @c -*- texinfo -*-
|
||||
|
||||
@settitle FFmpeg FAQ
|
||||
@settitle Libav FAQ
|
||||
@titlepage
|
||||
@center @titlefont{FFmpeg FAQ}
|
||||
@center @titlefont{Libav FAQ}
|
||||
@end titlepage
|
||||
|
||||
@top
|
||||
@ -11,33 +11,33 @@
|
||||
|
||||
@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
|
||||
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
|
||||
request more timely and/or frequent releases unless you are willing to
|
||||
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
|
||||
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
|
||||
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.
|
||||
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.
|
||||
|
||||
@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.
|
||||
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.
|
||||
|
||||
@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
|
||||
not what you use to play it.
|
||||
@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
|
||||
|
||||
@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:
|
||||
@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?
|
||||
|
||||
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),
|
||||
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
|
||||
|
||||
@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
|
||||
already incorporate FFmpeg at (@url{projects.html}).
|
||||
already incorporate Libav at (@url{projects.html}).
|
||||
|
||||
@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?
|
||||
|
||||
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
|
||||
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
|
||||
the @emph{Microsoft Visual C++ compatibility} section in the FFmpeg
|
||||
the @emph{Microsoft Visual C++ compatibility} section in the Libav
|
||||
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
|
||||
since MinGW does the job adequately. None of the core developers
|
||||
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.
|
||||
|
||||
@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.
|
||||
|
||||
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
|
||||
@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++?
|
||||
|
||||
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
|
||||
favor straight C; it works for them. For more arguments on this matter,
|
||||
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.
|
||||
|
||||
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
|
||||
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}
|
||||
|
||||
@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
|
||||
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.
|
||||
|
||||
|
@ -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
|
||||
awkward to specify on the command line. Lines starting with the hash
|
||||
('#') 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},
|
||||
@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
|
||||
|
||||
@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 begin AUTHORS
|
||||
The FFmpeg developers
|
||||
The Libav developers
|
||||
@c man end
|
||||
|
||||
@end ignore
|
||||
|
@ -20,9 +20,9 @@ ffplay [options] @file{input_file}
|
||||
@chapter 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
|
||||
various FFmpeg APIs.
|
||||
various Libav APIs.
|
||||
@c man end
|
||||
|
||||
@chapter Options
|
||||
@ -169,11 +169,11 @@ Seek to percentage in file corresponding to fraction of width.
|
||||
@settitle FFplay media player
|
||||
|
||||
@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 begin AUTHORS
|
||||
The FFmpeg developers
|
||||
The Libav developers
|
||||
@c man end
|
||||
|
||||
@end ignore
|
||||
|
@ -122,11 +122,11 @@ with name "STREAM".
|
||||
@settitle FFprobe media prober
|
||||
|
||||
@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 begin AUTHORS
|
||||
The FFmpeg developers
|
||||
The Libav developers
|
||||
@c man end
|
||||
|
||||
@end ignore
|
||||
|
@ -266,11 +266,11 @@ rather than as a daemon.
|
||||
@c man begin SEEALSO
|
||||
|
||||
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 begin AUTHORS
|
||||
The FFmpeg developers
|
||||
The Libav developers
|
||||
@c man end
|
||||
|
||||
@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
|
||||
the environment variable @env{FFMPEG_FORCE_COLOR}.
|
||||
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
|
||||
|
@ -92,7 +92,7 @@ Follows a BNF description for the filtergraph syntax:
|
||||
@chapter 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.
|
||||
The configure output will show the audio filters included in your
|
||||
build.
|
||||
@ -155,7 +155,7 @@ tools.
|
||||
@chapter 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.
|
||||
The configure output will show the video filters included in your
|
||||
build.
|
||||
@ -531,7 +531,7 @@ format=yuv420p:yuv444p:yuv410p
|
||||
Apply a frei0r effect to the input video.
|
||||
|
||||
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:
|
||||
@example
|
||||
@ -669,7 +669,7 @@ Pass the video source unchanged to the output.
|
||||
Apply video transform using libopencv.
|
||||
|
||||
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}.
|
||||
|
||||
@ -1314,7 +1314,7 @@ timebase. The expression can contain the constants "PI", "E", "PHI",
|
||||
Provide a frei0r source.
|
||||
|
||||
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:
|
||||
@example
|
||||
|
@ -11,13 +11,13 @@
|
||||
|
||||
@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
|
||||
explicitly requested by passing the appropriate flags to @file{./configure}.
|
||||
|
||||
@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.
|
||||
|
||||
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
|
||||
@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
|
||||
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.
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ You can use the @code{-formats} and @code{-codecs} options to have an exhaustive
|
||||
|
||||
@section File Formats
|
||||
|
||||
FFmpeg supports the following file formats through the @code{libavformat}
|
||||
Libav supports the following file formats through the @code{libavformat}
|
||||
library:
|
||||
|
||||
@multitable @columnfractions .4 .1 .1 .4
|
||||
@ -751,18 +751,18 @@ Using a cross-compiler is preferred for various reasons.
|
||||
|
||||
@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
|
||||
workaround.
|
||||
|
||||
@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}.
|
||||
|
||||
@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
|
||||
make sure your compiler really uses the required version of gas
|
||||
after a binutils upgrade, run:
|
||||
@ -777,7 +777,7 @@ to configure.
|
||||
|
||||
@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}).
|
||||
|
||||
@subsubsection FreeBSD
|
||||
@ -790,7 +790,7 @@ getting the system headers fixed.
|
||||
|
||||
@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
|
||||
(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
|
||||
@ -808,22 +808,22 @@ bash ./configure
|
||||
MacOS X on PowerPC or ARM (iPhone) requires a preprocessor from
|
||||
@url{http://github.com/yuvi/gas-preprocessor} to build the optimized
|
||||
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
|
||||
|
||||
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
|
||||
@url{http://ffmpeg.arrozcru.org/}.
|
||||
|
||||
@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/}.
|
||||
You can find detailed installation
|
||||
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
|
||||
packages updated to the latest version. The minimum version for some packages
|
||||
are listed below:
|
||||
@ -835,7 +835,7 @@ are listed below:
|
||||
@item mingw-runtime 3.15
|
||||
@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}).
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
@end itemize
|
||||
|
||||
@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
|
||||
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
|
||||
@ -881,13 +881,13 @@ inside the libav* libraries, since MSVC++ does not recognize the debug
|
||||
symbols generated by GCC.
|
||||
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,
|
||||
you might have to modify the procedures slightly.
|
||||
|
||||
@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
|
||||
|
||||
@ -898,13 +898,13 @@ Application Wizard, uncheck the "Precompiled headers" option.
|
||||
@item Write the source code for your application, or, for testing, just
|
||||
copy the code from an existing sample application into the source file
|
||||
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"
|
||||
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
|
||||
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}).
|
||||
Do not add MinGW's include directory here, or the include files will
|
||||
conflict with MSVC's.
|
||||
@ -912,7 +912,7 @@ conflict with MSVC's.
|
||||
@item Still in the "Project / Properties" dialog box, select
|
||||
"Linker / General" from the tree view and edit the
|
||||
"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}),
|
||||
and the directory where MinGW's GCC libs are installed
|
||||
(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 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}
|
||||
and install it in MSVC++'s include directory
|
||||
(i.e. @file{C:\Program Files\Microsoft Visual Studio 8\VC\include}).
|
||||
|
||||
@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
|
||||
#define inline _inline
|
||||
@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
|
||||
from @file{Microsoft (R) Library Manager}, this means your environment
|
||||
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.
|
||||
|
||||
@item Build FFmpeg with
|
||||
@item Build Libav with
|
||||
|
||||
@example
|
||||
./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
|
||||
(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
|
||||
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
|
||||
@ -1014,14 +1014,14 @@ extern __declspec(dllimport) const AVPixFmtDescriptor av_pix_fmt_descriptors[];
|
||||
You must use the MinGW cross compilation tools available at
|
||||
@url{http://www.mingw.org/}.
|
||||
|
||||
Then configure FFmpeg with the following options:
|
||||
Then configure Libav with the following options:
|
||||
@example
|
||||
./configure --target-os=mingw32 --cross-prefix=i386-mingw32msvc-
|
||||
@end example
|
||||
(you can change the cross-prefix according to the prefix chosen for the
|
||||
MinGW tools).
|
||||
|
||||
Then you can easily test FFmpeg with Wine
|
||||
Then you can easily test Libav with Wine
|
||||
(@url{http://www.winehq.com/}).
|
||||
|
||||
@subsection Compilation under Cygwin
|
||||
@ -1055,7 +1055,7 @@ shared libraries:
|
||||
./configure --enable-shared --disable-static --extra-cflags=-fno-reorder-functions
|
||||
@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:
|
||||
@example
|
||||
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.
|
||||
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
|
||||
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>
|
||||
|
||||
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>
|
||||
|
||||
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.
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ I. BASICS:
|
||||
|
||||
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
|
||||
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:
|
||||
|
@ -1,10 +1,10 @@
|
||||
@chapter 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.
|
||||
|
||||
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
|
||||
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
|
||||
@var{client_name} is the name provided by the application, and @var{N}
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
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
|
||||
@ -60,7 +60,7 @@ critical
|
||||
No feature request can be critical.
|
||||
|
||||
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.
|
||||
Examples here might be completely broken MPEG-4 decoding or a build issue
|
||||
on Linux.
|
||||
@ -81,7 +81,7 @@ minor
|
||||
wish
|
||||
Something that is desirable to have but that there is no urgency at
|
||||
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.
|
||||
|
||||
|
||||
|
@ -11,10 +11,10 @@
|
||||
|
||||
@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.
|
||||
|
||||
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
|
||||
libavfilter then check it out from the libavfilter repository into
|
||||
some directory of your choice by:
|
||||
@ -74,7 +74,7 @@ not have video output.
|
||||
|
||||
@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
|
||||
corresponding textual representation in the dot language.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
@chapter 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.
|
||||
|
||||
The file format is as follows:
|
||||
@ -53,7 +53,7 @@ A ffmetadata file might look like this:
|
||||
;FFMETADATA1
|
||||
title=bike\\shed
|
||||
;this is a comment
|
||||
artist=FFmpeg troll team
|
||||
artist=Libav troll team
|
||||
|
||||
[CHAPTER]
|
||||
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
|
||||
AVCodecContext execute() and execute2().
|
||||
|
@ -1,10 +1,10 @@
|
||||
@chapter 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.
|
||||
|
||||
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
|
||||
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)
|
||||
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
|
||||
better, because external asm cannot be inlined
|
||||
|
@ -1,10 +1,10 @@
|
||||
@chapter 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.
|
||||
|
||||
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
|
||||
configure option "--list-outdevs".
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
@chapter 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.
|
||||
|
||||
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
|
||||
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
|
||||
remote HTTP resources or local files, accessed using the standard
|
||||
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
|
||||
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
|
||||
@end example
|
||||
|
||||
|
||||
@section concat
|
||||
|
||||
Physical concatenation protocol.
|
||||
|
@ -8,9 +8,9 @@ it's a little late for this year's soc (2006).
|
||||
|
||||
The Goal:
|
||||
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
|
||||
* must improve FFmpeg somehow (faster, smaller, "better",
|
||||
* must improve Libav somehow (faster, smaller, "better",
|
||||
more codecs supported, fewer bugs, cleaner, ...)
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
|
129
ffserver.c
129
ffserver.c
@ -1861,7 +1861,7 @@ static void fmt_bytecount(AVIOContext *pb, int64_t count)
|
||||
|
||||
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)
|
||||
@ -1880,20 +1880,20 @@ static void compute_status(HTTPContext *c)
|
||||
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])
|
||||
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 */
|
||||
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;
|
||||
while (stream != NULL) {
|
||||
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);
|
||||
url_fprintf(pb, "<td align=right> %d <td align=right> ",
|
||||
avio_printf(pb, "<td align=right> %d <td align=right> ",
|
||||
stream->conns_served);
|
||||
fmt_bytecount(pb, stream->bytes_served);
|
||||
switch(stream->stream_type) {
|
||||
@ -1962,33 +1962,33 @@ static void compute_status(HTTPContext *c)
|
||||
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->bandwidth,
|
||||
video_bit_rate / 1000, video_codec_name, video_codec_name_extra,
|
||||
audio_bit_rate / 1000, audio_codec_name, audio_codec_name_extra);
|
||||
if (stream->feed)
|
||||
url_fprintf(pb, "<td>%s", stream->feed->filename);
|
||||
avio_printf(pb, "<td>%s", stream->feed->filename);
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
stream = stream->next;
|
||||
}
|
||||
url_fprintf(pb, "</table>\n");
|
||||
avio_printf(pb, "</table>\n");
|
||||
|
||||
stream = first_stream;
|
||||
while (stream != NULL) {
|
||||
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) {
|
||||
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)
|
||||
{
|
||||
@ -2007,7 +2007,7 @@ static void compute_status(HTTPContext *c)
|
||||
|
||||
if (fscanf(pid_stat, "%10s %64s", cpuperc,
|
||||
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);
|
||||
}
|
||||
fclose(pid_stat);
|
||||
@ -2015,9 +2015,9 @@ static void compute_status(HTTPContext *c)
|
||||
}
|
||||
#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++) {
|
||||
AVStream *st = stream->streams[i];
|
||||
@ -2040,26 +2040,26 @@ static void compute_status(HTTPContext *c)
|
||||
default:
|
||||
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);
|
||||
}
|
||||
url_fprintf(pb, "</table>\n");
|
||||
avio_printf(pb, "</table>\n");
|
||||
|
||||
}
|
||||
stream = stream->next;
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
i = 0;
|
||||
while (c1 != NULL) {
|
||||
@ -2078,7 +2078,7 @@ static void compute_status(HTTPContext *c)
|
||||
|
||||
i++;
|
||||
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,
|
||||
c1->stream ? c1->stream->filename : "",
|
||||
c1->state == HTTPSTATE_RECEIVE_DATA ? "(input)" : "",
|
||||
@ -2086,20 +2086,20 @@ static void compute_status(HTTPContext *c)
|
||||
c1->protocol,
|
||||
http_state[c1->state]);
|
||||
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);
|
||||
url_fprintf(pb, "<td align=right>");
|
||||
avio_printf(pb, "<td align=right>");
|
||||
fmt_bytecount(pb, c1->data_count);
|
||||
url_fprintf(pb, "\n");
|
||||
avio_printf(pb, "\n");
|
||||
c1 = c1->next;
|
||||
}
|
||||
url_fprintf(pb, "</table>\n");
|
||||
avio_printf(pb, "</table>\n");
|
||||
|
||||
/* date */
|
||||
ti = time(NULL);
|
||||
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);
|
||||
c->buffer_ptr = c->pb_buffer;
|
||||
@ -2721,7 +2721,8 @@ static int http_receive_data(HTTPContext *c)
|
||||
if (!fmt_in)
|
||||
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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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 */
|
||||
ti = time(NULL);
|
||||
tm = gmtime(&ti);
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@ -2970,10 +2971,10 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
|
||||
static void rtsp_cmd_options(HTTPContext *c, const char *url)
|
||||
{
|
||||
// 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)
|
||||
@ -3014,10 +3015,10 @@ static void rtsp_cmd_describe(HTTPContext *c, const char *url)
|
||||
return;
|
||||
}
|
||||
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);
|
||||
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 */
|
||||
rtsp_reply_header(c, RTSP_STATUS_OK);
|
||||
/* 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) {
|
||||
case RTSP_LOWER_TRANSPORT_UDP:
|
||||
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]);
|
||||
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",
|
||||
th->client_port_min, th->client_port_max,
|
||||
rtp_port, rtcp_port);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
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 */
|
||||
rtsp_reply_header(c, RTSP_STATUS_OK);
|
||||
/* 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)
|
||||
@ -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 */
|
||||
rtsp_reply_header(c, RTSP_STATUS_OK);
|
||||
/* 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)
|
||||
@ -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 */
|
||||
rtsp_reply_header(c, RTSP_STATUS_OK);
|
||||
/* 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 += 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 {
|
||||
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;
|
||||
resbits += curbits;
|
||||
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);
|
||||
q1 = 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) {
|
||||
q1 += q0low - q0;
|
||||
q0 = q0low;
|
||||
@ -723,7 +723,7 @@ static void search_for_quantizers_twoloop(AVCodecContext *avctx,
|
||||
sce->zeroes[w*16+g] = !nz;
|
||||
if (nz)
|
||||
minthr = FFMIN(minthr, uplim);
|
||||
allz = FFMAX(allz, nz);
|
||||
allz |= nz;
|
||||
}
|
||||
}
|
||||
for (w = 0; w < sce->ics.num_windows; w += sce->ics.group_len[w]) {
|
||||
|
@ -39,8 +39,8 @@
|
||||
* 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_RPELEV 2.0f
|
||||
@ -61,9 +61,7 @@
|
||||
*/
|
||||
typedef struct AacPsyBand{
|
||||
float energy; ///< band energy
|
||||
float ffac; ///< form factor
|
||||
float thr; ///< energy threshold
|
||||
float min_snr; ///< minimal SNR
|
||||
float thr_quiet; ///< threshold in quiet
|
||||
}AacPsyBand;
|
||||
|
||||
@ -88,17 +86,18 @@ typedef struct AacPsyChannel{
|
||||
* psychoacoustic model frame type-dependent coefficients
|
||||
*/
|
||||
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;
|
||||
|
||||
/**
|
||||
* 3GPP TS26.403-inspired psychoacoustic model specific data
|
||||
*/
|
||||
typedef struct AacPsyContext{
|
||||
AacPsyCoeffs psy_coef[2];
|
||||
AacPsyCoeffs psy_coef[2][64];
|
||||
AacPsyChannel *ch;
|
||||
}AacPsyContext;
|
||||
|
||||
@ -243,27 +242,30 @@ static av_cold int psy_3gpp_init(FFPsyContext *ctx) {
|
||||
|
||||
minath = ath(3410, ATH_ADD);
|
||||
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);
|
||||
i = 0;
|
||||
prev = 0.0;
|
||||
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);
|
||||
coeffs->barks[g] = (bark + prev) / 2.0;
|
||||
coeffs[g].barks = (bark + prev) / 2.0;
|
||||
prev = bark;
|
||||
}
|
||||
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;
|
||||
for (g = 0; g < ctx->num_bands[j]; g++) {
|
||||
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));
|
||||
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];
|
||||
int start = 0;
|
||||
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"
|
||||
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->thr = band->energy * 0.001258925f;
|
||||
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) {
|
||||
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++)
|
||||
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--)
|
||||
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++) {
|
||||
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)))
|
||||
band[g].thr = FFMAX(PSY_3GPP_RPEMIN*band[g].thr, FFMIN(band[g].thr,
|
||||
PSY_3GPP_RPELEV*pch->prev_band[w+g].thr_quiet));
|
||||
|
||||
ctx->psy_bands[channel*PSY_MAX_BANDS+w+g].threshold = band[g].thr;
|
||||
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];
|
||||
|
||||
psy_band->threshold = band->thr;
|
||||
psy_band->energy = band->energy;
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
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 {
|
||||
/* 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)
|
||||
{
|
||||
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_bgr32 = add_hfyu_left_prediction_bgr32_c;
|
||||
c->bswap_buf= bswap_buf;
|
||||
c->bswap16_buf = bswap16_buf;
|
||||
#if CONFIG_PNG_DECODER
|
||||
c->add_png_paeth_prediction= ff_add_png_paeth_prediction;
|
||||
#endif
|
||||
|
@ -369,6 +369,7 @@ typedef struct DSPContext {
|
||||
/* 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 (*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_h_loop_filter)(uint8_t *src, int stride, int qscale);
|
||||
|
@ -1078,13 +1078,13 @@ unsigned avcodec_version( void )
|
||||
|
||||
const char *avcodec_configuration(void)
|
||||
{
|
||||
return FFMPEG_CONFIGURATION;
|
||||
return LIBAV_CONFIGURATION;
|
||||
}
|
||||
|
||||
const char *avcodec_license(void)
|
||||
{
|
||||
#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)
|
||||
|
@ -26,24 +26,45 @@
|
||||
#include "libavutil/common.h"
|
||||
|
||||
#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
|
||||
/* median of 3 */
|
||||
|
@ -25,11 +25,11 @@ unsigned avdevice_version(void)
|
||||
|
||||
const char * avdevice_configuration(void)
|
||||
{
|
||||
return FFMPEG_CONFIGURATION;
|
||||
return LIBAV_CONFIGURATION;
|
||||
}
|
||||
|
||||
const char * avdevice_license(void)
|
||||
{
|
||||
#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)
|
||||
{
|
||||
return FFMPEG_CONFIGURATION;
|
||||
return LIBAV_CONFIGURATION;
|
||||
}
|
||||
|
||||
const char *avfilter_license(void)
|
||||
{
|
||||
#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)
|
||||
|
@ -106,7 +106,7 @@ static int fourxm_read_header(AVFormatContext *s,
|
||||
fourxm->fps = 1.0;
|
||||
|
||||
/* skip the first 3 32-bit numbers */
|
||||
avio_seek(pb, 12, SEEK_CUR);
|
||||
avio_skip(pb, 12);
|
||||
|
||||
/* check for LIST-HEAD */
|
||||
GET_LIST_HEADER();
|
||||
@ -322,12 +322,12 @@ static int fourxm_read_packet(AVFormatContext *s,
|
||||
fourxm->tracks[track_number].audio_pts += audio_frame_count;
|
||||
|
||||
} else {
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
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_MUXER) += movenc.o riff.o isom.o avc.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_MUXER) += mp3enc.o
|
||||
OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o
|
||||
OBJS-$(CONFIG_MPC_DEMUXER) += mpc.o apetag.o
|
||||
OBJS-$(CONFIG_MPC8_DEMUXER) += mpc8.o
|
||||
OBJS-$(CONFIG_MPEG1SYSTEM_MUXER) += mpegenc.o
|
||||
|
@ -149,7 +149,7 @@ static int a64_write_packet(struct AVFormatContext *s, AVPacket *pkt)
|
||||
break;
|
||||
}
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -132,7 +132,7 @@ static int adts_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
}
|
||||
avio_write(pb, pkt->data, pkt->size);
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -62,9 +62,9 @@ static int aea_read_header(AVFormatContext *s,
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
/* 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);
|
||||
avio_seek(s->pb, 1783, SEEK_CUR);
|
||||
avio_skip(s->pb, 1783);
|
||||
|
||||
|
||||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||
|
@ -70,7 +70,7 @@ static void get_meta(AVFormatContext *s, const char *key, int size)
|
||||
int res;
|
||||
|
||||
if (!str) {
|
||||
avio_seek(s->pb, size, SEEK_CUR);
|
||||
avio_skip(s->pb, size);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -152,7 +152,7 @@ static unsigned int get_aiff_header(AVIOContext *pb, AVCodecContext *codec,
|
||||
|
||||
/* Chunk is over */
|
||||
if (size)
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
|
||||
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");
|
||||
return -1;
|
||||
}
|
||||
avio_seek(pb, size - 8, SEEK_CUR);
|
||||
avio_skip(pb, size - 8);
|
||||
break;
|
||||
case MKTAG('w', 'a', 'v', 'e'):
|
||||
if ((uint64_t)size > (1<<30))
|
||||
@ -256,7 +256,7 @@ static int aiff_read_header(AVFormatContext *s,
|
||||
default: /* Jump */
|
||||
if (size & 1) /* Always even aligned */
|
||||
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);
|
||||
|
||||
/* Data is starting here */
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -140,7 +140,7 @@ static int aiff_write_trailer(AVFormatContext *s)
|
||||
/* return to the end */
|
||||
avio_seek(pb, end_size, SEEK_SET);
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -50,14 +50,14 @@ static int amr_write_header(AVFormatContext *s)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int amr_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
avio_write(s->pb, pkt->data, pkt->size);
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_AMR_MUXER */
|
||||
|
@ -83,7 +83,7 @@ static int read_header(AVFormatContext *s,
|
||||
AVStream *st;
|
||||
int i, ret;
|
||||
|
||||
avio_seek(pb, 4, SEEK_CUR); /* magic number */
|
||||
avio_skip(pb, 4); /* magic number */
|
||||
if (avio_rl16(pb) != MAX_PAGES) {
|
||||
av_log_ask_for_sample(s, "max_pages != " AV_STRINGIFY(MAX_PAGES) "\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
@ -91,7 +91,7 @@ static int read_header(AVFormatContext *s,
|
||||
|
||||
anm->nb_pages = avio_rl16(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);
|
||||
if (avio_rl32(pb) != ANIM_TAG)
|
||||
return AVERROR_INVALIDDATA;
|
||||
@ -107,13 +107,13 @@ static int read_header(AVFormatContext *s,
|
||||
st->codec->height = avio_rl16(pb);
|
||||
if (avio_r8(pb) != 0)
|
||||
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) */
|
||||
if (avio_r8(pb)) /* has_last_delta */
|
||||
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)
|
||||
goto invalid;
|
||||
@ -121,15 +121,15 @@ static int read_header(AVFormatContext *s,
|
||||
if (avio_r8(pb) != 1)
|
||||
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)
|
||||
goto invalid;
|
||||
|
||||
avio_seek(pb, 32, SEEK_CUR); /* record_types */
|
||||
avio_skip(pb, 32); /* record_types */
|
||||
st->nb_frames = avio_rl32(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 */
|
||||
st->codec->extradata_size = 16*8 + 4*256;
|
||||
@ -193,7 +193,7 @@ repeat:
|
||||
/* parse page header */
|
||||
if (anm->record < 0) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -187,7 +187,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap)
|
||||
/* Skip any unknown bytes at the end of the descriptor.
|
||||
This is for future compatibility */
|
||||
if (ape->descriptorlength > 52)
|
||||
avio_seek(pb, ape->descriptorlength - 52, SEEK_CUR);
|
||||
avio_skip(pb, ape->descriptorlength - 52);
|
||||
|
||||
/* Read header data */
|
||||
ape->compressiontype = avio_rl16(pb);
|
||||
@ -212,7 +212,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap)
|
||||
ape->finalframeblocks = avio_rl32(pb);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@ -239,7 +239,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap)
|
||||
|
||||
/* Skip any stored 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){
|
||||
|
@ -86,57 +86,6 @@ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen)
|
||||
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)
|
||||
{
|
||||
int i;
|
||||
@ -183,7 +132,7 @@ static struct variant *new_variant(AppleHTTPContext *c, int bandwidth,
|
||||
return NULL;
|
||||
reset_packet(&var->pkt);
|
||||
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);
|
||||
return var;
|
||||
}
|
||||
@ -274,7 +223,7 @@ static int parse_playlist(AppleHTTPContext *c, const char *url,
|
||||
goto fail;
|
||||
}
|
||||
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);
|
||||
is_segment = 0;
|
||||
}
|
||||
@ -519,7 +468,7 @@ reload:
|
||||
c->max_start_seq - c->cur_seq_no);
|
||||
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)
|
||||
goto start;
|
||||
/* 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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
int i;
|
||||
@ -201,7 +150,7 @@ static int parse_playlist(URLContext *h, const char *url)
|
||||
goto fail;
|
||||
}
|
||||
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);
|
||||
is_segment = 0;
|
||||
} else if (is_variant) {
|
||||
@ -211,7 +160,7 @@ static int parse_playlist(URLContext *h, const char *url)
|
||||
goto fail;
|
||||
}
|
||||
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);
|
||||
is_variant = 0;
|
||||
}
|
||||
|
@ -349,7 +349,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size)
|
||||
avio_rl16(pb); /* panes */
|
||||
st->codec->bits_per_coded_sample = avio_rl16(pb); /* depth */
|
||||
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);
|
||||
if (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;
|
||||
}
|
||||
pos2 = avio_tell(pb);
|
||||
avio_seek(pb, size - (pos2 - pos1 + 24), SEEK_CUR);
|
||||
avio_skip(pb, size - (pos2 - pos1 + 24));
|
||||
|
||||
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++){
|
||||
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++){
|
||||
ff_get_guid(pb, &g);
|
||||
ext_d=avio_rl16(pb);
|
||||
ext_len=avio_rl32(pb);
|
||||
avio_seek(pb, ext_len, SEEK_CUR);
|
||||
avio_skip(pb, ext_len);
|
||||
}
|
||||
|
||||
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, "copyright", 0, len3);
|
||||
get_tag(s, "comment" , 0, len4);
|
||||
avio_seek(pb, len5, SEEK_CUR);
|
||||
avio_skip(pb, len5);
|
||||
|
||||
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
|
||||
name_len += 1;
|
||||
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_len = avio_rl16(pb);
|
||||
if (!value_type && value_len%2)
|
||||
@ -504,7 +504,7 @@ static int asf_read_language_list(AVFormatContext *s, int64_t size)
|
||||
char lang[6];
|
||||
unsigned int lang_len = avio_r8(pb);
|
||||
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)
|
||||
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);
|
||||
|
||||
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);
|
||||
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 (!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
|
||||
name_len = avio_rl32(pb); // name length
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -825,16 +825,16 @@ static int asf_read_frame_header(AVFormatContext *s, AVIOContext *pb){
|
||||
// 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, "\n");
|
||||
avio_seek(pb, 10, SEEK_CUR);
|
||||
avio_skip(pb, 10);
|
||||
ts0= avio_rl64(pb);
|
||||
ts1= avio_rl64(pb);
|
||||
avio_seek(pb, 12, SEEK_CUR);
|
||||
avio_skip(pb, 12);
|
||||
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;
|
||||
else asf->packet_frag_timestamp= AV_NOPTS_VALUE;
|
||||
}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
|
||||
} else if (asf->packet_replic_size==1){
|
||||
// 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));
|
||||
assert(ret>=0);
|
||||
/* fail safe */
|
||||
avio_seek(pb, ret, SEEK_CUR);
|
||||
avio_skip(pb, ret);
|
||||
|
||||
asf->packet_pos= avio_tell(pb);
|
||||
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;
|
||||
/* 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;
|
||||
if(asf->stream_index < 0)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
continue;
|
||||
}
|
||||
@ -1198,7 +1198,7 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
|
||||
avio_seek(s->pb, current_pos, SEEK_SET);
|
||||
return;
|
||||
}
|
||||
avio_seek(s->pb, gsize-24, SEEK_CUR);
|
||||
avio_skip(s->pb, gsize-24);
|
||||
ff_get_guid(s->pb, &g);
|
||||
}
|
||||
|
||||
|
@ -574,7 +574,7 @@ static int asf_write_header(AVFormatContext *s)
|
||||
return -1;
|
||||
}
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
|
||||
asf->packet_nb_payloads = 0;
|
||||
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);
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
asf->nb_packets++;
|
||||
asf->packet_nb_payloads = 0;
|
||||
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)) {
|
||||
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)) {
|
||||
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);
|
||||
}
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
av_free(asf->index_ptr);
|
||||
return 0;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ static int write_header(AVFormatContext *s)
|
||||
last=p;
|
||||
}
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -59,7 +59,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
avio_write(s->pb, pkt->data, pkt->size);
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -72,7 +72,7 @@ static int write_trailer(AVFormatContext *s)
|
||||
avio_write(s->pb, avctx->extradata + ass->extra_index,
|
||||
avctx->extradata_size - ass->extra_index);
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ static int au_write_header(AVFormatContext *s)
|
||||
return -1;
|
||||
}
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -99,7 +99,7 @@ static int au_write_trailer(AVFormatContext *s)
|
||||
avio_wb32(pb, (uint32_t)(file_size - 24));
|
||||
avio_seek(pb, file_size, SEEK_SET);
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -147,7 +147,7 @@ static int au_read_header(AVFormatContext *s,
|
||||
|
||||
if (size >= 24) {
|
||||
/* skip unused data */
|
||||
avio_seek(pb, size - 24, SEEK_CUR);
|
||||
avio_skip(pb, size - 24);
|
||||
}
|
||||
|
||||
/* now we are ready: build format streams */
|
||||
|
@ -321,12 +321,12 @@ static void avi_read_nikon(AVFormatContext *s, uint64_t end)
|
||||
}
|
||||
if (name)
|
||||
av_metadata_set2(&s->metadata, name, buffer, 0);
|
||||
avio_seek(s->pb, size, SEEK_CUR);
|
||||
avio_skip(s->pb, size);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
avio_seek(s->pb, size, SEEK_CUR);
|
||||
avio_skip(s->pb, size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -392,13 +392,13 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
unsigned char date[64] = {0};
|
||||
size += (size & 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);
|
||||
break;
|
||||
}
|
||||
case MKTAG('d', 'm', 'l', 'h'):
|
||||
avi->is_odml = 1;
|
||||
avio_seek(pb, size + (size & 1), SEEK_CUR);
|
||||
avio_skip(pb, size + (size & 1));
|
||||
break;
|
||||
case MKTAG('a', 'm', 'v', 'h'):
|
||||
amv_file_format=1;
|
||||
@ -410,13 +410,13 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
avio_rl32(pb);
|
||||
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);
|
||||
avih_width=avio_rl32(pb);
|
||||
avih_height=avio_rl32(pb);
|
||||
|
||||
avio_seek(pb, size - 10 * 4, SEEK_CUR);
|
||||
avio_skip(pb, size - 10 * 4);
|
||||
break;
|
||||
case MKTAG('s', 't', 'r', 'h'):
|
||||
/* stream header */
|
||||
@ -425,7 +425,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
handler = avio_rl32(pb); /* codec tag */
|
||||
|
||||
if(tag1 == MKTAG('p', 'a', 'd', 's')){
|
||||
avio_seek(pb, size - 8, SEEK_CUR);
|
||||
avio_skip(pb, size - 8);
|
||||
break;
|
||||
}else{
|
||||
stream_index++;
|
||||
@ -469,10 +469,10 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
goto fail;
|
||||
}
|
||||
s->streams[0]->priv_data = ast;
|
||||
avio_seek(pb, 3 * 4, SEEK_CUR);
|
||||
avio_skip(pb, 3 * 4);
|
||||
ast->scale = 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);
|
||||
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;
|
||||
avio_seek(pb, size - 9*4, SEEK_CUR);
|
||||
avio_skip(pb, size - 9*4);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -542,12 +542,12 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
if(ast->sample_size == 0)
|
||||
st->duration = st->nb_frames;
|
||||
ast->frame_offset= ast->cum_len;
|
||||
avio_seek(pb, size - 12 * 4, SEEK_CUR);
|
||||
avio_skip(pb, size - 12 * 4);
|
||||
break;
|
||||
case MKTAG('s', 't', 'r', 'f'):
|
||||
/* stream header */
|
||||
if (stream_index >= (unsigned)s->nb_streams || avi->dv_demux) {
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
} else {
|
||||
uint64_t cur_pos = avio_tell(pb);
|
||||
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->codec_type = AVMEDIA_TYPE_VIDEO;
|
||||
st->codec->codec_id = CODEC_ID_AMV;
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
break;
|
||||
}
|
||||
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);
|
||||
|
||||
// avio_seek(pb, size - 5 * 4, SEEK_CUR);
|
||||
// avio_skip(pb, size - 5 * 4);
|
||||
break;
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
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;
|
||||
}
|
||||
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
|
||||
* one packet and timestamps refer to packet start. */
|
||||
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_id= CODEC_ID_NONE;
|
||||
st->codec->codec_tag= 0;
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -693,7 +693,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
}
|
||||
size -= 9*4;
|
||||
}
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
break;
|
||||
case MKTAG('s', 't', 'r', 'n'):
|
||||
if(s->nb_streams){
|
||||
@ -710,7 +710,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
}
|
||||
/* skip tag */
|
||||
size += (size & 1);
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -762,7 +762,7 @@ static int read_gab2_sub(AVStream *st, AVPacket *pkt) {
|
||||
goto error;
|
||||
|
||||
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)
|
||||
av_metadata_set2(&st->metadata, "title", desc, 0);
|
||||
|
||||
@ -1008,14 +1008,14 @@ resync:
|
||||
//parse JUNK
|
||||
||(d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K')
|
||||
||(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");
|
||||
goto resync;
|
||||
}
|
||||
|
||||
//parse stray LIST
|
||||
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;
|
||||
}
|
||||
|
||||
@ -1026,7 +1026,7 @@ resync:
|
||||
|
||||
//detect ##ix chunk and skip
|
||||
if(d[2] == 'i' && d[3] == 'x' && n < s->nb_streams){
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
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_ALL){
|
||||
ast->frame_offset += get_duration(ast, size);
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
goto resync;
|
||||
}
|
||||
|
||||
@ -1225,7 +1225,7 @@ static int avi_load_index(AVFormatContext *s)
|
||||
default:
|
||||
skip:
|
||||
size += (size & 1);
|
||||
if (avio_seek(pb, size, SEEK_CUR) < 0)
|
||||
if (avio_skip(pb, size) < 0)
|
||||
goto the_end; // something is wrong here
|
||||
break;
|
||||
}
|
||||
|
@ -393,7 +393,7 @@ static int avi_write_header(AVFormatContext *s)
|
||||
avi->movi_list = ff_start_tag(pb, "LIST");
|
||||
ffio_wfourcc(pb, "movi");
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -438,15 +438,15 @@ static int avi_write_ix(AVFormatContext *s)
|
||||
avio_wl32(pb, ((uint32_t)ie->len & ~0x80000000) |
|
||||
(ie->flags & 0x10 ? 0 : 0x80000000));
|
||||
}
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
pos = avio_tell(pb);
|
||||
|
||||
/* Updating one entry in the AVI OpenDML master index */
|
||||
avio_seek(pb, avist->indexes.indx_start - 8, SEEK_SET);
|
||||
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_seek(pb, 16*avi->riff_id, SEEK_CUR);
|
||||
avio_skip(pb, 16*avi->riff_id);
|
||||
avio_wl64(pb, ix); /* qwOffset */
|
||||
avio_wl32(pb, pos - ix); /* dwSize */
|
||||
avio_wl32(pb, avist->indexes.entry); /* dwDuration */
|
||||
@ -578,7 +578,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (size & 1)
|
||||
avio_w8(pb, 0);
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -603,7 +603,7 @@ static int avi_write_trailer(AVFormatContext *s)
|
||||
file_size = avio_tell(pb);
|
||||
avio_seek(pb, avi->odml_list - 8, SEEK_SET);
|
||||
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++) {
|
||||
AVCodecContext *stream = s->streams[n]->codec;
|
||||
@ -624,7 +624,7 @@ static int avi_write_trailer(AVFormatContext *s)
|
||||
avi_write_counters(s, avi->riff_id);
|
||||
}
|
||||
}
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
for (i=0; i<s->nb_streams; i++) {
|
||||
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);
|
||||
#define URL_EOF (-1)
|
||||
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.
|
||||
* @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.
|
||||
@ -508,9 +518,9 @@ int64_t av_url_read_fseek(AVIOContext *h, int stream_index,
|
||||
|
||||
/** @warning currently size is limited */
|
||||
#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
|
||||
int url_fprintf(AVIOContext *s, const char *fmt, ...);
|
||||
int avio_printf(AVIOContext *s, const char *fmt, ...);
|
||||
#endif
|
||||
|
||||
#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);
|
||||
#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);
|
||||
uint64_t avio_rb64(AVIOContext *s);
|
||||
|
||||
uint64_t ff_get_v(AVIOContext *bc);
|
||||
|
||||
static inline int url_is_streamed(AVIOContext *s)
|
||||
{
|
||||
return s->is_streamed;
|
||||
@ -590,8 +598,6 @@ static inline int url_is_streamed(AVIOContext *s)
|
||||
*/
|
||||
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
|
||||
/** Reset the buffer for reading or writing.
|
||||
* @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.
|
||||
*/
|
||||
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 */
|
||||
int url_close_buf(AVIOContext *s);
|
||||
attribute_deprecated int url_close_buf(AVIOContext *s);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
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
|
||||
|
@ -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);
|
||||
s->must_flush = 0;
|
||||
@ -386,6 +386,26 @@ int64_t url_fsize(AVIOContext *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
|
||||
|
||||
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 */
|
||||
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;
|
||||
len = s->buffer_size;
|
||||
@ -762,7 +782,7 @@ uint64_t avio_rb64(AVIOContext *s)
|
||||
return val;
|
||||
}
|
||||
|
||||
uint64_t ff_get_v(AVIOContext *bc){
|
||||
uint64_t ffio_read_varlen(AVIOContext *bc){
|
||||
uint64_t val = 0;
|
||||
int tmp;
|
||||
|
||||
@ -810,7 +830,7 @@ int url_fdopen(AVIOContext **s, URLContext *h)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int url_setbufsize(AVIOContext *s, int buf_size)
|
||||
int ffio_set_buf_size(AVIOContext *s, int buf_size)
|
||||
{
|
||||
uint8_t *buffer;
|
||||
buffer = av_malloc(buf_size);
|
||||
@ -917,8 +937,7 @@ URLContext *url_fileno(AVIOContext *s)
|
||||
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;
|
||||
char buf[4096];
|
||||
@ -930,7 +949,6 @@ int url_fprintf(AVIOContext *s, const char *fmt, ...)
|
||||
avio_write(s, buf, strlen(buf));
|
||||
return ret;
|
||||
}
|
||||
#endif //CONFIG_MUXERS
|
||||
|
||||
#if FF_API_OLD_AVIO
|
||||
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. */
|
||||
#if CONFIG_MUXERS || CONFIG_NETWORK
|
||||
/* buffer handling */
|
||||
#if FF_API_OLD_AVIO
|
||||
int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags)
|
||||
{
|
||||
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)
|
||||
{
|
||||
put_flush_packet(s);
|
||||
avio_flush(s);
|
||||
return s->buf_ptr - s->buffer;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
put_flush_packet(s);
|
||||
avio_flush(s);
|
||||
|
||||
*pbuffer = d->buffer;
|
||||
size = d->size;
|
||||
|
@ -61,7 +61,7 @@ static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap)
|
||||
|
||||
s->ctx_flags |= AVFMTCTX_NOHEADER;
|
||||
|
||||
avio_seek(s->pb, 4, SEEK_CUR);
|
||||
avio_skip(s->pb, 4);
|
||||
avs->width = avio_rl16(s->pb);
|
||||
avs->height = 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;
|
||||
|
||||
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'
|
||||
* int16s: always_512, nframes, width, height, delay, always_14
|
||||
*/
|
||||
avio_seek(pb, 5, SEEK_CUR);
|
||||
avio_skip(pb, 5);
|
||||
vid->nframes = avio_rl16(pb);
|
||||
|
||||
stream = av_new_stream(s, 0);
|
||||
|
@ -65,19 +65,19 @@ static int bfi_read_header(AVFormatContext * s, AVFormatParameters * ap)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
/* Set the total number of frames. */
|
||||
avio_seek(pb, 8, SEEK_CUR);
|
||||
avio_skip(pb, 8);
|
||||
chunk_header = avio_rl32(pb);
|
||||
bfi->nframes = avio_rl32(pb);
|
||||
avio_rl32(pb);
|
||||
avio_rl32(pb);
|
||||
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->height = avio_rl32(pb);
|
||||
|
||||
/*Load the palette to extradata */
|
||||
avio_seek(pb, 8, SEEK_CUR);
|
||||
avio_skip(pb, 8);
|
||||
vstream->codec->extradata = av_malloc(768);
|
||||
vstream->codec->extradata_size = 768;
|
||||
avio_read(pb, vstream->codec->extradata,
|
||||
|
@ -98,7 +98,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
return AVERROR(EIO);
|
||||
}
|
||||
|
||||
avio_seek(pb, 4, SEEK_CUR);
|
||||
avio_skip(pb, 4);
|
||||
|
||||
vst->codec->width = 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) {
|
||||
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++) {
|
||||
ast = av_new_stream(s, 1);
|
||||
@ -169,7 +169,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
keyframe ? AVINDEX_KEYFRAME : 0);
|
||||
}
|
||||
|
||||
avio_seek(pb, 4, SEEK_CUR);
|
||||
avio_skip(pb, 4);
|
||||
|
||||
bink->current_track = -1;
|
||||
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);
|
||||
return 0;
|
||||
} 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);
|
||||
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);
|
||||
if (ret > 0) {
|
||||
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");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
avio_seek(pb, skip, SEEK_CUR);
|
||||
avio_skip(pb, skip);
|
||||
} else if (st->codec->codec_id == CODEC_ID_ALAC) {
|
||||
#define ALAC_PREAMBLE 12
|
||||
#define ALAC_HEADER 36
|
||||
if (size < ALAC_PREAMBLE + ALAC_HEADER) {
|
||||
av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n");
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
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);
|
||||
if (!st->codec->extradata)
|
||||
return AVERROR(ENOMEM);
|
||||
avio_read(pb, st->codec->extradata, 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 {
|
||||
st->codec->extradata = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!st->codec->extradata)
|
||||
@ -201,7 +201,7 @@ static int read_header(AVFormatContext *s,
|
||||
int found_data, ret;
|
||||
int64_t size;
|
||||
|
||||
avio_seek(pb, 8, SEEK_CUR); /* magic, version, file flags */
|
||||
avio_skip(pb, 8); /* magic, version, file flags */
|
||||
|
||||
/* audio description chunk */
|
||||
if (avio_rb32(pb) != MKBETAG('d','e','s','c')) {
|
||||
@ -233,11 +233,11 @@ static int read_header(AVFormatContext *s,
|
||||
|
||||
switch (tag) {
|
||||
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_size = size < 0 ? -1 : size - 4;
|
||||
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;
|
||||
break;
|
||||
|
||||
@ -265,7 +265,7 @@ static int read_header(AVFormatContext *s,
|
||||
case MKBETAG('f','r','e','e'):
|
||||
if (size < 0)
|
||||
return AVERROR_INVALIDDATA;
|
||||
avio_seek(pb, size, SEEK_CUR);
|
||||
avio_skip(pb, size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ static int crc_write_trailer(struct AVFormatContext *s)
|
||||
|
||||
snprintf(buf, sizeof(buf), "CRC=0x%08x\n", crc->crcval);
|
||||
avio_write(s->pb, buf, strlen(buf));
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
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, 0x8010); // unknown
|
||||
avio_write(s->pb, pkt->data, pkt->size);
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -382,7 +382,7 @@ static int dv_write_packet(struct AVFormatContext *s, AVPacket *pkt)
|
||||
pkt->data, pkt->size, &frame);
|
||||
if (fsize > 0) {
|
||||
avio_write(s->pb, frame, fsize);
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
c->has_sound = 1;
|
||||
size = avio_rb32(pb);
|
||||
c->vidpos = avio_tell(pb) + size;
|
||||
avio_seek(pb, 16, SEEK_CUR);
|
||||
avio_skip(pb, 16);
|
||||
fsize = avio_rl32(pb);
|
||||
|
||||
ast = av_new_stream(s, 0);
|
||||
@ -108,7 +108,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
tag = avio_rl32(pb);
|
||||
fsize = avio_rl32(pb);
|
||||
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;
|
||||
if(ast->codec->block_align)
|
||||
|
@ -62,7 +62,7 @@ static int cdata_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
};
|
||||
|
||||
sample_rate = avio_rb16(pb);
|
||||
avio_seek(pb, 12, SEEK_CUR);
|
||||
avio_skip(pb, 12);
|
||||
|
||||
st = av_new_stream(s, 0);
|
||||
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->num_channels = avio_r8(pb);
|
||||
compression_type = avio_r8(pb);
|
||||
avio_seek(pb, 13, SEEK_CUR);
|
||||
avio_skip(pb, 13);
|
||||
|
||||
switch (compression_type) {
|
||||
case 0:
|
||||
@ -261,7 +261,7 @@ static int process_video_header_mdec(AVFormatContext *s)
|
||||
{
|
||||
EaDemuxContext *ea = s->priv_data;
|
||||
AVIOContext *pb = s->pb;
|
||||
avio_seek(pb, 4, SEEK_CUR);
|
||||
avio_skip(pb, 4);
|
||||
ea->width = avio_rl16(pb);
|
||||
ea->height = avio_rl16(pb);
|
||||
ea->time_base = (AVRational){1,15};
|
||||
@ -274,7 +274,7 @@ static int process_video_header_vp6(AVFormatContext *s)
|
||||
EaDemuxContext *ea = s->priv_data;
|
||||
AVIOContext *pb = s->pb;
|
||||
|
||||
avio_seek(pb, 16, SEEK_CUR);
|
||||
avio_skip(pb, 16);
|
||||
ea->time_base.den = avio_rl32(pb);
|
||||
ea->time_base.num = avio_rl32(pb);
|
||||
ea->video_codec = CODEC_ID_VP6;
|
||||
@ -316,7 +316,7 @@ static int process_ea_header(AVFormatContext *s) {
|
||||
case SHEN_TAG :
|
||||
blockid = avio_rl32(pb);
|
||||
if (blockid == GSTR_TAG) {
|
||||
avio_seek(pb, 4, SEEK_CUR);
|
||||
avio_skip(pb, 4);
|
||||
} else if ((blockid & 0xFFFF)!=PT00_TAG) {
|
||||
av_log (s, AV_LOG_ERROR, "unknown SCHl headerid\n");
|
||||
return 0;
|
||||
@ -474,19 +474,19 @@ static int ea_read_packet(AVFormatContext *s,
|
||||
/* audio data */
|
||||
case ISNh_TAG:
|
||||
/* header chunk also contains data; skip over the header portion*/
|
||||
avio_seek(pb, 32, SEEK_CUR);
|
||||
avio_skip(pb, 32);
|
||||
chunk_size -= 32;
|
||||
case ISNd_TAG:
|
||||
case SCDl_TAG:
|
||||
case SNDC_TAG:
|
||||
case SDEN_TAG:
|
||||
if (!ea->audio_codec) {
|
||||
avio_seek(pb, chunk_size, SEEK_CUR);
|
||||
avio_skip(pb, chunk_size);
|
||||
break;
|
||||
} else if (ea->audio_codec == CODEC_ID_PCM_S16LE_PLANAR ||
|
||||
ea->audio_codec == CODEC_ID_MP3) {
|
||||
num_samples = avio_rl32(pb);
|
||||
avio_seek(pb, 8, SEEK_CUR);
|
||||
avio_skip(pb, 8);
|
||||
chunk_size -= 12;
|
||||
}
|
||||
ret = av_get_packet(pb, pkt, chunk_size);
|
||||
@ -541,7 +541,7 @@ static int ea_read_packet(AVFormatContext *s,
|
||||
goto get_video_packet;
|
||||
|
||||
case mTCD_TAG:
|
||||
avio_seek(pb, 8, SEEK_CUR); // skip ea dct header
|
||||
avio_skip(pb, 8); // skip ea dct header
|
||||
chunk_size -= 8;
|
||||
goto get_video_packet;
|
||||
|
||||
@ -560,7 +560,7 @@ get_video_packet:
|
||||
break;
|
||||
|
||||
default:
|
||||
avio_seek(pb, chunk_size, SEEK_CUR);
|
||||
avio_skip(pb, chunk_size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +187,7 @@ static int64_t get_dts(AVFormatContext *s, int64_t pos)
|
||||
int64_t dts;
|
||||
|
||||
ffm_seek1(s, pos);
|
||||
avio_seek(pb, 4, SEEK_CUR);
|
||||
avio_skip(pb, 4);
|
||||
dts = avio_rb64(pb);
|
||||
#ifdef DEBUG_SEEK
|
||||
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;
|
||||
avio_wb16(pb, h);
|
||||
avio_write(pb, ffm->packet, ffm->packet_end - ffm->packet);
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
/* prepare next packet */
|
||||
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)
|
||||
avio_w8(pb, 0);
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
/* init packet mux */
|
||||
ffm->packet_ptr = ffm->packet;
|
||||
@ -235,7 +235,7 @@ static int ffm_write_trailer(AVFormatContext *s)
|
||||
if (ffm->packet_ptr > ffm->packet)
|
||||
flush_packet(s);
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ static int write_header(AVFormatContext *s)
|
||||
avio_write(s->pb, ID_STRING, sizeof(ID_STRING) - 1);
|
||||
avio_w8(s->pb, '1'); // version
|
||||
avio_w8(s->pb, '\n');
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -73,13 +73,13 @@ static int write_trailer(AVFormatContext *s)
|
||||
AVChapter *ch = s->chapters[i];
|
||||
avio_write(s->pb, ID_CHAPTER, sizeof(ID_CHAPTER) - 1);
|
||||
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);
|
||||
}
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ static int read_header(AVFormatContext *s,
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
avio_seek(pb, 2, SEEK_CUR);
|
||||
avio_skip(pb, 2);
|
||||
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
||||
st->codec->codec_id = CODEC_ID_RAWVIDEO;
|
||||
st->codec->pix_fmt = PIX_FMT_RGBA;
|
||||
@ -84,7 +84,7 @@ static int read_packet(AVFormatContext *s,
|
||||
return AVERROR(EIO);
|
||||
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);
|
||||
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)
|
||||
return pkt->size;
|
||||
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));
|
||||
for (i = 0; i < 16; i++)
|
||||
avio_w8(pb, 0x00); // reserved
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@ static int flac_read_header(AVFormatContext *s,
|
||||
break;
|
||||
/* skip metadata block for unsupported types */
|
||||
default:
|
||||
ret = avio_seek(s->pb, metadata_size, SEEK_CUR);
|
||||
ret = avio_skip(s->pb, metadata_size);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
@ -104,7 +104,7 @@ static int flac_write_trailer(struct AVFormatContext *s)
|
||||
avio_seek(pb, 8, SEEK_SET);
|
||||
avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE);
|
||||
avio_seek(pb, file_size, SEEK_SET);
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
} else {
|
||||
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)
|
||||
{
|
||||
avio_write(s->pb, pkt->data, pkt->size);
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
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) */
|
||||
avio_seek(pb, 10, SEEK_CUR);
|
||||
avio_skip(pb, 10);
|
||||
|
||||
pkt->stream_index = flic->audio_stream_index;
|
||||
pkt->pos = avio_tell(pb);
|
||||
@ -253,7 +253,7 @@ static int flic_read_packet(AVFormatContext *s,
|
||||
packet_read = 1;
|
||||
} else {
|
||||
/* 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) {
|
||||
int length = avio_rb16(ioc);
|
||||
if(length >= buffsize) {
|
||||
avio_seek(ioc, length, SEEK_CUR);
|
||||
avio_skip(ioc, length);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -149,7 +149,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst
|
||||
unsigned int keylen;
|
||||
|
||||
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)
|
||||
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:
|
||||
break; //these take up no additional space
|
||||
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) {
|
||||
//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)
|
||||
@ -182,7 +182,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst
|
||||
}
|
||||
break;
|
||||
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;
|
||||
default: //unsupported type, we couldn't skip
|
||||
return -1;
|
||||
@ -254,7 +254,7 @@ static int flv_read_header(AVFormatContext *s,
|
||||
{
|
||||
int offset, flags;
|
||||
|
||||
avio_seek(s->pb, 4, SEEK_CUR);
|
||||
avio_skip(s->pb, 4);
|
||||
flags = avio_r8(s->pb);
|
||||
/* old flvtool cleared this field */
|
||||
/* FIXME: better fix needed */
|
||||
@ -278,7 +278,7 @@ static int flv_read_header(AVFormatContext *s,
|
||||
|
||||
offset = avio_rb32(s->pb);
|
||||
avio_seek(s->pb, offset, SEEK_SET);
|
||||
avio_seek(s->pb, 4, SEEK_CUR);
|
||||
avio_skip(s->pb, 4);
|
||||
|
||||
s->start_time = 0;
|
||||
|
||||
@ -304,7 +304,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
int64_t dts, pts = AV_NOPTS_VALUE;
|
||||
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);
|
||||
type = avio_r8(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);
|
||||
if (url_feof(s->pb))
|
||||
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;
|
||||
|
||||
if(size == 0)
|
||||
@ -454,7 +454,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||
|
||||
leave:
|
||||
avio_seek(s->pb, 4, SEEK_CUR);
|
||||
avio_skip(s->pb, 4);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -291,7 +291,7 @@ static int flv_write_header(AVFormatContext *s)
|
||||
data_size= avio_tell(pb) - metadata_size_pos - 10;
|
||||
avio_seek(pb, metadata_size_pos, SEEK_SET);
|
||||
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);
|
||||
|
||||
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;
|
||||
avio_seek(pb, -data_size - 10, SEEK_CUR);
|
||||
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
|
||||
}
|
||||
}
|
||||
@ -430,7 +430,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
avio_wb32(pb,size+flags_size+11); // previous tag size
|
||||
flv->duration = FFMAX(flv->duration, pkt->pts + flv->delay + pkt->duration);
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
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);
|
||||
avio_write(s->pb, buf, strlen(buf));
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -287,7 +287,7 @@ static int gif_write_header(AVFormatContext *s)
|
||||
|
||||
gif_image_write_header(pb, width, height, loop_count, NULL);
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -322,7 +322,7 @@ static int gif_write_video(AVFormatContext *s,
|
||||
gif_image_write_image(pb, 0, 0, enc->width, enc->height,
|
||||
buf, enc->width * 3, PIX_FMT_RGB24);
|
||||
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -340,7 +340,7 @@ static int gif_write_trailer(AVFormatContext *s)
|
||||
AVIOContext *pb = s->pb;
|
||||
|
||||
avio_w8(pb, 0x3b);
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
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)
|
||||
si->last_field = value;
|
||||
} 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))
|
||||
si->fields_per_frame = value;
|
||||
} 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;
|
||||
pkt_len -= 8;
|
||||
if (s->flags & AVFMT_FLAG_IGNIDX) {
|
||||
avio_seek(pb, pkt_len, SEEK_CUR);
|
||||
avio_skip(pb, pkt_len);
|
||||
return;
|
||||
}
|
||||
if (map_cnt > 1000) {
|
||||
@ -247,7 +247,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) {
|
||||
}
|
||||
if (pkt_len < 4 * map_cnt) {
|
||||
av_log(s, AV_LOG_ERROR, "invalid index length\n");
|
||||
avio_seek(pb, pkt_len, SEEK_CUR);
|
||||
avio_skip(pb, pkt_len);
|
||||
return;
|
||||
}
|
||||
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++)
|
||||
av_add_index_entry(st, (uint64_t)avio_rl32(pb) * 1024,
|
||||
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) {
|
||||
@ -283,7 +283,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
|
||||
}
|
||||
map_len -= len;
|
||||
gxf_material_tags(pb, &len, &si);
|
||||
avio_seek(pb, len, SEEK_CUR);
|
||||
avio_skip(pb, len);
|
||||
map_len -= 2;
|
||||
len = avio_rb16(pb); // length of track description
|
||||
if (len > map_len) {
|
||||
@ -301,7 +301,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
|
||||
track_len = avio_rb16(pb);
|
||||
len -= track_len;
|
||||
gxf_track_tags(pb, &track_len, &si);
|
||||
avio_seek(pb, track_len, SEEK_CUR);
|
||||
avio_skip(pb, track_len);
|
||||
if (!(track_type & 0x80)) {
|
||||
av_log(s, AV_LOG_ERROR, "invalid track type %x\n", track_type);
|
||||
continue;
|
||||
@ -326,7 +326,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
|
||||
if (len < 0)
|
||||
av_log(s, AV_LOG_ERROR, "invalid track description length specified\n");
|
||||
if (map_len)
|
||||
avio_seek(pb, map_len, SEEK_CUR);
|
||||
avio_skip(pb, map_len);
|
||||
if (!parse_packet_header(pb, &pkt_type, &len)) {
|
||||
av_log(s, AV_LOG_ERROR, "sync lost in header\n");
|
||||
return -1;
|
||||
@ -342,8 +342,8 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
|
||||
if (len >= 0x39) {
|
||||
AVRational fps;
|
||||
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));
|
||||
if (!main_timebase.num || !main_timebase.den) {
|
||||
// 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");
|
||||
} else
|
||||
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
|
||||
// so use that regardless of why we do not know the video frame rate.
|
||||
if (!main_timebase.num || !main_timebase.den)
|
||||
@ -437,7 +437,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
|
||||
continue;
|
||||
}
|
||||
if (pkt_type != PKT_MEDIA) {
|
||||
avio_seek(pb, pkt_len, SEEK_CUR);
|
||||
avio_skip(pb, pkt_len);
|
||||
continue;
|
||||
}
|
||||
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 bps = av_get_bits_per_sample(st->codec->codec_id)>>3;
|
||||
if (first <= last && last*bps <= pkt_len) {
|
||||
avio_seek(pb, first*bps, SEEK_CUR);
|
||||
avio_skip(pb, first*bps);
|
||||
skip = pkt_len - last*bps;
|
||||
pkt_len = (last-first)*bps;
|
||||
} else
|
||||
@ -470,7 +470,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
|
||||
}
|
||||
ret = av_get_packet(pb, pkt, pkt_len);
|
||||
if (skip)
|
||||
avio_seek(pb, skip, SEEK_CUR);
|
||||
avio_skip(pb, skip);
|
||||
pkt->stream_index = stream_index;
|
||||
pkt->dts = field_nr;
|
||||
return ret;
|
||||
|
@ -753,7 +753,7 @@ static int gxf_write_header(AVFormatContext *s)
|
||||
|
||||
gxf->packet_count = 3;
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -781,12 +781,12 @@ static int gxf_write_trailer(AVFormatContext *s)
|
||||
gxf_write_map_packet(s, 1);
|
||||
gxf_write_flt_packet(s);
|
||||
gxf_write_umf_packet(s);
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
/* update duration in all map packets */
|
||||
for (i = 1; i < gxf->map_offsets_nb; i++) {
|
||||
avio_seek(pb, gxf->map_offsets[i], SEEK_SET);
|
||||
gxf_write_map_packet(s, 1);
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
}
|
||||
|
||||
avio_seek(pb, end, SEEK_SET);
|
||||
@ -895,7 +895,7 @@ static int gxf_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
gxf->packet_count = 0;
|
||||
}
|
||||
|
||||
put_flush_packet(pb);
|
||||
avio_flush(pb);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
int isv34, unsync;
|
||||
@ -172,7 +218,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t
|
||||
unsync = flags & 0x80;
|
||||
|
||||
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) {
|
||||
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)) {
|
||||
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') {
|
||||
if (unsync || tunsync) {
|
||||
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]) {
|
||||
if (tag[1])
|
||||
av_log(s, AV_LOG_WARNING, "invalid frame id, assuming padding");
|
||||
avio_seek(s->pb, tlen, SEEK_CUR);
|
||||
avio_skip(s->pb, tlen);
|
||||
break;
|
||||
}
|
||||
/* 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) {
|
||||
/* 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 */
|
||||
avio_seek(s->pb, 10, SEEK_CUR);
|
||||
avio_skip(s->pb, 10);
|
||||
|
||||
av_free(buffer);
|
||||
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_2_metadata_conv);
|
||||
ff_metadata_conv(&s->metadata, NULL, ff_id3v2_4_metadata_conv);
|
||||
merge_date(&s->metadata);
|
||||
}
|
||||
|
||||
const AVMetadataConv ff_id3v2_34_metadata_conv[] = {
|
||||
|
@ -257,7 +257,7 @@ static int idcin_read_packet(AVFormatContext *s,
|
||||
|
||||
chunk_size = avio_rl32(pb);
|
||||
/* skip the number of decoded bytes (always equal to width * height) */
|
||||
avio_seek(pb, 4, SEEK_CUR);
|
||||
avio_skip(pb, 4);
|
||||
chunk_size -= 4;
|
||||
ret= av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret < 0)
|
||||
|
@ -136,14 +136,14 @@ static int roq_read_packet(AVFormatContext *s,
|
||||
break;
|
||||
}
|
||||
/* don't care about this chunk anymore */
|
||||
avio_seek(pb, RoQ_CHUNK_PREAMBLE_SIZE, SEEK_CUR);
|
||||
avio_skip(pb, RoQ_CHUNK_PREAMBLE_SIZE);
|
||||
break;
|
||||
|
||||
case RoQ_QUAD_CODEBOOK:
|
||||
/* packet needs to contain both this codebook and next VQ chunk */
|
||||
codebook_offset = avio_tell(pb) - RoQ_CHUNK_PREAMBLE_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) !=
|
||||
RoQ_CHUNK_PREAMBLE_SIZE)
|
||||
return AVERROR(EIO);
|
||||
|
@ -30,7 +30,7 @@ static int roq_write_header(struct AVFormatContext *s)
|
||||
};
|
||||
|
||||
avio_write(s->pb, header, 8);
|
||||
put_flush_packet(s->pb);
|
||||
avio_flush(s->pb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ static int iff_read_header(AVFormatContext *s,
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
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
|
||||
st->codec->codec_tag = avio_rl32(pb);
|
||||
|
||||
@ -152,10 +152,10 @@ static int iff_read_header(AVFormatContext *s,
|
||||
|
||||
if (data_size < 14)
|
||||
return AVERROR_INVALIDDATA;
|
||||
avio_seek(pb, 12, SEEK_CUR);
|
||||
avio_skip(pb, 12);
|
||||
st->codec->sample_rate = avio_rb16(pb);
|
||||
if (data_size >= 16) {
|
||||
avio_seek(pb, 1, SEEK_CUR);
|
||||
avio_skip(pb, 1);
|
||||
compression = avio_r8(pb);
|
||||
}
|
||||
break;
|
||||
@ -186,14 +186,14 @@ static int iff_read_header(AVFormatContext *s,
|
||||
return AVERROR_INVALIDDATA;
|
||||
st->codec->width = 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);
|
||||
if (data_size >= 11) {
|
||||
avio_seek(pb, 1, SEEK_CUR); // masking
|
||||
avio_skip(pb, 1); // masking
|
||||
compression = avio_r8(pb);
|
||||
}
|
||||
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.den = avio_r8(pb);
|
||||
}
|
||||
@ -223,7 +223,7 @@ static int iff_read_header(AVFormatContext *s,
|
||||
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);
|
||||
|
@ -372,8 +372,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
avio_write(pb[0], pkt->data , ysize);
|
||||
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);
|
||||
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[2]);
|
||||
}else{
|
||||
@ -402,7 +402,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
avio_write(pb[0], pkt->data, pkt->size);
|
||||
}
|
||||
put_flush_packet(pb[0]);
|
||||
avio_flush(pb[0]);
|
||||
if (!img->is_pipe) {
|
||||
avio_close(pb[0]);
|
||||
}
|
||||
|
@ -35,11 +35,11 @@ static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
w = 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);
|
||||
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",
|
||||
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);
|
||||
|
||||
/*
|
||||
* 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 */
|
||||
|
@ -299,12 +299,12 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
||||
|
||||
case OPCODE_END_OF_STREAM:
|
||||
debug_ipmovie("end of stream\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_END_OF_CHUNK:
|
||||
debug_ipmovie("end of chunk\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_CREATE_TIMER:
|
||||
@ -359,7 +359,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
||||
|
||||
case OPCODE_START_STOP_AUDIO:
|
||||
debug_ipmovie("start/stop audio\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
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_15:
|
||||
debug_ipmovie("unknown (but documented) opcode %02X\n", opcode_type);
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_SEND_BUFFER:
|
||||
debug_ipmovie("send buffer\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_AUDIO_FRAME:
|
||||
@ -407,22 +407,22 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
||||
/* log position and move on for now */
|
||||
s->audio_chunk_offset = avio_tell(pb);
|
||||
s->audio_chunk_size = opcode_size;
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_SILENCE_FRAME:
|
||||
debug_ipmovie("silence frame\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_INIT_VIDEO_MODE:
|
||||
debug_ipmovie("initialize video mode\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_CREATE_GRADIENT:
|
||||
debug_ipmovie("create gradient\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_SET_PALETTE:
|
||||
@ -464,7 +464,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
||||
|
||||
case OPCODE_SET_PALETTE_COMPRESSED:
|
||||
debug_ipmovie("set palette compressed\n");
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
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 */
|
||||
s->decode_map_chunk_offset = avio_tell(pb);
|
||||
s->decode_map_chunk_size = opcode_size;
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
case OPCODE_VIDEO_DATA:
|
||||
@ -482,7 +482,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb,
|
||||
/* log position and move on for now */
|
||||
s->video_chunk_offset = avio_tell(pb);
|
||||
s->video_chunk_size = opcode_size;
|
||||
avio_seek(pb, opcode_size, SEEK_CUR);
|
||||
avio_skip(pb, opcode_size);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user