Merge remote-tracking branch 'qatar/master'
* qatar/master: (26 commits) adxenc: use AVCodec.encode2() adxenc: Use the AVFrame in ADXContext for coded_frame indeo4: fix out-of-bounds function call. configure: Restructure help output. configure: Internal-only components should not be command-line selectable. vorbisenc: use AVCodec.encode2() libvorbis: use AVCodec.encode2() libopencore-amrnbenc: use AVCodec.encode2() ra144enc: use AVCodec.encode2() nellymoserenc: use AVCodec.encode2() roqaudioenc: use AVCodec.encode2() libspeex: use AVCodec.encode2() libvo_amrwbenc: use AVCodec.encode2() libvo_aacenc: use AVCodec.encode2() wmaenc: use AVCodec.encode2() mpegaudioenc: use AVCodec.encode2() libmp3lame: use AVCodec.encode2() libgsmenc: use AVCodec.encode2() libfaac: use AVCodec.encode2() g726enc: use AVCodec.encode2() ... Conflicts: configure libavcodec/Makefile libavcodec/ac3enc.c libavcodec/adxenc.c libavcodec/libgsm.c libavcodec/libvorbis.c libavcodec/vorbisenc.c libavcodec/wmaenc.c tests/ref/acodec/g722 tests/ref/lavf/asf tests/ref/lavf/ffm tests/ref/lavf/mkv tests/ref/lavf/mpg tests/ref/lavf/rm tests/ref/lavf/ts tests/ref/seek/lavf_asf tests/ref/seek/lavf_ffm tests/ref/seek/lavf_mkv tests/ref/seek/lavf_mpg tests/ref/seek/lavf_rm tests/ref/seek/lavf_ts Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
							
								
								
									
										101
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										101
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -59,8 +59,21 @@ cat <<EOF
 | 
				
			|||||||
Usage: configure [options]
 | 
					Usage: configure [options]
 | 
				
			||||||
Options: [defaults in brackets after descriptions]
 | 
					Options: [defaults in brackets after descriptions]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Standard options:
 | 
					Help options:
 | 
				
			||||||
  --help                   print this message
 | 
					  --help                   print this message
 | 
				
			||||||
 | 
					  --list-decoders          show all available decoders
 | 
				
			||||||
 | 
					  --list-encoders          show all available encoders
 | 
				
			||||||
 | 
					  --list-hwaccels          show all available hardware accelerators
 | 
				
			||||||
 | 
					  --list-demuxers          show all available demuxers
 | 
				
			||||||
 | 
					  --list-muxers            show all available muxers
 | 
				
			||||||
 | 
					  --list-parsers           show all available parsers
 | 
				
			||||||
 | 
					  --list-protocols         show all available protocols
 | 
				
			||||||
 | 
					  --list-bsfs              show all available bitstream filters
 | 
				
			||||||
 | 
					  --list-indevs            show all available input devices
 | 
				
			||||||
 | 
					  --list-outdevs           show all available output devices
 | 
				
			||||||
 | 
					  --list-filters           show all available filters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Standard options:
 | 
				
			||||||
  --logfile=FILE           log tests and output to FILE [config.log]
 | 
					  --logfile=FILE           log tests and output to FILE [config.log]
 | 
				
			||||||
  --disable-logging        do not log configure debug information
 | 
					  --disable-logging        do not log configure debug information
 | 
				
			||||||
  --prefix=PREFIX          install in PREFIX [$prefix]
 | 
					  --prefix=PREFIX          install in PREFIX [$prefix]
 | 
				
			||||||
@@ -71,14 +84,22 @@ Standard options:
 | 
				
			|||||||
  --incdir=DIR             install includes in DIR [PREFIX/include]
 | 
					  --incdir=DIR             install includes in DIR [PREFIX/include]
 | 
				
			||||||
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
 | 
					  --mandir=DIR             install man page in DIR [PREFIX/share/man]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Configuration options:
 | 
					Licensing options:
 | 
				
			||||||
  --disable-static         do not build static libraries [no]
 | 
					 | 
				
			||||||
  --enable-shared          build shared libraries [no]
 | 
					 | 
				
			||||||
  --enable-gpl             allow use of GPL code, the resulting libs
 | 
					  --enable-gpl             allow use of GPL code, the resulting libs
 | 
				
			||||||
                           and binaries will be under GPL [no]
 | 
					                           and binaries will be under GPL [no]
 | 
				
			||||||
  --enable-version3        upgrade (L)GPL to version 3 [no]
 | 
					  --enable-version3        upgrade (L)GPL to version 3 [no]
 | 
				
			||||||
  --enable-nonfree         allow use of nonfree code, the resulting libs
 | 
					  --enable-nonfree         allow use of nonfree code, the resulting libs
 | 
				
			||||||
                           and binaries will be unredistributable [no]
 | 
					                           and binaries will be unredistributable [no]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Configuration options:
 | 
				
			||||||
 | 
					  --disable-static         do not build static libraries [no]
 | 
				
			||||||
 | 
					  --enable-shared          build shared libraries [no]
 | 
				
			||||||
 | 
					  --enable-small           optimize for size instead of speed
 | 
				
			||||||
 | 
					  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
 | 
				
			||||||
 | 
					  --enable-gray            enable full grayscale support (slower color)
 | 
				
			||||||
 | 
					  --disable-swscale-alpha  disable alpha channel support in swscale
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Component options:
 | 
				
			||||||
  --disable-doc            do not build documentation
 | 
					  --disable-doc            do not build documentation
 | 
				
			||||||
  --disable-ffmpeg         disable ffmpeg build
 | 
					  --disable-ffmpeg         disable ffmpeg build
 | 
				
			||||||
  --disable-ffplay         disable ffplay build
 | 
					  --disable-ffplay         disable ffplay build
 | 
				
			||||||
@@ -96,29 +117,17 @@ Configuration options:
 | 
				
			|||||||
  --disable-os2threads     disable OS/2 threads [auto]
 | 
					  --disable-os2threads     disable OS/2 threads [auto]
 | 
				
			||||||
  --enable-x11grab         enable X11 grabbing [no]
 | 
					  --enable-x11grab         enable X11 grabbing [no]
 | 
				
			||||||
  --disable-network        disable network support [no]
 | 
					  --disable-network        disable network support [no]
 | 
				
			||||||
  --enable-gray            enable full grayscale support (slower color)
 | 
					 | 
				
			||||||
  --disable-swscale-alpha  disable alpha channel support in swscale
 | 
					 | 
				
			||||||
  --disable-fastdiv        disable table-based division
 | 
					 | 
				
			||||||
  --enable-small           optimize for size instead of speed
 | 
					 | 
				
			||||||
  --disable-aandct         disable AAN DCT code
 | 
					 | 
				
			||||||
  --disable-dct            disable DCT code
 | 
					  --disable-dct            disable DCT code
 | 
				
			||||||
  --disable-fft            disable FFT code
 | 
					  --disable-fft            disable FFT code
 | 
				
			||||||
  --disable-golomb         disable Golomb code
 | 
					 | 
				
			||||||
  --disable-huffman        disable Huffman code
 | 
					 | 
				
			||||||
  --disable-lpc            disable LPC code
 | 
					 | 
				
			||||||
  --disable-mdct           disable MDCT code
 | 
					  --disable-mdct           disable MDCT code
 | 
				
			||||||
  --disable-rdft           disable RDFT code
 | 
					  --disable-rdft           disable RDFT code
 | 
				
			||||||
 | 
					  --disable-fft            disable FFT code
 | 
				
			||||||
 | 
					  --enable-dxva2           enable DXVA2 code
 | 
				
			||||||
  --enable-vaapi           enable VAAPI code [autodetect]
 | 
					  --enable-vaapi           enable VAAPI code [autodetect]
 | 
				
			||||||
  --enable-vda             enable VDA code [autodetect]
 | 
					  --enable-vda             enable VDA code   [autodetect]
 | 
				
			||||||
  --enable-vdpau           enable VDPAU code [autodetect]
 | 
					  --enable-vdpau           enable VDPAU code [autodetect]
 | 
				
			||||||
  --disable-dxva2          disable DXVA2 code
 | 
					
 | 
				
			||||||
  --disable-vda            disable VDA code
 | 
					Individual component options:
 | 
				
			||||||
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
 | 
					 | 
				
			||||||
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
 | 
					 | 
				
			||||||
  --disable-safe-bitstream-reader
 | 
					 | 
				
			||||||
                           disable buffer boundary checking in bitreaders
 | 
					 | 
				
			||||||
                           (faster, but may crash)
 | 
					 | 
				
			||||||
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
 | 
					 | 
				
			||||||
  --disable-everything     disable all components listed below
 | 
					  --disable-everything     disable all components listed below
 | 
				
			||||||
  --disable-encoder=NAME   disable encoder NAME
 | 
					  --disable-encoder=NAME   disable encoder NAME
 | 
				
			||||||
  --enable-encoder=NAME    enable encoder NAME
 | 
					  --enable-encoder=NAME    enable encoder NAME
 | 
				
			||||||
@@ -144,25 +153,16 @@ Configuration options:
 | 
				
			|||||||
  --enable-protocol=NAME   enable protocol NAME
 | 
					  --enable-protocol=NAME   enable protocol NAME
 | 
				
			||||||
  --disable-protocol=NAME  disable protocol NAME
 | 
					  --disable-protocol=NAME  disable protocol NAME
 | 
				
			||||||
  --disable-protocols      disable all protocols
 | 
					  --disable-protocols      disable all protocols
 | 
				
			||||||
 | 
					  --enable-indev=NAME      enable input device NAME
 | 
				
			||||||
  --disable-indev=NAME     disable input device NAME
 | 
					  --disable-indev=NAME     disable input device NAME
 | 
				
			||||||
  --disable-outdev=NAME    disable output device NAME
 | 
					 | 
				
			||||||
  --disable-indevs         disable input devices
 | 
					  --disable-indevs         disable input devices
 | 
				
			||||||
 | 
					  --enable-outdev=NAME     enable output device NAME
 | 
				
			||||||
 | 
					  --disable-outdev=NAME    disable output device NAME
 | 
				
			||||||
  --disable-outdevs        disable output devices
 | 
					  --disable-outdevs        disable output devices
 | 
				
			||||||
  --disable-devices        disable all devices
 | 
					  --disable-devices        disable all devices
 | 
				
			||||||
  --enable-filter=NAME     enable filter NAME
 | 
					  --enable-filter=NAME     enable filter NAME
 | 
				
			||||||
  --disable-filter=NAME    disable filter NAME
 | 
					  --disable-filter=NAME    disable filter NAME
 | 
				
			||||||
  --disable-filters        disable all filters
 | 
					  --disable-filters        disable all filters
 | 
				
			||||||
  --list-decoders          show all available decoders
 | 
					 | 
				
			||||||
  --list-encoders          show all available encoders
 | 
					 | 
				
			||||||
  --list-hwaccels          show all available hardware accelerators
 | 
					 | 
				
			||||||
  --list-muxers            show all available muxers
 | 
					 | 
				
			||||||
  --list-demuxers          show all available demuxers
 | 
					 | 
				
			||||||
  --list-parsers           show all available parsers
 | 
					 | 
				
			||||||
  --list-protocols         show all available protocols
 | 
					 | 
				
			||||||
  --list-bsfs              show all available bitstream filters
 | 
					 | 
				
			||||||
  --list-indevs            show all available input devices
 | 
					 | 
				
			||||||
  --list-outdevs           show all available output devices
 | 
					 | 
				
			||||||
  --list-filters           show all available filters
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
External library support:
 | 
					External library support:
 | 
				
			||||||
  --enable-avisynth        enable reading of AVISynth script files [no]
 | 
					  --enable-avisynth        enable reading of AVISynth script files [no]
 | 
				
			||||||
@@ -233,11 +233,24 @@ Advanced options (experts only):
 | 
				
			|||||||
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
 | 
					  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
 | 
				
			||||||
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
 | 
					  --extra-libs=ELIBS       add ELIBS [$ELIBS]
 | 
				
			||||||
  --extra-version=STRING   version string suffix []
 | 
					  --extra-version=STRING   version string suffix []
 | 
				
			||||||
 | 
					  --optflags               override optimization-related compiler flags
 | 
				
			||||||
  --build-suffix=SUFFIX    library name suffix []
 | 
					  --build-suffix=SUFFIX    library name suffix []
 | 
				
			||||||
 | 
					  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
 | 
				
			||||||
  --progs-suffix=SUFFIX    program name suffix []
 | 
					  --progs-suffix=SUFFIX    program name suffix []
 | 
				
			||||||
  --arch=ARCH              select architecture [$arch]
 | 
					  --arch=ARCH              select architecture [$arch]
 | 
				
			||||||
  --cpu=CPU                select the minimum required CPU (affects
 | 
					  --cpu=CPU                select the minimum required CPU (affects
 | 
				
			||||||
                           instruction selection, may crash on older CPUs)
 | 
					                           instruction selection, may crash on older CPUs)
 | 
				
			||||||
 | 
					  --enable-pic             build position-independent code
 | 
				
			||||||
 | 
					  --enable-sram            allow use of on-chip SRAM
 | 
				
			||||||
 | 
					  --disable-symver         disable symbol versioning
 | 
				
			||||||
 | 
					  --disable-fastdiv        disable table-based division
 | 
				
			||||||
 | 
					  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
 | 
				
			||||||
 | 
					  --disable-safe-bitstream-reader
 | 
				
			||||||
 | 
					                           disable buffer boundary checking in bitreaders
 | 
				
			||||||
 | 
					                           (faster, but may crash)
 | 
				
			||||||
 | 
					  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optimization options (experts only):
 | 
				
			||||||
  --disable-asm            disable all assembler optimizations
 | 
					  --disable-asm            disable all assembler optimizations
 | 
				
			||||||
  --disable-altivec        disable AltiVec optimizations
 | 
					  --disable-altivec        disable AltiVec optimizations
 | 
				
			||||||
  --disable-amd3dnow       disable 3DNow! optimizations
 | 
					  --disable-amd3dnow       disable 3DNow! optimizations
 | 
				
			||||||
@@ -255,11 +268,6 @@ Advanced options (experts only):
 | 
				
			|||||||
  --disable-neon           disable NEON optimizations
 | 
					  --disable-neon           disable NEON optimizations
 | 
				
			||||||
  --disable-vis            disable VIS optimizations
 | 
					  --disable-vis            disable VIS optimizations
 | 
				
			||||||
  --disable-yasm           disable use of yasm assembler
 | 
					  --disable-yasm           disable use of yasm assembler
 | 
				
			||||||
  --enable-pic             build position-independent code
 | 
					 | 
				
			||||||
  --malloc-prefix=PFX      prefix malloc and related names with PFX
 | 
					 | 
				
			||||||
  --enable-sram            allow use of on-chip SRAM
 | 
					 | 
				
			||||||
  --disable-symver         disable symbol versioning
 | 
					 | 
				
			||||||
  --optflags               override optimization-related compiler flags
 | 
					 | 
				
			||||||
  --postproc-version=V     build libpostproc version V.
 | 
					  --postproc-version=V     build libpostproc version V.
 | 
				
			||||||
                           Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
 | 
					                           Where V can be '$ALT_PP_VER_MAJOR.$ALT_PP_VER_MINOR.$ALT_PP_VER_MICRO' or 'current'. [$postproc_version_default]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -999,10 +1007,6 @@ PROGRAM_LIST="
 | 
				
			|||||||
CONFIG_LIST="
 | 
					CONFIG_LIST="
 | 
				
			||||||
    $COMPONENT_LIST
 | 
					    $COMPONENT_LIST
 | 
				
			||||||
    $PROGRAM_LIST
 | 
					    $PROGRAM_LIST
 | 
				
			||||||
    avplay
 | 
					 | 
				
			||||||
    avprobe
 | 
					 | 
				
			||||||
    avserver
 | 
					 | 
				
			||||||
    aandct
 | 
					 | 
				
			||||||
    ac3dsp
 | 
					    ac3dsp
 | 
				
			||||||
    avcodec
 | 
					    avcodec
 | 
				
			||||||
    avdevice
 | 
					    avdevice
 | 
				
			||||||
@@ -1019,14 +1023,9 @@ CONFIG_LIST="
 | 
				
			|||||||
    fft
 | 
					    fft
 | 
				
			||||||
    frei0r
 | 
					    frei0r
 | 
				
			||||||
    gnutls
 | 
					    gnutls
 | 
				
			||||||
    golomb
 | 
					 | 
				
			||||||
    gpl
 | 
					    gpl
 | 
				
			||||||
    gray
 | 
					    gray
 | 
				
			||||||
    h264chroma
 | 
					 | 
				
			||||||
    h264dsp
 | 
					 | 
				
			||||||
    h264pred
 | 
					 | 
				
			||||||
    hardcoded_tables
 | 
					    hardcoded_tables
 | 
				
			||||||
    huffman
 | 
					 | 
				
			||||||
    libaacplus
 | 
					    libaacplus
 | 
				
			||||||
    libass
 | 
					    libass
 | 
				
			||||||
    libbluray
 | 
					    libbluray
 | 
				
			||||||
@@ -1059,7 +1058,6 @@ CONFIG_LIST="
 | 
				
			|||||||
    libx264
 | 
					    libx264
 | 
				
			||||||
    libxavs
 | 
					    libxavs
 | 
				
			||||||
    libxvid
 | 
					    libxvid
 | 
				
			||||||
    lpc
 | 
					 | 
				
			||||||
    lsp
 | 
					    lsp
 | 
				
			||||||
    mdct
 | 
					    mdct
 | 
				
			||||||
    memalign_hack
 | 
					    memalign_hack
 | 
				
			||||||
@@ -1261,9 +1259,16 @@ HAVE_LIST="
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# options emitted with CONFIG_ prefix but not available on command line
 | 
					# options emitted with CONFIG_ prefix but not available on command line
 | 
				
			||||||
CONFIG_EXTRA="
 | 
					CONFIG_EXTRA="
 | 
				
			||||||
 | 
					    aandct
 | 
				
			||||||
    avutil
 | 
					    avutil
 | 
				
			||||||
 | 
					    golomb
 | 
				
			||||||
    gplv3
 | 
					    gplv3
 | 
				
			||||||
 | 
					    h264chroma
 | 
				
			||||||
 | 
					    h264dsp
 | 
				
			||||||
 | 
					    h264pred
 | 
				
			||||||
 | 
					    huffman
 | 
				
			||||||
    lgplv3
 | 
					    lgplv3
 | 
				
			||||||
 | 
					    lpc
 | 
				
			||||||
"
 | 
					"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CMDLINE_SELECT="
 | 
					CMDLINE_SELECT="
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,7 +61,8 @@ OBJS-$(CONFIG_AAC_DECODER)             += aacdec.o aactab.o aacsbr.o aacps.o \
 | 
				
			|||||||
OBJS-$(CONFIG_AAC_ENCODER)             += aacenc.o aaccoder.o    \
 | 
					OBJS-$(CONFIG_AAC_ENCODER)             += aacenc.o aaccoder.o    \
 | 
				
			||||||
                                          aacpsy.o aactab.o      \
 | 
					                                          aacpsy.o aactab.o      \
 | 
				
			||||||
                                          psymodel.o iirfilter.o \
 | 
					                                          psymodel.o iirfilter.o \
 | 
				
			||||||
                                          mpeg4audio.o kbdwin.o
 | 
					                                          mpeg4audio.o kbdwin.o  \
 | 
				
			||||||
 | 
					                                          audio_frame_queue.o
 | 
				
			||||||
OBJS-$(CONFIG_AASC_DECODER)            += aasc.o msrledec.o
 | 
					OBJS-$(CONFIG_AASC_DECODER)            += aasc.o msrledec.o
 | 
				
			||||||
OBJS-$(CONFIG_AC3_DECODER)             += ac3dec.o ac3dec_data.o ac3.o kbdwin.o
 | 
					OBJS-$(CONFIG_AC3_DECODER)             += ac3dec.o ac3dec_data.o ac3.o kbdwin.o
 | 
				
			||||||
OBJS-$(CONFIG_AC3_ENCODER)             += ac3enc_float.o ac3enc.o ac3tab.o \
 | 
					OBJS-$(CONFIG_AC3_ENCODER)             += ac3enc_float.o ac3enc.o ac3tab.o \
 | 
				
			||||||
@@ -314,7 +315,8 @@ OBJS-$(CONFIG_MSVIDEO1_ENCODER)        += msvideo1enc.o elbg.o
 | 
				
			|||||||
OBJS-$(CONFIG_MSZH_DECODER)            += lcldec.o
 | 
					OBJS-$(CONFIG_MSZH_DECODER)            += lcldec.o
 | 
				
			||||||
OBJS-$(CONFIG_MXPEG_DECODER)           += mxpegdec.o mjpegdec.o mjpeg.o
 | 
					OBJS-$(CONFIG_MXPEG_DECODER)           += mxpegdec.o mjpegdec.o mjpeg.o
 | 
				
			||||||
OBJS-$(CONFIG_NELLYMOSER_DECODER)      += nellymoserdec.o nellymoser.o
 | 
					OBJS-$(CONFIG_NELLYMOSER_DECODER)      += nellymoserdec.o nellymoser.o
 | 
				
			||||||
OBJS-$(CONFIG_NELLYMOSER_ENCODER)      += nellymoserenc.o nellymoser.o
 | 
					OBJS-$(CONFIG_NELLYMOSER_ENCODER)      += nellymoserenc.o nellymoser.o \
 | 
				
			||||||
 | 
					                                          audio_frame_queue.o
 | 
				
			||||||
OBJS-$(CONFIG_NUV_DECODER)             += nuv.o rtjpeg.o
 | 
					OBJS-$(CONFIG_NUV_DECODER)             += nuv.o rtjpeg.o
 | 
				
			||||||
OBJS-$(CONFIG_PAM_DECODER)             += pnmdec.o pnm.o
 | 
					OBJS-$(CONFIG_PAM_DECODER)             += pnmdec.o pnm.o
 | 
				
			||||||
OBJS-$(CONFIG_PAM_ENCODER)             += pamenc.o pnm.o
 | 
					OBJS-$(CONFIG_PAM_ENCODER)             += pamenc.o pnm.o
 | 
				
			||||||
@@ -353,7 +355,8 @@ OBJS-$(CONFIG_R10K_ENCODER)            += r210enc.o
 | 
				
			|||||||
OBJS-$(CONFIG_R210_DECODER)            += r210dec.o
 | 
					OBJS-$(CONFIG_R210_DECODER)            += r210dec.o
 | 
				
			||||||
OBJS-$(CONFIG_R210_ENCODER)            += r210enc.o
 | 
					OBJS-$(CONFIG_R210_ENCODER)            += r210enc.o
 | 
				
			||||||
OBJS-$(CONFIG_RA_144_DECODER)          += ra144dec.o ra144.o celp_filters.o
 | 
					OBJS-$(CONFIG_RA_144_DECODER)          += ra144dec.o ra144.o celp_filters.o
 | 
				
			||||||
OBJS-$(CONFIG_RA_144_ENCODER)          += ra144enc.o ra144.o celp_filters.o
 | 
					OBJS-$(CONFIG_RA_144_ENCODER)          += ra144enc.o ra144.o celp_filters.o \
 | 
				
			||||||
 | 
					                                          audio_frame_queue.o
 | 
				
			||||||
OBJS-$(CONFIG_RA_288_DECODER)          += ra288.o celp_math.o celp_filters.o
 | 
					OBJS-$(CONFIG_RA_288_DECODER)          += ra288.o celp_math.o celp_filters.o
 | 
				
			||||||
OBJS-$(CONFIG_RALF_DECODER)            += ralf.o
 | 
					OBJS-$(CONFIG_RALF_DECODER)            += ralf.o
 | 
				
			||||||
OBJS-$(CONFIG_RAWVIDEO_DECODER)        += rawdec.o
 | 
					OBJS-$(CONFIG_RAWVIDEO_DECODER)        += rawdec.o
 | 
				
			||||||
@@ -630,12 +633,13 @@ OBJS-$(CONFIG_WTV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o
 | 
				
			|||||||
OBJS-$(CONFIG_LIBAACPLUS_ENCODER)         += libaacplus.o
 | 
					OBJS-$(CONFIG_LIBAACPLUS_ENCODER)         += libaacplus.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
 | 
					OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBDIRAC_DECODER)           += libdiracdec.o
 | 
					OBJS-$(CONFIG_LIBDIRAC_DECODER)           += libdiracdec.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBFAAC_ENCODER)            += libfaac.o
 | 
					OBJS-$(CONFIG_LIBFAAC_ENCODER)            += libfaac.o audio_frame_queue.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBGSM_DECODER)             += libgsm.o
 | 
					OBJS-$(CONFIG_LIBGSM_DECODER)             += libgsm.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBGSM_ENCODER)             += libgsm.o
 | 
					OBJS-$(CONFIG_LIBGSM_ENCODER)             += libgsm.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBGSM_MS_DECODER)          += libgsm.o
 | 
					OBJS-$(CONFIG_LIBGSM_MS_DECODER)          += libgsm.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBGSM_MS_ENCODER)          += libgsm.o
 | 
					OBJS-$(CONFIG_LIBGSM_MS_ENCODER)          += libgsm.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBMP3LAME_ENCODER)         += libmp3lame.o mpegaudiodecheader.o
 | 
					OBJS-$(CONFIG_LIBMP3LAME_ENCODER)         += libmp3lame.o mpegaudiodecheader.o \
 | 
				
			||||||
 | 
					                                             audio_frame_queue.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBOPENCORE_AMRNB_DECODER)  += libopencore-amr.o
 | 
					OBJS-$(CONFIG_LIBOPENCORE_AMRNB_DECODER)  += libopencore-amr.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER)  += libopencore-amr.o
 | 
					OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER)  += libopencore-amr.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER)  += libopencore-amr.o
 | 
					OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER)  += libopencore-amr.o
 | 
				
			||||||
@@ -648,14 +652,15 @@ OBJS-$(CONFIG_LIBSCHROEDINGER_ENCODER)    += libschroedingerenc.o \
 | 
				
			|||||||
                                             libschroedinger.o    \
 | 
					                                             libschroedinger.o    \
 | 
				
			||||||
                                             libdirac_libschro.o
 | 
					                                             libdirac_libschro.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBSPEEX_DECODER)           += libspeexdec.o
 | 
					OBJS-$(CONFIG_LIBSPEEX_DECODER)           += libspeexdec.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBSPEEX_ENCODER)           += libspeexenc.o
 | 
					OBJS-$(CONFIG_LIBSPEEX_ENCODER)           += libspeexenc.o audio_frame_queue.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBSTAGEFRIGHT_H264_DECODER)+= libstagefright.o
 | 
					OBJS-$(CONFIG_LIBSTAGEFRIGHT_H264_DECODER)+= libstagefright.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBTHEORA_ENCODER)          += libtheoraenc.o
 | 
					OBJS-$(CONFIG_LIBTHEORA_ENCODER)          += libtheoraenc.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBUTVIDEO_DECODER)         += libutvideodec.o
 | 
					OBJS-$(CONFIG_LIBUTVIDEO_DECODER)         += libutvideodec.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBUTVIDEO_ENCODER)         += libutvideoenc.o
 | 
					OBJS-$(CONFIG_LIBUTVIDEO_ENCODER)         += libutvideoenc.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVO_AACENC_ENCODER)       += libvo-aacenc.o mpeg4audio.o
 | 
					OBJS-$(CONFIG_LIBVO_AACENC_ENCODER)       += libvo-aacenc.o mpeg4audio.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER)     += libvo-amrwbenc.o
 | 
					OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER)     += libvo-amrwbenc.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVORBIS_ENCODER)          += libvorbis.o vorbis_data.o
 | 
					OBJS-$(CONFIG_LIBVORBIS_ENCODER)          += libvorbis.o audio_frame_queue.o \
 | 
				
			||||||
 | 
					                                             vorbis_data.o vorbis_parser.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVPX_DECODER)             += libvpxdec.o
 | 
					OBJS-$(CONFIG_LIBVPX_DECODER)             += libvpxdec.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBVPX_ENCODER)             += libvpxenc.o
 | 
					OBJS-$(CONFIG_LIBVPX_ENCODER)             += libvpxenc.o
 | 
				
			||||||
OBJS-$(CONFIG_LIBX264_ENCODER)            += libx264.o
 | 
					OBJS-$(CONFIG_LIBX264_ENCODER)            += libx264.o
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,7 @@
 | 
				
			|||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "put_bits.h"
 | 
					#include "put_bits.h"
 | 
				
			||||||
#include "dsputil.h"
 | 
					#include "dsputil.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "mpeg4audio.h"
 | 
					#include "mpeg4audio.h"
 | 
				
			||||||
#include "kbdwin.h"
 | 
					#include "kbdwin.h"
 | 
				
			||||||
#include "sinewin.h"
 | 
					#include "sinewin.h"
 | 
				
			||||||
@@ -476,8 +477,7 @@ static void put_bitstream_info(AVCodecContext *avctx, AACEncContext *s,
 | 
				
			|||||||
 * Deinterleave input samples.
 | 
					 * Deinterleave input samples.
 | 
				
			||||||
 * Channels are reordered from libavcodec's default order to AAC order.
 | 
					 * Channels are reordered from libavcodec's default order to AAC order.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static void deinterleave_input_samples(AACEncContext *s,
 | 
					static void deinterleave_input_samples(AACEncContext *s, AVFrame *frame)
 | 
				
			||||||
                                       const float *samples, int nb_samples)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int ch, i;
 | 
					    int ch, i;
 | 
				
			||||||
    const int sinc = s->channels;
 | 
					    const int sinc = s->channels;
 | 
				
			||||||
@@ -485,35 +485,43 @@ static void deinterleave_input_samples(AACEncContext *s,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* deinterleave and remap input samples */
 | 
					    /* deinterleave and remap input samples */
 | 
				
			||||||
    for (ch = 0; ch < sinc; ch++) {
 | 
					    for (ch = 0; ch < sinc; ch++) {
 | 
				
			||||||
        const float *sptr = samples + channel_map[ch];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* copy last 1024 samples of previous frame to the start of the current frame */
 | 
					        /* copy last 1024 samples of previous frame to the start of the current frame */
 | 
				
			||||||
        memcpy(&s->planar_samples[ch][1024], &s->planar_samples[ch][2048], 1024 * sizeof(s->planar_samples[0][0]));
 | 
					        memcpy(&s->planar_samples[ch][1024], &s->planar_samples[ch][2048], 1024 * sizeof(s->planar_samples[0][0]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* deinterleave */
 | 
					        /* deinterleave */
 | 
				
			||||||
        for (i = 2048; i < 2048 + nb_samples; i++) {
 | 
					        i = 2048;
 | 
				
			||||||
            s->planar_samples[ch][i] = *sptr;
 | 
					        if (frame) {
 | 
				
			||||||
            sptr += sinc;
 | 
					            const float *sptr = ((const float *)frame->data[0]) + channel_map[ch];
 | 
				
			||||||
 | 
					            for (; i < 2048 + frame->nb_samples; i++) {
 | 
				
			||||||
 | 
					                s->planar_samples[ch][i] = *sptr;
 | 
				
			||||||
 | 
					                sptr += sinc;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        memset(&s->planar_samples[ch][i], 0,
 | 
					        memset(&s->planar_samples[ch][i], 0,
 | 
				
			||||||
               (3072 - i) * sizeof(s->planar_samples[0][0]));
 | 
					               (3072 - i) * sizeof(s->planar_samples[0][0]));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int aac_encode_frame(AVCodecContext *avctx,
 | 
					static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                            uint8_t *frame, int buf_size, void *data)
 | 
					                            const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AACEncContext *s = avctx->priv_data;
 | 
					    AACEncContext *s = avctx->priv_data;
 | 
				
			||||||
    float **samples = s->planar_samples, *samples2, *la, *overlap;
 | 
					    float **samples = s->planar_samples, *samples2, *la, *overlap;
 | 
				
			||||||
    ChannelElement *cpe;
 | 
					    ChannelElement *cpe;
 | 
				
			||||||
    int i, ch, w, g, chans, tag, start_ch;
 | 
					    int i, ch, w, g, chans, tag, start_ch, ret;
 | 
				
			||||||
    int chan_el_counter[4];
 | 
					    int chan_el_counter[4];
 | 
				
			||||||
    FFPsyWindowInfo windows[AAC_MAX_CHANNELS];
 | 
					    FFPsyWindowInfo windows[AAC_MAX_CHANNELS];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->last_frame == 2)
 | 
					    if (s->last_frame == 2)
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    deinterleave_input_samples(s, data, data ? avctx->frame_size : 0);
 | 
					    /* add current frame to queue */
 | 
				
			||||||
 | 
					    if (frame) {
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    deinterleave_input_samples(s, frame);
 | 
				
			||||||
    if (s->psypp)
 | 
					    if (s->psypp)
 | 
				
			||||||
        ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
 | 
					        ff_psy_preprocess(s->psypp, s->planar_samples, s->channels);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -532,7 +540,7 @@ static int aac_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
            overlap  = &samples[cur_channel][0];
 | 
					            overlap  = &samples[cur_channel][0];
 | 
				
			||||||
            samples2 = overlap + 1024;
 | 
					            samples2 = overlap + 1024;
 | 
				
			||||||
            la       = samples2 + (448+64);
 | 
					            la       = samples2 + (448+64);
 | 
				
			||||||
            if (!data)
 | 
					            if (!frame)
 | 
				
			||||||
                la = NULL;
 | 
					                la = NULL;
 | 
				
			||||||
            if (tag == TYPE_LFE) {
 | 
					            if (tag == TYPE_LFE) {
 | 
				
			||||||
                wi[ch].window_type[0] = ONLY_LONG_SEQUENCE;
 | 
					                wi[ch].window_type[0] = ONLY_LONG_SEQUENCE;
 | 
				
			||||||
@@ -565,7 +573,13 @@ static int aac_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
        int frame_bits;
 | 
					        int frame_bits;
 | 
				
			||||||
        init_put_bits(&s->pb, frame, buf_size*8);
 | 
					
 | 
				
			||||||
 | 
					        if ((ret = ff_alloc_packet(avpkt, 768 * s->channels))) {
 | 
				
			||||||
 | 
					            av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        init_put_bits(&s->pb, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((avctx->frame_number & 0xFF)==1 && !(avctx->flags & CODEC_FLAG_BITEXACT))
 | 
					        if ((avctx->frame_number & 0xFF)==1 && !(avctx->flags & CODEC_FLAG_BITEXACT))
 | 
				
			||||||
            put_bitstream_info(avctx, s, LIBAVCODEC_IDENT);
 | 
					            put_bitstream_info(avctx, s, LIBAVCODEC_IDENT);
 | 
				
			||||||
        start_ch = 0;
 | 
					        start_ch = 0;
 | 
				
			||||||
@@ -645,10 +659,15 @@ static int aac_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        s->lambda = FFMIN(s->lambda, 65536.f);
 | 
					        s->lambda = FFMIN(s->lambda, 65536.f);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!data)
 | 
					    if (!frame)
 | 
				
			||||||
        s->last_frame++;
 | 
					        s->last_frame++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return put_bits_count(&s->pb)>>3;
 | 
					    ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                       &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = put_bits_count(&s->pb) >> 3;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static av_cold int aac_encode_end(AVCodecContext *avctx)
 | 
					static av_cold int aac_encode_end(AVCodecContext *avctx)
 | 
				
			||||||
@@ -662,6 +681,10 @@ static av_cold int aac_encode_end(AVCodecContext *avctx)
 | 
				
			|||||||
        ff_psy_preprocess_end(s->psypp);
 | 
					        ff_psy_preprocess_end(s->psypp);
 | 
				
			||||||
    av_freep(&s->buffer.samples);
 | 
					    av_freep(&s->buffer.samples);
 | 
				
			||||||
    av_freep(&s->cpe);
 | 
					    av_freep(&s->cpe);
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -695,6 +718,11 @@ static av_cold int alloc_buffers(AVCodecContext *avctx, AACEncContext *s)
 | 
				
			|||||||
    for(ch = 0; ch < s->channels; ch++)
 | 
					    for(ch = 0; ch < s->channels; ch++)
 | 
				
			||||||
        s->planar_samples[ch] = s->buffer.samples + 3 * 1024 * ch;
 | 
					        s->planar_samples[ch] = s->buffer.samples + 3 * 1024 * ch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    if (!(avctx->coded_frame = avcodec_alloc_frame()))
 | 
				
			||||||
 | 
					        goto alloc_fail;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
alloc_fail:
 | 
					alloc_fail:
 | 
				
			||||||
    return AVERROR(ENOMEM);
 | 
					    return AVERROR(ENOMEM);
 | 
				
			||||||
@@ -756,6 +784,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    for (i = 0; i < 428; i++)
 | 
					    for (i = 0; i < 428; i++)
 | 
				
			||||||
        ff_aac_pow34sf_tab[i] = sqrt(ff_aac_pow2sf_tab[i] * sqrt(ff_aac_pow2sf_tab[i]));
 | 
					        ff_aac_pow34sf_tab[i] = sqrt(ff_aac_pow2sf_tab[i] * sqrt(ff_aac_pow2sf_tab[i]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avctx->delay = 1024;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
    aac_encode_end(avctx);
 | 
					    aac_encode_end(avctx);
 | 
				
			||||||
@@ -785,7 +816,7 @@ AVCodec ff_aac_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AAC,
 | 
					    .id             = CODEC_ID_AAC,
 | 
				
			||||||
    .priv_data_size = sizeof(AACEncContext),
 | 
					    .priv_data_size = sizeof(AACEncContext),
 | 
				
			||||||
    .init           = aac_encode_init,
 | 
					    .init           = aac_encode_init,
 | 
				
			||||||
    .encode         = aac_encode_frame,
 | 
					    .encode2        = aac_encode_frame,
 | 
				
			||||||
    .close          = aac_encode_end,
 | 
					    .close          = aac_encode_end,
 | 
				
			||||||
    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL,
 | 
					    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@
 | 
				
			|||||||
#include "dsputil.h"
 | 
					#include "dsputil.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "aac.h"
 | 
					#include "aac.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
#include "psymodel.h"
 | 
					#include "psymodel.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AAC_CODER_NB 4
 | 
					#define AAC_CODER_NB 4
 | 
				
			||||||
@@ -74,6 +74,7 @@ typedef struct AACEncContext {
 | 
				
			|||||||
    int cur_channel;
 | 
					    int cur_channel;
 | 
				
			||||||
    int last_frame;
 | 
					    int last_frame;
 | 
				
			||||||
    float lambda;
 | 
					    float lambda;
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
    DECLARE_ALIGNED(16, int,   qcoefs)[96];      ///< quantized coefficients
 | 
					    DECLARE_ALIGNED(16, int,   qcoefs)[96];      ///< quantized coefficients
 | 
				
			||||||
    DECLARE_ALIGNED(32, float, scoefs)[1024];    ///< scaled coefficients
 | 
					    DECLARE_ALIGNED(32, float, scoefs)[1024];    ///< scaled coefficients
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2050,7 +2050,9 @@ av_cold int ff_ac3_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    s->mdct_end(s);
 | 
					    s->mdct_end(s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2434,6 +2436,7 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        return ret;
 | 
					        return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size = AC3_BLOCK_SIZE * s->num_blocks;
 | 
					    avctx->frame_size = AC3_BLOCK_SIZE * s->num_blocks;
 | 
				
			||||||
 | 
					    avctx->delay      = AC3_BLOCK_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->bitstream_mode = avctx->audio_service_type;
 | 
					    s->bitstream_mode = avctx->audio_service_type;
 | 
				
			||||||
    if (s->bitstream_mode == AV_AUDIO_SERVICE_TYPE_KARAOKE)
 | 
					    if (s->bitstream_mode == AV_AUDIO_SERVICE_TYPE_KARAOKE)
 | 
				
			||||||
@@ -2479,9 +2482,13 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    if (ret)
 | 
					    if (ret)
 | 
				
			||||||
        goto init_fail;
 | 
					        goto init_fail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame= avcodec_alloc_frame();
 | 
					    avctx->coded_frame= avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto init_fail;
 | 
					        goto init_fail;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ff_dsputil_init(&s->dsp, avctx);
 | 
					    ff_dsputil_init(&s->dsp, avctx);
 | 
				
			||||||
    ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
 | 
					    ff_ac3dsp_init(&s->ac3dsp, avctx->flags & CODEC_FLAG_BITEXACT);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -297,9 +297,9 @@ int ff_ac3_float_mdct_init(AC3EncodeContext *s);
 | 
				
			|||||||
int ff_ac3_fixed_allocate_sample_buffers(AC3EncodeContext *s);
 | 
					int ff_ac3_fixed_allocate_sample_buffers(AC3EncodeContext *s);
 | 
				
			||||||
int ff_ac3_float_allocate_sample_buffers(AC3EncodeContext *s);
 | 
					int ff_ac3_float_allocate_sample_buffers(AC3EncodeContext *s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ff_ac3_fixed_encode_frame(AVCodecContext *avctx, unsigned char *frame,
 | 
					int ff_ac3_fixed_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                              int buf_size, void *data);
 | 
					                              const AVFrame *frame, int *got_packet_ptr);
 | 
				
			||||||
int ff_ac3_float_encode_frame(AVCodecContext *avctx, unsigned char *frame,
 | 
					int ff_ac3_float_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                              int buf_size, void *data);
 | 
					                              const AVFrame *frame, int *got_packet_ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* AVCODEC_AC3ENC_H */
 | 
					#endif /* AVCODEC_AC3ENC_H */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define CONFIG_FFT_FLOAT 0
 | 
					#define CONFIG_FFT_FLOAT 0
 | 
				
			||||||
#undef CONFIG_AC3ENC_FLOAT
 | 
					#undef CONFIG_AC3ENC_FLOAT
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "ac3enc.h"
 | 
					#include "ac3enc.h"
 | 
				
			||||||
#include "eac3enc.h"
 | 
					#include "eac3enc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -151,7 +152,7 @@ AVCodec ff_ac3_fixed_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AC3,
 | 
					    .id             = CODEC_ID_AC3,
 | 
				
			||||||
    .priv_data_size = sizeof(AC3EncodeContext),
 | 
					    .priv_data_size = sizeof(AC3EncodeContext),
 | 
				
			||||||
    .init           = ac3_fixed_encode_init,
 | 
					    .init           = ac3_fixed_encode_init,
 | 
				
			||||||
    .encode         = ff_ac3_fixed_encode_frame,
 | 
					    .encode2        = ff_ac3_fixed_encode_frame,
 | 
				
			||||||
    .close          = ff_ac3_encode_close,
 | 
					    .close          = ff_ac3_encode_close,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CONFIG_AC3ENC_FLOAT 1
 | 
					#define CONFIG_AC3ENC_FLOAT 1
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "ac3enc.h"
 | 
					#include "ac3enc.h"
 | 
				
			||||||
#include "eac3enc.h"
 | 
					#include "eac3enc.h"
 | 
				
			||||||
#include "kbdwin.h"
 | 
					#include "kbdwin.h"
 | 
				
			||||||
@@ -149,7 +150,7 @@ AVCodec ff_ac3_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AC3,
 | 
					    .id             = CODEC_ID_AC3,
 | 
				
			||||||
    .priv_data_size = sizeof(AC3EncodeContext),
 | 
					    .priv_data_size = sizeof(AC3EncodeContext),
 | 
				
			||||||
    .init           = ff_ac3_encode_init,
 | 
					    .init           = ff_ac3_encode_init,
 | 
				
			||||||
    .encode         = ff_ac3_float_encode_frame,
 | 
					    .encode2        = ff_ac3_float_encode_frame,
 | 
				
			||||||
    .close          = ff_ac3_encode_close,
 | 
					    .close          = ff_ac3_encode_close,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -386,11 +386,11 @@ static void compute_rematrixing_strategy(AC3EncodeContext *s)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int AC3_NAME(encode_frame)(AVCodecContext *avctx, unsigned char *frame,
 | 
					int AC3_NAME(encode_frame)(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                           int buf_size, void *data)
 | 
					                           const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AC3EncodeContext *s = avctx->priv_data;
 | 
					    AC3EncodeContext *s = avctx->priv_data;
 | 
				
			||||||
    const SampleType *samples = data;
 | 
					    const SampleType *samples = (const SampleType *)frame->data[0];
 | 
				
			||||||
    int ret;
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->options.allow_per_frame_metadata) {
 | 
					    if (s->options.allow_per_frame_metadata) {
 | 
				
			||||||
@@ -437,7 +437,15 @@ int AC3_NAME(encode_frame)(AVCodecContext *avctx, unsigned char *frame,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ff_ac3_quantize_mantissas(s);
 | 
					    ff_ac3_quantize_mantissas(s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ff_ac3_output_frame(s, frame);
 | 
					    if ((ret = ff_alloc_packet(avpkt, s->frame_size))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    ff_ac3_output_frame(s, avpkt->data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return s->frame_size;
 | 
					    if (frame->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					        avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@
 | 
				
			|||||||
#include "bytestream.h"
 | 
					#include "bytestream.h"
 | 
				
			||||||
#include "adpcm.h"
 | 
					#include "adpcm.h"
 | 
				
			||||||
#include "adpcm_data.h"
 | 
					#include "adpcm_data.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @file
 | 
					 * @file
 | 
				
			||||||
@@ -144,8 +145,10 @@ static av_cold int adpcm_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    if (!(avctx->coded_frame = avcodec_alloc_frame()))
 | 
					    if (!(avctx->coded_frame = avcodec_alloc_frame()))
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -156,7 +159,9 @@ error:
 | 
				
			|||||||
static av_cold int adpcm_encode_close(AVCodecContext *avctx)
 | 
					static av_cold int adpcm_encode_close(AVCodecContext *avctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ADPCMEncodeContext *s = avctx->priv_data;
 | 
					    ADPCMEncodeContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&s->paths);
 | 
					    av_freep(&s->paths);
 | 
				
			||||||
    av_freep(&s->node_buf);
 | 
					    av_freep(&s->node_buf);
 | 
				
			||||||
    av_freep(&s->nodep_buf);
 | 
					    av_freep(&s->nodep_buf);
 | 
				
			||||||
@@ -473,23 +478,31 @@ static void adpcm_compress_trellis(AVCodecContext *avctx,
 | 
				
			|||||||
    c->idelta     = nodes[0]->step;
 | 
					    c->idelta     = nodes[0]->step;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
					static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                              int buf_size, void *data)
 | 
					                              const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int n, i, st;
 | 
					    int n, i, st, pkt_size, ret;
 | 
				
			||||||
    int16_t *samples;
 | 
					    const int16_t *samples;
 | 
				
			||||||
    uint8_t *dst;
 | 
					    uint8_t *dst;
 | 
				
			||||||
    ADPCMEncodeContext *c = avctx->priv_data;
 | 
					    ADPCMEncodeContext *c = avctx->priv_data;
 | 
				
			||||||
    uint8_t *buf;
 | 
					    uint8_t *buf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    dst = frame;
 | 
					    samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
    samples = data;
 | 
					 | 
				
			||||||
    st = avctx->channels == 2;
 | 
					    st = avctx->channels == 2;
 | 
				
			||||||
    /* n = (BLKSIZE - 4 * avctx->channels) / (2 * 8 * avctx->channels); */
 | 
					
 | 
				
			||||||
 | 
					    if (avctx->codec_id == CODEC_ID_ADPCM_SWF)
 | 
				
			||||||
 | 
					        pkt_size = (2 + avctx->channels * (22 + 4 * (frame->nb_samples - 1)) + 7) / 8;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        pkt_size = avctx->block_align;
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, pkt_size))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    dst = avpkt->data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch(avctx->codec->id) {
 | 
					    switch(avctx->codec->id) {
 | 
				
			||||||
    case CODEC_ID_ADPCM_IMA_WAV:
 | 
					    case CODEC_ID_ADPCM_IMA_WAV:
 | 
				
			||||||
        n = avctx->frame_size / 8;
 | 
					        n = frame->nb_samples / 8;
 | 
				
			||||||
        c->status[0].prev_sample = samples[0];
 | 
					        c->status[0].prev_sample = samples[0];
 | 
				
			||||||
        /* c->status[0].step_index = 0;
 | 
					        /* c->status[0].step_index = 0;
 | 
				
			||||||
        XXX: not sure how to init the state machine */
 | 
					        XXX: not sure how to init the state machine */
 | 
				
			||||||
@@ -557,7 +570,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        int ch, i;
 | 
					        int ch, i;
 | 
				
			||||||
        PutBitContext pb;
 | 
					        PutBitContext pb;
 | 
				
			||||||
        init_put_bits(&pb, dst, buf_size * 8);
 | 
					        init_put_bits(&pb, dst, pkt_size * 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (ch = 0; ch < avctx->channels; ch++) {
 | 
					        for (ch = 0; ch < avctx->channels; ch++) {
 | 
				
			||||||
            put_bits(&pb, 9, (c->status[ch].prev_sample + 0x10000) >> 7);
 | 
					            put_bits(&pb, 9, (c->status[ch].prev_sample + 0x10000) >> 7);
 | 
				
			||||||
@@ -581,16 +594,15 @@ static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        flush_put_bits(&pb);
 | 
					        flush_put_bits(&pb);
 | 
				
			||||||
        dst += put_bits_count(&pb) >> 3;
 | 
					 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case CODEC_ID_ADPCM_SWF:
 | 
					    case CODEC_ID_ADPCM_SWF:
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        int i;
 | 
					        int i;
 | 
				
			||||||
        PutBitContext pb;
 | 
					        PutBitContext pb;
 | 
				
			||||||
        init_put_bits(&pb, dst, buf_size * 8);
 | 
					        init_put_bits(&pb, dst, pkt_size * 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        n = avctx->frame_size - 1;
 | 
					        n = frame->nb_samples - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // store AdpcmCodeSize
 | 
					        // store AdpcmCodeSize
 | 
				
			||||||
        put_bits(&pb, 2, 2);    // set 4-bit flash adpcm format
 | 
					        put_bits(&pb, 2, 2);    // set 4-bit flash adpcm format
 | 
				
			||||||
@@ -617,7 +629,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            av_free(buf);
 | 
					            av_free(buf);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            for (i = 1; i < avctx->frame_size; i++) {
 | 
					            for (i = 1; i < frame->nb_samples; i++) {
 | 
				
			||||||
                put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0],
 | 
					                put_bits(&pb, 4, adpcm_ima_compress_sample(&c->status[0],
 | 
				
			||||||
                         samples[avctx->channels * i]));
 | 
					                         samples[avctx->channels * i]));
 | 
				
			||||||
                if (avctx->channels == 2)
 | 
					                if (avctx->channels == 2)
 | 
				
			||||||
@@ -626,7 +638,6 @@ static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        flush_put_bits(&pb);
 | 
					        flush_put_bits(&pb);
 | 
				
			||||||
        dst += put_bits_count(&pb) >> 3;
 | 
					 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    case CODEC_ID_ADPCM_MS:
 | 
					    case CODEC_ID_ADPCM_MS:
 | 
				
			||||||
@@ -674,7 +685,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case CODEC_ID_ADPCM_YAMAHA:
 | 
					    case CODEC_ID_ADPCM_YAMAHA:
 | 
				
			||||||
        n = avctx->frame_size / 2;
 | 
					        n = frame->nb_samples / 2;
 | 
				
			||||||
        if (avctx->trellis > 0) {
 | 
					        if (avctx->trellis > 0) {
 | 
				
			||||||
            FF_ALLOC_OR_GOTO(avctx, buf, 2 * n * 2, error);
 | 
					            FF_ALLOC_OR_GOTO(avctx, buf, 2 * n * 2, error);
 | 
				
			||||||
            n *= 2;
 | 
					            n *= 2;
 | 
				
			||||||
@@ -700,7 +711,10 @@ static int adpcm_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
    default:
 | 
					    default:
 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					        return AVERROR(EINVAL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return dst - frame;
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = pkt_size;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
    return AVERROR(ENOMEM);
 | 
					    return AVERROR(ENOMEM);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -713,7 +727,7 @@ AVCodec ff_ ## name_ ## _encoder = {                        \
 | 
				
			|||||||
    .id             = id_,                                  \
 | 
					    .id             = id_,                                  \
 | 
				
			||||||
    .priv_data_size = sizeof(ADPCMEncodeContext),           \
 | 
					    .priv_data_size = sizeof(ADPCMEncodeContext),           \
 | 
				
			||||||
    .init           = adpcm_encode_init,                    \
 | 
					    .init           = adpcm_encode_init,                    \
 | 
				
			||||||
    .encode         = adpcm_encode_frame,                   \
 | 
					    .encode2        = adpcm_encode_frame,                   \
 | 
				
			||||||
    .close          = adpcm_encode_close,                   \
 | 
					    .close          = adpcm_encode_close,                   \
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,   \
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,   \
 | 
				
			||||||
                                                      AV_SAMPLE_FMT_NONE}, \
 | 
					                                                      AV_SAMPLE_FMT_NONE}, \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,7 @@
 | 
				
			|||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "adx.h"
 | 
					#include "adx.h"
 | 
				
			||||||
#include "bytestream.h"
 | 
					#include "bytestream.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "put_bits.h"
 | 
					#include "put_bits.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@@ -87,9 +88,6 @@ static int adx_encode_header(AVCodecContext *avctx, uint8_t *buf, int bufsize)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ADXContext *c = avctx->priv_data;
 | 
					    ADXContext *c = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (bufsize < HEADER_SIZE)
 | 
					 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bytestream_put_be16(&buf, 0x8000);              /* header signature */
 | 
					    bytestream_put_be16(&buf, 0x8000);              /* header signature */
 | 
				
			||||||
    bytestream_put_be16(&buf, HEADER_SIZE - 4);     /* copyright offset */
 | 
					    bytestream_put_be16(&buf, HEADER_SIZE - 4);     /* copyright offset */
 | 
				
			||||||
    bytestream_put_byte(&buf, 3);                   /* encoding */
 | 
					    bytestream_put_byte(&buf, 3);                   /* encoding */
 | 
				
			||||||
@@ -119,9 +117,11 @@ static av_cold int adx_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    avctx->frame_size = BLOCK_SAMPLES;
 | 
					    avctx->frame_size = BLOCK_SAMPLES;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* the cutoff can be adjusted, but this seems to work pretty well */
 | 
					    /* the cutoff can be adjusted, but this seems to work pretty well */
 | 
				
			||||||
    c->cutoff = 500;
 | 
					    c->cutoff = 500;
 | 
				
			||||||
@@ -130,40 +130,38 @@ static av_cold int adx_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static av_cold int adx_encode_close(AVCodecContext *avctx)
 | 
					static int adx_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
{
 | 
					                            const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int adx_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
					 | 
				
			||||||
                            int buf_size, void *data)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ADXContext *c          = avctx->priv_data;
 | 
					    ADXContext *c          = avctx->priv_data;
 | 
				
			||||||
    const int16_t *samples = data;
 | 
					    const int16_t *samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
    uint8_t *dst           = frame;
 | 
					    uint8_t *dst;
 | 
				
			||||||
    int ch;
 | 
					    int ch, out_size, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    out_size = BLOCK_SIZE * avctx->channels + !c->header_parsed * HEADER_SIZE;
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, out_size)) < 0) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    dst = avpkt->data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!c->header_parsed) {
 | 
					    if (!c->header_parsed) {
 | 
				
			||||||
        int hdrsize;
 | 
					        int hdrsize;
 | 
				
			||||||
        if ((hdrsize = adx_encode_header(avctx, dst, buf_size)) < 0) {
 | 
					        if ((hdrsize = adx_encode_header(avctx, dst, avpkt->size)) < 0) {
 | 
				
			||||||
            av_log(avctx, AV_LOG_ERROR, "output buffer is too small\n");
 | 
					            av_log(avctx, AV_LOG_ERROR, "output buffer is too small\n");
 | 
				
			||||||
            return AVERROR(EINVAL);
 | 
					            return AVERROR(EINVAL);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        dst      += hdrsize;
 | 
					        dst      += hdrsize;
 | 
				
			||||||
        buf_size -= hdrsize;
 | 
					 | 
				
			||||||
        c->header_parsed = 1;
 | 
					        c->header_parsed = 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (buf_size < BLOCK_SIZE * avctx->channels) {
 | 
					 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "output buffer is too small\n");
 | 
					 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (ch = 0; ch < avctx->channels; ch++) {
 | 
					    for (ch = 0; ch < avctx->channels; ch++) {
 | 
				
			||||||
        adx_encode(c, dst, samples + ch, &c->prev[ch], avctx->channels);
 | 
					        adx_encode(c, dst, samples + ch, &c->prev[ch], avctx->channels);
 | 
				
			||||||
        dst += BLOCK_SIZE;
 | 
					        dst += BLOCK_SIZE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return dst - frame;
 | 
					
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_adpcm_adx_encoder = {
 | 
					AVCodec ff_adpcm_adx_encoder = {
 | 
				
			||||||
@@ -172,8 +170,7 @@ AVCodec ff_adpcm_adx_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_ADPCM_ADX,
 | 
					    .id             = CODEC_ID_ADPCM_ADX,
 | 
				
			||||||
    .priv_data_size = sizeof(ADXContext),
 | 
					    .priv_data_size = sizeof(ADXContext),
 | 
				
			||||||
    .init           = adx_encode_init,
 | 
					    .init           = adx_encode_init,
 | 
				
			||||||
    .encode         = adx_encode_frame,
 | 
					    .encode2        = adx_encode_frame,
 | 
				
			||||||
    .close          = adx_encode_close,
 | 
					 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,
 | 
				
			||||||
                                                      AV_SAMPLE_FMT_NONE },
 | 
					                                                      AV_SAMPLE_FMT_NONE },
 | 
				
			||||||
    .long_name      = NULL_IF_CONFIG_SMALL("SEGA CRI ADX ADPCM"),
 | 
					    .long_name      = NULL_IF_CONFIG_SMALL("SEGA CRI ADX ADPCM"),
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										162
									
								
								libavcodec/audio_frame_queue.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								libavcodec/audio_frame_queue.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,162 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Audio Frame Queue
 | 
				
			||||||
 | 
					 * Copyright (c) 2012 Justin Ruggles
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of Libav.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Libav is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License as published by the Free Software Foundation; either
 | 
				
			||||||
 | 
					 * version 2.1 of the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Libav is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
				
			||||||
 | 
					 * Lesser General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License along with Libav; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "libavutil/mathematics.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    afq->avctx             = avctx;
 | 
				
			||||||
 | 
					    afq->next_pts          = AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					    afq->remaining_delay   = avctx->delay;
 | 
				
			||||||
 | 
					    afq->remaining_samples = avctx->delay;
 | 
				
			||||||
 | 
					    afq->frame_queue       = NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void delete_next_frame(AudioFrameQueue *afq)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    AudioFrame *f = afq->frame_queue;
 | 
				
			||||||
 | 
					    if (f) {
 | 
				
			||||||
 | 
					        afq->frame_queue = f->next;
 | 
				
			||||||
 | 
					        f->next = NULL;
 | 
				
			||||||
 | 
					        av_freep(&f);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ff_af_queue_close(AudioFrameQueue *afq)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /* remove/free any remaining frames */
 | 
				
			||||||
 | 
					    while (afq->frame_queue)
 | 
				
			||||||
 | 
					        delete_next_frame(afq);
 | 
				
			||||||
 | 
					    memset(afq, 0, sizeof(*afq));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    AudioFrame *new_frame;
 | 
				
			||||||
 | 
					    AudioFrame *queue_end = afq->frame_queue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* find the end of the queue */
 | 
				
			||||||
 | 
					    while (queue_end && queue_end->next)
 | 
				
			||||||
 | 
					        queue_end = queue_end->next;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* allocate new frame queue entry */
 | 
				
			||||||
 | 
					    if (!(new_frame = av_malloc(sizeof(*new_frame))))
 | 
				
			||||||
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* get frame parameters */
 | 
				
			||||||
 | 
					    new_frame->next = NULL;
 | 
				
			||||||
 | 
					    new_frame->duration = f->nb_samples;
 | 
				
			||||||
 | 
					    if (f->pts != AV_NOPTS_VALUE) {
 | 
				
			||||||
 | 
					        new_frame->pts = av_rescale_q(f->pts,
 | 
				
			||||||
 | 
					                                      afq->avctx->time_base,
 | 
				
			||||||
 | 
					                                      (AVRational){ 1, afq->avctx->sample_rate });
 | 
				
			||||||
 | 
					        afq->next_pts = new_frame->pts + new_frame->duration;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        new_frame->pts = AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					        afq->next_pts  = AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* add new frame to the end of the queue */
 | 
				
			||||||
 | 
					    if (!queue_end)
 | 
				
			||||||
 | 
					        afq->frame_queue = new_frame;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        queue_end->next = new_frame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* add frame sample count */
 | 
				
			||||||
 | 
					    afq->remaining_samples += f->nb_samples;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
					    ff_af_queue_log_state(afq);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts,
 | 
				
			||||||
 | 
					                        int *duration)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int64_t out_pts = AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					    int removed_samples = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
					    ff_af_queue_log_state(afq);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* get output pts from the next frame or generated pts */
 | 
				
			||||||
 | 
					    if (afq->frame_queue) {
 | 
				
			||||||
 | 
					        if (afq->frame_queue->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					            out_pts = afq->frame_queue->pts - afq->remaining_delay;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        if (afq->next_pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					            out_pts = afq->next_pts - afq->remaining_delay;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (pts) {
 | 
				
			||||||
 | 
					        if (out_pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					            *pts = ff_samples_to_time_base(afq->avctx, out_pts);
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            *pts = AV_NOPTS_VALUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* if the delay is larger than the packet duration, we use up delay samples
 | 
				
			||||||
 | 
					       for the output packet and leave all frames in the queue */
 | 
				
			||||||
 | 
					    if (afq->remaining_delay >= nb_samples) {
 | 
				
			||||||
 | 
					        removed_samples      += nb_samples;
 | 
				
			||||||
 | 
					        afq->remaining_delay -= nb_samples;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /* remove frames from the queue until we have enough to cover the
 | 
				
			||||||
 | 
					       requested number of samples or until the queue is empty */
 | 
				
			||||||
 | 
					    while (removed_samples < nb_samples && afq->frame_queue) {
 | 
				
			||||||
 | 
					        removed_samples += afq->frame_queue->duration;
 | 
				
			||||||
 | 
					        delete_next_frame(afq);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    afq->remaining_samples -= removed_samples;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* if there are no frames left and we have room for more samples, use
 | 
				
			||||||
 | 
					       any remaining delay samples */
 | 
				
			||||||
 | 
					    if (removed_samples < nb_samples && afq->remaining_samples > 0) {
 | 
				
			||||||
 | 
					        int add_samples = FFMIN(afq->remaining_samples,
 | 
				
			||||||
 | 
					                                nb_samples - removed_samples);
 | 
				
			||||||
 | 
					        removed_samples        += add_samples;
 | 
				
			||||||
 | 
					        afq->remaining_samples -= add_samples;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (removed_samples > nb_samples)
 | 
				
			||||||
 | 
					        av_log(afq->avctx, AV_LOG_WARNING, "frame_size is too large\n");
 | 
				
			||||||
 | 
					    if (duration)
 | 
				
			||||||
 | 
					        *duration = ff_samples_to_time_base(afq->avctx, removed_samples);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ff_af_queue_log_state(AudioFrameQueue *afq)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    AudioFrame *f;
 | 
				
			||||||
 | 
					    av_log(afq->avctx, AV_LOG_DEBUG, "remaining delay   = %d\n",
 | 
				
			||||||
 | 
					           afq->remaining_delay);
 | 
				
			||||||
 | 
					    av_log(afq->avctx, AV_LOG_DEBUG, "remaining samples = %d\n",
 | 
				
			||||||
 | 
					           afq->remaining_samples);
 | 
				
			||||||
 | 
					    av_log(afq->avctx, AV_LOG_DEBUG, "frames:\n");
 | 
				
			||||||
 | 
					    f = afq->frame_queue;
 | 
				
			||||||
 | 
					    while (f) {
 | 
				
			||||||
 | 
					        av_log(afq->avctx, AV_LOG_DEBUG, "  [ pts=%9"PRId64" duration=%d ]\n",
 | 
				
			||||||
 | 
					               f->pts, f->duration);
 | 
				
			||||||
 | 
					        f = f->next;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										90
									
								
								libavcodec/audio_frame_queue.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								libavcodec/audio_frame_queue.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Audio Frame Queue
 | 
				
			||||||
 | 
					 * Copyright (c) 2012 Justin Ruggles
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file is part of Libav.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Libav is free software; you can redistribute it and/or
 | 
				
			||||||
 | 
					 * modify it under the terms of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License as published by the Free Software Foundation; either
 | 
				
			||||||
 | 
					 * version 2.1 of the License, or (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Libav is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
				
			||||||
 | 
					 * Lesser General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU Lesser General Public
 | 
				
			||||||
 | 
					 * License along with Libav; if not, write to the Free Software
 | 
				
			||||||
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef AVCODEC_AUDIO_FRAME_QUEUE_H
 | 
				
			||||||
 | 
					#define AVCODEC_AUDIO_FRAME_QUEUE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct AudioFrame {
 | 
				
			||||||
 | 
					    int64_t pts;
 | 
				
			||||||
 | 
					    int duration;
 | 
				
			||||||
 | 
					    struct AudioFrame *next;
 | 
				
			||||||
 | 
					} AudioFrame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct AudioFrameQueue {
 | 
				
			||||||
 | 
					    AVCodecContext *avctx;
 | 
				
			||||||
 | 
					    int64_t next_pts;
 | 
				
			||||||
 | 
					    int remaining_delay;
 | 
				
			||||||
 | 
					    int remaining_samples;
 | 
				
			||||||
 | 
					    AudioFrame *frame_queue;
 | 
				
			||||||
 | 
					} AudioFrameQueue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Initialize AudioFrameQueue.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param avctx context to use for time_base and av_log
 | 
				
			||||||
 | 
					 * @param afq   queue context
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void ff_af_queue_init(AVCodecContext *avctx, AudioFrameQueue *afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Close AudioFrameQueue.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Frees memory if needed.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param afq queue context
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void ff_af_queue_close(AudioFrameQueue *afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Add a frame to the queue.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param afq queue context
 | 
				
			||||||
 | 
					 * @param f   frame to add to the queue
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int ff_af_queue_add(AudioFrameQueue *afq, const AVFrame *f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Remove frame(s) from the queue.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Retrieves the pts of the next available frame, or a generated pts based on
 | 
				
			||||||
 | 
					 * the last frame duration if there are no frames left in the queue. The number
 | 
				
			||||||
 | 
					 * of requested samples should be the full number of samples represented by the
 | 
				
			||||||
 | 
					 * packet that will be output by the encoder. If fewer samples are available
 | 
				
			||||||
 | 
					 * in the queue, a smaller value will be used for the output duration.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param afq           queue context
 | 
				
			||||||
 | 
					 * @param nb_samples    number of samples to remove from the queue
 | 
				
			||||||
 | 
					 * @param[out] pts      output packet pts
 | 
				
			||||||
 | 
					 * @param[out] duration output packet duration
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void ff_af_queue_remove(AudioFrameQueue *afq, int nb_samples, int64_t *pts,
 | 
				
			||||||
 | 
					                        int *duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Log the current state of the queue.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @param afq queue context
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void ff_af_queue_log_state(AudioFrameQueue *afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* AVCODEC_AUDIO_FRAME_QUEUE_H */
 | 
				
			||||||
@@ -252,7 +252,7 @@ AVCodec ff_eac3_encoder = {
 | 
				
			|||||||
    .id              = CODEC_ID_EAC3,
 | 
					    .id              = CODEC_ID_EAC3,
 | 
				
			||||||
    .priv_data_size  = sizeof(AC3EncodeContext),
 | 
					    .priv_data_size  = sizeof(AC3EncodeContext),
 | 
				
			||||||
    .init            = ff_ac3_encode_init,
 | 
					    .init            = ff_ac3_encode_init,
 | 
				
			||||||
    .encode          = ff_ac3_float_encode_frame,
 | 
					    .encode2         = ff_ac3_float_encode_frame,
 | 
				
			||||||
    .close           = ff_ac3_encode_close,
 | 
					    .close           = ff_ac3_encode_close,
 | 
				
			||||||
    .sample_fmts     = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts     = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name       = NULL_IF_CONFIG_SMALL("ATSC A/52 E-AC-3"),
 | 
					    .long_name       = NULL_IF_CONFIG_SMALL("ATSC A/52 E-AC-3"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@
 | 
				
			|||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "get_bits.h"
 | 
					#include "get_bits.h"
 | 
				
			||||||
#include "golomb.h"
 | 
					#include "golomb.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "lpc.h"
 | 
					#include "lpc.h"
 | 
				
			||||||
#include "flac.h"
 | 
					#include "flac.h"
 | 
				
			||||||
#include "flacdata.h"
 | 
					#include "flacdata.h"
 | 
				
			||||||
@@ -367,9 +368,11 @@ static av_cold int flac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    s->frame_count   = 0;
 | 
					    s->frame_count   = 0;
 | 
				
			||||||
    s->min_framesize = s->max_framesize;
 | 
					    s->min_framesize = s->max_framesize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (channels == 3 &&
 | 
					    if (channels == 3 &&
 | 
				
			||||||
            avctx->channel_layout != (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) ||
 | 
					            avctx->channel_layout != (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) ||
 | 
				
			||||||
@@ -402,7 +405,7 @@ static av_cold int flac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void init_frame(FlacEncodeContext *s)
 | 
					static void init_frame(FlacEncodeContext *s, int nb_samples)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i, ch;
 | 
					    int i, ch;
 | 
				
			||||||
    FlacFrame *frame;
 | 
					    FlacFrame *frame;
 | 
				
			||||||
@@ -410,7 +413,7 @@ static void init_frame(FlacEncodeContext *s)
 | 
				
			|||||||
    frame = &s->frame;
 | 
					    frame = &s->frame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0; i < 16; i++) {
 | 
					    for (i = 0; i < 16; i++) {
 | 
				
			||||||
        if (s->avctx->frame_size == ff_flac_blocksize_table[i]) {
 | 
					        if (nb_samples == ff_flac_blocksize_table[i]) {
 | 
				
			||||||
            frame->blocksize  = ff_flac_blocksize_table[i];
 | 
					            frame->blocksize  = ff_flac_blocksize_table[i];
 | 
				
			||||||
            frame->bs_code[0] = i;
 | 
					            frame->bs_code[0] = i;
 | 
				
			||||||
            frame->bs_code[1] = 0;
 | 
					            frame->bs_code[1] = 0;
 | 
				
			||||||
@@ -418,7 +421,7 @@ static void init_frame(FlacEncodeContext *s)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (i == 16) {
 | 
					    if (i == 16) {
 | 
				
			||||||
        frame->blocksize = s->avctx->frame_size;
 | 
					        frame->blocksize = nb_samples;
 | 
				
			||||||
        if (frame->blocksize <= 256) {
 | 
					        if (frame->blocksize <= 256) {
 | 
				
			||||||
            frame->bs_code[0] = 6;
 | 
					            frame->bs_code[0] = 6;
 | 
				
			||||||
            frame->bs_code[1] = frame->blocksize-1;
 | 
					            frame->bs_code[1] = frame->blocksize-1;
 | 
				
			||||||
@@ -1188,9 +1191,9 @@ static void write_frame_footer(FlacEncodeContext *s)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int write_frame(FlacEncodeContext *s, uint8_t *frame, int buf_size)
 | 
					static int write_frame(FlacEncodeContext *s, AVPacket *avpkt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    init_put_bits(&s->pb, frame, buf_size);
 | 
					    init_put_bits(&s->pb, avpkt->data, avpkt->size);
 | 
				
			||||||
    write_frame_header(s);
 | 
					    write_frame_header(s);
 | 
				
			||||||
    write_subframes(s);
 | 
					    write_subframes(s);
 | 
				
			||||||
    write_frame_footer(s);
 | 
					    write_frame_footer(s);
 | 
				
			||||||
@@ -1212,30 +1215,31 @@ static void update_md5_sum(FlacEncodeContext *s, const int16_t *samples)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
					static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                             int buf_size, void *data)
 | 
					                             const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    FlacEncodeContext *s;
 | 
					    FlacEncodeContext *s;
 | 
				
			||||||
    const int16_t *samples = data;
 | 
					    const int16_t *samples;
 | 
				
			||||||
    int frame_bytes, out_bytes;
 | 
					    int frame_bytes, out_bytes, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s = avctx->priv_data;
 | 
					    s = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* when the last block is reached, update the header in extradata */
 | 
					    /* when the last block is reached, update the header in extradata */
 | 
				
			||||||
    if (!data) {
 | 
					    if (!frame) {
 | 
				
			||||||
        s->max_framesize = s->max_encoded_framesize;
 | 
					        s->max_framesize = s->max_encoded_framesize;
 | 
				
			||||||
        av_md5_final(s->md5ctx, s->md5sum);
 | 
					        av_md5_final(s->md5ctx, s->md5sum);
 | 
				
			||||||
        write_streaminfo(s, avctx->extradata);
 | 
					        write_streaminfo(s, avctx->extradata);
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* change max_framesize for small final frame */
 | 
					    /* change max_framesize for small final frame */
 | 
				
			||||||
    if (avctx->frame_size < s->frame.blocksize) {
 | 
					    if (frame->nb_samples < s->frame.blocksize) {
 | 
				
			||||||
        s->max_framesize = ff_flac_get_max_frame_size(avctx->frame_size,
 | 
					        s->max_framesize = ff_flac_get_max_frame_size(frame->nb_samples,
 | 
				
			||||||
                                                      s->channels, 16);
 | 
					                                                      s->channels, 16);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_frame(s);
 | 
					    init_frame(s, frame->nb_samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    copy_samples(s, samples);
 | 
					    copy_samples(s, samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1250,22 +1254,26 @@ static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
        frame_bytes = encode_frame(s);
 | 
					        frame_bytes = encode_frame(s);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (buf_size < frame_bytes) {
 | 
					    if ((ret = ff_alloc_packet(avpkt, frame_bytes))) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "output buffer too small\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        return 0;
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    out_bytes = write_frame(s, frame, buf_size);
 | 
					
 | 
				
			||||||
 | 
					    out_bytes = write_frame(s, avpkt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->frame_count++;
 | 
					    s->frame_count++;
 | 
				
			||||||
    avctx->coded_frame->pts = s->sample_count;
 | 
					    s->sample_count += frame->nb_samples;
 | 
				
			||||||
    s->sample_count += avctx->frame_size;
 | 
					 | 
				
			||||||
    update_md5_sum(s, samples);
 | 
					    update_md5_sum(s, samples);
 | 
				
			||||||
    if (out_bytes > s->max_encoded_framesize)
 | 
					    if (out_bytes > s->max_encoded_framesize)
 | 
				
			||||||
        s->max_encoded_framesize = out_bytes;
 | 
					        s->max_encoded_framesize = out_bytes;
 | 
				
			||||||
    if (out_bytes < s->min_framesize)
 | 
					    if (out_bytes < s->min_framesize)
 | 
				
			||||||
        s->min_framesize = out_bytes;
 | 
					        s->min_framesize = out_bytes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return out_bytes;
 | 
					    avpkt->pts      = frame->pts;
 | 
				
			||||||
 | 
					    avpkt->duration = ff_samples_to_time_base(avctx, frame->nb_samples);
 | 
				
			||||||
 | 
					    avpkt->size     = out_bytes;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1278,7 +1286,9 @@ static av_cold int flac_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    av_freep(&avctx->extradata);
 | 
					    av_freep(&avctx->extradata);
 | 
				
			||||||
    avctx->extradata_size = 0;
 | 
					    avctx->extradata_size = 0;
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1316,7 +1326,7 @@ AVCodec ff_flac_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_FLAC,
 | 
					    .id             = CODEC_ID_FLAC,
 | 
				
			||||||
    .priv_data_size = sizeof(FlacEncodeContext),
 | 
					    .priv_data_size = sizeof(FlacEncodeContext),
 | 
				
			||||||
    .init           = flac_encode_init,
 | 
					    .init           = flac_encode_init,
 | 
				
			||||||
    .encode         = flac_encode_frame,
 | 
					    .encode2        = flac_encode_frame,
 | 
				
			||||||
    .close          = flac_encode_close,
 | 
					    .close          = flac_encode_close,
 | 
				
			||||||
    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY | CODEC_CAP_LOSSLESS,
 | 
					    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY | CODEC_CAP_LOSSLESS,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "g722.h"
 | 
					#include "g722.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define FREEZE_INTERVAL 128
 | 
					#define FREEZE_INTERVAL 128
 | 
				
			||||||
@@ -50,6 +51,9 @@ static av_cold int g722_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
        av_freep(&c->node_buf[i]);
 | 
					        av_freep(&c->node_buf[i]);
 | 
				
			||||||
        av_freep(&c->nodep_buf[i]);
 | 
					        av_freep(&c->nodep_buf[i]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,6 +108,7 @@ static av_cold int g722_encode_init(AVCodecContext * avctx)
 | 
				
			|||||||
           a common packet size for VoIP applications */
 | 
					           a common packet size for VoIP applications */
 | 
				
			||||||
        avctx->frame_size = 320;
 | 
					        avctx->frame_size = 320;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    avctx->delay = 22;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (avctx->trellis) {
 | 
					    if (avctx->trellis) {
 | 
				
			||||||
        /* validate trellis */
 | 
					        /* validate trellis */
 | 
				
			||||||
@@ -116,6 +121,14 @@ static av_cold int g722_encode_init(AVCodecContext * avctx)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					        goto error;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
    g722_encode_close(avctx);
 | 
					    g722_encode_close(avctx);
 | 
				
			||||||
@@ -345,27 +358,36 @@ static void g722_encode_no_trellis(G722Context *c,
 | 
				
			|||||||
        encode_byte(c, dst++, &samples[i]);
 | 
					        encode_byte(c, dst++, &samples[i]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int g722_encode_frame(AVCodecContext *avctx,
 | 
					static int g722_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                             uint8_t *dst, int buf_size, void *data)
 | 
					                             const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    G722Context *c = avctx->priv_data;
 | 
					    G722Context *c = avctx->priv_data;
 | 
				
			||||||
    const int16_t *samples = data;
 | 
					    const int16_t *samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
    int nb_samples;
 | 
					    int nb_samples, out_size, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nb_samples = avctx->frame_size - (avctx->frame_size & 1);
 | 
					    out_size = (frame->nb_samples + 1) / 2;
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, out_size))) {
 | 
				
			||||||
    if (avctx->trellis)
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        g722_encode_trellis(c, avctx->trellis, dst, nb_samples, samples);
 | 
					        return ret;
 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        g722_encode_no_trellis(c, dst, nb_samples, samples);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* handle last frame with odd frame_size */
 | 
					 | 
				
			||||||
    if (nb_samples < avctx->frame_size) {
 | 
					 | 
				
			||||||
        int16_t last_samples[2] = { samples[nb_samples], samples[nb_samples] };
 | 
					 | 
				
			||||||
        encode_byte(c, &dst[nb_samples >> 1], last_samples);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return (avctx->frame_size + 1) >> 1;
 | 
					    nb_samples = frame->nb_samples - (frame->nb_samples & 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (avctx->trellis)
 | 
				
			||||||
 | 
					        g722_encode_trellis(c, avctx->trellis, avpkt->data, nb_samples, samples);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        g722_encode_no_trellis(c, avpkt->data, nb_samples, samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* handle last frame with odd frame_size */
 | 
				
			||||||
 | 
					    if (nb_samples < frame->nb_samples) {
 | 
				
			||||||
 | 
					        int16_t last_samples[2] = { samples[nb_samples], samples[nb_samples] };
 | 
				
			||||||
 | 
					        encode_byte(c, &avpkt->data[nb_samples >> 1], last_samples);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (frame->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					        avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_adpcm_g722_encoder = {
 | 
					AVCodec ff_adpcm_g722_encoder = {
 | 
				
			||||||
@@ -375,7 +397,7 @@ AVCodec ff_adpcm_g722_encoder = {
 | 
				
			|||||||
    .priv_data_size = sizeof(G722Context),
 | 
					    .priv_data_size = sizeof(G722Context),
 | 
				
			||||||
    .init           = g722_encode_init,
 | 
					    .init           = g722_encode_init,
 | 
				
			||||||
    .close          = g722_encode_close,
 | 
					    .close          = g722_encode_close,
 | 
				
			||||||
    .encode         = g722_encode_frame,
 | 
					    .encode2        = g722_encode_frame,
 | 
				
			||||||
    .capabilities   = CODEC_CAP_SMALL_LAST_FRAME,
 | 
					    .capabilities   = CODEC_CAP_SMALL_LAST_FRAME,
 | 
				
			||||||
    .long_name      = NULL_IF_CONFIG_SMALL("G.722 ADPCM"),
 | 
					    .long_name      = NULL_IF_CONFIG_SMALL("G.722 ADPCM"),
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -330,10 +330,12 @@ static av_cold int g726_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    g726_reset(c);
 | 
					    g726_reset(c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
    avctx->coded_frame->key_frame = 1;
 | 
					    avctx->coded_frame->key_frame = 1;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* select a frame size that will end on a byte boundary and have a size of
 | 
					    /* select a frame size that will end on a byte boundary and have a size of
 | 
				
			||||||
       approximately 1024 bytes */
 | 
					       approximately 1024 bytes */
 | 
				
			||||||
@@ -342,28 +344,37 @@ static av_cold int g726_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
static av_cold int g726_encode_close(AVCodecContext *avctx)
 | 
					static av_cold int g726_encode_close(AVCodecContext *avctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int g726_encode_frame(AVCodecContext *avctx,
 | 
					static int g726_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                            uint8_t *dst, int buf_size, void *data)
 | 
					                             const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    G726Context *c = avctx->priv_data;
 | 
					    G726Context *c = avctx->priv_data;
 | 
				
			||||||
    const int16_t *samples = data;
 | 
					    const int16_t *samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
    PutBitContext pb;
 | 
					    PutBitContext pb;
 | 
				
			||||||
    int i;
 | 
					    int i, ret, out_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_put_bits(&pb, dst, 1024*1024);
 | 
					    out_size = (frame->nb_samples * c->code_size + 7) / 8;
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, out_size))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    init_put_bits(&pb, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0; i < avctx->frame_size; i++)
 | 
					    for (i = 0; i < frame->nb_samples; i++)
 | 
				
			||||||
        put_bits(&pb, c->code_size, g726_encode(c, *samples++));
 | 
					        put_bits(&pb, c->code_size, g726_encode(c, *samples++));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    flush_put_bits(&pb);
 | 
					    flush_put_bits(&pb);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return put_bits_count(&pb)>>3;
 | 
					    avpkt->size = out_size;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OFFSET(x) offsetof(G726Context, x)
 | 
					#define OFFSET(x) offsetof(G726Context, x)
 | 
				
			||||||
@@ -391,8 +402,10 @@ AVCodec ff_adpcm_g726_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_ADPCM_G726,
 | 
					    .id             = CODEC_ID_ADPCM_G726,
 | 
				
			||||||
    .priv_data_size = sizeof(G726Context),
 | 
					    .priv_data_size = sizeof(G726Context),
 | 
				
			||||||
    .init           = g726_encode_init,
 | 
					    .init           = g726_encode_init,
 | 
				
			||||||
    .encode         = g726_encode_frame,
 | 
					    .encode2        = g726_encode_frame,
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    .close          = g726_encode_close,
 | 
					    .close          = g726_encode_close,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
 | 
					    .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -372,7 +372,8 @@ static int decode_band_hdr(IVI4DecContext *ctx, IVIBandDesc *band,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (!get_bits1(&ctx->gb) || ctx->frame_type == FRAMETYPE_INTRA) {
 | 
					        if (!get_bits1(&ctx->gb) || ctx->frame_type == FRAMETYPE_INTRA) {
 | 
				
			||||||
            transform_id = get_bits(&ctx->gb, 5);
 | 
					            transform_id = get_bits(&ctx->gb, 5);
 | 
				
			||||||
            if (!transforms[transform_id].inv_trans) {
 | 
					            if (transform_id >= FF_ARRAY_ELEMS(transforms) ||
 | 
				
			||||||
 | 
					                !transforms[transform_id].inv_trans) {
 | 
				
			||||||
                av_log_ask_for_sample(avctx, "Unimplemented transform: %d!\n", transform_id);
 | 
					                av_log_ask_for_sample(avctx, "Unimplemented transform: %d!\n", transform_id);
 | 
				
			||||||
                return AVERROR_PATCHWELCOME;
 | 
					                return AVERROR_PATCHWELCOME;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,11 +24,19 @@
 | 
				
			|||||||
 * Interface to libfaac for aac encoding.
 | 
					 * Interface to libfaac for aac encoding.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					 | 
				
			||||||
#include <faac.h>
 | 
					#include <faac.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* libfaac has an encoder delay of 1024 samples */
 | 
				
			||||||
 | 
					#define FAAC_DELAY_SAMPLES 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct FaacAudioContext {
 | 
					typedef struct FaacAudioContext {
 | 
				
			||||||
    faacEncHandle faac_handle;
 | 
					    faacEncHandle faac_handle;
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
} FaacAudioContext;
 | 
					} FaacAudioContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const int channel_maps[][6] = {
 | 
					static const int channel_maps[][6] = {
 | 
				
			||||||
@@ -42,11 +50,15 @@ static av_cold int Faac_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    FaacAudioContext *s = avctx->priv_data;
 | 
					    FaacAudioContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&avctx->extradata);
 | 
					    av_freep(&avctx->extradata);
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->faac_handle)
 | 
					    if (s->faac_handle)
 | 
				
			||||||
        faacEncClose(s->faac_handle);
 | 
					        faacEncClose(s->faac_handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -118,11 +130,13 @@ static av_cold int Faac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size = samples_input / avctx->channels;
 | 
					    avctx->frame_size = samples_input / avctx->channels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame= avcodec_alloc_frame();
 | 
					    avctx->coded_frame= avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame) {
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Set decoder specific info */
 | 
					    /* Set decoder specific info */
 | 
				
			||||||
    avctx->extradata_size = 0;
 | 
					    avctx->extradata_size = 0;
 | 
				
			||||||
@@ -153,26 +167,52 @@ static av_cold int Faac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avctx->delay = FAAC_DELAY_SAMPLES;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
    Faac_encode_close(avctx);
 | 
					    Faac_encode_close(avctx);
 | 
				
			||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int Faac_encode_frame(AVCodecContext *avctx,
 | 
					static int Faac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                             unsigned char *frame, int buf_size, void *data)
 | 
					                             const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    FaacAudioContext *s = avctx->priv_data;
 | 
					    FaacAudioContext *s = avctx->priv_data;
 | 
				
			||||||
    int bytes_written;
 | 
					    int bytes_written, ret;
 | 
				
			||||||
    int num_samples = data ? avctx->frame_size : 0;
 | 
					    int num_samples  = frame ? frame->nb_samples : 0;
 | 
				
			||||||
 | 
					    void *samples    = frame ? frame->data[0]    : NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bytes_written = faacEncEncode(s->faac_handle,
 | 
					    if ((ret = ff_alloc_packet(avpkt, (7 + 768) * avctx->channels))) {
 | 
				
			||||||
                                  data,
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bytes_written = faacEncEncode(s->faac_handle, samples,
 | 
				
			||||||
                                  num_samples * avctx->channels,
 | 
					                                  num_samples * avctx->channels,
 | 
				
			||||||
                                  frame,
 | 
					                                  avpkt->data, avpkt->size);
 | 
				
			||||||
                                  buf_size);
 | 
					    if (bytes_written < 0) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "faacEncEncode() error\n");
 | 
				
			||||||
 | 
					        return bytes_written;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return bytes_written;
 | 
					    /* add current frame to the queue */
 | 
				
			||||||
 | 
					    if (frame) {
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!bytes_written)
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Get the next frame pts/duration */
 | 
				
			||||||
 | 
					    ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                       &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = bytes_written;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const AVProfile profiles[] = {
 | 
					static const AVProfile profiles[] = {
 | 
				
			||||||
@@ -189,7 +229,7 @@ AVCodec ff_libfaac_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AAC,
 | 
					    .id             = CODEC_ID_AAC,
 | 
				
			||||||
    .priv_data_size = sizeof(FaacAudioContext),
 | 
					    .priv_data_size = sizeof(FaacAudioContext),
 | 
				
			||||||
    .init           = Faac_encode_init,
 | 
					    .init           = Faac_encode_init,
 | 
				
			||||||
    .encode         = Faac_encode_frame,
 | 
					    .encode2        = Faac_encode_frame,
 | 
				
			||||||
    .close          = Faac_encode_close,
 | 
					    .close          = Faac_encode_close,
 | 
				
			||||||
    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
 | 
					    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,10 +30,13 @@
 | 
				
			|||||||
#include <gsm/gsm.h>
 | 
					#include <gsm/gsm.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "gsm.h"
 | 
					#include "gsm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static av_cold int libgsm_encode_close(AVCodecContext *avctx) {
 | 
					static av_cold int libgsm_encode_close(AVCodecContext *avctx) {
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    gsm_destroy(avctx->priv_data);
 | 
					    gsm_destroy(avctx->priv_data);
 | 
				
			||||||
    avctx->priv_data = NULL;
 | 
					    avctx->priv_data = NULL;
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -78,9 +81,11 @@ static av_cold int libgsm_encode_init(AVCodecContext *avctx) {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame= avcodec_alloc_frame();
 | 
					    avctx->coded_frame= avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -88,20 +93,29 @@ error:
 | 
				
			|||||||
    return -1;
 | 
					    return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int libgsm_encode_frame(AVCodecContext *avctx,
 | 
					static int libgsm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                               unsigned char *frame, int buf_size, void *data) {
 | 
					                               const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
    // we need a full block
 | 
					{
 | 
				
			||||||
    if(buf_size < avctx->block_align) return 0;
 | 
					    int ret;
 | 
				
			||||||
 | 
					    gsm_signal *samples = (gsm_signal *)frame->data[0];
 | 
				
			||||||
 | 
					    struct gsm_state *state = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, avctx->block_align))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch(avctx->codec_id) {
 | 
					    switch(avctx->codec_id) {
 | 
				
			||||||
    case CODEC_ID_GSM:
 | 
					    case CODEC_ID_GSM:
 | 
				
			||||||
        gsm_encode(avctx->priv_data,data,frame);
 | 
					        gsm_encode(state, samples, avpkt->data);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case CODEC_ID_GSM_MS:
 | 
					    case CODEC_ID_GSM_MS:
 | 
				
			||||||
        gsm_encode(avctx->priv_data,data,frame);
 | 
					        gsm_encode(state, samples,                  avpkt->data);
 | 
				
			||||||
        gsm_encode(avctx->priv_data,((short*)data)+GSM_FRAME_SIZE,frame+32);
 | 
					        gsm_encode(state, samples + GSM_FRAME_SIZE, avpkt->data + 32);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return avctx->block_align;
 | 
					
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,7 +124,7 @@ AVCodec ff_libgsm_encoder = {
 | 
				
			|||||||
    .type           = AVMEDIA_TYPE_AUDIO,
 | 
					    .type           = AVMEDIA_TYPE_AUDIO,
 | 
				
			||||||
    .id             = CODEC_ID_GSM,
 | 
					    .id             = CODEC_ID_GSM,
 | 
				
			||||||
    .init           = libgsm_encode_init,
 | 
					    .init           = libgsm_encode_init,
 | 
				
			||||||
    .encode         = libgsm_encode_frame,
 | 
					    .encode2        = libgsm_encode_frame,
 | 
				
			||||||
    .close          = libgsm_encode_close,
 | 
					    .close          = libgsm_encode_close,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("libgsm GSM"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("libgsm GSM"),
 | 
				
			||||||
@@ -121,7 +135,7 @@ AVCodec ff_libgsm_ms_encoder = {
 | 
				
			|||||||
    .type           = AVMEDIA_TYPE_AUDIO,
 | 
					    .type           = AVMEDIA_TYPE_AUDIO,
 | 
				
			||||||
    .id             = CODEC_ID_GSM_MS,
 | 
					    .id             = CODEC_ID_GSM_MS,
 | 
				
			||||||
    .init           = libgsm_encode_init,
 | 
					    .init           = libgsm_encode_init,
 | 
				
			||||||
    .encode         = libgsm_encode_frame,
 | 
					    .encode2        = libgsm_encode_frame,
 | 
				
			||||||
    .close          = libgsm_encode_close,
 | 
					    .close          = libgsm_encode_close,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("libgsm GSM Microsoft variant"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("libgsm GSM Microsoft variant"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,7 @@
 | 
				
			|||||||
#include "libavutil/log.h"
 | 
					#include "libavutil/log.h"
 | 
				
			||||||
#include "libavutil/opt.h"
 | 
					#include "libavutil/opt.h"
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
#include "internal.h"
 | 
					#include "internal.h"
 | 
				
			||||||
#include "mpegaudio.h"
 | 
					#include "mpegaudio.h"
 | 
				
			||||||
#include "mpegaudiodecheader.h"
 | 
					#include "mpegaudiodecheader.h"
 | 
				
			||||||
@@ -44,6 +45,7 @@ typedef struct LAMEContext {
 | 
				
			|||||||
    int buffer_index;
 | 
					    int buffer_index;
 | 
				
			||||||
    int reservoir;
 | 
					    int reservoir;
 | 
				
			||||||
    void *planar_samples[2];
 | 
					    void *planar_samples[2];
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
} LAMEContext;
 | 
					} LAMEContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,10 +53,14 @@ static av_cold int mp3lame_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    LAMEContext *s = avctx->priv_data;
 | 
					    LAMEContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&s->planar_samples[0]);
 | 
					    av_freep(&s->planar_samples[0]);
 | 
				
			||||||
    av_freep(&s->planar_samples[1]);
 | 
					    av_freep(&s->planar_samples[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    lame_close(s->gfp);
 | 
					    lame_close(s->gfp);
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -111,12 +117,19 @@ static av_cold int mp3lame_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* get encoder delay */
 | 
				
			||||||
 | 
					    avctx->delay = lame_get_encoder_delay(s->gfp) + 528 + 1;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size  = lame_get_framesize(s->gfp);
 | 
					    avctx->frame_size  = lame_get_framesize(s->gfp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame) {
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* sample format */
 | 
					    /* sample format */
 | 
				
			||||||
    if (avctx->sample_fmt == AV_SAMPLE_FMT_S32 ||
 | 
					    if (avctx->sample_fmt == AV_SAMPLE_FMT_S32 ||
 | 
				
			||||||
@@ -144,67 +157,67 @@ error:
 | 
				
			|||||||
        const type *input = samples;                    \
 | 
					        const type *input = samples;                    \
 | 
				
			||||||
        type      *output = s->planar_samples[ch];      \
 | 
					        type      *output = s->planar_samples[ch];      \
 | 
				
			||||||
        input += ch;                                    \
 | 
					        input += ch;                                    \
 | 
				
			||||||
        for (i = 0; i < s->avctx->frame_size; i++) {    \
 | 
					        for (i = 0; i < nb_samples; i++) {              \
 | 
				
			||||||
            output[i] = *input * scale;                 \
 | 
					            output[i] = *input * scale;                 \
 | 
				
			||||||
            input += s->avctx->channels;                \
 | 
					            input += s->avctx->channels;                \
 | 
				
			||||||
        }                                               \
 | 
					        }                                               \
 | 
				
			||||||
    }                                                   \
 | 
					    }                                                   \
 | 
				
			||||||
} while (0)
 | 
					} while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int encode_frame_int16(LAMEContext *s, void *samples)
 | 
					static int encode_frame_int16(LAMEContext *s, void *samples, int nb_samples)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (s->avctx->channels > 1) {
 | 
					    if (s->avctx->channels > 1) {
 | 
				
			||||||
        return lame_encode_buffer_interleaved(s->gfp, samples,
 | 
					        return lame_encode_buffer_interleaved(s->gfp, samples,
 | 
				
			||||||
                                              s->avctx->frame_size,
 | 
					                                              nb_samples,
 | 
				
			||||||
                                              s->buffer + s->buffer_index,
 | 
					                                              s->buffer + s->buffer_index,
 | 
				
			||||||
                                              BUFFER_SIZE - s->buffer_index);
 | 
					                                              BUFFER_SIZE - s->buffer_index);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        return lame_encode_buffer(s->gfp, samples, NULL, s->avctx->frame_size,
 | 
					        return lame_encode_buffer(s->gfp, samples, NULL, nb_samples,
 | 
				
			||||||
                                  s->buffer + s->buffer_index,
 | 
					                                  s->buffer + s->buffer_index,
 | 
				
			||||||
                                  BUFFER_SIZE - s->buffer_index);
 | 
					                                  BUFFER_SIZE - s->buffer_index);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int encode_frame_int32(LAMEContext *s, void *samples)
 | 
					static int encode_frame_int32(LAMEContext *s, void *samples, int nb_samples)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DEINTERLEAVE(int32_t, 1);
 | 
					    DEINTERLEAVE(int32_t, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return lame_encode_buffer_int(s->gfp,
 | 
					    return lame_encode_buffer_int(s->gfp,
 | 
				
			||||||
                                  s->planar_samples[0], s->planar_samples[1],
 | 
					                                  s->planar_samples[0], s->planar_samples[1],
 | 
				
			||||||
                                  s->avctx->frame_size,
 | 
					                                  nb_samples,
 | 
				
			||||||
                                  s->buffer + s->buffer_index,
 | 
					                                  s->buffer + s->buffer_index,
 | 
				
			||||||
                                  BUFFER_SIZE - s->buffer_index);
 | 
					                                  BUFFER_SIZE - s->buffer_index);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int encode_frame_float(LAMEContext *s, void *samples)
 | 
					static int encode_frame_float(LAMEContext *s, void *samples, int nb_samples)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DEINTERLEAVE(float, 32768.0f);
 | 
					    DEINTERLEAVE(float, 32768.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return lame_encode_buffer_float(s->gfp,
 | 
					    return lame_encode_buffer_float(s->gfp,
 | 
				
			||||||
                                    s->planar_samples[0], s->planar_samples[1],
 | 
					                                    s->planar_samples[0], s->planar_samples[1],
 | 
				
			||||||
                                    s->avctx->frame_size,
 | 
					                                    nb_samples,
 | 
				
			||||||
                                    s->buffer + s->buffer_index,
 | 
					                                    s->buffer + s->buffer_index,
 | 
				
			||||||
                                    BUFFER_SIZE - s->buffer_index);
 | 
					                                    BUFFER_SIZE - s->buffer_index);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int mp3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
 | 
					static int mp3lame_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                                int buf_size, void *data)
 | 
					                                const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    LAMEContext *s = avctx->priv_data;
 | 
					    LAMEContext *s = avctx->priv_data;
 | 
				
			||||||
    MPADecodeHeader hdr;
 | 
					    MPADecodeHeader hdr;
 | 
				
			||||||
    int len;
 | 
					    int len, ret;
 | 
				
			||||||
    int lame_result;
 | 
					    int lame_result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data) {
 | 
					    if (frame) {
 | 
				
			||||||
        switch (avctx->sample_fmt) {
 | 
					        switch (avctx->sample_fmt) {
 | 
				
			||||||
        case AV_SAMPLE_FMT_S16:
 | 
					        case AV_SAMPLE_FMT_S16:
 | 
				
			||||||
            lame_result = encode_frame_int16(s, data);
 | 
					            lame_result = encode_frame_int16(s, frame->data[0], frame->nb_samples);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case AV_SAMPLE_FMT_S32:
 | 
					        case AV_SAMPLE_FMT_S32:
 | 
				
			||||||
            lame_result = encode_frame_int32(s, data);
 | 
					            lame_result = encode_frame_int32(s, frame->data[0], frame->nb_samples);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        case AV_SAMPLE_FMT_FLT:
 | 
					        case AV_SAMPLE_FMT_FLT:
 | 
				
			||||||
            lame_result = encode_frame_float(s, data);
 | 
					            lame_result = encode_frame_float(s, frame->data[0], frame->nb_samples);
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            return AVERROR_BUG;
 | 
					            return AVERROR_BUG;
 | 
				
			||||||
@@ -223,6 +236,12 @@ static int mp3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    s->buffer_index += lame_result;
 | 
					    s->buffer_index += lame_result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* add current frame to the queue */
 | 
				
			||||||
 | 
					    if (frame) {
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Move 1 frame from the LAME buffer to the output packet, if available.
 | 
					    /* Move 1 frame from the LAME buffer to the output packet, if available.
 | 
				
			||||||
       We have to parse the first frame header in the output buffer to
 | 
					       We have to parse the first frame header in the output buffer to
 | 
				
			||||||
       determine the frame size. */
 | 
					       determine the frame size. */
 | 
				
			||||||
@@ -236,12 +255,22 @@ static int mp3lame_encode_frame(AVCodecContext *avctx, unsigned char *frame,
 | 
				
			|||||||
    av_dlog(avctx, "in:%d packet-len:%d index:%d\n", avctx->frame_size, len,
 | 
					    av_dlog(avctx, "in:%d packet-len:%d index:%d\n", avctx->frame_size, len,
 | 
				
			||||||
            s->buffer_index);
 | 
					            s->buffer_index);
 | 
				
			||||||
    if (len <= s->buffer_index) {
 | 
					    if (len <= s->buffer_index) {
 | 
				
			||||||
        memcpy(frame, s->buffer, len);
 | 
					        if ((ret = ff_alloc_packet(avpkt, len))) {
 | 
				
			||||||
 | 
					            av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        memcpy(avpkt->data, s->buffer, len);
 | 
				
			||||||
        s->buffer_index -= len;
 | 
					        s->buffer_index -= len;
 | 
				
			||||||
        memmove(s->buffer, s->buffer + len, s->buffer_index);
 | 
					        memmove(s->buffer, s->buffer + len, s->buffer_index);
 | 
				
			||||||
        return len;
 | 
					
 | 
				
			||||||
    } else
 | 
					        /* Get the next frame pts/duration */
 | 
				
			||||||
        return 0;
 | 
					        ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                           &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        avpkt->size = len;
 | 
				
			||||||
 | 
					        *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OFFSET(x) offsetof(LAMEContext, x)
 | 
					#define OFFSET(x) offsetof(LAMEContext, x)
 | 
				
			||||||
@@ -273,9 +302,9 @@ AVCodec ff_libmp3lame_encoder = {
 | 
				
			|||||||
    .id                    = CODEC_ID_MP3,
 | 
					    .id                    = CODEC_ID_MP3,
 | 
				
			||||||
    .priv_data_size        = sizeof(LAMEContext),
 | 
					    .priv_data_size        = sizeof(LAMEContext),
 | 
				
			||||||
    .init                  = mp3lame_encode_init,
 | 
					    .init                  = mp3lame_encode_init,
 | 
				
			||||||
    .encode                = mp3lame_encode_frame,
 | 
					    .encode2               = mp3lame_encode_frame,
 | 
				
			||||||
    .close                 = mp3lame_encode_close,
 | 
					    .close                 = mp3lame_encode_close,
 | 
				
			||||||
    .capabilities          = CODEC_CAP_DELAY,
 | 
					    .capabilities          = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME,
 | 
				
			||||||
    .sample_fmts           = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S32,
 | 
					    .sample_fmts           = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S32,
 | 
				
			||||||
                                                             AV_SAMPLE_FMT_FLT,
 | 
					                                                             AV_SAMPLE_FMT_FLT,
 | 
				
			||||||
                                                             AV_SAMPLE_FMT_S16,
 | 
					                                                             AV_SAMPLE_FMT_S16,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,8 @@
 | 
				
			|||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "libavutil/avstring.h"
 | 
					#include "libavutil/avstring.h"
 | 
				
			||||||
#include "libavutil/opt.h"
 | 
					#include "libavutil/opt.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void amr_decode_fix_avctx(AVCodecContext *avctx)
 | 
					static void amr_decode_fix_avctx(AVCodecContext *avctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -85,6 +87,7 @@ typedef struct AMRContext {
 | 
				
			|||||||
    int   enc_mode;
 | 
					    int   enc_mode;
 | 
				
			||||||
    int   enc_dtx;
 | 
					    int   enc_dtx;
 | 
				
			||||||
    int   enc_last_frame;
 | 
					    int   enc_last_frame;
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
} AMRContext;
 | 
					} AMRContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const AVOption options[] = {
 | 
					static const AVOption options[] = {
 | 
				
			||||||
@@ -196,9 +199,12 @@ static av_cold int amr_nb_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size  = 160;
 | 
					    avctx->frame_size  = 160;
 | 
				
			||||||
    avctx->delay       =  50;
 | 
					    avctx->delay       =  50;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->enc_state = Encoder_Interface_init(s->enc_dtx);
 | 
					    s->enc_state = Encoder_Interface_init(s->enc_dtx);
 | 
				
			||||||
    if (!s->enc_state) {
 | 
					    if (!s->enc_state) {
 | 
				
			||||||
@@ -218,38 +224,49 @@ static av_cold int amr_nb_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
    AMRContext *s = avctx->priv_data;
 | 
					    AMRContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Encoder_Interface_exit(s->enc_state);
 | 
					    Encoder_Interface_exit(s->enc_state);
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int amr_nb_encode_frame(AVCodecContext *avctx,
 | 
					static int amr_nb_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                               unsigned char *frame/*out*/,
 | 
					                               const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
                               int buf_size, void *data/*in*/)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AMRContext *s = avctx->priv_data;
 | 
					    AMRContext *s = avctx->priv_data;
 | 
				
			||||||
    int written;
 | 
					    int written, ret;
 | 
				
			||||||
    int16_t *flush_buf = NULL;
 | 
					    int16_t *flush_buf = NULL;
 | 
				
			||||||
    const int16_t *samples = data;
 | 
					    const int16_t *samples = frame ? (const int16_t *)frame->data[0] : NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->enc_bitrate != avctx->bit_rate) {
 | 
					    if (s->enc_bitrate != avctx->bit_rate) {
 | 
				
			||||||
        s->enc_mode    = get_bitrate_mode(avctx->bit_rate, avctx);
 | 
					        s->enc_mode    = get_bitrate_mode(avctx->bit_rate, avctx);
 | 
				
			||||||
        s->enc_bitrate = avctx->bit_rate;
 | 
					        s->enc_bitrate = avctx->bit_rate;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data) {
 | 
					    if ((ret = ff_alloc_packet(avpkt, 32))) {
 | 
				
			||||||
        if (avctx->frame_size < 160) {
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
            flush_buf = av_mallocz(160 * sizeof(*flush_buf));
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (frame) {
 | 
				
			||||||
 | 
					        if (frame->nb_samples < avctx->frame_size) {
 | 
				
			||||||
 | 
					            flush_buf = av_mallocz(avctx->frame_size * sizeof(*flush_buf));
 | 
				
			||||||
            if (!flush_buf)
 | 
					            if (!flush_buf)
 | 
				
			||||||
                return AVERROR(ENOMEM);
 | 
					                return AVERROR(ENOMEM);
 | 
				
			||||||
            memcpy(flush_buf, samples, avctx->frame_size * sizeof(*flush_buf));
 | 
					            memcpy(flush_buf, samples, frame->nb_samples * sizeof(*flush_buf));
 | 
				
			||||||
            samples = flush_buf;
 | 
					            samples = flush_buf;
 | 
				
			||||||
            if (avctx->frame_size < 110)
 | 
					            if (frame->nb_samples < avctx->frame_size - avctx->delay)
 | 
				
			||||||
                s->enc_last_frame = -1;
 | 
					                s->enc_last_frame = -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0)) {
 | 
				
			||||||
 | 
					            av_freep(&flush_buf);
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (s->enc_last_frame < 0)
 | 
					        if (s->enc_last_frame < 0)
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        flush_buf = av_mallocz(160 * sizeof(*flush_buf));
 | 
					        flush_buf = av_mallocz(avctx->frame_size * sizeof(*flush_buf));
 | 
				
			||||||
        if (!flush_buf)
 | 
					        if (!flush_buf)
 | 
				
			||||||
            return AVERROR(ENOMEM);
 | 
					            return AVERROR(ENOMEM);
 | 
				
			||||||
        samples = flush_buf;
 | 
					        samples = flush_buf;
 | 
				
			||||||
@@ -257,12 +274,18 @@ static int amr_nb_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    written = Encoder_Interface_Encode(s->enc_state, s->enc_mode, samples,
 | 
					    written = Encoder_Interface_Encode(s->enc_state, s->enc_mode, samples,
 | 
				
			||||||
                                       frame, 0);
 | 
					                                       avpkt->data, 0);
 | 
				
			||||||
    av_dlog(avctx, "amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n",
 | 
					    av_dlog(avctx, "amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n",
 | 
				
			||||||
            written, s->enc_mode, frame[0]);
 | 
					            written, s->enc_mode, frame[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Get the next frame pts/duration */
 | 
				
			||||||
 | 
					    ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                       &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = written;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
    av_freep(&flush_buf);
 | 
					    av_freep(&flush_buf);
 | 
				
			||||||
    return written;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_libopencore_amrnb_encoder = {
 | 
					AVCodec ff_libopencore_amrnb_encoder = {
 | 
				
			||||||
@@ -271,7 +294,7 @@ AVCodec ff_libopencore_amrnb_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AMR_NB,
 | 
					    .id             = CODEC_ID_AMR_NB,
 | 
				
			||||||
    .priv_data_size = sizeof(AMRContext),
 | 
					    .priv_data_size = sizeof(AMRContext),
 | 
				
			||||||
    .init           = amr_nb_encode_init,
 | 
					    .init           = amr_nb_encode_init,
 | 
				
			||||||
    .encode         = amr_nb_encode_frame,
 | 
					    .encode2        = amr_nb_encode_frame,
 | 
				
			||||||
    .close          = amr_nb_encode_close,
 | 
					    .close          = amr_nb_encode_close,
 | 
				
			||||||
    .capabilities   = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME,
 | 
					    .capabilities   = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,6 +70,7 @@
 | 
				
			|||||||
#include "libavutil/opt.h"
 | 
					#include "libavutil/opt.h"
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "internal.h"
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
    AVClass *class;             ///< AVClass for private options
 | 
					    AVClass *class;             ///< AVClass for private options
 | 
				
			||||||
@@ -81,8 +82,7 @@ typedef struct {
 | 
				
			|||||||
    int cbr_quality;            ///< CBR quality 0 to 10
 | 
					    int cbr_quality;            ///< CBR quality 0 to 10
 | 
				
			||||||
    int abr;                    ///< flag to enable ABR
 | 
					    int abr;                    ///< flag to enable ABR
 | 
				
			||||||
    int pkt_frame_count;        ///< frame count for the current packet
 | 
					    int pkt_frame_count;        ///< frame count for the current packet
 | 
				
			||||||
    int64_t next_pts;           ///< next pts, in sample_rate time base
 | 
					    AudioFrameQueue afq;        ///< frame queue
 | 
				
			||||||
    int pkt_sample_count;       ///< sample count in the current packet
 | 
					 | 
				
			||||||
} LibSpeexEncContext;
 | 
					} LibSpeexEncContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static av_cold void print_enc_params(AVCodecContext *avctx,
 | 
					static av_cold void print_enc_params(AVCodecContext *avctx,
 | 
				
			||||||
@@ -200,6 +200,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* set encoding delay */
 | 
					    /* set encoding delay */
 | 
				
			||||||
    speex_encoder_ctl(s->enc_state, SPEEX_GET_LOOKAHEAD, &avctx->delay);
 | 
					    speex_encoder_ctl(s->enc_state, SPEEX_GET_LOOKAHEAD, &avctx->delay);
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* create header packet bytes from header struct */
 | 
					    /* create header packet bytes from header struct */
 | 
				
			||||||
    /* note: libspeex allocates the memory for header_data, which is freed
 | 
					    /* note: libspeex allocates the memory for header_data, which is freed
 | 
				
			||||||
@@ -208,13 +209,22 @@ static av_cold int encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* allocate extradata and coded_frame */
 | 
					    /* allocate extradata and coded_frame */
 | 
				
			||||||
    avctx->extradata   = av_malloc(header_size + FF_INPUT_BUFFER_PADDING_SIZE);
 | 
					    avctx->extradata   = av_malloc(header_size + FF_INPUT_BUFFER_PADDING_SIZE);
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    if (!avctx->extradata) {
 | 
				
			||||||
    if (!avctx->extradata || !avctx->coded_frame) {
 | 
					 | 
				
			||||||
        speex_header_free(header_data);
 | 
					        speex_header_free(header_data);
 | 
				
			||||||
        speex_encoder_destroy(s->enc_state);
 | 
					        speex_encoder_destroy(s->enc_state);
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "memory allocation error\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "memory allocation error\n");
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
 | 
					        av_freep(&avctx->extradata);
 | 
				
			||||||
 | 
					        speex_header_free(header_data);
 | 
				
			||||||
 | 
					        speex_encoder_destroy(s->enc_state);
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "memory allocation error\n");
 | 
				
			||||||
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* copy header packet to extradata */
 | 
					    /* copy header packet to extradata */
 | 
				
			||||||
    memcpy(avctx->extradata, header_data, header_size);
 | 
					    memcpy(avctx->extradata, header_data, header_size);
 | 
				
			||||||
@@ -228,19 +238,21 @@ static av_cold int encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int encode_frame(AVCodecContext *avctx, uint8_t *frame, int buf_size,
 | 
					static int encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                        void *data)
 | 
					                        const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    LibSpeexEncContext *s = avctx->priv_data;
 | 
					    LibSpeexEncContext *s = avctx->priv_data;
 | 
				
			||||||
    int16_t *samples      = data;
 | 
					    int16_t *samples      = frame ? (int16_t *)frame->data[0] : NULL;
 | 
				
			||||||
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data) {
 | 
					    if (samples) {
 | 
				
			||||||
        /* encode Speex frame */
 | 
					        /* encode Speex frame */
 | 
				
			||||||
        if (avctx->channels == 2)
 | 
					        if (avctx->channels == 2)
 | 
				
			||||||
            speex_encode_stereo_int(samples, s->header.frame_size, &s->bits);
 | 
					            speex_encode_stereo_int(samples, s->header.frame_size, &s->bits);
 | 
				
			||||||
        speex_encode_int(s->enc_state, samples, &s->bits);
 | 
					        speex_encode_int(s->enc_state, samples, &s->bits);
 | 
				
			||||||
        s->pkt_frame_count++;
 | 
					        s->pkt_frame_count++;
 | 
				
			||||||
        s->pkt_sample_count += avctx->frame_size;
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        /* handle end-of-stream */
 | 
					        /* handle end-of-stream */
 | 
				
			||||||
        if (!s->pkt_frame_count)
 | 
					        if (!s->pkt_frame_count)
 | 
				
			||||||
@@ -255,18 +267,20 @@ static int encode_frame(AVCodecContext *avctx, uint8_t *frame, int buf_size,
 | 
				
			|||||||
    /* write output if all frames for the packet have been encoded */
 | 
					    /* write output if all frames for the packet have been encoded */
 | 
				
			||||||
    if (s->pkt_frame_count == s->frames_per_packet) {
 | 
					    if (s->pkt_frame_count == s->frames_per_packet) {
 | 
				
			||||||
        s->pkt_frame_count = 0;
 | 
					        s->pkt_frame_count = 0;
 | 
				
			||||||
        avctx->coded_frame->pts = ff_samples_to_time_base(avctx, s->next_pts -
 | 
					        if ((ret = ff_alloc_packet(avpkt, speex_bits_nbytes(&s->bits)))) {
 | 
				
			||||||
                                                          avctx->delay);
 | 
					            av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        s->next_pts += s->pkt_sample_count;
 | 
					 | 
				
			||||||
        s->pkt_sample_count = 0;
 | 
					 | 
				
			||||||
        if (buf_size > speex_bits_nbytes(&s->bits)) {
 | 
					 | 
				
			||||||
            int ret = speex_bits_write(&s->bits, frame, buf_size);
 | 
					 | 
				
			||||||
            speex_bits_reset(&s->bits);
 | 
					 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            av_log(avctx, AV_LOG_ERROR, "output buffer too small");
 | 
					 | 
				
			||||||
            return AVERROR(EINVAL);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        ret = speex_bits_write(&s->bits, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					        speex_bits_reset(&s->bits);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /* Get the next frame pts/duration */
 | 
				
			||||||
 | 
					        ff_af_queue_remove(&s->afq, s->frames_per_packet * avctx->frame_size,
 | 
				
			||||||
 | 
					                           &avpkt->pts, &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        avpkt->size = ret;
 | 
				
			||||||
 | 
					        *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -278,7 +292,10 @@ static av_cold int encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
    speex_bits_destroy(&s->bits);
 | 
					    speex_bits_destroy(&s->bits);
 | 
				
			||||||
    speex_encoder_destroy(s->enc_state);
 | 
					    speex_encoder_destroy(s->enc_state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&avctx->extradata);
 | 
					    av_freep(&avctx->extradata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -312,7 +329,7 @@ AVCodec ff_libspeex_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_SPEEX,
 | 
					    .id             = CODEC_ID_SPEEX,
 | 
				
			||||||
    .priv_data_size = sizeof(LibSpeexEncContext),
 | 
					    .priv_data_size = sizeof(LibSpeexEncContext),
 | 
				
			||||||
    .init           = encode_init,
 | 
					    .init           = encode_init,
 | 
				
			||||||
    .encode         = encode_frame,
 | 
					    .encode2        = encode_frame,
 | 
				
			||||||
    .close          = encode_close,
 | 
					    .close          = encode_close,
 | 
				
			||||||
    .capabilities   = CODEC_CAP_DELAY,
 | 
					    .capabilities   = CODEC_CAP_DELAY,
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE },
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,25 +23,61 @@
 | 
				
			|||||||
#include <vo-aacenc/cmnMemory.h>
 | 
					#include <vo-aacenc/cmnMemory.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "mpeg4audio.h"
 | 
					#include "mpeg4audio.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define FRAME_SIZE 1024
 | 
				
			||||||
 | 
					#define ENC_DELAY  1600
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct AACContext {
 | 
					typedef struct AACContext {
 | 
				
			||||||
    VO_AUDIO_CODECAPI codec_api;
 | 
					    VO_AUDIO_CODECAPI codec_api;
 | 
				
			||||||
    VO_HANDLE handle;
 | 
					    VO_HANDLE handle;
 | 
				
			||||||
    VO_MEM_OPERATOR mem_operator;
 | 
					    VO_MEM_OPERATOR mem_operator;
 | 
				
			||||||
    VO_CODEC_INIT_USERDATA user_data;
 | 
					    VO_CODEC_INIT_USERDATA user_data;
 | 
				
			||||||
 | 
					    VO_PBYTE end_buffer;
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
 | 
					    int last_frame;
 | 
				
			||||||
 | 
					    int last_samples;
 | 
				
			||||||
} AACContext;
 | 
					} AACContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int aac_encode_close(AVCodecContext *avctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    AACContext *s = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    s->codec_api.Uninit(s->handle);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    av_freep(&avctx->extradata);
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					    av_freep(&s->end_buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static av_cold int aac_encode_init(AVCodecContext *avctx)
 | 
					static av_cold int aac_encode_init(AVCodecContext *avctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AACContext *s = avctx->priv_data;
 | 
					    AACContext *s = avctx->priv_data;
 | 
				
			||||||
    AACENC_PARAM params = { 0 };
 | 
					    AACENC_PARAM params = { 0 };
 | 
				
			||||||
    int index;
 | 
					    int index, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
    avctx->frame_size = 1024;
 | 
					#endif
 | 
				
			||||||
 | 
					    avctx->frame_size = FRAME_SIZE;
 | 
				
			||||||
 | 
					    avctx->delay      = ENC_DELAY;
 | 
				
			||||||
 | 
					    s->last_frame     = 2;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    s->end_buffer = av_mallocz(avctx->frame_size * avctx->channels * 2);
 | 
				
			||||||
 | 
					    if (!s->end_buffer) {
 | 
				
			||||||
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					        goto error;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    voGetAACEncAPI(&s->codec_api);
 | 
					    voGetAACEncAPI(&s->codec_api);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,7 +97,8 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    if (s->codec_api.SetParam(s->handle, VO_PID_AAC_ENCPARAM, ¶ms)
 | 
					    if (s->codec_api.SetParam(s->handle, VO_PID_AAC_ENCPARAM, ¶ms)
 | 
				
			||||||
        != VO_ERR_NONE) {
 | 
					        != VO_ERR_NONE) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "Unable to set encoding parameters\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "Unable to set encoding parameters\n");
 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					        ret = AVERROR(EINVAL);
 | 
				
			||||||
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (index = 0; index < 16; index++)
 | 
					    for (index = 0; index < 16; index++)
 | 
				
			||||||
@@ -70,43 +107,69 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    if (index == 16) {
 | 
					    if (index == 16) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "Unsupported sample rate %d\n",
 | 
					        av_log(avctx, AV_LOG_ERROR, "Unsupported sample rate %d\n",
 | 
				
			||||||
                                    avctx->sample_rate);
 | 
					                                    avctx->sample_rate);
 | 
				
			||||||
        return AVERROR(ENOSYS);
 | 
					        ret = AVERROR(ENOSYS);
 | 
				
			||||||
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
 | 
					    if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
 | 
				
			||||||
        avctx->extradata_size = 2;
 | 
					        avctx->extradata_size = 2;
 | 
				
			||||||
        avctx->extradata      = av_mallocz(avctx->extradata_size +
 | 
					        avctx->extradata      = av_mallocz(avctx->extradata_size +
 | 
				
			||||||
                                           FF_INPUT_BUFFER_PADDING_SIZE);
 | 
					                                           FF_INPUT_BUFFER_PADDING_SIZE);
 | 
				
			||||||
        if (!avctx->extradata)
 | 
					        if (!avctx->extradata) {
 | 
				
			||||||
            return AVERROR(ENOMEM);
 | 
					            ret = AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					            goto error;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        avctx->extradata[0] = 0x02 << 3 | index >> 1;
 | 
					        avctx->extradata[0] = 0x02 << 3 | index >> 1;
 | 
				
			||||||
        avctx->extradata[1] = (index & 0x01) << 7 | avctx->channels << 3;
 | 
					        avctx->extradata[1] = (index & 0x01) << 7 | avctx->channels << 3;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 | 
					error:
 | 
				
			||||||
 | 
					    aac_encode_close(avctx);
 | 
				
			||||||
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int aac_encode_close(AVCodecContext *avctx)
 | 
					static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
{
 | 
					                            const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
    AACContext *s = avctx->priv_data;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    s->codec_api.Uninit(s->handle);
 | 
					 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int aac_encode_frame(AVCodecContext *avctx,
 | 
					 | 
				
			||||||
                            unsigned char *frame/*out*/,
 | 
					 | 
				
			||||||
                            int buf_size, void *data/*in*/)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AACContext *s = avctx->priv_data;
 | 
					    AACContext *s = avctx->priv_data;
 | 
				
			||||||
    VO_CODECBUFFER input = { 0 }, output = { 0 };
 | 
					    VO_CODECBUFFER input = { 0 }, output = { 0 };
 | 
				
			||||||
    VO_AUDIO_OUTPUTINFO output_info = { { 0 } };
 | 
					    VO_AUDIO_OUTPUTINFO output_info = { { 0 } };
 | 
				
			||||||
 | 
					    VO_PBYTE samples;
 | 
				
			||||||
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    input.Buffer = data;
 | 
					    /* handle end-of-stream small frame and flushing */
 | 
				
			||||||
    input.Length = 2 * avctx->channels * avctx->frame_size;
 | 
					    if (!frame) {
 | 
				
			||||||
    output.Buffer = frame;
 | 
					        if (s->last_frame <= 0)
 | 
				
			||||||
    output.Length = buf_size;
 | 
					            return 0;
 | 
				
			||||||
 | 
					        if (s->last_samples > 0 && s->last_samples < ENC_DELAY - FRAME_SIZE) {
 | 
				
			||||||
 | 
					            s->last_samples = 0;
 | 
				
			||||||
 | 
					            s->last_frame--;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        s->last_frame--;
 | 
				
			||||||
 | 
					        memset(s->end_buffer, 0, 2 * avctx->channels * avctx->frame_size);
 | 
				
			||||||
 | 
					        samples = s->end_buffer;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        if (frame->nb_samples < avctx->frame_size) {
 | 
				
			||||||
 | 
					            s->last_samples = frame->nb_samples;
 | 
				
			||||||
 | 
					            memcpy(s->end_buffer, frame->data[0], 2 * avctx->channels * frame->nb_samples);
 | 
				
			||||||
 | 
					            samples = s->end_buffer;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            samples = (VO_PBYTE)frame->data[0];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /* add current frame to the queue */
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, FFMAX(8192, 768 * avctx->channels)))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    input.Buffer  = samples;
 | 
				
			||||||
 | 
					    input.Length  = 2 * avctx->channels * avctx->frame_size;
 | 
				
			||||||
 | 
					    output.Buffer = avpkt->data;
 | 
				
			||||||
 | 
					    output.Length = avpkt->size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->codec_api.SetInputData(s->handle, &input);
 | 
					    s->codec_api.SetInputData(s->handle, &input);
 | 
				
			||||||
    if (s->codec_api.GetOutputData(s->handle, &output, &output_info)
 | 
					    if (s->codec_api.GetOutputData(s->handle, &output, &output_info)
 | 
				
			||||||
@@ -114,7 +177,14 @@ static int aac_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        av_log(avctx, AV_LOG_ERROR, "Unable to encode frame\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "Unable to encode frame\n");
 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					        return AVERROR(EINVAL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return output.Length;
 | 
					
 | 
				
			||||||
 | 
					    /* Get the next frame pts/duration */
 | 
				
			||||||
 | 
					    ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                       &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = output.Length;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_libvo_aacenc_encoder = {
 | 
					AVCodec ff_libvo_aacenc_encoder = {
 | 
				
			||||||
@@ -123,8 +193,9 @@ AVCodec ff_libvo_aacenc_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AAC,
 | 
					    .id             = CODEC_ID_AAC,
 | 
				
			||||||
    .priv_data_size = sizeof(AACContext),
 | 
					    .priv_data_size = sizeof(AACContext),
 | 
				
			||||||
    .init           = aac_encode_init,
 | 
					    .init           = aac_encode_init,
 | 
				
			||||||
    .encode         = aac_encode_frame,
 | 
					    .encode2        = aac_encode_frame,
 | 
				
			||||||
    .close          = aac_encode_close,
 | 
					    .close          = aac_encode_close,
 | 
				
			||||||
 | 
					    .capabilities   = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AAC"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AAC"),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,9 +21,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <vo-amrwbenc/enc_if.h>
 | 
					#include <vo-amrwbenc/enc_if.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					 | 
				
			||||||
#include "libavutil/avstring.h"
 | 
					#include "libavutil/avstring.h"
 | 
				
			||||||
#include "libavutil/opt.h"
 | 
					#include "libavutil/opt.h"
 | 
				
			||||||
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_PACKET_SIZE  (1 + (477 + 7) / 8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct AMRWBContext {
 | 
					typedef struct AMRWBContext {
 | 
				
			||||||
    AVClass *av_class;
 | 
					    AVClass *av_class;
 | 
				
			||||||
@@ -86,9 +89,12 @@ static av_cold int amr_wb_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    s->last_bitrate    = avctx->bit_rate;
 | 
					    s->last_bitrate    = avctx->bit_rate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size  = 320;
 | 
					    avctx->frame_size  = 320;
 | 
				
			||||||
 | 
					    avctx->delay       =  80;
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->state     = E_IF_init();
 | 
					    s->state     = E_IF_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -104,19 +110,34 @@ static int amr_wb_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int amr_wb_encode_frame(AVCodecContext *avctx,
 | 
					static int amr_wb_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                               unsigned char *frame/*out*/,
 | 
					                               const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
                               int buf_size, void *data/*in*/)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    AMRWBContext *s = avctx->priv_data;
 | 
					    AMRWBContext *s = avctx->priv_data;
 | 
				
			||||||
    int size;
 | 
					    const int16_t *samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
 | 
					    int size, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((ret = ff_alloc_packet(avpkt, MAX_PACKET_SIZE))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->last_bitrate != avctx->bit_rate) {
 | 
					    if (s->last_bitrate != avctx->bit_rate) {
 | 
				
			||||||
        s->mode         = get_wb_bitrate_mode(avctx->bit_rate, avctx);
 | 
					        s->mode         = get_wb_bitrate_mode(avctx->bit_rate, avctx);
 | 
				
			||||||
        s->last_bitrate = avctx->bit_rate;
 | 
					        s->last_bitrate = avctx->bit_rate;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    size = E_IF_encode(s->state, s->mode, data, frame, s->allow_dtx);
 | 
					    size = E_IF_encode(s->state, s->mode, samples, avpkt->data, s->allow_dtx);
 | 
				
			||||||
    return size;
 | 
					    if (size <= 0 || size > MAX_PACKET_SIZE) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error encoding frame\n");
 | 
				
			||||||
 | 
					        return AVERROR(EINVAL);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (frame->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					        avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = size;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_libvo_amrwbenc_encoder = {
 | 
					AVCodec ff_libvo_amrwbenc_encoder = {
 | 
				
			||||||
@@ -125,7 +146,7 @@ AVCodec ff_libvo_amrwbenc_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_AMR_WB,
 | 
					    .id             = CODEC_ID_AMR_WB,
 | 
				
			||||||
    .priv_data_size = sizeof(AMRWBContext),
 | 
					    .priv_data_size = sizeof(AMRWBContext),
 | 
				
			||||||
    .init           = amr_wb_encode_init,
 | 
					    .init           = amr_wb_encode_init,
 | 
				
			||||||
    .encode         = amr_wb_encode_frame,
 | 
					    .encode2        = amr_wb_encode_frame,
 | 
				
			||||||
    .close          = amr_wb_encode_close,
 | 
					    .close          = amr_wb_encode_close,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("Android VisualOn Adaptive Multi-Rate "
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("Android VisualOn Adaptive Multi-Rate "
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,9 +29,11 @@
 | 
				
			|||||||
#include "libavutil/fifo.h"
 | 
					#include "libavutil/fifo.h"
 | 
				
			||||||
#include "libavutil/opt.h"
 | 
					#include "libavutil/opt.h"
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
#include "bytestream.h"
 | 
					#include "bytestream.h"
 | 
				
			||||||
#include "internal.h"
 | 
					#include "internal.h"
 | 
				
			||||||
#include "vorbis.h"
 | 
					#include "vorbis.h"
 | 
				
			||||||
 | 
					#include "vorbis_parser.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef NDEBUG
 | 
					#undef NDEBUG
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
@@ -56,6 +58,8 @@ typedef struct OggVorbisContext {
 | 
				
			|||||||
    vorbis_comment vc;                  /**< VorbisComment info             */
 | 
					    vorbis_comment vc;                  /**< VorbisComment info             */
 | 
				
			||||||
    ogg_packet op;                      /**< ogg packet                     */
 | 
					    ogg_packet op;                      /**< ogg packet                     */
 | 
				
			||||||
    double iblock;                      /**< impulse block bias option      */
 | 
					    double iblock;                      /**< impulse block bias option      */
 | 
				
			||||||
 | 
					    VorbisParseContext vp;              /**< parse context to get durations */
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;                /**< frame queue for timestamps     */
 | 
				
			||||||
} OggVorbisContext;
 | 
					} OggVorbisContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const AVOption options[] = {
 | 
					static const AVOption options[] = {
 | 
				
			||||||
@@ -186,7 +190,10 @@ static av_cold int oggvorbis_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
    vorbis_info_clear(&s->vi);
 | 
					    vorbis_info_clear(&s->vi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    av_fifo_free(s->pkt_fifo);
 | 
					    av_fifo_free(s->pkt_fifo);
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&avctx->extradata);
 | 
					    av_freep(&avctx->extradata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -247,9 +254,15 @@ static av_cold int oggvorbis_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    offset += header_code.bytes;
 | 
					    offset += header_code.bytes;
 | 
				
			||||||
    assert(offset == avctx->extradata_size);
 | 
					    assert(offset == avctx->extradata_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((ret = avpriv_vorbis_parse_extradata(avctx, &s->vp)) < 0) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "invalid extradata\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vorbis_comment_clear(&s->vc);
 | 
					    vorbis_comment_clear(&s->vc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size = OGGVORBIS_FRAME_SIZE;
 | 
					    avctx->frame_size = OGGVORBIS_FRAME_SIZE;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->pkt_fifo = av_fifo_alloc(BUFFER_SIZE);
 | 
					    s->pkt_fifo = av_fifo_alloc(BUFFER_SIZE);
 | 
				
			||||||
    if (!s->pkt_fifo) {
 | 
					    if (!s->pkt_fifo) {
 | 
				
			||||||
@@ -257,11 +270,13 @@ static av_cold int oggvorbis_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame) {
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -269,17 +284,17 @@ error:
 | 
				
			|||||||
    return ret;
 | 
					    return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int oggvorbis_encode_frame(AVCodecContext *avctx, unsigned char *packets,
 | 
					static int oggvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                                  int buf_size, void *data)
 | 
					                                  const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    OggVorbisContext *s = avctx->priv_data;
 | 
					    OggVorbisContext *s = avctx->priv_data;
 | 
				
			||||||
    ogg_packet op;
 | 
					    ogg_packet op;
 | 
				
			||||||
    float *audio = data;
 | 
					    int ret, duration;
 | 
				
			||||||
    int pkt_size, ret;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* send samples to libvorbis */
 | 
					    /* send samples to libvorbis */
 | 
				
			||||||
    if (data) {
 | 
					    if (frame) {
 | 
				
			||||||
        const int samples = avctx->frame_size;
 | 
					        const float *audio = (const float *)frame->data[0];
 | 
				
			||||||
 | 
					        const int samples = frame->nb_samples;
 | 
				
			||||||
        float **buffer;
 | 
					        float **buffer;
 | 
				
			||||||
        int c, channels = s->vi.channels;
 | 
					        int c, channels = s->vi.channels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -295,6 +310,8 @@ static int oggvorbis_encode_frame(AVCodecContext *avctx, unsigned char *packets,
 | 
				
			|||||||
            av_log(avctx, AV_LOG_ERROR, "error in vorbis_analysis_wrote()\n");
 | 
					            av_log(avctx, AV_LOG_ERROR, "error in vorbis_analysis_wrote()\n");
 | 
				
			||||||
            return vorbis_error_to_averror(ret);
 | 
					            return vorbis_error_to_averror(ret);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        if (!s->eof)
 | 
					        if (!s->eof)
 | 
				
			||||||
            if ((ret = vorbis_analysis_wrote(&s->vd, 0)) < 0) {
 | 
					            if ((ret = vorbis_analysis_wrote(&s->vd, 0)) < 0) {
 | 
				
			||||||
@@ -330,22 +347,34 @@ static int oggvorbis_encode_frame(AVCodecContext *avctx, unsigned char *packets,
 | 
				
			|||||||
        return vorbis_error_to_averror(ret);
 | 
					        return vorbis_error_to_averror(ret);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* output then next packet from the output buffer, if available */
 | 
					    /* check for available packets */
 | 
				
			||||||
    pkt_size = 0;
 | 
					    if (av_fifo_size(s->pkt_fifo) < sizeof(ogg_packet))
 | 
				
			||||||
    if (av_fifo_size(s->pkt_fifo) >= sizeof(ogg_packet)) {
 | 
					        return 0;
 | 
				
			||||||
        av_fifo_generic_read(s->pkt_fifo, &op, sizeof(ogg_packet), NULL);
 | 
					
 | 
				
			||||||
        pkt_size = op.bytes;
 | 
					    av_fifo_generic_read(s->pkt_fifo, &op, sizeof(ogg_packet), NULL);
 | 
				
			||||||
        // FIXME: we should use the user-supplied pts and duration
 | 
					
 | 
				
			||||||
        avctx->coded_frame->pts = ff_samples_to_time_base(avctx,
 | 
					    if ((ret = ff_alloc_packet(avpkt, op.bytes))) {
 | 
				
			||||||
                                                          op.granulepos);
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        if (pkt_size > buf_size) {
 | 
					        return ret;
 | 
				
			||||||
            av_log(avctx, AV_LOG_ERROR, "output buffer is too small\n");
 | 
					    }
 | 
				
			||||||
            return AVERROR(EINVAL);
 | 
					    av_fifo_generic_read(s->pkt_fifo, avpkt->data, op.bytes, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->pts = ff_samples_to_time_base(avctx, op.granulepos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    duration = avpriv_vorbis_parse_frame(&s->vp, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					    if (duration > 0) {
 | 
				
			||||||
 | 
					        /* we do not know encoder delay until we get the first packet from
 | 
				
			||||||
 | 
					         * libvorbis, so we have to update the AudioFrameQueue counts */
 | 
				
			||||||
 | 
					        if (!avctx->delay) {
 | 
				
			||||||
 | 
					            avctx->delay              = duration;
 | 
				
			||||||
 | 
					            s->afq.remaining_delay   += duration;
 | 
				
			||||||
 | 
					            s->afq.remaining_samples += duration;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        av_fifo_generic_read(s->pkt_fifo, packets, pkt_size, NULL);
 | 
					        ff_af_queue_remove(&s->afq, duration, &avpkt->pts, &avpkt->duration);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return pkt_size;
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_libvorbis_encoder = {
 | 
					AVCodec ff_libvorbis_encoder = {
 | 
				
			||||||
@@ -354,7 +383,7 @@ AVCodec ff_libvorbis_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_VORBIS,
 | 
					    .id             = CODEC_ID_VORBIS,
 | 
				
			||||||
    .priv_data_size = sizeof(OggVorbisContext),
 | 
					    .priv_data_size = sizeof(OggVorbisContext),
 | 
				
			||||||
    .init           = oggvorbis_encode_init,
 | 
					    .init           = oggvorbis_encode_init,
 | 
				
			||||||
    .encode         = oggvorbis_encode_frame,
 | 
					    .encode2        = oggvorbis_encode_frame,
 | 
				
			||||||
    .close          = oggvorbis_encode_close,
 | 
					    .close          = oggvorbis_encode_close,
 | 
				
			||||||
    .capabilities   = CODEC_CAP_DELAY,
 | 
					    .capabilities   = CODEC_CAP_DELAY,
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,6 +80,7 @@ static av_cold int MPA_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    bitrate = bitrate / 1000;
 | 
					    bitrate = bitrate / 1000;
 | 
				
			||||||
    s->nb_channels = channels;
 | 
					    s->nb_channels = channels;
 | 
				
			||||||
    avctx->frame_size = MPA_FRAME_SIZE;
 | 
					    avctx->frame_size = MPA_FRAME_SIZE;
 | 
				
			||||||
 | 
					    avctx->delay      = 512 - 32 + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* encoding freq */
 | 
					    /* encoding freq */
 | 
				
			||||||
    s->lsf = 0;
 | 
					    s->lsf = 0;
 | 
				
			||||||
@@ -180,9 +181,11 @@ static av_cold int MPA_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        total_quant_bits[i] = 12 * v;
 | 
					        total_quant_bits[i] = 12 * v;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame= avcodec_alloc_frame();
 | 
					    avctx->coded_frame= avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame)
 | 
					    if (!avctx->coded_frame)
 | 
				
			||||||
        return AVERROR(ENOMEM);
 | 
					        return AVERROR(ENOMEM);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -726,14 +729,14 @@ static void encode_frame(MpegAudioContext *s,
 | 
				
			|||||||
    flush_put_bits(p);
 | 
					    flush_put_bits(p);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int MPA_encode_frame(AVCodecContext *avctx,
 | 
					static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                            unsigned char *frame, int buf_size, void *data)
 | 
					                            const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    MpegAudioContext *s = avctx->priv_data;
 | 
					    MpegAudioContext *s = avctx->priv_data;
 | 
				
			||||||
    const short *samples = data;
 | 
					    const int16_t *samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
    short smr[MPA_MAX_CHANNELS][SBLIMIT];
 | 
					    short smr[MPA_MAX_CHANNELS][SBLIMIT];
 | 
				
			||||||
    unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
 | 
					    unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT];
 | 
				
			||||||
    int padding, i;
 | 
					    int padding, i, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(i=0;i<s->nb_channels;i++) {
 | 
					    for(i=0;i<s->nb_channels;i++) {
 | 
				
			||||||
        filter(s, i, samples + i, s->nb_channels);
 | 
					        filter(s, i, samples + i, s->nb_channels);
 | 
				
			||||||
@@ -748,16 +751,28 @@ static int MPA_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    compute_bit_allocation(s, smr, bit_alloc, &padding);
 | 
					    compute_bit_allocation(s, smr, bit_alloc, &padding);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_put_bits(&s->pb, frame, MPA_MAX_CODED_FRAME_SIZE);
 | 
					    if ((ret = ff_alloc_packet(avpkt, MPA_MAX_CODED_FRAME_SIZE))) {
 | 
				
			||||||
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init_put_bits(&s->pb, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    encode_frame(s, bit_alloc, padding);
 | 
					    encode_frame(s, bit_alloc, padding);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return put_bits_ptr(&s->pb) - s->pb.buf;
 | 
					    if (frame->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					        avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = put_bits_count(&s->pb) / 8;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static av_cold int MPA_encode_close(AVCodecContext *avctx)
 | 
					static av_cold int MPA_encode_close(AVCodecContext *avctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -772,7 +787,7 @@ AVCodec ff_mp2_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_MP2,
 | 
					    .id             = CODEC_ID_MP2,
 | 
				
			||||||
    .priv_data_size = sizeof(MpegAudioContext),
 | 
					    .priv_data_size = sizeof(MpegAudioContext),
 | 
				
			||||||
    .init           = MPA_encode_init,
 | 
					    .init           = MPA_encode_init,
 | 
				
			||||||
    .encode         = MPA_encode_frame,
 | 
					    .encode2        = MPA_encode_frame,
 | 
				
			||||||
    .close          = MPA_encode_close,
 | 
					    .close          = MPA_encode_close,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .supported_samplerates= (const int[]){44100, 48000,  32000, 22050, 24000, 16000, 0},
 | 
					    .supported_samplerates= (const int[]){44100, 48000,  32000, 22050, 24000, 16000, 0},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,8 +38,10 @@
 | 
				
			|||||||
#include "libavutil/mathematics.h"
 | 
					#include "libavutil/mathematics.h"
 | 
				
			||||||
#include "nellymoser.h"
 | 
					#include "nellymoser.h"
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
#include "dsputil.h"
 | 
					#include "dsputil.h"
 | 
				
			||||||
#include "fft.h"
 | 
					#include "fft.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "sinewin.h"
 | 
					#include "sinewin.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define BITSTREAM_WRITER_LE
 | 
					#define BITSTREAM_WRITER_LE
 | 
				
			||||||
@@ -54,6 +56,7 @@ typedef struct NellyMoserEncodeContext {
 | 
				
			|||||||
    int             last_frame;
 | 
					    int             last_frame;
 | 
				
			||||||
    DSPContext      dsp;
 | 
					    DSPContext      dsp;
 | 
				
			||||||
    FFTContext      mdct_ctx;
 | 
					    FFTContext      mdct_ctx;
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
    DECLARE_ALIGNED(32, float, mdct_out)[NELLY_SAMPLES];
 | 
					    DECLARE_ALIGNED(32, float, mdct_out)[NELLY_SAMPLES];
 | 
				
			||||||
    DECLARE_ALIGNED(32, float, in_buff)[NELLY_SAMPLES];
 | 
					    DECLARE_ALIGNED(32, float, in_buff)[NELLY_SAMPLES];
 | 
				
			||||||
    DECLARE_ALIGNED(32, float, buf)[3 * NELLY_BUF_LEN];     ///< sample buffer
 | 
					    DECLARE_ALIGNED(32, float, buf)[3 * NELLY_BUF_LEN];     ///< sample buffer
 | 
				
			||||||
@@ -136,7 +139,10 @@ static av_cold int encode_end(AVCodecContext *avctx)
 | 
				
			|||||||
        av_free(s->opt);
 | 
					        av_free(s->opt);
 | 
				
			||||||
        av_free(s->path);
 | 
					        av_free(s->path);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    ff_af_queue_close(&s->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -161,6 +167,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    avctx->frame_size = NELLY_SAMPLES;
 | 
					    avctx->frame_size = NELLY_SAMPLES;
 | 
				
			||||||
    avctx->delay      = NELLY_BUF_LEN;
 | 
					    avctx->delay      = NELLY_BUF_LEN;
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &s->afq);
 | 
				
			||||||
    s->avctx = avctx;
 | 
					    s->avctx = avctx;
 | 
				
			||||||
    if ((ret = ff_mdct_init(&s->mdct_ctx, 8, 0, 32768.0)) < 0)
 | 
					    if ((ret = ff_mdct_init(&s->mdct_ctx, 8, 0, 32768.0)) < 0)
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
@@ -180,11 +187,13 @@ static av_cold int encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame) {
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -366,30 +375,44 @@ static void encode_block(NellyMoserEncodeContext *s, unsigned char *output, int
 | 
				
			|||||||
    memset(put_bits_ptr(&pb), 0, output + output_size - put_bits_ptr(&pb));
 | 
					    memset(put_bits_ptr(&pb), 0, output + output_size - put_bits_ptr(&pb));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int encode_frame(AVCodecContext *avctx, uint8_t *frame, int buf_size, void *data)
 | 
					static int encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
 | 
					                        const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    NellyMoserEncodeContext *s = avctx->priv_data;
 | 
					    NellyMoserEncodeContext *s = avctx->priv_data;
 | 
				
			||||||
    const float *samples = data;
 | 
					    int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->last_frame)
 | 
					    if (s->last_frame)
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memcpy(s->buf, s->buf + NELLY_SAMPLES, NELLY_BUF_LEN * sizeof(*s->buf));
 | 
					    memcpy(s->buf, s->buf + NELLY_SAMPLES, NELLY_BUF_LEN * sizeof(*s->buf));
 | 
				
			||||||
    if (data) {
 | 
					    if (frame) {
 | 
				
			||||||
        memcpy(s->buf + NELLY_BUF_LEN, samples, avctx->frame_size * sizeof(*s->buf));
 | 
					        memcpy(s->buf + NELLY_BUF_LEN, frame->data[0],
 | 
				
			||||||
        if (avctx->frame_size < NELLY_SAMPLES) {
 | 
					               frame->nb_samples * sizeof(*s->buf));
 | 
				
			||||||
 | 
					        if (frame->nb_samples < NELLY_SAMPLES) {
 | 
				
			||||||
            memset(s->buf + NELLY_BUF_LEN + avctx->frame_size, 0,
 | 
					            memset(s->buf + NELLY_BUF_LEN + avctx->frame_size, 0,
 | 
				
			||||||
                   (NELLY_SAMPLES - avctx->frame_size) * sizeof(*s->buf));
 | 
					                   (NELLY_SAMPLES - frame->nb_samples) * sizeof(*s->buf));
 | 
				
			||||||
            if (avctx->frame_size >= NELLY_BUF_LEN)
 | 
					            if (frame->nb_samples >= NELLY_BUF_LEN)
 | 
				
			||||||
                s->last_frame = 1;
 | 
					                s->last_frame = 1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&s->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        memset(s->buf + NELLY_BUF_LEN, 0, NELLY_SAMPLES * sizeof(*s->buf));
 | 
					        memset(s->buf + NELLY_BUF_LEN, 0, NELLY_SAMPLES * sizeof(*s->buf));
 | 
				
			||||||
        s->last_frame = 1;
 | 
					        s->last_frame = 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    encode_block(s, frame, buf_size);
 | 
					    if ((ret = ff_alloc_packet(avpkt, NELLY_BLOCK_LEN))) {
 | 
				
			||||||
    return NELLY_BLOCK_LEN;
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    encode_block(s, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Get the next frame pts/duration */
 | 
				
			||||||
 | 
					    ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                       &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_nellymoser_encoder = {
 | 
					AVCodec ff_nellymoser_encoder = {
 | 
				
			||||||
@@ -398,7 +421,7 @@ AVCodec ff_nellymoser_encoder = {
 | 
				
			|||||||
    .id = CODEC_ID_NELLYMOSER,
 | 
					    .id = CODEC_ID_NELLYMOSER,
 | 
				
			||||||
    .priv_data_size = sizeof(NellyMoserEncodeContext),
 | 
					    .priv_data_size = sizeof(NellyMoserEncodeContext),
 | 
				
			||||||
    .init = encode_init,
 | 
					    .init = encode_init,
 | 
				
			||||||
    .encode = encode_frame,
 | 
					    .encode2 = encode_frame,
 | 
				
			||||||
    .close = encode_end,
 | 
					    .close = encode_end,
 | 
				
			||||||
    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
 | 
					    .capabilities = CODEC_CAP_SMALL_LAST_FRAME | CODEC_CAP_DELAY,
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("Nellymoser Asao"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
#include "lpc.h"
 | 
					#include "lpc.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NBLOCKS         4       ///< number of subblocks within a block
 | 
					#define NBLOCKS         4       ///< number of subblocks within a block
 | 
				
			||||||
#define BLOCKSIZE       40      ///< subblock size in 16-bit words
 | 
					#define BLOCKSIZE       40      ///< subblock size in 16-bit words
 | 
				
			||||||
@@ -36,6 +37,7 @@ typedef struct {
 | 
				
			|||||||
    AVCodecContext *avctx;
 | 
					    AVCodecContext *avctx;
 | 
				
			||||||
    AVFrame frame;
 | 
					    AVFrame frame;
 | 
				
			||||||
    LPCContext lpc_ctx;
 | 
					    LPCContext lpc_ctx;
 | 
				
			||||||
 | 
					    AudioFrameQueue afq;
 | 
				
			||||||
    int last_frame;
 | 
					    int last_frame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unsigned int     old_energy;        ///< previous frame energy
 | 
					    unsigned int     old_energy;        ///< previous frame energy
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,8 @@
 | 
				
			|||||||
#include <float.h>
 | 
					#include <float.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "audio_frame_queue.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "put_bits.h"
 | 
					#include "put_bits.h"
 | 
				
			||||||
#include "celp_filters.h"
 | 
					#include "celp_filters.h"
 | 
				
			||||||
#include "ra144.h"
 | 
					#include "ra144.h"
 | 
				
			||||||
@@ -37,7 +39,10 @@ static av_cold int ra144_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    RA144Context *ractx = avctx->priv_data;
 | 
					    RA144Context *ractx = avctx->priv_data;
 | 
				
			||||||
    ff_lpc_end(&ractx->lpc_ctx);
 | 
					    ff_lpc_end(&ractx->lpc_ctx);
 | 
				
			||||||
 | 
					    ff_af_queue_close(&ractx->afq);
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,11 +69,15 @@ static av_cold int ra144_encode_init(AVCodecContext * avctx)
 | 
				
			|||||||
    if (ret < 0)
 | 
					    if (ret < 0)
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ff_af_queue_init(avctx, &ractx->afq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame = avcodec_alloc_frame();
 | 
					    avctx->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame) {
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -429,8 +438,8 @@ static void ra144_encode_subblock(RA144Context *ractx,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
					static int ra144_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                              int buf_size, void *data)
 | 
					                              const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static const uint8_t sizes[LPC_ORDER] = {64, 32, 32, 16, 16, 8, 8, 8, 8, 4};
 | 
					    static const uint8_t sizes[LPC_ORDER] = {64, 32, 32, 16, 16, 8, 8, 8, 8, 4};
 | 
				
			||||||
    static const uint8_t bit_sizes[LPC_ORDER] = {6, 5, 5, 4, 4, 3, 3, 3, 3, 2};
 | 
					    static const uint8_t bit_sizes[LPC_ORDER] = {6, 5, 5, 4, 4, 3, 3, 3, 3, 2};
 | 
				
			||||||
@@ -442,16 +451,16 @@ static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
    int16_t block_coefs[NBLOCKS][LPC_ORDER];
 | 
					    int16_t block_coefs[NBLOCKS][LPC_ORDER];
 | 
				
			||||||
    int lpc_refl[LPC_ORDER];    /**< reflection coefficients of the frame */
 | 
					    int lpc_refl[LPC_ORDER];    /**< reflection coefficients of the frame */
 | 
				
			||||||
    unsigned int refl_rms[NBLOCKS]; /**< RMS of the reflection coefficients */
 | 
					    unsigned int refl_rms[NBLOCKS]; /**< RMS of the reflection coefficients */
 | 
				
			||||||
    const int16_t *samples = data;
 | 
					    const int16_t *samples = frame ? (const int16_t *)frame->data[0] : NULL;
 | 
				
			||||||
    int energy = 0;
 | 
					    int energy = 0;
 | 
				
			||||||
    int i, idx;
 | 
					    int i, idx, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ractx->last_frame)
 | 
					    if (ractx->last_frame)
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (buf_size < FRAMESIZE) {
 | 
					    if ((ret = ff_alloc_packet(avpkt, FRAMESIZE))) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "output buffer too small\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        return 0;
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -465,9 +474,9 @@ static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
        lpc_data[i] = ractx->curr_block[BLOCKSIZE + BLOCKSIZE / 2 + i];
 | 
					        lpc_data[i] = ractx->curr_block[BLOCKSIZE + BLOCKSIZE / 2 + i];
 | 
				
			||||||
        energy += (lpc_data[i] * lpc_data[i]) >> 4;
 | 
					        energy += (lpc_data[i] * lpc_data[i]) >> 4;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (data) {
 | 
					    if (frame) {
 | 
				
			||||||
        int j;
 | 
					        int j;
 | 
				
			||||||
        for (j = 0; j < avctx->frame_size && i < NBLOCKS * BLOCKSIZE; i++, j++) {
 | 
					        for (j = 0; j < frame->nb_samples && i < NBLOCKS * BLOCKSIZE; i++, j++) {
 | 
				
			||||||
            lpc_data[i] = samples[j] >> 2;
 | 
					            lpc_data[i] = samples[j] >> 2;
 | 
				
			||||||
            energy += (lpc_data[i] * lpc_data[i]) >> 4;
 | 
					            energy += (lpc_data[i] * lpc_data[i]) >> 4;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -499,7 +508,7 @@ static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
            memset(lpc_refl, 0, sizeof(lpc_refl));
 | 
					            memset(lpc_refl, 0, sizeof(lpc_refl));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    init_put_bits(&pb, frame, buf_size);
 | 
					    init_put_bits(&pb, avpkt->data, avpkt->size);
 | 
				
			||||||
    for (i = 0; i < LPC_ORDER; i++) {
 | 
					    for (i = 0; i < LPC_ORDER; i++) {
 | 
				
			||||||
        idx = quantize(lpc_refl[i], ff_lpc_refl_cb[i], sizes[i]);
 | 
					        idx = quantize(lpc_refl[i], ff_lpc_refl_cb[i], sizes[i]);
 | 
				
			||||||
        put_bits(&pb, bit_sizes[i], idx);
 | 
					        put_bits(&pb, bit_sizes[i], idx);
 | 
				
			||||||
@@ -525,15 +534,24 @@ static int ra144_encode_frame(AVCodecContext *avctx, uint8_t *frame,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* copy input samples to current block for processing in next call */
 | 
					    /* copy input samples to current block for processing in next call */
 | 
				
			||||||
    i = 0;
 | 
					    i = 0;
 | 
				
			||||||
    if (data) {
 | 
					    if (frame) {
 | 
				
			||||||
        for (; i < avctx->frame_size; i++)
 | 
					        for (; i < frame->nb_samples; i++)
 | 
				
			||||||
            ractx->curr_block[i] = samples[i] >> 2;
 | 
					            ractx->curr_block[i] = samples[i] >> 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ((ret = ff_af_queue_add(&ractx->afq, frame) < 0))
 | 
				
			||||||
 | 
					            return ret;
 | 
				
			||||||
    } else
 | 
					    } else
 | 
				
			||||||
        ractx->last_frame = 1;
 | 
					        ractx->last_frame = 1;
 | 
				
			||||||
    memset(&ractx->curr_block[i], 0,
 | 
					    memset(&ractx->curr_block[i], 0,
 | 
				
			||||||
           (NBLOCKS * BLOCKSIZE - i) * sizeof(*ractx->curr_block));
 | 
					           (NBLOCKS * BLOCKSIZE - i) * sizeof(*ractx->curr_block));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return FRAMESIZE;
 | 
					    /* Get the next frame pts/duration */
 | 
				
			||||||
 | 
					    ff_af_queue_remove(&ractx->afq, avctx->frame_size, &avpkt->pts,
 | 
				
			||||||
 | 
					                       &avpkt->duration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = FRAMESIZE;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -543,7 +561,7 @@ AVCodec ff_ra_144_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_RA_144,
 | 
					    .id             = CODEC_ID_RA_144,
 | 
				
			||||||
    .priv_data_size = sizeof(RA144Context),
 | 
					    .priv_data_size = sizeof(RA144Context),
 | 
				
			||||||
    .init           = ra144_encode_init,
 | 
					    .init           = ra144_encode_init,
 | 
				
			||||||
    .encode         = ra144_encode_frame,
 | 
					    .encode2        = ra144_encode_frame,
 | 
				
			||||||
    .close          = ra144_encode_close,
 | 
					    .close          = ra144_encode_close,
 | 
				
			||||||
    .capabilities   = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME,
 | 
					    .capabilities   = CODEC_CAP_DELAY | CODEC_CAP_SMALL_LAST_FRAME,
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@
 | 
				
			|||||||
#include "libavutil/intmath.h"
 | 
					#include "libavutil/intmath.h"
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "bytestream.h"
 | 
					#include "bytestream.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ROQ_FRAME_SIZE           735
 | 
					#define ROQ_FRAME_SIZE           735
 | 
				
			||||||
#define ROQ_HEADER_SIZE   8
 | 
					#define ROQ_HEADER_SIZE   8
 | 
				
			||||||
@@ -37,6 +38,7 @@ typedef struct
 | 
				
			|||||||
    int input_frames;
 | 
					    int input_frames;
 | 
				
			||||||
    int buffered_samples;
 | 
					    int buffered_samples;
 | 
				
			||||||
    int16_t *frame_buffer;
 | 
					    int16_t *frame_buffer;
 | 
				
			||||||
 | 
					    int64_t first_pts;
 | 
				
			||||||
} ROQDPCMContext;
 | 
					} ROQDPCMContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,7 +46,9 @@ static av_cold int roq_dpcm_encode_close(AVCodecContext *avctx)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ROQDPCMContext *context = avctx->priv_data;
 | 
					    ROQDPCMContext *context = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avctx->coded_frame);
 | 
					    av_freep(&avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&context->frame_buffer);
 | 
					    av_freep(&context->frame_buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -77,11 +81,13 @@ static av_cold int roq_dpcm_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    context->lastSample[0] = context->lastSample[1] = 0;
 | 
					    context->lastSample[0] = context->lastSample[1] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avctx->coded_frame= avcodec_alloc_frame();
 | 
					    avctx->coded_frame= avcodec_alloc_frame();
 | 
				
			||||||
    if (!avctx->coded_frame) {
 | 
					    if (!avctx->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -129,23 +135,25 @@ static unsigned char dpcm_predict(short *previous, short current)
 | 
				
			|||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int roq_dpcm_encode_frame(AVCodecContext *avctx,
 | 
					static int roq_dpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                unsigned char *frame, int buf_size, void *data)
 | 
					                                 const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i, stereo, data_size;
 | 
					    int i, stereo, data_size, ret;
 | 
				
			||||||
    const int16_t *in = data;
 | 
					    const int16_t *in = frame ? (const int16_t *)frame->data[0] : NULL;
 | 
				
			||||||
    uint8_t *out = frame;
 | 
					    uint8_t *out;
 | 
				
			||||||
    ROQDPCMContext *context = avctx->priv_data;
 | 
					    ROQDPCMContext *context = avctx->priv_data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    stereo = (avctx->channels == 2);
 | 
					    stereo = (avctx->channels == 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!data && context->input_frames >= 8)
 | 
					    if (!in && context->input_frames >= 8)
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (data && context->input_frames < 8) {
 | 
					    if (in && context->input_frames < 8) {
 | 
				
			||||||
        memcpy(&context->frame_buffer[context->buffered_samples * avctx->channels],
 | 
					        memcpy(&context->frame_buffer[context->buffered_samples * avctx->channels],
 | 
				
			||||||
               in, avctx->frame_size * avctx->channels * sizeof(*in));
 | 
					               in, avctx->frame_size * avctx->channels * sizeof(*in));
 | 
				
			||||||
        context->buffered_samples += avctx->frame_size;
 | 
					        context->buffered_samples += avctx->frame_size;
 | 
				
			||||||
 | 
					        if (context->input_frames == 0)
 | 
				
			||||||
 | 
					            context->first_pts = frame->pts;
 | 
				
			||||||
        if (context->input_frames < 7) {
 | 
					        if (context->input_frames < 7) {
 | 
				
			||||||
            context->input_frames++;
 | 
					            context->input_frames++;
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
@@ -158,15 +166,16 @@ static int roq_dpcm_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
        context->lastSample[1] &= 0xFF00;
 | 
					        context->lastSample[1] &= 0xFF00;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (context->input_frames == 7 || !data)
 | 
					    if (context->input_frames == 7 || !in)
 | 
				
			||||||
        data_size = avctx->channels * context->buffered_samples;
 | 
					        data_size = avctx->channels * context->buffered_samples;
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        data_size = avctx->channels * avctx->frame_size;
 | 
					        data_size = avctx->channels * avctx->frame_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (buf_size < ROQ_HEADER_SIZE + data_size) {
 | 
					    if ((ret = ff_alloc_packet(avpkt, ROQ_HEADER_SIZE + data_size))) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "output buffer is too small\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    out = avpkt->data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bytestream_put_byte(&out, stereo ? 0x21 : 0x20);
 | 
					    bytestream_put_byte(&out, stereo ? 0x21 : 0x20);
 | 
				
			||||||
    bytestream_put_byte(&out, 0x10);
 | 
					    bytestream_put_byte(&out, 0x10);
 | 
				
			||||||
@@ -182,12 +191,15 @@ static int roq_dpcm_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    for (i = 0; i < data_size; i++)
 | 
					    for (i = 0; i < data_size; i++)
 | 
				
			||||||
        *out++ = dpcm_predict(&context->lastSample[i & 1], *in++);
 | 
					        *out++ = dpcm_predict(&context->lastSample[i & 1], *in++);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->pts      = context->input_frames <= 7 ? context->first_pts : frame->pts;
 | 
				
			||||||
 | 
					    avpkt->duration = data_size / avctx->channels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context->input_frames++;
 | 
					    context->input_frames++;
 | 
				
			||||||
    if (!data)
 | 
					    if (!in)
 | 
				
			||||||
        context->input_frames = FFMAX(context->input_frames, 8);
 | 
					        context->input_frames = FFMAX(context->input_frames, 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Return the result size */
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
    return ROQ_HEADER_SIZE + data_size;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_roq_dpcm_encoder = {
 | 
					AVCodec ff_roq_dpcm_encoder = {
 | 
				
			||||||
@@ -196,7 +208,7 @@ AVCodec ff_roq_dpcm_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_ROQ_DPCM,
 | 
					    .id             = CODEC_ID_ROQ_DPCM,
 | 
				
			||||||
    .priv_data_size = sizeof(ROQDPCMContext),
 | 
					    .priv_data_size = sizeof(ROQDPCMContext),
 | 
				
			||||||
    .init           = roq_dpcm_encode_init,
 | 
					    .init           = roq_dpcm_encode_init,
 | 
				
			||||||
    .encode         = roq_dpcm_encode_frame,
 | 
					    .encode2        = roq_dpcm_encode_frame,
 | 
				
			||||||
    .close          = roq_dpcm_encode_close,
 | 
					    .close          = roq_dpcm_encode_close,
 | 
				
			||||||
    .capabilities   = CODEC_CAP_DELAY,
 | 
					    .capabilities   = CODEC_CAP_DELAY,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@
 | 
				
			|||||||
#include <float.h>
 | 
					#include <float.h>
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
#include "dsputil.h"
 | 
					#include "dsputil.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "fft.h"
 | 
					#include "fft.h"
 | 
				
			||||||
#include "vorbis.h"
 | 
					#include "vorbis.h"
 | 
				
			||||||
#include "vorbis_enc_data.h"
 | 
					#include "vorbis_enc_data.h"
 | 
				
			||||||
@@ -123,7 +124,7 @@ typedef struct {
 | 
				
			|||||||
    int nmodes;
 | 
					    int nmodes;
 | 
				
			||||||
    vorbis_enc_mode *modes;
 | 
					    vorbis_enc_mode *modes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    int64_t sample_count;
 | 
					    int64_t next_pts;
 | 
				
			||||||
} vorbis_enc_context;
 | 
					} vorbis_enc_context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_CHANNELS     2
 | 
					#define MAX_CHANNELS     2
 | 
				
			||||||
@@ -1014,23 +1015,27 @@ static int apply_window_and_mdct(vorbis_enc_context *venc, const signed short *a
 | 
				
			|||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int vorbis_encode_frame(AVCodecContext *avccontext,
 | 
					static int vorbis_encode_frame(AVCodecContext *avccontext, AVPacket *avpkt,
 | 
				
			||||||
                               unsigned char *packets,
 | 
					                               const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
                               int buf_size, void *data)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    vorbis_enc_context *venc = avccontext->priv_data;
 | 
					    vorbis_enc_context *venc = avccontext->priv_data;
 | 
				
			||||||
    const signed short *audio = data;
 | 
					    const int16_t *audio = frame ? (const int16_t *)frame->data[0] : NULL;
 | 
				
			||||||
    int samples = data ? avccontext->frame_size : 0;
 | 
					    int samples = frame ? frame->nb_samples : 0;
 | 
				
			||||||
    vorbis_enc_mode *mode;
 | 
					    vorbis_enc_mode *mode;
 | 
				
			||||||
    vorbis_enc_mapping *mapping;
 | 
					    vorbis_enc_mapping *mapping;
 | 
				
			||||||
    PutBitContext pb;
 | 
					    PutBitContext pb;
 | 
				
			||||||
    int i;
 | 
					    int i, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!apply_window_and_mdct(venc, audio, samples))
 | 
					    if (!apply_window_and_mdct(venc, audio, samples))
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    samples = 1 << (venc->log2_blocksize[0] - 1);
 | 
					    samples = 1 << (venc->log2_blocksize[0] - 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_put_bits(&pb, packets, buf_size);
 | 
					    if ((ret = ff_alloc_packet(avpkt, 8192))) {
 | 
				
			||||||
 | 
					        av_log(avccontext, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init_put_bits(&pb, avpkt->data, avpkt->size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pb.size_in_bits - put_bits_count(&pb) < 1 + ilog(venc->nmodes - 1)) {
 | 
					    if (pb.size_in_bits - put_bits_count(&pb) < 1 + ilog(venc->nmodes - 1)) {
 | 
				
			||||||
        av_log(avccontext, AV_LOG_ERROR, "output buffer is too small\n");
 | 
					        av_log(avccontext, AV_LOG_ERROR, "output buffer is too small\n");
 | 
				
			||||||
@@ -1081,10 +1086,20 @@ static int vorbis_encode_frame(AVCodecContext *avccontext,
 | 
				
			|||||||
        return AVERROR(EINVAL);
 | 
					        return AVERROR(EINVAL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    avccontext->coded_frame->pts = venc->sample_count;
 | 
					 | 
				
			||||||
    venc->sample_count += avccontext->frame_size;
 | 
					 | 
				
			||||||
    flush_put_bits(&pb);
 | 
					    flush_put_bits(&pb);
 | 
				
			||||||
    return put_bits_count(&pb) >> 3;
 | 
					    avpkt->size = put_bits_count(&pb) >> 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->duration = ff_samples_to_time_base(avccontext, avccontext->frame_size);
 | 
				
			||||||
 | 
					    if (frame)
 | 
				
			||||||
 | 
					        if (frame->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					            avpkt->pts = ff_samples_to_time_base(avccontext, frame->pts);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        avpkt->pts = venc->next_pts;
 | 
				
			||||||
 | 
					    if (avpkt->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					        venc->next_pts = avpkt->pts + avpkt->duration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1142,7 +1157,9 @@ static av_cold int vorbis_encode_close(AVCodecContext *avccontext)
 | 
				
			|||||||
    ff_mdct_end(&venc->mdct[0]);
 | 
					    ff_mdct_end(&venc->mdct[0]);
 | 
				
			||||||
    ff_mdct_end(&venc->mdct[1]);
 | 
					    ff_mdct_end(&venc->mdct[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    av_freep(&avccontext->coded_frame);
 | 
					    av_freep(&avccontext->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    av_freep(&avccontext->extradata);
 | 
					    av_freep(&avccontext->extradata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0 ;
 | 
					    return 0 ;
 | 
				
			||||||
@@ -1173,11 +1190,13 @@ static av_cold int vorbis_encode_init(AVCodecContext *avccontext)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    avccontext->frame_size = 1 << (venc->log2_blocksize[0] - 1);
 | 
					    avccontext->frame_size = 1 << (venc->log2_blocksize[0] - 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
    avccontext->coded_frame = avcodec_alloc_frame();
 | 
					    avccontext->coded_frame = avcodec_alloc_frame();
 | 
				
			||||||
    if (!avccontext->coded_frame) {
 | 
					    if (!avccontext->coded_frame) {
 | 
				
			||||||
        ret = AVERROR(ENOMEM);
 | 
					        ret = AVERROR(ENOMEM);
 | 
				
			||||||
        goto error;
 | 
					        goto error;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
@@ -1191,7 +1210,7 @@ AVCodec ff_vorbis_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_VORBIS,
 | 
					    .id             = CODEC_ID_VORBIS,
 | 
				
			||||||
    .priv_data_size = sizeof(vorbis_enc_context),
 | 
					    .priv_data_size = sizeof(vorbis_enc_context),
 | 
				
			||||||
    .init           = vorbis_encode_init,
 | 
					    .init           = vorbis_encode_init,
 | 
				
			||||||
    .encode         = vorbis_encode_frame,
 | 
					    .encode2        = vorbis_encode_frame,
 | 
				
			||||||
    .close          = vorbis_encode_close,
 | 
					    .close          = vorbis_encode_close,
 | 
				
			||||||
    .capabilities= CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL,
 | 
					    .capabilities= CODEC_CAP_DELAY | CODEC_CAP_EXPERIMENTAL,
 | 
				
			||||||
    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "avcodec.h"
 | 
					#include "avcodec.h"
 | 
				
			||||||
 | 
					#include "internal.h"
 | 
				
			||||||
#include "wma.h"
 | 
					#include "wma.h"
 | 
				
			||||||
#include "libavutil/avassert.h"
 | 
					#include "libavutil/avassert.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,7 +88,12 @@ static int encode_init(AVCodecContext * avctx){
 | 
				
			|||||||
    avctx->bit_rate    = avctx->block_align * 8LL * avctx->sample_rate /
 | 
					    avctx->bit_rate    = avctx->block_align * 8LL * avctx->sample_rate /
 | 
				
			||||||
                         s->frame_len;
 | 
					                         s->frame_len;
 | 
				
			||||||
//av_log(NULL, AV_LOG_ERROR, "%d %d %d %d\n", s->block_align, avctx->bit_rate, s->frame_len, avctx->sample_rate);
 | 
					//av_log(NULL, AV_LOG_ERROR, "%d %d %d %d\n", s->block_align, avctx->bit_rate, s->frame_len, avctx->sample_rate);
 | 
				
			||||||
    avctx->frame_size= s->frame_len;
 | 
					    avctx->frame_size = avctx->delay = s->frame_len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_OLD_ENCODE_AUDIO
 | 
				
			||||||
 | 
					    avctx->coded_frame = &s->frame;
 | 
				
			||||||
 | 
					    avcodec_get_frame_defaults(avctx->coded_frame);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -341,16 +347,17 @@ static int encode_frame(WMACodecContext *s, float (*src_coefs)[BLOCK_MAX_SIZE],
 | 
				
			|||||||
    return put_bits_count(&s->pb)/8 - s->block_align;
 | 
					    return put_bits_count(&s->pb)/8 - s->block_align;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int encode_superframe(AVCodecContext *avctx,
 | 
					static int encode_superframe(AVCodecContext *avctx, AVPacket *avpkt,
 | 
				
			||||||
                            unsigned char *buf, int buf_size, void *data){
 | 
					                             const AVFrame *frame, int *got_packet_ptr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    WMACodecContext *s = avctx->priv_data;
 | 
					    WMACodecContext *s = avctx->priv_data;
 | 
				
			||||||
    const short *samples = data;
 | 
					    const int16_t *samples = (const int16_t *)frame->data[0];
 | 
				
			||||||
    int i, total_gain;
 | 
					    int i, total_gain, ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->block_len_bits= s->frame_len_bits; //required by non variable block len
 | 
					    s->block_len_bits= s->frame_len_bits; //required by non variable block len
 | 
				
			||||||
    s->block_len = 1 << s->block_len_bits;
 | 
					    s->block_len = 1 << s->block_len_bits;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    apply_window_and_mdct(avctx, samples, avctx->frame_size);
 | 
					    apply_window_and_mdct(avctx, samples, frame->nb_samples);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->ms_stereo) {
 | 
					    if (s->ms_stereo) {
 | 
				
			||||||
        float a, b;
 | 
					        float a, b;
 | 
				
			||||||
@@ -364,24 +371,25 @@ static int encode_superframe(AVCodecContext *avctx,
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (buf_size < 2 * MAX_CODED_SUPERFRAME_SIZE) {
 | 
					    if ((ret = ff_alloc_packet(avpkt, 2 * MAX_CODED_SUPERFRAME_SIZE))) {
 | 
				
			||||||
        av_log(avctx, AV_LOG_ERROR, "output buffer size is too small\n");
 | 
					        av_log(avctx, AV_LOG_ERROR, "Error getting output packet\n");
 | 
				
			||||||
        return AVERROR(EINVAL);
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if 1
 | 
					#if 1
 | 
				
			||||||
    total_gain= 128;
 | 
					    total_gain= 128;
 | 
				
			||||||
    for(i=64; i; i>>=1){
 | 
					    for(i=64; i; i>>=1){
 | 
				
			||||||
        int error= encode_frame(s, s->coefs, buf, buf_size, total_gain-i);
 | 
					        int error = encode_frame(s, s->coefs, avpkt->data, avpkt->size,
 | 
				
			||||||
 | 
					                                 total_gain - i);
 | 
				
			||||||
        if(error<0)
 | 
					        if(error<0)
 | 
				
			||||||
            total_gain-= i;
 | 
					            total_gain-= i;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    total_gain= 90;
 | 
					    total_gain= 90;
 | 
				
			||||||
    best= encode_frame(s, s->coefs, buf, buf_size, total_gain);
 | 
					    best = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain);
 | 
				
			||||||
    for(i=32; i; i>>=1){
 | 
					    for(i=32; i; i>>=1){
 | 
				
			||||||
        int scoreL= encode_frame(s, s->coefs, buf, buf_size, total_gain-i);
 | 
					        int scoreL = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain - i);
 | 
				
			||||||
        int scoreR= encode_frame(s, s->coefs, buf, buf_size, total_gain+i);
 | 
					        int scoreR = encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain + i);
 | 
				
			||||||
        av_log(NULL, AV_LOG_ERROR, "%d %d %d (%d)\n", scoreL, best, scoreR, total_gain);
 | 
					        av_log(NULL, AV_LOG_ERROR, "%d %d %d (%d)\n", scoreL, best, scoreR, total_gain);
 | 
				
			||||||
        if(scoreL < FFMIN(best, scoreR)){
 | 
					        if(scoreL < FFMIN(best, scoreR)){
 | 
				
			||||||
            best = scoreL;
 | 
					            best = scoreL;
 | 
				
			||||||
@@ -393,7 +401,7 @@ static int encode_superframe(AVCodecContext *avctx,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    encode_frame(s, s->coefs, buf, buf_size, total_gain);
 | 
					    encode_frame(s, s->coefs, avpkt->data, avpkt->size, total_gain);
 | 
				
			||||||
    av_assert0((put_bits_count(&s->pb) & 7) == 0);
 | 
					    av_assert0((put_bits_count(&s->pb) & 7) == 0);
 | 
				
			||||||
    i= s->block_align - (put_bits_count(&s->pb)+7)/8;
 | 
					    i= s->block_align - (put_bits_count(&s->pb)+7)/8;
 | 
				
			||||||
    av_assert0(i>=0);
 | 
					    av_assert0(i>=0);
 | 
				
			||||||
@@ -402,7 +410,13 @@ static int encode_superframe(AVCodecContext *avctx,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    flush_put_bits(&s->pb);
 | 
					    flush_put_bits(&s->pb);
 | 
				
			||||||
    av_assert0(put_bits_ptr(&s->pb) - s->pb.buf == s->block_align);
 | 
					    av_assert0(put_bits_ptr(&s->pb) - s->pb.buf == s->block_align);
 | 
				
			||||||
    return s->block_align;
 | 
					
 | 
				
			||||||
 | 
					    if (frame->pts != AV_NOPTS_VALUE)
 | 
				
			||||||
 | 
					        avpkt->pts = frame->pts - ff_samples_to_time_base(avctx, avctx->delay);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    avpkt->size = s->block_align;
 | 
				
			||||||
 | 
					    *got_packet_ptr = 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AVCodec ff_wmav1_encoder = {
 | 
					AVCodec ff_wmav1_encoder = {
 | 
				
			||||||
@@ -411,7 +425,7 @@ AVCodec ff_wmav1_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_WMAV1,
 | 
					    .id             = CODEC_ID_WMAV1,
 | 
				
			||||||
    .priv_data_size = sizeof(WMACodecContext),
 | 
					    .priv_data_size = sizeof(WMACodecContext),
 | 
				
			||||||
    .init           = encode_init,
 | 
					    .init           = encode_init,
 | 
				
			||||||
    .encode         = encode_superframe,
 | 
					    .encode2        = encode_superframe,
 | 
				
			||||||
    .close          = ff_wma_end,
 | 
					    .close          = ff_wma_end,
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name      = NULL_IF_CONFIG_SMALL("Windows Media Audio 1"),
 | 
					    .long_name      = NULL_IF_CONFIG_SMALL("Windows Media Audio 1"),
 | 
				
			||||||
@@ -423,7 +437,7 @@ AVCodec ff_wmav2_encoder = {
 | 
				
			|||||||
    .id             = CODEC_ID_WMAV2,
 | 
					    .id             = CODEC_ID_WMAV2,
 | 
				
			||||||
    .priv_data_size = sizeof(WMACodecContext),
 | 
					    .priv_data_size = sizeof(WMACodecContext),
 | 
				
			||||||
    .init           = encode_init,
 | 
					    .init           = encode_init,
 | 
				
			||||||
    .encode         = encode_superframe,
 | 
					    .encode2        = encode_superframe,
 | 
				
			||||||
    .close          = ff_wma_end,
 | 
					    .close          = ff_wma_end,
 | 
				
			||||||
    .sample_fmts    = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
					    .sample_fmts    = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name      = NULL_IF_CONFIG_SMALL("Windows Media Audio 2"),
 | 
					    .long_name      = NULL_IF_CONFIG_SMALL("Windows Media Audio 2"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
d1a10c4d35f752f60798114a156be3a8 *./tests/data/acodec/g722.wav
 | 
					e4d5ae038f29659c03fcf68818f7be6c *./tests/data/acodec/g722.wav
 | 
				
			||||||
48053 ./tests/data/acodec/g722.wav
 | 
					48053 ./tests/data/acodec/g722.wav
 | 
				
			||||||
8dafe5b74ccd5f08fed2fb2a69c5475f *./tests/data/g722.acodec.out.wav
 | 
					8dafe5b74ccd5f08fed2fb2a69c5475f *./tests/data/g722.acodec.out.wav
 | 
				
			||||||
stddev: 8939.47 PSNR: 17.30 MAXDIFF:40370 bytes:   191980/  1058400
 | 
					stddev: 8939.47 PSNR: 17.30 MAXDIFF:40370 bytes:   191980/  1058400
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
3d410176ebf9ffdf99d2738922cef260 *./tests/data/lavf/lavf.asf
 | 
					e60b298a4db9bcedaabaaee9f90d2a42 *./tests/data/lavf/lavf.asf
 | 
				
			||||||
333489 ./tests/data/lavf/lavf.asf
 | 
					333489 ./tests/data/lavf/lavf.asf
 | 
				
			||||||
./tests/data/lavf/lavf.asf CRC=0x9f5ab3e6
 | 
					./tests/data/lavf/lavf.asf CRC=0x9f5ab3e6
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
8ce2ea9a73a1187647df7bf3c8e1b8fd *./tests/data/lavf/lavf.ffm
 | 
					793e977bc8b7f0d86f785a9062c4d978 *./tests/data/lavf/lavf.ffm
 | 
				
			||||||
376832 ./tests/data/lavf/lavf.ffm
 | 
					376832 ./tests/data/lavf/lavf.ffm
 | 
				
			||||||
./tests/data/lavf/lavf.ffm CRC=0xf361ed74
 | 
					./tests/data/lavf/lavf.ffm CRC=0xf361ed74
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
f99ae18e1212ee184188243107a4b824 *./tests/data/lavf/lavf.mkv
 | 
					19c989b2a18dc352ede9754af5fcb5f2 *./tests/data/lavf/lavf.mkv
 | 
				
			||||||
320521 ./tests/data/lavf/lavf.mkv
 | 
					320521 ./tests/data/lavf/lavf.mkv
 | 
				
			||||||
./tests/data/lavf/lavf.mkv CRC=0x2a83e6b0
 | 
					./tests/data/lavf/lavf.mkv CRC=0x5b4ae6b0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
6103dbae73aec6c9bf05bbbc6ea35f89 *./tests/data/lavf/lavf.mpg
 | 
					855384c0cd3d0e3843d48698441c1384 *./tests/data/lavf/lavf.mpg
 | 
				
			||||||
372736 ./tests/data/lavf/lavf.mpg
 | 
					372736 ./tests/data/lavf/lavf.mpg
 | 
				
			||||||
./tests/data/lavf/lavf.mpg CRC=0xf361ed74
 | 
					./tests/data/lavf/lavf.mpg CRC=0xf361ed74
 | 
				
			||||||
91b42dd3352e21dd0dee57f6a7241ca2 *./tests/data/lavf/lavf.mpg
 | 
					612b686e2c035b18175ccefdacf9532c *./tests/data/lavf/lavf.mpg
 | 
				
			||||||
387072 ./tests/data/lavf/lavf.mpg
 | 
					387072 ./tests/data/lavf/lavf.mpg
 | 
				
			||||||
./tests/data/lavf/lavf.mpg CRC=0x3d6ddf56
 | 
					./tests/data/lavf/lavf.mpg CRC=0x3d6ddf56
 | 
				
			||||||
dd60652c2193670abffb8c2a123a820e *./tests/data/lavf/lavf.mpg
 | 
					fcf2c242b41373186d43de3d5c518e5a *./tests/data/lavf/lavf.mpg
 | 
				
			||||||
372736 ./tests/data/lavf/lavf.mpg
 | 
					372736 ./tests/data/lavf/lavf.mpg
 | 
				
			||||||
./tests/data/lavf/lavf.mpg CRC=0xf361ed74
 | 
					./tests/data/lavf/lavf.mpg CRC=0xf361ed74
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
2b0eebb5814825c9c4b385cbf8e5b0da *./tests/data/lavf/lavf.rm
 | 
					be73bce6e371fd543f93f668406f3430 *./tests/data/lavf/lavf.rm
 | 
				
			||||||
346714 ./tests/data/lavf/lavf.rm
 | 
					346714 ./tests/data/lavf/lavf.rm
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
34f95a300355d474767b436430eba15b *./tests/data/lavf/lavf.ts
 | 
					258a64dbc1724438e90560294be4be5c *./tests/data/lavf/lavf.ts
 | 
				
			||||||
  406644 ./tests/data/lavf/lavf.ts
 | 
					  406644 ./tests/data/lavf/lavf.ts
 | 
				
			||||||
./tests/data/lavf/lavf.ts CRC=0x133216c1
 | 
					./tests/data/lavf/lavf.ts CRC=0x133216c1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
7bd312f32538a14f248c2dff85394118 *./tests/data/lavf/lavf.wtv
 | 
					de9c3be54bafeba1b7f9618609bd0f62 *./tests/data/lavf/lavf.wtv
 | 
				
			||||||
413696 ./tests/data/lavf/lavf.wtv
 | 
					413696 ./tests/data/lavf/lavf.wtv
 | 
				
			||||||
./tests/data/lavf/lavf.wtv CRC=0x133216c1
 | 
					./tests/data/lavf/lavf.wtv CRC=0x133216c1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,53 +1,53 @@
 | 
				
			|||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-1.000000
 | 
					ret: 0         st:-1 flags:0  ts:-1.000000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.894167
 | 
					ret: 0         st:-1 flags:1  ts: 1.894167
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.788000
 | 
					ret: 0         st: 0 flags:0  ts: 0.788000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.317000
 | 
					ret: 0         st: 0 flags:1  ts:-0.317000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.577000
 | 
					ret: 0         st: 1 flags:0  ts: 2.577000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 330289 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.471000
 | 
					ret: 0         st: 1 flags:1  ts: 1.471000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 330289 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.459000 pts: 0.459000 pos: 147889 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 2.153000
 | 
					ret: 0         st: 0 flags:0  ts: 2.153000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 1.048000
 | 
					ret: 0         st: 0 flags:1  ts: 1.048000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058000
 | 
					ret: 0         st: 1 flags:0  ts:-0.058000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:  29489 size:   208
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 2.836000
 | 
					ret: 0         st: 1 flags:1  ts: 2.836000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 330289 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 1.730004
 | 
					ret: 0         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.459000 pts: 0.459000 pos: 147889 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.482000
 | 
					ret: 0         st: 0 flags:0  ts:-0.482000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 2.413000
 | 
					ret: 0         st: 0 flags:1  ts: 2.413000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 1.307000
 | 
					ret: 0         st: 1 flags:0  ts: 1.307000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 330289 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 0.201000
 | 
					ret: 0         st: 1 flags:1  ts: 0.201000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.183000 pts: 0.183000 pos:  71089 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.198000 pts: 0.198000 pos:  74289 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.989173
 | 
					ret: 0         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.883000
 | 
					ret: 0         st: 0 flags:0  ts: 0.883000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.930000 pts: 0.930000 pos: 301489 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.222000
 | 
					ret: 0         st: 0 flags:1  ts:-0.222000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.672000
 | 
					ret: 0         st: 1 flags:0  ts: 2.672000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 330289 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.566000
 | 
					ret: 0         st: 1 flags:1  ts: 1.566000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.982000 pts: 0.982000 pos: 330289 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.459000 pts: 0.459000 pos: 147889 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    689 size: 28487
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    689 size:   208
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,52 +2,52 @@ ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			|||||||
ret: 0         st:-1 flags:0  ts:-1.000000
 | 
					ret: 0         st:-1 flags:0  ts:-1.000000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.894167
 | 
					ret: 0         st:-1 flags:1  ts: 1.894167
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.788334
 | 
					ret: 0         st: 0 flags:0  ts: 0.788334
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.809796 pts: 0.809796 pos: 327680 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.825011 pts: 0.825011 pos: 327680 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.317499
 | 
					ret: 0         st: 0 flags:1  ts:-0.317499
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.576668
 | 
					ret: 0         st: 1 flags:0  ts: 2.576668
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.470835
 | 
					ret: 0         st: 1 flags:1  ts: 1.470835
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.365714 pts: 0.365714 pos: 163840 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.380930 pts: 0.380930 pos: 167936 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 2.153336
 | 
					ret: 0         st: 0 flags:0  ts: 2.153336
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 1.047503
 | 
					ret: 0         st: 0 flags:1  ts: 1.047503
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058330
 | 
					ret: 0         st: 1 flags:0  ts:-0.058330
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 2.835837
 | 
					ret: 0         st: 1 flags:1  ts: 2.835837
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 1.730004
 | 
					ret: 0         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.653061 pts: 0.653061 pos: 274432 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.642154 pts: 0.642154 pos: 274432 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.481662
 | 
					ret: 0         st: 0 flags:0  ts:-0.481662
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 2.412505
 | 
					ret: 0         st: 0 flags:1  ts: 2.412505
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 1.306672
 | 
					ret: 0         st: 1 flags:0  ts: 1.306672
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 0.200839
 | 
					ret: 0         st: 1 flags:1  ts: 0.200839
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.208980 pts: 0.208980 pos: 114688 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.224195 pts: 0.224195 pos: 114688 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.989173
 | 
					ret: 0         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.883340
 | 
					ret: 0         st: 0 flags:0  ts: 0.883340
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.888163 pts: 0.888163 pos: 352256 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.877256 pts: 0.877256 pos: 339968 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.222493
 | 
					ret: 0         st: 0 flags:1  ts:-0.222493
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.671674
 | 
					ret: 0         st: 1 flags:0  ts: 2.671674
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.565841
 | 
					ret: 0         st: 1 flags:1  ts: 1.565841
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.940408 pts: 0.940408 pos: 376832 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.929501 pts: 0.929501 pos: 376832 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.496327 pts: 0.496327 pos: 221184 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.485420 pts: 0.485420 pos: 221184 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
					ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   8192 size: 24664
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,48 +1,48 @@
 | 
				
			|||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts:-0.011000 pts:-0.011000 pos:    555 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-1.000000
 | 
					ret: 0         st:-1 flags:0  ts:-1.000000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.894167
 | 
					ret: 0         st:-1 flags:1  ts: 1.894167
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 291977 size: 27834
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292193 size: 27834
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.788000
 | 
					ret: 0         st: 0 flags:0  ts: 0.788000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 291977 size: 27834
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292193 size: 27834
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.317000
 | 
					ret: 0         st: 0 flags:1  ts:-0.317000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
ret:-1         st: 1 flags:0  ts: 2.577000
 | 
					ret:-1         st: 1 flags:0  ts: 2.577000
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.471000
 | 
					ret: 0         st: 1 flags:1  ts: 1.471000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.019000 pts: 1.019000 pos: 320250 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 1.008000 pts: 1.008000 pos: 320250 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146746 size: 27925
 | 
					ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146746 size: 27925
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
ret:-1         st: 0 flags:0  ts: 2.153000
 | 
					ret:-1         st: 0 flags:0  ts: 2.153000
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 1.048000
 | 
					ret: 0         st: 0 flags:1  ts: 1.048000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 291977 size: 27834
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292193 size: 27834
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058000
 | 
					ret: 0         st: 1 flags:0  ts:-0.058000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.015000 pts: 0.015000 pos:    555 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 2.836000
 | 
					ret: 0         st: 1 flags:1  ts: 2.836000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.019000 pts: 1.019000 pos: 320250 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 1.008000 pts: 1.008000 pos: 320250 size:   209
 | 
				
			||||||
ret:-1         st:-1 flags:0  ts: 1.730004
 | 
					ret:-1         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146746 size: 27925
 | 
					ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146746 size: 27925
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.482000
 | 
					ret: 0         st: 0 flags:0  ts:-0.482000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 2.413000
 | 
					ret: 0         st: 0 flags:1  ts: 2.413000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 291977 size: 27834
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292193 size: 27834
 | 
				
			||||||
ret:-1         st: 1 flags:0  ts: 1.307000
 | 
					ret:-1         st: 1 flags:0  ts: 1.307000
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 0.201000
 | 
					ret: 0         st: 1 flags:1  ts: 0.201000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.183000 pts: 0.183000 pos:  72126 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.198000 pts: 0.198000 pos:    555 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.989173
 | 
					ret: 0         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 291977 size: 27834
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292193 size: 27834
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.883000
 | 
					ret: 0         st: 0 flags:0  ts: 0.883000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 291977 size: 27834
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 292193 size: 27834
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.222000
 | 
					ret: 0         st: 0 flags:1  ts:-0.222000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
ret:-1         st: 1 flags:0  ts: 2.672000
 | 
					ret:-1         st: 1 flags:0  ts: 2.672000
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.566000
 | 
					ret: 0         st: 1 flags:1  ts: 1.566000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.019000 pts: 1.019000 pos: 320250 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 1.008000 pts: 1.008000 pos: 320250 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146746 size: 27925
 | 
					ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 146746 size: 27925
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    556 size: 27837
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    555 size:   208
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,53 +1,53 @@
 | 
				
			|||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-1.000000
 | 
					ret: 0         st:-1 flags:0  ts:-1.000000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.894167
 | 
					ret: 0         st:-1 flags:1  ts: 1.894167
 | 
				
			||||||
ret: 0         st: 0 flags:0 dts: 1.880000 pts: 1.920000 pos: 327680 size: 12894
 | 
					ret: 0         st: 0 flags:0 dts: 1.880000 pts: 1.920000 pos: 327680 size: 12894
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.788333
 | 
					ret: 0         st: 0 flags:0  ts: 0.788333
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.317500
 | 
					ret: 0         st: 0 flags:1  ts:-0.317500
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.576667
 | 
					ret: 0         st: 1 flags:0  ts: 2.576667
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.018778 pts: 2.018778 pos: 370700 size:   235
 | 
					ret: 0         st: 1 flags:1 dts: 2.007867 pts: 2.007867 pos: 370700 size:   235
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.470833
 | 
					ret: 0         st: 1 flags:1  ts: 1.470833
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.261222 pts: 1.261222 pos: 145408 size:   261
 | 
					ret: 0         st: 1 flags:1 dts: 1.250322 pts: 1.250322 pos: 145408 size:   261
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 2.153333
 | 
					ret: 0         st: 0 flags:0  ts: 2.153333
 | 
				
			||||||
ret: 0         st: 0 flags:0 dts: 1.920000 pts: 1.960000 pos: 339968 size:   681
 | 
					ret: 0         st: 0 flags:0 dts: 1.920000 pts: 1.960000 pos: 339968 size:   681
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 1.047500
 | 
					ret: 0         st: 0 flags:1  ts: 1.047500
 | 
				
			||||||
ret: 0         st: 0 flags:0 dts: 1.040000 pts: 1.080000 pos:  40960 size: 16073
 | 
					ret: 0         st: 0 flags:0 dts: 1.040000 pts: 1.080000 pos:  40960 size: 16073
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058333
 | 
					ret: 0         st: 1 flags:0  ts:-0.058333
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 2.835833
 | 
					ret: 0         st: 1 flags:1  ts: 2.835833
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.018778 pts: 2.018778 pos: 370700 size:   235
 | 
					ret: 0         st: 1 flags:1 dts: 2.007867 pts: 2.007867 pos: 370700 size:   235
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 1.730004
 | 
					ret: 0         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
ret: 0         st: 0 flags:0 dts: 1.760000 pts: 1.800000 pos: 292864 size: 13170
 | 
					ret: 0         st: 0 flags:0 dts: 1.760000 pts: 1.800000 pos: 292864 size: 13170
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.481667
 | 
					ret: 0         st: 0 flags:0  ts:-0.481667
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 2.412500
 | 
					ret: 0         st: 0 flags:1  ts: 2.412500
 | 
				
			||||||
ret: 0         st: 0 flags:0 dts: 1.920000 pts: 1.960000 pos: 339968 size:   681
 | 
					ret: 0         st: 0 flags:0 dts: 1.920000 pts: 1.960000 pos: 339968 size:   681
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 1.306667
 | 
					ret: 0         st: 1 flags:0  ts: 1.306667
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.522444 pts: 1.522444 pos: 342028 size:   314
 | 
					ret: 0         st: 1 flags:1 dts: 1.511544 pts: 1.511544 pos: 342028 size:   314
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 0.200844
 | 
					ret: 0         st: 1 flags:1  ts: 0.200844
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.989173
 | 
					ret: 0         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
ret: 0         st: 0 flags:0 dts: 1.920000 pts: 1.960000 pos: 339968 size:   681
 | 
					ret: 0         st: 0 flags:0 dts: 1.920000 pts: 1.960000 pos: 339968 size:   681
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.883344
 | 
					ret: 0         st: 0 flags:0  ts: 0.883344
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.222489
 | 
					ret: 0         st: 0 flags:1  ts:-0.222489
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.671678
 | 
					ret: 0         st: 1 flags:0  ts: 2.671678
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.018778 pts: 2.018778 pos: 370700 size:   235
 | 
					ret: 0         st: 1 flags:1 dts: 2.007867 pts: 2.007867 pos: 370700 size:   235
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.565844
 | 
					ret: 0         st: 1 flags:1  ts: 1.565844
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.522444 pts: 1.522444 pos: 342028 size:   314
 | 
					ret: 0         st: 1 flags:1 dts: 1.511544 pts: 1.511544 pos: 342028 size:   314
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.000000 pts: 1.000000 pos:   2048 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 0.989089 pts: 0.989089 pos:   2048 size:   208
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    395 size:   278
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-1.000000
 | 
					ret: 0         st:-1 flags:0  ts:-1.000000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.894167
 | 
					ret: 0         st:-1 flags:1  ts: 1.894167
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.788000
 | 
					ret: 0         st: 0 flags:0  ts: 0.788000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.317000
 | 
					ret: 0         st: 0 flags:1  ts:-0.317000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.577000
 | 
					ret: 0         st: 1 flags:0  ts: 2.577000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
					ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.471000
 | 
					ret: 0         st: 1 flags:1  ts: 1.471000
 | 
				
			||||||
@@ -14,13 +14,13 @@ ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
				
			|||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158523 size: 31134
 | 
					ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158523 size: 31134
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 2.153000
 | 
					ret: 0         st: 0 flags:0  ts: 2.153000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 1.048000
 | 
					ret: 0         st: 0 flags:1  ts: 1.048000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058000
 | 
					ret: 0         st: 1 flags:0  ts:-0.058000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:  31491 size:   278
 | 
					ret: 0         st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos:    395 size:   278
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 2.836000
 | 
					ret: 0         st: 1 flags:1  ts: 2.836000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
					ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 1.730004
 | 
					ret: 0         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
@@ -28,7 +28,7 @@ ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			|||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158523 size: 31134
 | 
					ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158523 size: 31134
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.482000
 | 
					ret: 0         st: 0 flags:0  ts:-0.482000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 2.413000
 | 
					ret: 0         st: 0 flags:1  ts: 2.413000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 1.307000
 | 
					ret: 0         st: 1 flags:0  ts: 1.307000
 | 
				
			||||||
@@ -36,13 +36,13 @@ ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
				
			|||||||
ret: 0         st: 1 flags:1  ts: 0.201000
 | 
					ret: 0         st: 1 flags:1  ts: 0.201000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.174000 pts: 0.174000 pos:  78977 size:   278
 | 
					ret: 0         st: 1 flags:1 dts: 0.174000 pts: 0.174000 pos:  78977 size:   278
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.989173
 | 
					ret: 0         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.883000
 | 
					ret: 0         st: 0 flags:0  ts: 0.883000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
					ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314990 size: 31143
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.222000
 | 
					ret: 0         st: 0 flags:1  ts:-0.222000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.672000
 | 
					ret: 0         st: 1 flags:0  ts: 2.672000
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
					ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.566000
 | 
					ret: 0         st: 1 flags:1  ts: 1.566000
 | 
				
			||||||
@@ -50,4 +50,4 @@ ret: 0         st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346136 size:   278
 | 
				
			|||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158523 size: 31134
 | 
					ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158523 size: 31134
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    406 size: 31082
 | 
					ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    696 size: 31082
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,9 +8,9 @@ ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			|||||||
ret: 0         st: 0 flags:1  ts:-0.317500
 | 
					ret: 0         st: 0 flags:1  ts:-0.317500
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.576667
 | 
					ret: 0         st: 1 flags:0  ts: 2.576667
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 404012 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 2.120522 pts: 2.120522 pos: 404012 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.470833
 | 
					ret: 0         st: 1 flags:1  ts: 1.470833
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 1.389089 pts: 1.389089 pos: 159800 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
@@ -20,21 +20,21 @@ ret: 0         st: 0 flags:0 dts: 2.160000 pts: 2.200000 pos: 325616 size: 12679
 | 
				
			|||||||
ret: 0         st: 0 flags:1  ts: 1.047500
 | 
					ret: 0         st: 0 flags:1  ts: 1.047500
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058333
 | 
					ret: 0         st: 1 flags:0  ts:-0.058333
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 1.389089 pts: 1.389089 pos: 159800 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 2.835833
 | 
					ret: 0         st: 1 flags:1  ts: 2.835833
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 404012 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 2.120522 pts: 2.120522 pos: 404012 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 1.730004
 | 
					ret: 0         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size:   208
 | 
					ret: 0         st: 0 flags:0 dts: 1.760000 pts: 1.800000 pos: 162808 size: 12075
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.481667
 | 
					ret: 0         st: 0 flags:0  ts:-0.481667
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts: 2.412500
 | 
					ret: 0         st: 0 flags:1  ts: 2.412500
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 404012 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 2.120522 pts: 2.120522 pos: 404012 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 1.306667
 | 
					ret: 0         st: 1 flags:0  ts: 1.306667
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 1.389089 pts: 1.389089 pos: 159800 size:   208
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 0.200844
 | 
					ret: 0         st: 1 flags:1  ts: 0.200844
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 1.389089 pts: 1.389089 pos: 159800 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 1.989173
 | 
					ret: 0         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
@@ -44,9 +44,9 @@ ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			|||||||
ret: 0         st: 0 flags:1  ts:-0.222489
 | 
					ret: 0         st: 0 flags:1  ts:-0.222489
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts: 2.671678
 | 
					ret: 0         st: 1 flags:0  ts: 2.671678
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 404012 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 2.120522 pts: 2.120522 pos: 404012 size:   209
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 1.565844
 | 
					ret: 0         st: 1 flags:1  ts: 1.565844
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size:   208
 | 
					ret: 0         st: 1 flags:1 dts: 1.389089 pts: 1.389089 pos: 159800 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
					ret: 0         st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos:    564 size: 24801
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,41 +1,41 @@
 | 
				
			|||||||
ret: 0         st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-1.000000
 | 
					ret: 0         st:-1 flags:0  ts:-1.000000
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st:-1 flags:1  ts: 1.894167
 | 
					ret:-1         st:-1 flags:1  ts: 1.894167
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.788334
 | 
					ret: 0         st: 0 flags:0  ts: 0.788334
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.783674 pts: 0.783674 pos: 321176 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.772766 pts: 0.772766 pos: 321176 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.317499
 | 
					ret: 0         st: 0 flags:1  ts:-0.317499
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st: 1 flags:0  ts: 2.576668
 | 
					ret:-1         st: 1 flags:0  ts: 2.576668
 | 
				
			||||||
ret:-1         st: 1 flags:1  ts: 1.470835
 | 
					ret:-1         st: 1 flags:1  ts: 1.470835
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.365002
 | 
					ret: 0         st:-1 flags:0  ts: 0.365002
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.365714 pts: 0.365714 pos: 167160 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.380930 pts: 0.380930 pos: 167496 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.740831
 | 
					ret: 0         st:-1 flags:1  ts:-0.740831
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st: 0 flags:0  ts: 2.153336
 | 
					ret:-1         st: 0 flags:0  ts: 2.153336
 | 
				
			||||||
ret:-1         st: 0 flags:1  ts: 1.047503
 | 
					ret:-1         st: 0 flags:1  ts: 1.047503
 | 
				
			||||||
ret: 0         st: 1 flags:0  ts:-0.058330
 | 
					ret: 0         st: 1 flags:0  ts:-0.058330
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st: 1 flags:1  ts: 2.835837
 | 
					ret:-1         st: 1 flags:1  ts: 2.835837
 | 
				
			||||||
ret:-1         st:-1 flags:0  ts: 1.730004
 | 
					ret:-1         st:-1 flags:0  ts: 1.730004
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts: 0.624171
 | 
					ret: 0         st:-1 flags:1  ts: 0.624171
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.600816 pts: 0.600816 pos: 266240 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.616032 pts: 0.616032 pos: 266576 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts:-0.481662
 | 
					ret: 0         st: 0 flags:0  ts:-0.481662
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st: 0 flags:1  ts: 2.412505
 | 
					ret:-1         st: 0 flags:1  ts: 2.412505
 | 
				
			||||||
ret:-1         st: 1 flags:0  ts: 1.306672
 | 
					ret:-1         st: 1 flags:0  ts: 1.306672
 | 
				
			||||||
ret: 0         st: 1 flags:1  ts: 0.200839
 | 
					ret: 0         st: 1 flags:1  ts: 0.200839
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.208980 pts: 0.208980 pos: 113304 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.224195 pts: 0.224195 pos: 113640 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts:-0.904994
 | 
					ret: 0         st:-1 flags:0  ts:-0.904994
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st:-1 flags:1  ts: 1.989173
 | 
					ret:-1         st:-1 flags:1  ts: 1.989173
 | 
				
			||||||
ret: 0         st: 0 flags:0  ts: 0.883340
 | 
					ret: 0         st: 0 flags:0  ts: 0.883340
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.888163 pts: 0.888163 pos: 357608 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.903379 pts: 0.903379 pos: 357944 size:   209
 | 
				
			||||||
ret: 0         st: 0 flags:1  ts:-0.222493
 | 
					ret: 0         st: 0 flags:1  ts:-0.222493
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
ret:-1         st: 1 flags:0  ts: 2.671674
 | 
					ret:-1         st: 1 flags:0  ts: 2.671674
 | 
				
			||||||
ret:-1         st: 1 flags:1  ts: 1.565841
 | 
					ret:-1         st: 1 flags:1  ts: 1.565841
 | 
				
			||||||
ret: 0         st:-1 flags:0  ts: 0.460008
 | 
					ret: 0         st:-1 flags:0  ts: 0.460008
 | 
				
			||||||
ret: 0         st: 1 flags:1 dts: 0.444082 pts: 0.444082 pos: 205440 size:   209
 | 
					ret: 0         st: 1 flags:1 dts: 0.459297 pts: 0.459297 pos: 205776 size:   209
 | 
				
			||||||
ret: 0         st:-1 flags:1  ts:-0.645825
 | 
					ret: 0         st:-1 flags:1  ts:-0.645825
 | 
				
			||||||
ret: 0         st: 0 flags:1 dts: NOPTS    pts: 0.000000 pos:   2144 size: 24801
 | 
					ret: 0         st: 1 flags:1 dts:-0.010907 pts:-0.010907 pos:  27072 size:   208
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user