[SCM] mplayer packaging branch, master.unstripped, updated. upstream.unstripped/1.0rc2+svn20090303-unstripped-61-gda95605
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Thu Jun 4 08:32:46 UTC 2009
The following commit has been merged in the master.unstripped branch:
commit 4075dc02287dfb90525540f173a52f009e6dcd82
Author: Reinhard Tartler <siretart at tauware.de>
Date: Thu Jun 4 10:05:15 2009 +0200
Imported Upstream version 1.0~rc3+svn20090426-unstripped
diff --git a/.svnrevision b/.svnrevision
index 1cfc21a..d52047d 100644
--- a/.svnrevision
+++ b/.svnrevision
@@ -1 +1 @@
-28799
+29237
diff --git a/AUTHORS b/AUTHORS
index c54371a..99f52fa 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -808,7 +808,7 @@ Ulion <ulion2002 gmail.com>
Urpala, Uoti (uau) <uoti.urpala at pp1.inet.fi>
* A/V sync fixes
-Vajna, Miklós (VMiklos) <mamajom at axelero.hu>
+Vajna, Miklós (VMiklos) <vmiklos at frugalware.org>
* TOOLS/divx2svcd author
* TOOLS/ directory documentation
diff --git a/Changelog b/Changelog
index c0fe56d..7ced40d 100644
--- a/Changelog
+++ b/Changelog
@@ -1,8 +1,8 @@
MPlayer (1.0)
- rc3: "StillAlive" March 1, 2009
+ rc3: "BikeshedCounter" March 27, 2009
Decoders:
- * support for X8 frame (fixes "J-type picture is not supported" for WMV2)
+ * support for X8 frames (fixes "J-type picture is not supported" for WMV2)
* support for DTS WAV/DTS-CD passthrough by ad_hwac3
* Apple's raw YUV2 in MOV
* LATM over LOAS AAC decoding via internal libfaad2
@@ -10,15 +10,15 @@ MPlayer (1.0)
EA Maxis XA ADPCM audio, RL2 video, Beam Software SIFF video, V.Flash PTX video
* AVOption support for libavcodec-based decoders
* use lavc ADPCM codecs by default
- * support for progressive jpeg in ffmjpeg
- * ACDSystems mjpeg (ACDV) via binary DLL and lavc
+ * support for progressive JPEG in ffmjpeg
+ * ACDSystems MJPEG (ACDV) via binary DLL and lavc
* SIF1 via binary DLL
* wincam screen capture (WCMV) via binary DLL
- * Creative Labs Video Blaster Webcam mjpeg (CJPG) via binary DLL and ijpg library
- * kensington webcam (AJPG,ABYR) via binary DLL
+ * Creative Labs Video Blaster Webcam MJPEG (CJPG) via binary DLL and ijpg library
+ * kensington webcam (AJPG, ABYR) via binary DLL
* centre for wavelets (wavc) via binary DLL
- * GeoVision Advanced MPEG-4 (GMP4,GM40) via binary DLL
- * Xiricam jpg from Veo PC Camera (XJPG) via binary DLL
+ * GeoVision Advanced MPEG-4 (GMP4, GM40) via binary DLL
+ * Xiricam JPEG from Veo PC Camera (XJPG) via binary DLL
* WorldConnect Wavelet Video (SMSV) via binary DLL
* VDOWave 3 advanced (VDO3,VDOM,VDOW) via binary DLL
* VoxWare MetaVoice (format 0x0074) via binary DLL
@@ -37,6 +37,7 @@ MPlayer (1.0)
* Brooktree YUV 4:1:1 Raw (Y41P) via binary DLL
* many rare/obscure fourccs for known formats added
* lower priority for binary Linux rv3040 codecs due to bugs
+ * remove native NuppelVideo decoder, use lavc instead
Demuxers:
* -lavfdopts cryptokey allows decrypting MXF and ASF files
@@ -55,6 +56,7 @@ MPlayer (1.0)
* support seeking in multirate RealMedia files
* FLAC speedup in lavf demuxer
* MNG demuxer
+ * remove native NuppelVideo demuxer, use lavf demuxer instead
Filters:
* vf_ow new overcomplete wavelet denoiser
@@ -85,7 +87,7 @@ MPlayer (1.0)
* Linux Media Labs MPEG-4 (LMLM4) demuxer
* AVM2 (Flash 9) SWF muxer
* QT variant of IMA ADPCM encoder
- * Ipod/Iphone compatible mp4 muxer
+ * iPod/iPhone compatible MP4 muxer
* Mimic decoder
* MSN TCP Webcam stream demuxer
* RL2 demuxer / decoder
@@ -122,7 +124,7 @@ MPlayer (1.0)
* NC (NC4600) cameras file demuxer
* MXF D-10 muxer
* Generic metadata API
- * H.264 speedup and PAFF decoding (install Yasm for faster H264 decoding)
+ * H.264 speedup and PAFF decoding (install Yasm for faster H.264 decoding)
* correctly decode more of the H.264 conformance testsuite
* VC-1/WMV3 decoder speedup
* VP3 decoder speedup
@@ -139,13 +141,14 @@ MPlayer (1.0)
* replace PolypAudio by PulseAudio (-ao pulse)
* add force-pbo suboption for faster output in vo_gl
* add Nintendo Wii/GameCube video driver (-vo wii)
- * VIDIX driver for SuperH Mobile VEU hardware block.
+ * VIDIX driver for SuperH Mobile VEU hardware block
* support -border on vo_gl/gl2 in x11
- * Direct3D Windows video output driver added.
+ * Direct3D Windows video output driver added
* factorize code in vo_wii
- * removed unnecessary code from vo x11, xv, xvmc
+ * remove unnecessary code from vo x11, xv, xvmc
* add OS/2 DART audio driver (-ao dart)
* add VDPAU video output
+ * add OS/2 KVA video driver (-vo kva)
MEncoder:
* check for system-wide configuration file in MEncoder
@@ -163,20 +166,27 @@ MPlayer (1.0)
* add options to disable some or all configuration files
* support for DOS-style file:///x:/path paths
* some new slave commands (check DOCS/tech/slave.txt)
- * libass fixes and updates to match VSFilter renderer
* libdvdcss updated to 1.2.10, now same as upstream version
* fix -endchapter support again for -dump* options
- * add startup volume option
+ * add startup audio volume option
+ * add option to disable default key binds
+ * change default OSD and subtitle font size to a smaller default
+
+ libass:
+ * various fixes and updates to match VSFilter renderer
+ * support \blur tag and ScaledBordersAndShadow property
+ * fractional arguments and subpixel accuracy
+ * keep positions when pan-and-scan is used
Ports:
* small crash with vo_macosx fixed
* AC3/DTS passthrough for ao_macosx
* fix frozen OSD on Mac OS X
* vo_gl now works with -wid and nVidia drivers on Windows (this is a hack)
- * VIDIX on SuperH.
+ * VIDIX on SuperH
* workarounds for AltiVec on Apple gcc 3.3 on Mac OS X dropped
* vo_macosx can now be compiled in 64-bits mode
- * allow multiple MPlayer instances w/ vo_macosx using buffer_name
+ * allow multiple MPlayer instances with vo_macosx using buffer_name
* OpenGL support for unmodified MinGW64
SWScaler:
diff --git a/Copyright b/Copyright
index 47ae48b..7c3faac 100644
--- a/Copyright
+++ b/Copyright
@@ -8,23 +8,25 @@ notices can be found in the file headers. Furthermore, MPlayer includes code
from several external sources:
Name: FFmpeg
-Version: Subversion HEAD
-Homepage: http://www.ffmpeg.org
+Version: 0.5
+URL: http://www.ffmpeg.org
Directory: libavcodec, libavformat, libavutil, libpostproc
Copyright: Many, see individual files for copyright notices.
License: GNU Lesser General Public License, some parts GNU General Public
License, GNU General Public License when combined
+
Name: FAAD2
Version: 2.1 beta (20040915 CVS snapshot) + fixes and portability patches
-Homepage: http://www.audiocoding.com
+URL: http://www.audiocoding.com
Directory: libfaad2
Copyright: 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
License: GNU General Public License
+
Name: GSM 06.10 library
Version: patchlevel 10
-Homepage: http://kbs.cs.tu-berlin.de/~jutta/toast.html
+URL: http://kbs.cs.tu-berlin.de/~jutta/toast.html
Directory: libmpcodecs/native/
Copyright: 1992 by Jutta Degener and Carsten Bormann, TU Berlin
License: permissive, see libmpcodecs/native/xa_gsm.c
@@ -32,7 +34,7 @@ License: permissive, see libmpcodecs/native/xa_gsm.c
Name: liba52
Version: 0.7.4 + patches
-Homepage: http://liba52.sourceforge.net/
+URL: http://liba52.sourceforge.net/
Directory: liba52
Copyright: 1999-2000 Aaron Holtzman <aholtzma at ess.engr.uvic.ca>
2000-2001 Michel Lespinasse <walken at zoy.org>
@@ -41,28 +43,41 @@ Copyright: 1999-2000 Aaron Holtzman <aholtzma at ess.engr.uvic.ca>
2004 Romain Dolbeau <romain at dolbeau.org>
License: GNU General Public License
+
Name: libdvdcss
Version: 1.2.10
-Homepage: http://developers.videolan.org/libdvdcss/
+URL: http://developers.videolan.org/libdvdcss/
Directory: libdvdcss
Copyright: 1998-2008 VideoLAN
License: GNU General Public License
+
Name: libdvdread
-Version: 0.9.7 + patches
-Homepage: http://www.dtek.chalmers.se/groups/dvd/development.shtml
-Directory: libdvdread
+Version: Subversion HEAD
+URL: svn://svn.mplayerhq.hu/dvdnav/trunk/libdvdread/src
+Directory: libdvdread4
Copyright: 1998, 1999 Eric Smith <eric at brouhaha.com>
1999 Christian Wolff for convergence integrated media
- 2000-2001 Billy Biggs <vektor at dumbterm.net>,
+ 2000-2004 Billy Biggs <vektor at dumbterm.net>,
2001-2002 Samuel Hocevar <sam at zoy.org>,
- 2000-2003 Björn Englund <d4bjorn at dtek.chalmers.se>,
- 2000-2003 HÃ¥kan Hjort <d95hjort at dtek.chalmers.se>
+ 2000-2004 Björn Englund <d4bjorn at dtek.chalmers.se>,
+ 2000-2004 HÃ¥kan Hjort <d95hjort at dtek.chalmers.se>
License: GNU General Public License
+
+Name: libdvdnav
+Version: Subversion HEAD from
+URL: svn://svn.mplayerhq.hu/dvdnav/trunk/libdvdnav/src
+Directory: libdvdnav
+Copyright: 2000, 2001 Martin Norbäck, Håkan Hjort
+ 2000-2004 Rich Wareham <richwareham at users.sourceforge.net>
+ 2001-2004 the dvdnav project
+License: GNU General Public License
+
+
Name: libmpeg2
Version: 0.5.1 + patches
-Homepage: http://libmpeg2.sourceforge.net/
+URL: http://libmpeg2.sourceforge.net/
Directory: libmpeg2
Copyright: 1999-2000 Aaron Holtzman <aholtzma at ess.engr.uvic.ca>
2000-2004 Michel Lespinasse <walken at zoy.org>
@@ -72,25 +87,28 @@ Copyright: 1999-2000 Aaron Holtzman <aholtzma at ess.engr.uvic.ca>
2003 Peter Gubanov <peter at elecard.net.ru>
License: GNU General Public License
+
Name: mpg123
Version: 0.59s + significant changes
-Homepage: http://www.mpg123.de/
+URL: http://www.mpg123.de/
Directory: mp3lib
Copyright: 1995-1999 by Michael Hipp
2004 Romain Dolbeau <romain at dolbeau.org>
2006 Zuxy Meng <zuxy.meng at gmail.com
License: GNU General Public License
+
Name: Tremor
Version: 1.0 + parts CVS from December 2004 + patches
-Homepage: http://xiph.org/
+URL: http://xiph.org/
Directory: tremor
Copyright: 1994-2002, Xiph.org Foundation http://www.xiph.org/
License: BSD-like, see tremor/COPYING
+
Name: avifile DLL loader
Version: 0.47 + patches + CVS updates
-Homepage: http://avifile.sourceforge.net/
+URL: http://avifile.sourceforge.net/
Directory: loader/
Copyright: 1993 Robert J. Amstadt
1994 Eric Youndale & Erik Bos
@@ -101,68 +119,77 @@ Copyright: 1993 Robert J. Amstadt
2000-2001 Eugene Kuznetsov (divx at euro.ru)
License: GNU General Public License
+
Name: dvbstream
Version: 0.4.3-pre3 (CVS checkout)
-Homepage: http://sourceforge.net/projects/dvbtools/
+URL: http://sourceforge.net/projects/dvbtools/
Directory: stream/dvbin.h stream/rtp.[ch] stream/stream_dvb.c
Copyright: 2001-2002 Dave Chapman <dave at dchapman.com>
License: GNU General Public License
+
Name: librtsp
Version: xine CVS 2003/04/10 + patches
-Homepage: http://www.xinehq.de
+URL: http://www.xinehq.de
Directory: stream/librtsp/
Copyright: 2000-2002 the xine project
License: GNU General Public License
+
Name: realrtsp
Version: xine CVS 2003/04/17 + patches
-Homepage: http://www.xinehq.de
+URL: http://www.xinehq.de
Directory: stream/realrtsp/
Copyright: 2002 the xine project
License: GNU General Public License
+
Name: pnm protocol implementation
Version: xine CVS 2002/12/26 + patches
-Homepage: http://www.xinehq.de
+URL: http://www.xinehq.de
Directory: stream/pnm.[ch]
Copyright: 2000-2002 the xine project
License: GNU General Public License
+
Name: id3edit
Version: 1.9 + patches
-Homepage: http://id3edit.sourceforge.net/
+URL: http://id3edit.sourceforge.net/
Directory: libmpdemux/genres.h
Copyright: 2001 Jason Carter
License: GNU General Public License
+
Name: FreeSDP
Version: 0.4.1
-Homepage: https://savannah.nongnu.org/projects/freesdp/
+URL: https://savannah.nongnu.org/projects/freesdp/
Directory: stream/freesdp/
Copyright: 2001-2003 Federico Montesino Pouzols <fedemp at suidzer0.org>
License: GNU General Public License
+
Name: MJPEG Tools
Version: post 2001-12-03 release or CVS snapshot
-Homepage: http://mjpeg.sourceforge.net/
+URL: http://mjpeg.sourceforge.net/
Directory: libmpdemux/yuv4mpeg*
Copyright: 2001 Matthew J. Marjanovic <maddog at mir.com>
2001 Andrew Stevens <andrew.stevens at philips.com>
License: GNU General Public License
+
Name: NuppelVideo / RTJPEG
Version: 0.52a + patches
-Homepage: http://web.archive.org/web/20060219034716/http://frost.htu.tuwien.ac.at/~roman/nuppelvideo/
-Directory: libmpcodecs/native/rtjpegn.[ch] libmpdemux/nuppelvideo.h
+URL: http://web.archive.org/web/20060219034716/http://frost.htu.tuwien.ac.at/~roman/nuppelvideo/
+Directory: libmpcodecs/native/rtjpegn.[ch]
Copyright: 1998 Justin Schoeman (justin at suntiger.ee.up.ac.za)
1998, 1999 Joerg Walter <trouble at moes.pmnet.uni-oldenburg.de>
1999 Wim Taymans <wim.taymans at tvd.be>
License: GNU General Public License
+
Name: ReactOS
Version: r25937
-Homepage: http://www.reactos.org/
+URL: http://www.reactos.org/
Directory: vidix/dhahelperwin/ntverp.h vidix/dhahelperwin/common.ver
Copyright: Alex Ionescu (alex.ionescu at reactos.org)
License: GNU General Public License
diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1
index 7add7d3..33a006b 100644
--- a/DOCS/man/en/mplayer.1
+++ b/DOCS/man/en/mplayer.1
@@ -1,4 +1,4 @@
-.\" $Revision: 28788 $
+.\" $Revision: 29059 $
.\" MPlayer (C) 2000-2009 MPlayer Team
.\" This man page was/is done by Gabucino, Diego Biurrun, Jonas Jermann
.
@@ -31,7 +31,7 @@
.\" Title
.\" --------------------------------------------------------------------------
.
-.TH MPlayer 1 "2009-01-05" "The MPlayer Project" "The Movie Player"
+.TH MPlayer 1 "2009-03-25" "The MPlayer Project" "The Movie Player"
.
.SH NAME
mplayer \- movie player
@@ -904,7 +904,7 @@ i.e.\& using the shell.
MPlayer uses this command without any checking, it is your responsibility
to ensure it does not cause security problems (e.g.\& make sure to use full
paths if "." is in your path like on Windows).
-It also only works when playing video (i.e. not with \-novideo but works with \-vo null).
+It also only works when playing video (i.e.\& not with \-novideo but works with \-vo null).
.sp 1
This can be "misused" to disable screensavers that do not support the proper
X API (also see \-stop\-xscreensaver).
@@ -960,6 +960,8 @@ Device to be used for Apple IR Remote (default is autodetected, Linux only).
Delay in milliseconds before we start to autorepeat a key (0 to disable).
.IPs ar-rate
Number of key presses to generate per second on autorepeat.
+.IPs (no)default-bindings
+Use the key bindings that MPlayer ships with by default.
.IPs keylist
Prints all keys that can be bound to commands.
.IPs cmdlist
@@ -1131,6 +1133,8 @@ by a newline (\\n) from stdin.
.I NOTE:
See \-input cmdlist for a list of slave commands and DOCS/tech/slave.txt
for their description.
+Also, this is not intended to disable other inputs, e.g.\& via the video window,
+use some other method like \-input nodefault\-binds:conf=/dev/null for that.
.
.TP
.B \-softsleep
@@ -2249,14 +2253,14 @@ Use this if commas in subtitles are shown at the start of a sentence
instead of at the end.
.
.TP
-.B \-font <path to font.desc file>
+.B \-font <path to font.desc file, path to font (FreeType), font pattern (Fontconfig)>
Search for the OSD/\:SUB fonts in an alternative directory (default for normal
fonts: ~/\:.mplayer/\:font/\:font.desc, default for FreeType fonts:
~/.mplayer/\:subfont.ttf).
.br
.I NOTE:
With FreeType, this option determines the path to the text font file.
-With fontconfig, this option determines the fontconfig font name.
+With Fontconfig, this option determines the Fontconfig font pattern.
.sp 1
.I EXAMPLE:
.PD 0
@@ -2266,6 +2270,8 @@ With fontconfig, this option determines the fontconfig font name.
\-font ~/\:.mplayer/\:arialuni.ttf
.br
\-font 'Bitstream Vera Sans'
+.br
+\-font 'Bitstream Vera Sans:style=Bold'
.RE
.PD 1
.
@@ -2504,8 +2510,8 @@ Currently useless.
Same as \-audiofile, but for subtitle streams (OggDS?).
.
.TP
-.B \-subfont <filename> (FreeType only)
-Sets the subtitle font.
+.B \-subfont <path to font (FreeType), font pattern (Fontconfig)> (FreeType only)
+Sets the subtitle font (see \-font).
If no \-subfont is given, \-font is used.
.
.TP
@@ -3219,7 +3225,7 @@ Use at your own risk!
Change the range of the pan-and-scan functionality (default: 1).
Positive values mean multiples of the default range.
Negative numbers mean you can zoom in up to a factor of \-panscanrange+1.
-E.g. \-panscanrange \-3 allows a zoom factor of up to 4.
+E.g.\& \-panscanrange \-3 allows a zoom factor of up to 4.
This feature is experimental.
Do not report bugs unless you are using \-vo gl.
.
@@ -3446,7 +3452,7 @@ For positive values, apply a sharpening algorithm to the video,
for negative values a blurring algorithm (default: 0).
.IPs denoise=<0\-1>
Apply a noise reduction algorithm to the video (default: 0, no noise reduction).
-.IPs deint=<0\-3>
+.IPs deint=<0\-4>
Chooses the deinterlacer (default: 0).
All modes > 0 respect \-field\-dominance.
.RSss
@@ -3455,16 +3461,21 @@ No deinterlacing.
.IPs 1
Show only first field, similar to \-vf field.
.IPs 2
-Bob deinterlacing (current fallback for advanced deinterlacers).
+Bob deinterlacing, similar to \-vf tfields=1.
.IPs 3
-Motion adaptive temporal deinterlacing (not yet working).
+Motion adaptive temporal deinterlacing.
+May lead to A/V desync with slow video hardware and/or high resolution.
This is the default if "D" is used to enable deinterlacing.
.IPs 4
-Motion adaptive temporal deinterlacing with edge-guided spatial interpolation
-(not yet working).
+Motion adaptive temporal deinterlacing with edge-guided spatial interpolation.
+Needs fast video hardware.
.RE
+.IPs chroma\-deint
+Makes temporal deinterlacers operate both on luma and chroma (default).
+Use nochroma\-deint to solely use luma and speed up advanced deinterlacing.
+Useful with slow video memory.
.IPs pullup
-Try to apply inverse telecine, needs temporal deinterlacing.
+Try to apply inverse telecine, needs motion adaptive temporal deinterlacing.
.RE
.PD 1
.
@@ -3587,6 +3598,23 @@ Try this option if you have display problems.
.PD 1
.
.TP
+.B kva (OS/2 only)
+Video output driver that uses the libkva interface.
+.PD 0
+.RSs
+.IPs snap
+Force SNAP mode.
+.IPs wo
+Force WarpOverlay! mode.
+.IPs dive
+Force DIVE mode.
+.IPs (no)t23
+Enable/disable workaround for T23 laptop (default: \-not23).
+Try to enable this option if your video card supports upscaling only.
+.RE
+.PD 1
+.
+.TP
.B quartz (Mac OS X only)
Mac OS X Quartz video output driver.
Under some circumstances, it might be more efficient to force a
@@ -10026,7 +10054,7 @@ Lower values allow the quantizer value to jump around more,
higher values force it to vary more smoothly.
cplx_blur ensures that each I-frame has quality comparable to the following
P-frames, and ensures that alternating high and low complexity frames
-(e.g. low fps animation) do not waste bits on fluctuating quantizer.
+(e.g.\& low fps animation) do not waste bits on fluctuating quantizer.
.
.TP
.B qblur=<0\-99> (two pass only)
diff --git a/DOCS/man/fr/mplayer.1 b/DOCS/man/fr/mplayer.1
index 3ed5ea9..4c2ce46 100644
--- a/DOCS/man/fr/mplayer.1
+++ b/DOCS/man/fr/mplayer.1
@@ -1,4 +1,4 @@
-.\" synced with r28788
+.\" synced with r28958
.\" Encoding: iso-8859-1
.\" MPlayer (C) 2000-2009 MPlayer Team
.\" The English man page was/is done by Gabucino, Diego Biurrun, Jonas Jermann
@@ -946,7 +946,8 @@ MPlayer utilise cette commande sans aucune sorte de v
donc de votre responsablité qu'elle ne pose pas de problème de sécurité
(c-à-d que vous devriez spécifier le chemin absolu, surtout si "." est dans
le chemin de recherche $PATH, comme c'est le cas sous Windows).
-Cela fonctionne aussi lors de la lecture d'une vidéo (c-à-d. que ça ne fonctionne pas avec \-novideo alors que ça fonctionne avec \-vo null).
+Cela fonctionne aussi lors de la lecture d'une vidéo (c-à-d.\& que ça ne
+fonctionne pas avec \-novideo alors que ça fonctionne avec \-vo null).
.sp 1
Ceci peut être "détourné" pour désactiver un économiseur d'écran ne gérant par
l'API de X prévu à cet effet (voir aussi \-stop\-xscreensaver).
@@ -1009,6 +1010,8 @@ d'une touche
(0 pour désactiver).
.IPs ar-rate
Combien de frappes par seconde pendant la répétition automatique.
+.IPs (no)default-bindings
+Répond aux touches de contrôle par défaut de MPlayer.
.IPs keylist
Affiche toutes les touches pouvant être attachées.
.IPs cmdlist
@@ -1193,6 +1196,9 @@ commandes s
.I NOTE\ :
Voir \-input cmdlist pour une liste des commandes esclaves, et
DOCS/tech/slave.txt pour leur description.
+De plus, cette option n'est pas vouée à désactiver les autres entrées,
+comme via la fenêtre vidéo\ ; pour cela, utilisez d'autres méthodes, comme
+\-input nodefault\-binds:conf=/dev/null.
.
.TP
.B \-softsleep
@@ -2354,14 +2360,14 @@ les sous-titres.
phrases au lieu de la fin.
.
.TP
-.B \-font <chemin vers le fichier font.desc>
+.B \-font <chemin vers le fichier font.desc, la police (FreeType), motif de police (Fontconfig)>
Recherche les polices OSD/\:SUB dans un répertoire particulier
(par défaut pour les polices normales: ~/\:.mplayer/\:font/\:font.desc,
pour les polices FreeType: ~/.mplayer/\:subfont.ttf).
.br
.I NOTE:
Avec FreeType, cette option détermine le chemin vers le fichier de polices.
-Avec Fontconfig, cette option détermine le nom de police fontconfig.
+Avec Fontconfig, cette option détermine le motif de police Fontconfig.
.sp 1
.I EXEMPLE:
.PD 0
@@ -2370,7 +2376,9 @@ Avec Fontconfig, cette option d
.br
\-font ~/\:.mplayer/\:arialuni.ttf
.br
-\-font 'Bitstream Vera Sans'
+\-font 'Bitstream Vera Sans:style'
+.br
+\-font 'Bitstream Vera Sans:style=Bold'
.RE
.PD 1
.
@@ -2615,8 +2623,8 @@ Inutile actuellement.
Identique à \-audiofile, mais pour les flux de sous-titres (OggDS ?).
.
.TP
-.B \-subfont <filename> (FreeType uniquement)
-Spécifie la police des sous-titres.
+.B \-subfont <chemin vers la police (FreeType), motif de police (Fontconfig)> (FreeType uniquement)
+Spécifie la police des sous-titres (voir \-font).
Si \-subfont n'est pas spécifié, \-font est utilisé.
.
.TP
@@ -3637,9 +3645,12 @@ d
.IPs denoise=<0\-1>
Applique à la vidéo un filtre de réduction de bruit (par défaut\ : 0, pas de
réduction de bruit)
-.IPs deint=<0\-3>
+.IPs deint=<0\-4>
Sélectionne un désentrelaceur (par défaut\ : 0)
Tous les modes > 0 respectent \-field\-dominance.
+.br
+.I NOTE\ :
+Les valeurs > 2 retardent la sortie vidéo d'une image.
.RSss
.IPs 0
pas de désentrelacement
@@ -3768,6 +3779,24 @@ Essayez cette option si vous avez des probl
.PD 1
.
.TP
+.B kva (OS/2 uniquement)
+Pilote de sortie vidéo utilisant l'interface libkva.
+.PD 0
+.RSs
+.IPs snap
+Force le mode SNAP.
+.IPs wo
+Force le mode WarpOverlay!.
+.IPs dive
+Force le mode DIVE.
+.IPs (no)t23
+Active le contournement pour les bugs de l'ordinateur portable T23.
+Essayez d'activer cette option si votre carte vidéo ne gère que
+l'agrandissement d'image (upscaling).
+.RE
+.PD 1
+.
+.TP
.B quartz (Mac OS X uniquement)
Pilote de sortie vidéo Quartz pour Mac OS X.
Dans certains cas, il est préférable de forcer le format de sortie packed YUV,
@@ -10572,7 +10601,7 @@ Des valeurs plus faibles permettent au quantum de plus changer d'une
trame à l'autre, des valeurs plus hautes forcent une variation plus douce.
cplx_blur permet de s'assurer que chaque trame-I ait une qualité comparable
aux trames-P suivantes, et garantit qu'une alternance de trames à complexité
-forte et faible (par exemple un dessin animé dont la cadence d'animation est
+forte et faible (par ex.\& un dessin animé dont la cadence d'animation est
faible) ne gâche pas de bits en faisant fluctuer les quantum.
.
.TP
diff --git a/DOCS/man/hu/mplayer.1 b/DOCS/man/hu/mplayer.1
index e0af69e..d5a206d 100644
--- a/DOCS/man/hu/mplayer.1
+++ b/DOCS/man/hu/mplayer.1
@@ -1,4 +1,4 @@
-.\" Synced with r28775
+.\" Synced with r28991
.\" MPlayer (C) 2000-2009 MPlayer Team
.\" Ezt a man oldalt Gabucino, Diego Biurrun és Jonas Jermann készíti/készítette
.\" Karbantartó: Gabrov
@@ -33,7 +33,7 @@
.\" Név
.\" --------------------------------------------------------------------------
.
-.TH MPlayer 1 "2009. 03. 01." "MPlayer Project" "A film lejátszó"
+.TH MPlayer 1 "2009. 03. 19." "MPlayer Project" "A film lejátszó"
.
.SH NÉV
mplayer \- film lejátszó
@@ -161,7 +161,7 @@ Van X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, libcaca, DirectFB,
Quartz, Mac OS X CoreVideo támogatás, de használhatod a GGI, SDL (és ennek összes
vezérlõje), VESA (minden VESA-kompatibilis kártyán, még X11 nélkül is), néhány
alacsony szintû, kártyaspecifikus vezérlõ (Matroxhoz, 3dfx-hez és ATI-hoz) és
-pár hardveeres MPEG dekódoló lap, mint pl. a Siemens DVB, Hauppauge PVR (IVTV),
+pár hardveeres MPEG dekódoló lap, mint pl.\& a Siemens DVB, Hauppauge PVR (IVTV),
DXR2 és DXR3/\:Hollywood+ támogatását is. A legtöbbjük tudja a szoftveres és
harderes nagyítást, így a filmjeidet teljes képernyõs módban élvezheted.
.PP
@@ -572,7 +572,7 @@ spuaa=20
.SH "PROFILOK"
A különbözõ konfigurációjú történõ munka megkönnyítésére profilokat lehet
definiálni a konfigurációs fájlokban.
-Egy profil a négyzetes zárójelbe tett nevével kezdõdik, pl. '[en-profilom]'.
+Egy profil a négyzetes zárójelbe tett nevével kezdõdik, pl.\& '[en-profilom]'.
Az összes ezutáni opció a profil része lesz.
A leírás (melyet a \-profile help mutat) a profile-desc opcióval adható meg.
A profil befejezéséhez kezdj egy újat vagy használd a 'default' profil nevet
@@ -644,7 +644,7 @@ Ki
A konzol üzeneteket a megadott kódlapra konvertálja (alapértelmezett: automatikus
felismerés).
A szöveg a a configure \-\-charset opciójával megadott kódolású lesz.
-Beállíthatod "noconv"-ra is a konvertálás teljes letiltásához (pl. ha
+Beállíthatod "noconv"-ra is a konvertálás teljes letiltásához (pl.\& ha
problémáid vannak az iconv-val).
.br
.I MEGJEGYZÉS:
@@ -905,6 +905,7 @@ seg
Az MPlayer ezt a parancsot ellenõrzés nélkül használja, a te felelõsséged,
hogy ne okozzon biztonsági problémát (pl.\& gyõzõdj meg róla, hogy teljes elérési
utakat használsz, ha a "." benne van az elérési utadban, mint Windows alatt).
+Csak videó lejátszás közben mûködik (pl.\& a \-novideo kapcsolóval nem, de \-vo null mellett igen).
.sp 1
Ezt "ki lehet használni" az olyan képernyõvédõ letiltásához, amely nem
támogatja ehhez a megfelelõ X API-kat (lásd még \-stop\-xscreensaver).
@@ -957,6 +958,8 @@ Az Apple IR t
Egy gomb automatikus ismétlése elõtti késleltetés miliszekundumban (0: kikapcsolás).
.IPs ar-rate
Billentyû/másodperc érték megadása autorepeat használata esetén.
+.IPs (no)default-bindings
+Az alapértelmezetten MPlayerbe épített billentyû-hozzárendeléseket használja.
.IPs keylist
Az összes használható billentyû listájának kiírása.
.IPs cmdlist
@@ -1049,7 +1052,7 @@ Kikapcsolja az AppleIR t
Megtiltja az MPlayernek a billentyûzet események olvasását a standard
input-ról. Hasznos, ha a standard input-ról olvasol be adatot.
Ez automatikusan engedélyezõdik, ha \- van a parancssorban.
-Vannak esetek, amikor kézzel kell beállítanod, pl. \&
+Vannak esetek, amikor kézzel kell beállítanod, pl.\&
ha megnyitod a /dev/\:stdin -t (vagy a rendszereden az ennek megfelelõt),
lejátszási listában használod az stdin-t vagy késõbb akarsz olvastatni
az stdin-rõl a loadfile vagy loadlist szolga parancsok segítségével.
@@ -1133,6 +1136,8 @@ parancsokat olvas az stdin-r
.I MEGJEGYZÉS:
A \-input cmdlist kapcsoló kilistázza a szolga módban használható parancsokat,
a DOCS/tech/slave.txt fájlban megtalálod a leírásukat.
+Ez nem a többi, pl.\& a videó ablakon keresztül érkezõ input letiltására készült,
+arra használj mást, mint a \-input nodefault\-binds:conf=/dev/null.
.
.TP
.B \-softsleep
@@ -1248,7 +1253,7 @@ A lej
Ha léptetést kell végezni az aktuális pozícióból a cache méretének
<százalék>-kal megadott részén belüli pozícióba, az MPlayer
megvárja, hogy a cache feltöltõdjön addig a pozícióig
-egy folyamban történõ ugrás helyett (alapértelmezett: 50).
+egy folyamban történõ ugrás helyett (alapértelmezett: 50).
.
.TP
.B \-cdda <opció1:opció2> (csak CDDA)
@@ -1299,7 +1304,7 @@ Lej
Az MPlayer megmondja a dekódernek hogy annyi csatornán dekódoljon,
amennyit ez az opció megad.
Innentõl a dekóderen múlik ennek teljesítése.
-Ez akkor fontos ha AC-3-as hanggal ellátott videót nézel (pl. DVD).
+Ez akkor fontos ha AC-3-as hanggal ellátott videót nézel (pl.\& DVD).
Ebben alapértelmezésként a liba52 dekódol és lemixeli az audiót a kért
számú csatornára.
A kimeneti csatornák dekódolt csatornák számától független, direkt
@@ -1416,7 +1421,7 @@ v
.TP
.B \-dvd\-device <eszköz elérési útja> (csak DVD)
Megadja a DVD eszközt vagy .iso fájlnevet (alapértelmezett: /dev/\:dvd).
-Megadhatsz egy könyvtárat is, ami egy elõzõleg DVD-rõl (pl. vobcopy-val)
+Megadhatsz egy könyvtárat is, ami egy elõzõleg DVD-rõl (pl.\& vobcopy-val)
lemásolt fájlokat tartalmaz.
.
.TP
@@ -1478,7 +1483,7 @@ Az indexet a MEncoderrel lehet maradand
.br
.I MEGJEGYZÉS:
Értelemszerûen ez az opció csak akkor használható ha a média tekerhetõ
-(tehát pl. stdin-nel, pipe-al nem).
+(tehát pl.\& stdin-nel, pipe-al nem).
.
.TP
.B \-fps <lebegõpontos érték>
@@ -1505,7 +1510,7 @@ Hasznos hib
.br
.I MEGJEGYZÉS:
Értelemszerûen ez az opció csak akkor használható ha a média tekerhetõ
-(tehát pl. stdin-nel, pipe-al nem).
+(tehát pl.\& stdin-nel, pipe-al nem).
.
.TP
.B \-noidx
@@ -1636,7 +1641,7 @@ cbr: Konstans BitR
.REss
.IPs vpeak=<érték>
Megadja a videó kódolási bitrátájának csúcsértékét Mbps-ben
-(csak VBR kódolásnál hasznos, alapértelmezett: 9.6).
+(csak VBR kódolásnál hasznos, alapértelmezett: 9.6).
.IPs fmt=<érték>
Kiválasztja a kódoláshoz használt MPEG formátumot:
.RSss
@@ -2257,14 +2262,14 @@ Akkor haszn
és nem a végén.
.
.TP
-.B \-font <útvonal a font.desc fájlhoz>
+.B \-font <útvonal a font.desc fájlhoz, útvonal a betûtípushoz (FreeType), betûtípus minta (Fontconfig)>
Az OSD/\:SUB betûtipusok megadott könyvtárban történõ keresése
(normál fontoknál alapértelmezett:
~/\:.mplayer/\:font/\:font.desc, FreeType fontokhoz: ~/.mplayer/\:subfont.ttf).
.br
.I MEGJEGYZÉS:
FreeType-pal ez az opció a szöveges betûtípus fájlok elérési útját határozza meg.
-A fontconfig-gal ez az opció a fontconfig betûtípus nevét határozza meg.
+A fontconfig-gal ez az opció a Fontconfig betûtípus mintáját határozza meg.
.sp 1
.I PÉLDA:
.PD 0
@@ -2274,6 +2279,8 @@ A fontconfig-gal ez az opci
\-font ~/\:.mplayer/\:arialuni.ttf
.br
\-font 'Bitstream Vera Sans'
+.br
+\-font 'Bitstream Vera Sans:style=Bold'
.RE
.PD 1
.
@@ -2513,9 +2520,9 @@ Jelenleg haszontalan.
Ugyan az, mint az \-audiofile, de felirat folyamokra (OggDS?).
.
.TP
-.B \-subfont <fájlnév> (csak FreeType)
-Beállítja a felirat betûtípusát.
-Ha nincs megafva a \-subfont, a \-font lesz használva.
+.B \-subfont <útvonal a betûtípushoz (FreeType), betûtípus minta (Fontconfig)> (csak FreeType)
+Beállítja a felirat betûtípusát (lásd \-font).
+Ha nincs megadva a \-subfont, a \-font lesz használva.
.
.TP
.B \-subfont\-autoscale <0\-3> (csak FreeType)
@@ -2647,13 +2654,13 @@ Az OSS opci
.B vol, pcm, line.
Az opciók teljes listájához lásd a SOUND_DEVICE_NAMES-t a
/usr/\:include/\:linux/\:soundcard.h fájlban.
-ALSA-hoz használhatod a neveket, amiket pl. az \& alsamixer
+ALSA-hoz használhatod a neveket, amiket pl.\& az \& alsamixer
megjelenít, úgy mint
.B Master, Line, PCM.
.br
.I MEGJEGYZÉS:
Az ALSA mixer csatorna neveit egy szám követi, amit a <név,szám> formában
-kell megadni, pl.\& ha a csatorna neve 'PCM 1' az alsamixer-ben,
+kell megadni, pl.\& ha a csatorna neve 'PCM 1' az alsamixer-ben,
akkor
.BR PCM,1 .
.
@@ -3229,7 +3236,7 @@ Csak saj
Megváltoztatja a pan-and-scan funkcionalítás tartományát (alapértelmezett: 1).
A pozitív értékek az alapértelmezett tartomány többszörösét jelentik.
A negatív számok azt jelentik, hogy \-panscanrange+1 faktorig tudsz nagyítani.
-Pl. \-panscanrange \-3 4-es nagyítási faktort enged.
+Pl.\& \-panscanrange \-3 4-es nagyítási faktort enged.
Ez a képesség még kísérleti.
Ne jelents hibákat, hacsak nem \-vo gl-t használsz.
.
@@ -3458,25 +3465,36 @@ Pozit
negatív értékekkel pedig elmosást (alapértelmezett: 0).
.IPs denoise=<0\-1>
Egy zajcsökkentõ algoritmust alkalmaz a videóra (alapértelmezett: 0, nincs zajcsökkentés).
-.IPs deint=<0\-3>
+.IPs deint=<0\-4>
Kiválasztja a deinterlacer-t (alapértelmezett: 0).
+Minden mód > 0 figyelembe veszi a \-field\-dominance kapcsolót.
+.br
+.I MEGJEGYZÉS:
+A > 2 értékek késleltetik a videó kimenetet egy képkockával.
.RSss
.IPs 0
Nincs deinterlace.
.IPs 1
-Csak egy mezõt mutat, hasonló a \-vf field kapcsolóhoz.
+Csak az elsõ mezõt mutatja, hasonló a \-vf field kapcsolóhoz.
.IPs 2
-Bob deinterlace (jelenleg erre lép vissz a fejlettebb deinterlacer-ekrõl).
+Bob deinterlace, hasonló a \-vf tfields=1 kapcsolóhoz.
.IPs 3
-Mozgás adaptív idõbeli deinterlace (még nem mûködik).
+Mozgás adaptív idõbeli deinterlace.
+A/V deszinkronizációt okozhat lassú videó hardveren és/vagy nagy felbontásnál.
Ez az alapértelmezett, ha a "D" gombbal engedélyezhetõ a deinterlacing.
.IPs 4
-Mozgás adaptív idõbeli deinterlace él-vezérelt térbeli interpolációval (még nem mûködik).
-.RE
+Mozgás adaptív idõbeli deinterlace él-vezérelt térbeli interpolációval.
+Gyors videó hardver kell hozzá.
+.RE
+.IPs chroma\-deint
+Az idõbeli deinterlacer-ek mind a fényerõsségen, mint a telítettségen változtatnak (alapértelmezett).
+Használd a nochroma\-deint kapcsolót, ha csak a fényerõsséget akarod változtatni és gyorsítani
+szeretnél a fejlett deinterlacing-en.
+Hasznos lassú videó memóriánál.
.IPs pullup
Inverz telecine-t próbál alkalmazni, idõbeli deinterlace kell hozzá.
.RE
-.PD 1
+.PD 1
.
.TP
.B xvmc (csak X11 \-vc ffmpeg12mc kapcsolóval)
@@ -3599,10 +3617,27 @@ Pr
.PD 1
.
.TP
+.B kva (csak OS/2)
+Kimeneti videó vezérlõ, ami a libkva interfészt használja.
+.PD 0
+.RSs
+.IPs snap
+Kényszeríti a SNAP módot.
+.IPs wo
+Kényszeríti a WarpOverlay! módot.
+.IPs dive
+Kényszeríti a DIVE módot.
+.IPs (no)t23
+Engedélyezi/letiltja a T23 laptopokra vonatkozó kódot (alapértelmezett: \-not23).
+Próbáld meg engedélyezni ezt az opciót, ha a videó kártyád csak a felméretezést támogatja.
+.RE
+.PD 1
+.
+.TP
.B quartz (csak Mac OS X)
Mac OS X Quartz kimeneti videó vezérlõ.
Bizonyos esetekben hatékonyabb lehet egy csomagolt YUV kimeneti
-formátum kényszerítése, pl. a \& \-vf format=yuy2 kapcsolóval.
+formátum kényszerítése, pl.\& a \& \-vf format=yuy2 kapcsolóval.
.PD 0
.RSs
.IPs device_id=<szám>
@@ -3935,7 +3970,7 @@ Ez a vez
.RSs
.IPs <aleszköz>
Explicit kiválasztja a használni kívánt Blinkenlights aleszköz vezérlõt.
-Valami olyasmi, mint pl. arcade:host=localhost:2323 vagy
+Valami olyasmi, mint pl.\& arcade:host=localhost:2323 vagy
hdl:file=name1,file=name2.
Meg kell adnod az aleszközt.
.RE
@@ -4159,7 +4194,7 @@ Kimeneti vide
.RSs
.IPs card=<1\-4>
Megadja a használandó eszköz számát, ha több, mint egy kimeneti DVB kártya van
-(csak V3 API, mint pl. az 1.x.y sorozatú vezérlõk).
+(csak V3 API, mint pl.\& az 1.x.y sorozatú vezérlõk).
Ha nincs megadva, az MPlayer megkeresi az elsõ használható kártyát.
.IPs <fájlnév>
kimeneti fájl neve (alapértelmezett: ./grab.mpg).
@@ -4635,7 +4670,7 @@ A <kihagy
.br
none: Soha ne hagyja ki.
.br
-default: Hagyja ki, ha a feldolgozási lépés haszontalan (pl. 0 méretû csomag AVI-ban).
+default: Hagyja ki, ha a feldolgozási lépés haszontalan (pl.\& 0 méretû csomag AVI-ban).
.br
nonref: Hagyja ki a nem referencia kockákat (pl.\& nem lesz felhasználva
másik kocka dekódolásánál, a hiba nem tud "tovább épülni").
@@ -4886,7 +4921,7 @@ Kikapcsolja a k
.TP
.B "\-zoom\ \ "
A szoftveres méretezést engedélyezi, ha használható.
-Ez olyan kimeneti vezérlõkkel (mint pl. x11, fbdev) is engedélyezi a méretezést,
+Ez olyan kimeneti vezérlõkkel (mint pl.\& x11, fbdev) is engedélyezi a méretezést,
melyekben nincs támogatás a hardveres méretezéshez, vagy az MPlayer letiltja a
méretezést teljesítménybeli indokok miatt.
.
@@ -5312,7 +5347,7 @@ ha sz
.
.TP
.B surround[=késleltetés]
-Dekódoló mátrix kódolású térhatású hanghoz, mint pl. a Dolby Surround-hoz.
+Dekódoló mátrix kódolású térhatású hanghoz, mint pl.\& a Dolby Surround-hoz.
Sok két csatornás audióval rendelkezõ fájl tartalmaz mátrixos térhatású
hangot. Legalább négy csatornát támogató hangkártya kell hozzá.
.PD 0
@@ -5924,7 +5959,7 @@ A haszn
.PD 0
.RSs
.IPs <fourcc>
-formátum név mint pl. rgb15, bgr24, yv12, stb. (alapértelmezett: yuy2)
+formátum név mint pl.\& rgb15, bgr24, yv12, stb. (alapértelmezett: yuy2)
.RE
.PD 1
.
@@ -5940,7 +5975,7 @@ Az el
.PD 0
.RSs
.IPs <fourcc>
-formátum név, mint pl. rgb15, bgr24, yv12, stb. (alapértelmezett: yv12)
+formátum név, mint pl.\& rgb15, bgr24, yv12, stb. (alapértelmezett: yv12)
.RE
.PD 1
.
@@ -6158,7 +6193,7 @@ Kvant
kvantálási paraméter (QP) változtató szûrõ
.RSs
.IPs <egyenlet>
-valamilyen egyenlet, pl. "2+2*sin(PI*qp)"
+valamilyen egyenlet, pl.\& "2+2*sin(PI*qp)"
.RE
.
.TP
@@ -7946,7 +7981,7 @@ maxim
.B mblmin=<0.01\-255.0>
Minimális makroblokk-szintû Lagrange szorzó a ratecontrol-hoz
(alapértelmezett: 2.0).
-Ez a paraméter az adaptív kvantálási opciókat érinti, mint pl. a
+Ez a paraméter az adaptív kvantálási opciókat érinti, mint pl.\& a
qprd, lumi_mask, stb..
.RE
.
@@ -8187,7 +8222,7 @@ N l
elvégzi: elõször elolvassa a statisztika fájlt, majd felülírja.
Ajánlott a divx2pass.log elmentése, mielõtt ezt megtennéd, ha esély van rá,
hogy meg kell szakítanod a MEncoder-t.
-Használhatod mindegyik kódolási opciót, kivéve a nagyon CPU-igényeseket, pl. "qns".
+Használhatod mindegyik kódolási opciót, kivéve a nagyon CPU-igényeseket, pl.\& "qns".
.br
Ezt a lépést újra és újra lefuttathatod a kódolás finomítása érdekében.
Minden következõ lépés felhasználja az elõzõ lépés statisztikáit a továbblépéshez.
@@ -9121,7 +9156,7 @@ Zajcs
0\-600 a hasznos tartomány egy átlagos tartalom esetén, de lehet, hogy kicsit feljebb
kell vinned, ha nagyon zajos az anyagod (alapértelmezett: 0).
Mivel kicsi hatása van a sebességre, inkább ezt ajánlott használni, mint a
-zajszûrést a videó szûrõknél, pl. denoise3d vagy hqdn3d-vel.
+zajszûrést a videó szûrõknél, pl.\& denoise3d vagy hqdn3d-vel.
.
.TP
.B qns=<0\-3>
@@ -9546,7 +9581,7 @@ utols
.TP
.B (no)packed
Ez az opció a kocka-sorrendbeli gondokat oldja meg konténer formátumokba,
-pl. AVI-ba történõ kódoláskor, ami nem tud megbírkózni a nem sorrendben
+pl.\& AVI-ba történõ kódoláskor, ami nem tud megbírkózni a nem sorrendben
lévõ kockákkal. A gyakorlatban a legtöbb dekódoló (mind szoftveres, mind
hardveres) saját maga is tudja kezelni a kocka-sorrendet és összezavarodhat,
ha ez az opció be van kapcsolva, így nyugodtan kikapcsolva hagyhatod,
@@ -9584,7 +9619,7 @@ Az igazi CBR-t nagyon neh
A videó anyagtól függõen a bitráta változhat és ezt nehéz elõre megjósolni.
Ezért az Xvid egy átlagoló periódust használ, ami alatt garantálja a megadott
bitmennyiséget (minusz egy kis variáció).
-Ez a beállítás megadja a "kockák számát", amikre vonatkoztatva az Xvid
+Ez a beállítás megadja a "kockák számát", amikre vonatkoztatva az Xvid
átlagol és megpróbálja elérni a CBR-t.
.
.TP
@@ -10046,7 +10081,7 @@ Az alacsonyabb
a magasabb értékek finomabb váltásokra kényszerítik.
A cplx_blur biztosítja, hogy minden I-kocka minõsége összehasonlítható
az õt követõ P-kockával és hogy a váltakozó nagy és kicsi komplexitású
-kockák (pl. alacsony fps-û animáció) nem vesztegetnek biteket egy
+kockák (pl.\& alacsony fps-û animáció) nem vesztegetnek biteket egy
ingadozó kvantálóval.
.
.TP
@@ -10282,7 +10317,7 @@ Ink
.B (no)fast_pskip
A P-kockák korai skip detektálásának végrehajtása (alapértelmezett: bekapcsolva).
Ez általában javítja a sebességet, de néha a kevésbé részletes
-területeken (pl. ég) mellékhatásokat okoz.
+területeken (pl.\& ég) mellékhatásokat okoz.
.
.TP
.B (no)dct_decimate
@@ -10299,7 +10334,7 @@ Zajcs
100\-1000 a használandó tartomány egy átlagos tartalomnál, de a nagyon zajos
tartalomnál kicsit felnyomhatod (alapértelmezett: 0).
Tekintve, hogy kicsi a befolyása a sebességre, inkább ez a preferálandó a
-zajcsökkentésnél a videó szûrõkkel, mint pl. a denoise3d-vel vagy hqdn3d-vel
+zajcsökkentésnél a videó szûrõkkel, mint pl.\& a denoise3d-vel vagy hqdn3d-vel
történõ zajcsökkentés helyett.
.
.TP
@@ -10401,7 +10436,7 @@ a sz
.B (no)global_header
Az SPS és a PPS csak egyszer fog megjelenni, a bitfolyam elején
(alapértelmezett: letiltva).
-Néhány lejátszó, mint pl. a Sony PSP, igényli ezt az opciót.
+Néhány lejátszó, mint pl.\& a Sony PSP, igényli ezt az opciót.
Alapértelmezésként az SPS és a PPS minden IDR kocka elõtt ismétlõdik.
.
.TP
@@ -10482,7 +10517,7 @@ A bin
.
.TP
.B compdata=<fájl>
-A codec beállításokat tartalmazó fájl neve (pl. firstpass.mcf), melyet a vfw2menc készített.
+A codec beállításokat tartalmazó fájl neve (pl.\& firstpass.mcf), melyet a vfw2menc készített.
.
.
.SS MPEG muxer (\-mpegopts)
@@ -11163,7 +11198,7 @@ you can directly play it via cdda:// without setting format, hwac3 or hwdts.
mplayer \-rawaudio format=0xff \-demuxer rawaudio \-af pan=2:.32:.32:.39:.06:.06:.39:.17:-.17:-.17:.17:.33:.33 adts_he-aac160_51.aac
.fi
.br
-Egy kicsit játszadoznod kell a pan értékekkel (pl. felszorozni az értékeket) a
+Egy kicsit játszadoznod kell a pan értékekkel (pl.\& felszorozni az értékeket) a
hangerõ növeléséhez vagy a kattogás elkerüléséhez.
.
.PP
diff --git a/DOCS/man/ru/mplayer.1 b/DOCS/man/ru/mplayer.1
index 0f56c6d..d719820 100644
--- a/DOCS/man/ru/mplayer.1
+++ b/DOCS/man/ru/mplayer.1
@@ -2,7 +2,7 @@
.\" This man page was/is done by Gabucino, Diego Biurrun, Jonas Jermann
.\" Translated by Vladimir Voroshilov <voroshil at gmail.com>
.\" Encoding: koi8-r
-.\" synced with r28788
+.\" synced with r28991
.
.\" --------------------------------------------------------------------------
.\" ïÐÒÅÄÅÌÅÎÉÑ ÍÁËÒÏÓÏ×
@@ -863,7 +863,7 @@ MPlayer
ÂÅÚÏÐÁÓÎÏÓÔÉ ÌÅÖÉÔ ÐÏÄ ÷ÁÛÅÊ ÏÔ×ÅÔÓÔ×ÅÎÎÏÓÔØÀ (× ÞÁÓÔÎÏÓÔÉ, ÕÂÅÄÉÔÅÓØ,
ÞÔÏ ÉÓÐÏÌØÚÕÀÔÓÑ ÐÏÌÎÙÅ ÐÕÔÉ, ÅÓÌÉ "." ÐÒÉÓÕÔÓÔ×ÕÅÔ × ×ÁÛÅÍ ÐÕÔÉ,
ÎÁÐÒÉÍÅÒ, ËÁË × Windows).
-ëÏÍÁÎÄÁ ÒÁÂÏÔÁÅÔ ÔÏÌØËÏ ÐÒÉ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÉ ×ÉÄÅÏ (Ô.Å. ÒÁÂÏÔÁÅÔ Ó
+ëÏÍÁÎÄÁ ÒÁÂÏÔÁÅÔ ÔÏÌØËÏ ÐÒÉ ×ÏÓÐÒÏÉÚ×ÅÄÅÎÉÉ ×ÉÄÅÏ (Ô.Å.\& ÒÁÂÏÔÁÅÔ Ó
\-vo null, ÎÏ ÎÅ Ó \-novideo).
.sp 1
å£ ÍÏÖÎÏ ÐÒÉÍÅÎÑÔØ ÄÌÑ "ÎÅÐÒÁ×ÉÌØÎÏÇÏ" ÏÔËÌÀÞÅÎÉÑ ÈÒÁÎÉÔÅÌÅÊ
@@ -922,6 +922,8 @@ mplayer \-heartbeat\-cmd "gnome\-screensaver\-command \-p" file
úÁÄÅÒÖËÁ × ÍÉÌÌÉÓÅËÕÎÄÁÈ ÐÅÒÅÄ ÎÁÞÁÌÏÍ Á×ÔÏÐÏ×ÔÏÒÁ (0 ÄÌÑ ÏÔËÌÀÞÅÎÉÑ).
.IPs ar\-rate
ëÏÌÉÞÅÓÔ×Ï ËÌÁ×ÉÛ × ÓÅËÕÎÄÕ, ÇÅÎÅÒÉÒÕÅÍÙÈ ÐÒÉ Á×ÔÏÐÏ×ÔÏÒÅ.
+.IPs (no)default-bindings
+éÓÐÏÌØÚÏ×ÁÔØ ÐÒÉ×ÑÚËÉ ËÌÁ×ÉÛ, ÐÏÓÔÁ×ÌÑÅÍÙÅ Ó MPlayer ÐÏ ÕÍÏÌÞÁÎÉÀ.
.IPs keylist
÷Ù×ÏÄÉÔ ×ÓÅ ËÌÁ×ÉÛÉ, ËÏÔÏÒÙÅ ÍÏÖÎÏ ÎÁÚÎÁÞÉÔØ ËÏÍÁÎÄÁÍ.
.IPs cmdlist
@@ -1085,17 +1087,18 @@ FIXME:
.
.TP
.B \-slave (ÓÍÏÔÒÉÔÅ ÔÁËÖÅ \-input)
-÷ËÌÀÞÁÅÔ "ÒÁÂÓËÉÊ" ÒÅÖÉÍ, × ËÏÔÏÒÏÍ MPlayer ÒÁÂÏÔÁÅÔ × ËÁÞÅÓÔ×Å ÂÜËÜÎÄÁ Ë ÄÒÕÇÉÍ ÐÒÏÇÒÁÍÍÁÍ.
+÷ËÌÀÞÁÅÔ ×ÅÄÏÍÙÊ ÒÅÖÉÍ, × ËÏÔÏÒÏÍ MPlayer ÒÁÂÏÔÁÅÔ × ËÁÞÅÓÔ×Å ÂÜËÜÎÄÁ Ë ÄÒÕÇÉÍ ÐÒÏÇÒÁÍÍÁÍ.
÷ÍÅÓÔÏ ÐÅÒÅÈ×ÁÔÁ ÓÏÂÙÔÉÊ ËÌÁ×ÉÁÔÕÒÙ, MPlayer ÂÕÄÅÔ ÞÉÔÁÔØ ÓÏ ÓÔÁÎÄÁÒÔÎÏÇÏ ×ÈÏÄÁ ËÏÍÁÎÄÙ,
ÒÁÚÄÅÌÅÎÎÙÅ ÓÉÍ×ÏÌÏÍ ÎÏ×ÏÊ ÓÔÒÏËÉ (\\n).
.br
.I úáíåþáîéå:
óÍÏÔÒÉÔÅ ÓÐÉÓÏË ÜÔÉÈ ËÏÍÁÎÄ × \-input cmdlist É ÏÐÉÓÁÎÉÑ × DOCS/tech/slave.txt.
+üÔÁ ÏÐÃÉÑ ÎÅ ÐÒÅÄÎÁÚÎÁÞÅÎÁ ÄÌÑ ÏÔËÌÀÞÅÎÉÑ ÄÒÕÇÉÈ ÉÓÔÏÞÎÉËÏ× ××ÏÄÁ,
+ÎÁÐÒÉÍÅÒ ÐÒÉ ÐÏÍÏÝÉ ÏËÎÁ ×ÉÄÅÏ; ÄÌÑ ÄÁÎÎÙÈ ÃÅÌÅÊ ÉÓÐÏÌØÚÕÊÔÅ ÉÎÙÅ
+ÓÐÏÓÏÂÙ, ÎÁÐÒÉÍÅÒ, \-input nodefault\-binds:conf=/dev/null.
.
.TP
.B \-softsleep
-.\" FIXME is translation correct?
-.\" Time frames by repeatedly checking the current time instead of asking the
õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÔÁÊÍÉÎÇ ËÁÄÒÏ×, ÐÏÓÔÏÑÎÎÏ ÐÒÏ×ÅÒÑÑ ÔÅËÕÝÅÅ ×ÒÅÍÑ, ×ÍÅÓÔÏ ÐÒÏÓØÂÙ
ÑÄÒÕ ÐÒÏÂÕÖÄÁÔØ MPlayer × ÎÕÖÎÙÊ ÍÏÍÅÎÔ.
ðÏÌÅÚÎÏ, ÅÓÌÉ ÔÁÊÍÅÒ ×ÁÛÅÇÏ ÑÄÒÁ ÎÅÔÏÞÅÎ É ×Ù ÎÅ ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ RTC.
@@ -2217,14 +2220,14 @@ SubViewer (SRT).
×ÍÅÓÔÏ ÉÈ ËÏÎÃÁ.
.
.TP
-.B \-font <ÐÕÔØ Ë ÆÁÊÌÕ font.desc>
+.B \-font <ÐÕÔØ Ë ÆÁÊÌÕ font.desc, ÐÕÔØ Ë ÛÒÉÆÔÕ (FreeType), ÎÁÚ×ÁÎÉÅ ÛÒÉÆÔÁ (Fontconfig))>
éÝÅÔ OSD/\:SUB ÛÒÉÆÔÙ × ÄÒÕÇÏÍ ËÁÔÁÌÏÇÅ (ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ ÏÂÙÞÎÙÈ
ÛÒÉÆÔÏ×: ~/\:.mplayer/\:font/\:font.desc, ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ FreeType ÛÒÉÆÔÏ×:
~/.mplayer/\:subfont.ttf).
.br
.I úáíåþáîéå:
ó FreeType, ÜÔÁ ÏÐÃÉÑ ÏÐÒÅÄÅÌÑÅÔ ÐÕÔØ Ë ÆÁÊÌÕ ÛÒÉÆÔÁ ÔÅËÓÔÁ.
-ó fontconfig, ÜÔÁ ÏÐÃÉÑ ÏÐÒÅÄÅÌÑÅÔ ÎÁÚ×ÁÎÉÅ ÛÒÉÆÔÁ fontconfig.
+ó Fontconfig, ÜÔÁ ÏÐÃÉÑ ÏÐÒÅÄÅÌÑÅÔ ÎÁÚ×ÁÎÉÅ ÛÒÉÆÔÁ fontconfig.
.sp 1
.I ðòéíåò:
.PD 0
@@ -2234,6 +2237,8 @@ SubViewer (SRT).
\-font ~/\:.mplayer/\:arialuni.ttf
.br
\-font 'Bitstream Vera Sans'
+.br
+\-font 'Bitstream Vera Sans:style=Bold'
.RE
.PD 1
.
@@ -2475,8 +2480,8 @@ cp1250,
ôÏ ÖÅ, ÞÔÏ É \-audiofile, ÎÏ ÄÌÑ ÐÏÔÏËÁ ÓÕÂÔÉÔÒÏ× (OggDS?).
.
.TP
-.B \-subfont <ÉÍÑ ÆÁÊÌÁ> (ÔÏÌØËÏ FreeType)
-õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÛÒÉÆÔ ÓÕÂÔÉÔÒÏ×.
+.B \-subfont <ÉÍÑ ÆÁÊÌÁ (FreeType), ÎÁÚ×ÁÎÉÅ ÛÒÉÆÔÁ (Fontconfig)> (ÔÏÌØËÏ FreeType)
+õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÛÒÉÆÔ ÓÕÂÔÉÔÒÏ× (ÓÍ. \-font).
åÓÌÉ ÏÐÃÉÑ \-subfont ÎÅ ÕËÁÚÁÎÁ, ÉÓÐÏÌØÚÕÅÔÓÑ \-font.
.
.TP
@@ -3427,25 +3432,35 @@ XResetScreenSaver API,
.IPs denoise=<0\-1>
ðÒÉÍÅÎÑÅÔ Ë ×ÉÄÅÏ ÁÌÇÏÒÉÔÍ ÕÍÅÎØÛÅÎÉÀ ÛÕÍÁ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 0, ÎÅÔ
ÕÍÅÎØÛÅÎÉÑ ÛÕÍÁ).
-.IPs deint=<0\-3>
+.IPs deint=<0\-4>
÷ÙÂÉÒÁÅÔ ÄÅÉÎÔÅÒÌÅÊÓÅÒ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 0).
÷ÓÅ ÒÅÖÉÍÙ > 0 ÕÞÉÔÙ×ÁÀÔ \-field\-dominance.
+.br
+.I úáíåþáîéå:
+úÎÁÞÅÎÉÑ > 2 ÚÁÄÅÒÖÉ×ÁÀÔ ×Ù×ÏÄ ×ÉÄÅÏ ÎÁ ÏÄÉÎ ËÁÄÒ.
.RSss
.IPs 0
îÅÔ ÄÅÉÎÔÅÒÌÅÊÓÉÎÇÁ.
.IPs 1
ïÔÏÂÒÁÖÁÅÔ ÔÏÌØËÏ ÐÅÒ×ÏÅ ÐÏÌÅ, ÁÎÁÌÏÇÉÞÎÏ \-vf field.
.IPs 2
-Bob ÄÅÉÎÔÅÒÌÅÊÓÉÎÇ (ÔÅËÕÝÉÊ ÚÁÐÁÓÎÏÊ ×ÁÒÉÁÎÔ ÄÌÑ ÐÅÒÅÄÏ×ÙÈ
-ÄÅÉÎÔÅÒÌÅÊÓÅÒÏ×).
+Bob ÄÅÉÎÔÅÒÌÅÊÓÉÎÇ, ÁÎÁÌÏÇÉÞÎÏ \-vf tfields=1.
.IPs 3
-áÄÁÐÔÉ×ÎÙÊ ÐÏ Ä×ÉÖÅÎÉÀ ×ÒÅÍÅÎÎÏÊ ÄÅÉÎÔÅÒÌÅÊÓÉÎÇ (ÅÝ£ ÎÅ ÒÁÂÏÔÁÅÔ).
+áÄÁÐÔÉ×ÎÙÊ ÐÏ Ä×ÉÖÅÎÉÀ ×ÒÅÍÅÎÎÏÊ ÄÅÉÎÔÅÒÌÅÊÓÉÎÇ.
+íÏÖÅÔ ÐÒÉ×ÅÓÔÉ Ë ÄÅÓÉÎÈÒÏÎÉÚÁÃÉÉ ÁÕÄÉÏ É ×ÉÄÅÏ ÎÁ ÓÌÁÂÏÊ ×ÉÄÅÏ
+ËÁÒÔÅ É/ÉÌÉ ×ÙÓÏËÏÍ ÒÁÚÒÅÛÅÎÉÉ.
üÔÏ ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÅÓÌÉ ËÌÁ×ÉÛÁ "D" ÉÓÐÏÌØÚÕÅÔÓÑ ÄÌÑ
×ËÌÀÞÅÎÉÑ ÄÅÉÎÔÅÒÌÅÊÓÉÎÇÁ.
.IPs 4
áÄÁÐÔÉ×ÎÙÊ ÐÏ Ä×ÉÖÅÎÉÀ ×ÒÅÍÅÎÎÏÊ ÄÅÉÎÔÅÒÌÅÊÓÉÎÇ Ó ÕÐÒÁ×ÌÑÅÍÏÊ ÐÏ
-ËÒÁÑÍ ÐÒÏÓÔÒÁÎÓÔ×ÅÎÎÏÊ ÉÎÔÅÒÐÏÌÑÃÉÅÊ (ÅÝ£ ÎÅ ÒÁÂÏÔÁÅÔ).
-.RE
+ËÒÁÑÍ ÐÒÏÓÔÒÁÎÓÔ×ÅÎÎÏÊ ÉÎÔÅÒÐÏÌÑÃÉÅÊ. ôÒÅÂÕÅÔ ÂÙÓÔÒÏÊ ×ÉÄÅÏ ËÁÒÔÙ.
+.RE
+.IPs chroma\-deint
+ðÏÚ×ÏÌÑÅÔ ×ÒÅÍÅÎÎÙÍ ÄÅÉÎÔÅÒÌÅÊÓÅÒÁÍ ÏÐÅÒÉÒÏ×ÁÔØ ËÁË ÑÒËÏÓÔÎÏÊ, ÔÁË
+É Ã×ÅÔÎÏÓÔÎÏÊ ËÏÍÐÏÎÅÎÔÁÍÉ (ÐÏ ÕÍÏÌÞÁÎÉÀ).
+éÓÐÏÌØÚÕÊÔÅ nochroma\-deint ÄÌÑ ÏÐÅÒÉÒÏ×ÁÎÉÑ ÔÏÌØËÏ Ã×ÅÔÎÏÓÔÎÏÊ
+ËÏÍÐÏÎÅÎÔÏÊ É ÕÓËÏÒÅÎÉÑ ÕÓÏ×ÅÒÛÅÎÓÔ×Ï×ÁÎÎÏÇÏ ÄÅÉÎÔÅÒÌÅÊÓÉÎÇÁ.
+ðÏÌÅÚÎÏ Ó ÍÅÄÌÅÎÎÏÊ ×ÉÄÅÏ ÐÁÍÑÔØÀ.
.IPs pullup
ðÒÏÂÕÅÔ ÐÒÉÍÅÎÉÔØ ÏÂÒÁÔÎÙÊ ÔÅÌÅÓÉÎ, ÎÕÖÄÁÅÔÓÑ ×Ï ×ÒÅÍÅÎÎÏÍ
ÄÅÉÎÔÅÒÌÅÊÓÉÎÇÅ.
@@ -3578,6 +3593,24 @@ Windows
.PD 1
.
.TP
+.B kva (ÔÏÌØËÏ OS/2)
+äÒÁÊ×ÅÒ ×Ù×ÏÄÁ ×ÉÄÅÏ, ÉÓÐÏÌØÚÕÀÝÉÊ ÉÎÔÅÒÆÅÊÓ libkva.
+.PD 0
+.RSs
+.IPs snap
+æÏÒÓÉÒÕÅÔ ÒÅÖÉÍ SNAP.
+.IPs wo
+æÏÒÓÉÒÕÅÔ ÒÅÖÉÍ WarpOverlay!.
+.IPs dive
+æÏÒÓÉÒÕÅÔ ÒÅÖÉÍ DIVE.
+.IPs (no)t23
+÷ËÌÀÞÁÅÔ/×ÙËÌÀÞÁÅÔ ÏÂÈÏÄÎÏÅ ÒÅÛÅÎÉÅ ÄÌÑ ÎÏÕÔÂÕËÁ T23 (ÐÏ ÕÍÏÌÞÁÎÉÀ: \-not23).
+ðÏÐÒÏÂÕÊÔÅ ×ËÌÀÞÉÔØ ÄÁÎÎÕÀ ÏÐÃÉÀ, ÅÓÌÉ ÷ÁÛÁ ×ÉÄÅÏËÁÒÔÁ ÐÏÄÄÅÒÖÉ×ÁÅÔ
+ÔÏÌØËÏ ÒÁÓÔÑÖÅÎÉÅ.
+.RE
+.PD 1
+.
+.TP
.B quartz (ÔÏÌØËÏ Mac OS X)
äÒÁÊ×ÅÒ ×Ù×ÏÄÁ ×ÉÄÅÏ Mac OS X Quartz.
÷ ÎÅËÏÔÏÒÙÈ ÓÌÕÞÁÑÈ, ÆÏÒÓÉÒÏ×ÁÎÉÅ ÐÁËÏ×ÁÎÎÏÇÏ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ YUV Ó,
@@ -4001,7 +4034,7 @@ MPEG
OSD (ÐÏ ÕÍÏÌÞÁÎÉÀ: ÏÔËÌÀÞÅÎÏ).
.IPs (no)crtc2
÷ËÌÀÞÁÅÔ TV\-×ÙÈÏÄ ÎÁ ×ÔÏÒÏÊ "ÇÏÌÏ×Å" (ÐÏ ÕÍÏÌÞÁÎÉÀ: ×ËÌÀÞÅÎÏ).
-ëÁÞÅÓÔ×Ï ×Ù×ÏÄÁ ÕÄÉ×ÉÔÅÌØÎÏÅ, Ô.Ë. ÜÔÏ ÐÏÌÎÏÓÔØÀ ÞÅÒÅÓÓÔÒÏÞÎÏÅ
+ëÁÞÅÓÔ×Ï ×Ù×ÏÄÁ ÕÄÉ×ÉÔÅÌØÎÏÅ, Ô.Ë.\& ÜÔÏ ÐÏÌÎÏÓÔØÀ ÞÅÒÅÓÓÔÒÏÞÎÏÅ
ÉÚÏÂÒÁÖÅÎÉÅ Ó ÐÒÁ×ÉÌØÎÏÊ ÓÉÎÈÒÏÎÉÚÁÃÉÅÊ ËÁÖÄÏÇÏ ÞÅÔÎÏÇÏ/\:ÎÅÞÅÔÎÏÇÏ ÐÏÌÑ.
.IPs tvnorm=pal|ntsc|auto
õÓÔÁÎÏ×ÉÔ TV ÓÔÁÎÄÁÒÔ Matrox ËÁÒÔÙ ÂÅÚ ÎÅÏÂÈÏÄÉÍÏÓÔÉ
@@ -4222,7 +4255,7 @@ iTVC16), (Hauppauge WinTV PVR\-150/250/350/500).
.sp 1
.I úáíåþáîéå:
åÓÌÉ ×Ù ÎÅ ÕËÁÚÙ×ÁÅÔÅ ÎÉËÁËÉÈ ÏÐÃÉÊ, ÔÏ ×Ù×ÏÄ ÂÕÄÅÔ ÐÒÏÇÒÅÓÓÉ×ÎÙÍ
-(Ô.Å. ÎÅÞÅÒÅÓÓÔÒÏÞÎÙÍ).
+(Ô.Å.\& ÎÅÞÅÒÅÓÓÔÒÏÞÎÙÍ).
.RE
.
.TP
@@ -6011,7 +6044,7 @@ spal: 768x576 (PAL
ðÏÄÆÉÌØÔÒÙ ÄÏÌÖÎÙ ÂÙÔØ ÏÔÄÅÌÅÎÙ '/', É ÍÏÇÕÔ ÂÙÔØ ÏÔËÌÀÞÅÎÙ ÕËÁÚÁÎÉÅÍ
ÐÅÒÅÄ ÎÉÍÉ '\-'.
ëÁÖÄÙÊ ÐÏÄÆÉÌØÔÒ É ÎÅËÏÔÏÒÙÅ ÏÐÃÉÉ ÉÍÅÀÔ ËÁË ËÏÒÏÔËÏÅ, ÔÁË É ÄÌÉÎÎÏÅ
-ÎÁÚ×ÁÎÉÅ, ËÏÔÏÒÙÅ ÐÏÌÎÏÓÔØÀ ×ÚÁÉÍÏÚÁÍÅÎÑÅÍÙ, Ô.Å. dr/dering \- ÜÔÏ
+ÎÁÚ×ÁÎÉÅ, ËÏÔÏÒÙÅ ÐÏÌÎÏÓÔØÀ ×ÚÁÉÍÏÚÁÍÅÎÑÅÍÙ, Ô.Å.\& dr/dering \- ÜÔÏ
ÏÄÎÏ É ÔÏ ÖÅ.
.\" FIXME is translation correct? scope = ÇÒÁÎÉÃÙ ÄÅÊÓÔ×ÉÑ
÷ÓÅ ÐÏÄÆÉÌØÔÒÙ ÉÍÅÀÔ ÏÂÝÉÅ ÏÐÃÉÉ, ÏÐÒÅÄÅÌÑÀÝÉÅ ÇÒÁÎÉÃÙ ÄÅÊÓÔ×ÉÑ:
diff --git a/DOCS/man/zh_CN/mplayer.1 b/DOCS/man/zh_CN/mplayer.1
index faea37c..fdebb45 100644
--- a/DOCS/man/zh_CN/mplayer.1
+++ b/DOCS/man/zh_CN/mplayer.1
@@ -1,4 +1,4 @@
-.\" sync with en/mplayer.1 r28745
+.\" sync with en/mplayer.1 r28991
.\" Encoding: UTF-8
.\" Reminder of hard terms which need better/final solution later:
.\" /capture; playtree in parent list; colorkey; retrace; desync; downmix;
@@ -862,6 +862,7 @@ xv, xvidix å dfbmgaã
.I 注æï¼
MPlayer æ§è¡æ¤å½ä»¤æ¶ä¸å ä»¥æ£æ¥ï¼æä»¥ä½ æè´£ä»»ç¡®ä¿è¯¥å½ä»¤ä¸é æä»»ä½å®å
¨é®é¢ï¼ä¾
å¦ï¼å¦æâ.âå°±åå¨ Windows ä¸é£æ ·æ¯å¨ä½ çè·¯å¾ä¸ï¼åç¡®ä¿ä½¿ç¨å®æ´è·¯å¾ï¼ã
+å¹¶ä¸è¯¥éé¡¹åªæå¨ææ¾è§é¢æ¶ææï¼å³æ²¡æä½¿ç¨ \-novideoï¼ä½å¯ä»¥ä½¿ç¨ \-vo nullï¼ã
.sp 1
该é项å¯è½è¢«â误ç¨â以ç¦ç¨ä¸æä¾å¯¹äºéå½ç X API æ¥å£çæ¯æçå±å¹ä¿æ¤ç¨åºã
å¦æä½ è§å¾è¿å¤ªå¤æäºï¼è¯·è¦æ±å±å¹ä¿æ¤ç¨åºçä½è
æä¾å¯¹äºéå½ç X API çæ¯æã
@@ -910,6 +911,8 @@ mplayer \-heartbeat\-cmd "gnome\-screensaver\-command \-p" file
å¨å¼å§èªå¨éå¤ä¸ä¸ªé®ä¹åçå¾
å¤å°æ¯«ç§ (0 代表åç¨)ã
.IPs ar-rate
èªå¨é夿°æ¯æ¯ç§éå¤å¤å°æ¬¡æé®ã
+.IPs (no)default-bindings
+é»è®¤æ
åµä¸ä½¿ç¨ MPlayer èªå¸¦çé®ä½è®¾ç½®ã
.IPs keylist
ååºææå¯ä»¥è¢«ç»å®äºå½ä»¤çé®ã
.IPs cmdlist
@@ -1074,6 +1077,8 @@ MPlayer 仿 åè¾å
¥è¯»å以æ°è¡ (\\n) åéå¼çå½ä»¤è¡,
.br
.I 注æ:
请åè§ \-input cmdlist çå½ä»¤å表å DOCS/tech/slave.txt ä¸çæè¿°ã
+å¦å¤ï¼è¯¥é项并éç¨æ¥ç¦ç¨å
¶å®çè¾å
¥ï¼ä¾å¦éè¿è§é¢çªå£ãè¦ä½¿ç¨å
¶å®æ¹æ³å®ç°é£ç§ææï¼ä¾å¦
+\-input nodefault\-binds:conf=/dev/nullã
.
.TP
.B \-softsleep
@@ -2096,14 +2101,14 @@ SSA/ASS æä¾å¨è½å¨é£éæ¾ç½®åå¹ (ä¸ \-ass\-use\-margins ç»åç¨)ã
妿åå¹ä¸çéå·æ¾ç¤ºå¨å¥é¦è䏿¯å¨å¥å°¾, 就使ç¨å®ã
.
.TP
-.B \-font <æä»¶ font.desc çè·¯å¾>
+.B \-font <æä»¶ font.desc çè·¯å¾ï¼åä½ï¼FreeTypeï¼çè·¯å¾ï¼å使 ·å¼ï¼Fontconfigï¼çè·¯å¾>
å¨å«çç®å½ä¸å¯»æ¾ OSD/\:SUB åä½(
é»è®¤çæ®éåä½ä¸º: ~/\:.mplayer/\:font/\:font.desc,
é»è®¤ç FreeType åä½ä¸º: ~/.mplayer/\:subfont.ttf)ã
.br
.I 注æ:
å¯¹äº FreeType, æ¤é项å³å®ææ¬å使件çè·¯å¾ã
-å¯¹äº fontconfig, æ¤é项å³å® fontconfig çåä½åç§°ã
+å¯¹äº Fontconfig, æ¤é项å³å® Fontconfig çåä½åç§°ã
.sp 1
.I 示ä¾:
.PD 0
@@ -2113,6 +2118,8 @@ SSA/ASS æä¾å¨è½å¨é£éæ¾ç½®åå¹ (ä¸ \-ass\-use\-margins ç»åç¨)ã
\-font ~/\:.mplayer/\:arialuni.ttf
.br
\-font 'Bitstream Vera Sans'
+.br
+\-font 'Bitstream Vera Sans:style=Bold'
.RE
.PD 1
.
@@ -2333,9 +2340,9 @@ CC åå¹å°ç®å为æ¢è¿æ²¡æå¨å
¶å®å°åºç ç DVD ä¸åç°ã
ä¸ \-audiofile 䏿 ·, ä½ç¨äºå广µ(OggDS?)ã
.
.TP
-.B \-subfont <æä»¶å>ï¼ä»
ç¨äºFreeTypeåä½ï¼
-设置åå¹åä½ã
-å¦ææ²¡æç»åº\-subfontï¼å使ç¨\-fontã
+.B \-subfont <åä½ï¼FreeTypeï¼çè·¯å¾ï¼å使 ·å¼ï¼Fontconfigï¼çè·¯å¾>ï¼ä»
ç¨äº FreeType åä½ï¼
+设置åå¹åä½ï¼åè§ \-fontï¼ã
+å¦ææ²¡æç»åº \-subfontï¼åä½¿ç¨ \-fontã
.
.TP
.B \-subfont\-autoscale <0\-3> (ä»
ç¨äº FreeType)
@@ -2647,6 +2654,18 @@ DirectX DirectSound é³é¢è¾åºé©±å¨
.PD 1
.
.TP
+.B dartï¼ä»
éç¨äº OS/2ï¼
+OS/2 DART é³é¢è¾åºé©±å¨
+.PD 0
+.RSs
+.IPs (no)share
+以å
±äº«æç¬å æ¨¡å¼æå¼ DART è¾åºã
+.IPs bufsize=<大å°>
+å°ç¼å²å¤§å°è®¾ä¸º<大å°>ï¼åä½ä¸ºéæ ·æ°ï¼é»è®¤å¼ï¼2048ï¼ã
+.RE
+.PD 1
+.
+.TP
.B dxr2 (ä¹è¯·åè§ \-dxr2) (ä»
ç¨äº DXR2)
Creative DXR2 ä¸ç¨çè¾åºé©±å¨
.
@@ -3211,22 +3230,31 @@ Supported by the gl, gl2, x11, and xv video output drivers.
使ç¨è´æ°å¼æ¶ï¼ååºç¨æ¨¡ç³ç®æ³ï¼é»è®¤å¼ï¼0ï¼ã
.IPs denoise=<0\-1>
å°ä¸ç§æ¶é¤åªç¹çç®æ³åºç¨äºè§é¢ç»é¢ï¼é»è®¤å¼ï¼0ï¼ä¸æ¶é¤åªç¹ï¼ã
-.IPs deint=<0\-3>
+.IPs deint=<0\-4>
éæ©åéè¡æ«ææ¨¡å¼çç®æ³ï¼é»è®¤å¼ï¼0ï¼ã
+ææå¤§äº 0 çæ¨¡å¼æä» \-field\-dominance é项ç设置ã
+.br
+.I 注æï¼
+å¤§äº 2 çå¼å°ä½¿è§é¢è¾åºå»¶åä¸å¸§ã
.RSss
.IPs 0
ä¸åéè¡æ«æã
.IPs 1
-åªæ¾ç¤ºä¸ä¸ªéè¡æ«æåï¼ä¸ \-vf field ä½ç¨ç¸ç±»ä¼¼ã
+åªæ¾ç¤ºç¬¬ä¸ä¸ªéè¡æ«æåï¼ä¸ \-vf field ä½ç¨ç¸ç±»ä¼¼ã
.IPs 2
-è·³è·å¼åéè¡æ«æï¼å½åé«çº§åéè¡æ«æç®æ³çéåå½¢å¼ï¼ã
+è·³è·å¼åéè¡æ«æï¼ä¸ \-vf tfields=1 ä½ç¨ç¸ç±»ä¼¼ã
.IPs 3
-éåºè¿å¨ç»é¢çç¬é´åéè¡æ«æï¼è¿æªå®ç°ï¼ã
+éåºè¿å¨ç»é¢çç¬é´åéè¡æ«æã
+å¯è½å¨ä½æ§è½è§é¢ç¡¬ä»¶å/æé«å辨ççæ
åµä¸å¯¼è´é³è§é¢ä¸åæ¥ã
è¿æ¯å½âDâç¨äºå¼å¯åéè¡æ«ææ¶çé»è®¤å¼ã
.IPs 4
-éç¨è¾¹ç¼å¯¼åç©ºé´æå¼ç®æ³çéåºè¿å¨ç»é¢çç¬é´åéè¡æ«æ
-ï¼è¿æªå®ç°ï¼ã
+éç¨è¾¹ç¼å¯¼åç©ºé´æå¼ç®æ³çéåºè¿å¨ç»é¢çç¬é´åéè¡æ«æã
+éè¦é«æ§è½çè§é¢ç¡¬ä»¶ã
.RE
+.IPs chroma\-deint
+使ç¬é´åéè¡æ«æç®æ³åæ¶ä½ç¨äºäº®åº¦åè²åº¦ééä¸ï¼é»è®¤å¼ï¼ã
+ä½¿ç¨ nochroma\-deint 以使å
¶ä»
ä½ç¨äºäº®åº¦ééï¼ä»èå éé«çº§åéè¡æ«æç®æ³ã
+对äºä½éæ¾å徿ç¨ã
.IPs pullup
å°è¯åºç¨åçµè§çµå½±æ¨¡å¼ï¼éè¦ç¬é´åéè¡æ«æã
.RE
@@ -3341,6 +3369,23 @@ VIDIX ç Windows åå°
.PD 1
.
.TP
+.B kvaï¼ä»
éç¨äº OS/2ï¼
+ä½¿ç¨ libkva æ¥å£çè§é¢è¾åºé©±å¨ã
+.PD 0
+.RSs
+.IPs snap
+强å¶ä½¿ç¨ SNAP 模å¼ã
+.IPs wo
+强å¶ä½¿ç¨ WarpOverlay! 模å¼ã
+.IPs dive
+强å¶ä½¿ç¨ DIVE 模å¼ã
+.IPs (no)t23
+å¯ç¨/ç¦ç¨è§£å³ T23 ç¬è®°æ¬é®é¢çå鿍¡å¼ï¼é»è®¤å¼ï¼\-not23ï¼ã
+å¦æä½ çæ¾å¡ä»
æ¯æç»é¢æ¾å¤§è¾åºï¼å°è¯å¼å¯è¿ä¸ªé项ã
+.RE
+.PD 1
+.
+.TP
.B quartz (ä»
ç¨äº Mac OS X)
Mac OS X Quartz è§é¢è¾åºé©±å¨ã
å¨æäºæ
åµä¸, é宿å
YUV è¾åºæ ¼å¼, å¦: \-vf format=yuy2, å¯è½æ´ææã
diff --git a/DOCS/tech/MAINTAINERS b/DOCS/tech/MAINTAINERS
index 087d566..68b0768 100644
--- a/DOCS/tech/MAINTAINERS
+++ b/DOCS/tech/MAINTAINERS
@@ -116,7 +116,6 @@ demuxers:
* demux_rtp* - Ross Finlayson
* demux_mpg and demux_ts - Nico Sabbi
* demux_mpc.c - Reimar Döffinger
- * demux_nuv.c - Reimar Döffinger
muxers:
* muxer_lavf.c - Michael Niedermayer
diff --git a/DOCS/tech/binary-packaging.txt b/DOCS/tech/binary-packaging.txt
index 71a1929..9d85237 100644
--- a/DOCS/tech/binary-packaging.txt
+++ b/DOCS/tech/binary-packaging.txt
@@ -52,14 +52,13 @@ the following features MUST be included in any official binary package:
- XAnim codecs support (*)
* general:
- - default font
- FreeType fonts support
- HTML documentation
- large file support
- man page(s)
* input/demuxers:
- - DVD(mpdvdkit2)
+ - DVD(libdvdread4/libdvdnav)
- streaming
- Matroska(internal)
- (S)VCD
@@ -108,10 +107,10 @@ for Red Hat and Fedora RPMs I am using FHS-compliant paths:
/etc/mplayer/ system-wide configs
/usr/bin/ binaries
/usr/lib/codecs/ binary codecs
+/usr/lib64/codecs/ binary codecs on 64bit Linux
/usr/share/doc/mplayer-version/ docs
/usr/share/man/man1/ man page
/usr/share/man/XX/man1/ translated man page
-/usr/share/mplayer/font/ fonts
/usr/share/mplayer/skins/ GUI skins
You MUST NOT include the codecs.conf file in your package. It is useful
@@ -134,12 +133,9 @@ mplayer contains MPlayer binary without GUI (mplayer),
config files, man pages and documentation;
required by mplayer-gui
mplayer-codecs-* contain binary codecs available from MPlayer's site
-mplayer-font-* contain various bitmap fonts for OSD (obsolete)
mplayer-gui contains MPlayer binary with GUI (gmplayer);
contains default skin (Blue)
mplayer-skin-* contain various MPlayer GUI skins
-mplayer-vidix contains VIDIX support library for MPlayer
-mplayer-vidix-* contain VIDIX drivers for specific cards, one per package
There is no strict policy for now, just use your common sense.
diff --git a/DOCS/tech/codecs-in.html b/DOCS/tech/codecs-in.html
index c4b29aa..488512d 100644
--- a/DOCS/tech/codecs-in.html
+++ b/DOCS/tech/codecs-in.html
@@ -6,19 +6,15 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" link="#666666" vlink="#666666" alink="#666666">
-<table width=750 border="0">
- <tr>
- <td align="right">
- <p> </p>
- <p><b>Status of codecs support</b></p>
- </td>
- </tr>
- <tr>
- <td>
- <p><a href="#vc">Video codecs</a><br><a href="#ac">Audio codecs</a><br></p>
- </td>
- </tr>
+<h1>Status of codecs support</h1>
+
+<ul>
+ <li><a href="#vc">Video codecs</a></li>
+ <li><a href="#ac">Audio codecs</a></li>
+</ul>
+
+<table width=750 border="0">
<tr>
<td align="center">
<b><font face="Verdana, Arial, Helvetica, sans-serif" size="5"><a name="vc">Video codecs:</a></font></b><br><br>
@@ -31,7 +27,7 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">fourcc</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
<td width=40 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">out</font></b></td>
<td align=center colspan=2><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
@@ -51,8 +47,8 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">fourcc</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
- <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">problem</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
+ <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %4 -->
<tr>
@@ -69,8 +65,8 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">fourcc</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
- <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">problem</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
+ <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %2 -->
<tr>
@@ -87,8 +83,8 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">fourcc</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
- <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">problem</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
+ <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %3 -->
<tr>
@@ -111,7 +107,7 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">format</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
<td align=center colspan=3><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %5 -->
@@ -129,8 +125,8 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">format</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
- <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">problem</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
+ <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %9 -->
<tr>
@@ -147,8 +143,8 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">format</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
- <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">problem</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
+ <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %7 -->
<tr>
@@ -165,8 +161,8 @@
<tr>
<td width=150 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codec name</font></b></td>
<td width=70 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">format</font></b></td>
- <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">codecfile</font></b></td>
- <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">problem</font></b></td>
+ <td width=120 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">driver name</font></b></td>
+ <td colspan=3 align=center><b><font color="#AAAAAA" face="Verdana, Arial, Helvetica, sans-serif" size="2">comments</font></b></td>
</tr>
<!-- %8 -->
<tr>
diff --git a/DOCS/tech/mingw-crosscompile.txt b/DOCS/tech/mingw-crosscompile.txt
new file mode 100644
index 0000000..e4e2dbe
--- /dev/null
+++ b/DOCS/tech/mingw-crosscompile.txt
@@ -0,0 +1,32 @@
+Due to a lack of Windows developers, it is a good idea to allow Linux
+developers to do at least some basic check of their code.
+This HOWTO explains how to set up MinGW cross-compilation under Debian.
+
+First, you need to install the "mingw32" package and get a MPlayer SVN
+checkout.
+
+Next, you need quite a lot of dependencies. Since this is for testing and
+not actually use, the easiest way is to use this package:
+http://natsuki.mplayerhq.hu/~reimar/mpl_mingw32.tar.bz2
+NOTE that this is likely to be quite out-dated and might include packages
+with security issues, so do not use it to build binaries for real use.
+
+After extracting this package into the MPlayer source-tree,
+you only need to run the included linux-mingw.sh to configure (it just runs
+./configure --host-cc=cc --target=i686-mingw32msvc --cc=i586-mingw32msvc-cc
+--windres=i586-mingw32msvc-windres --ranlib=i586-mingw32msvc-ranlib
+--with-extraincdir="$PWD/osdep/mingw32"
+--with-extralibdir="$PWD/osdep/mingw32"
+--with-freetype-config="$PWD/osdep/mingw32/ftconf") and then run make.
+
+You should be able to run the generated binary with Wine, if you want to.
+
+The steps as command-lines:
+
+sudo apt-get install mingw32
+svn co svn://svn.mplayerhq.hu/mplayer/trunk MPlayer-mingw
+cd MPlayer-mingw
+wget http://natsuki.mplayerhq.hu/~reimar/mpl_mingw32.tar.bz2
+tar -xjf mpl_mingw32.tar.bz2
+sh linux-mingw.sh
+make
diff --git a/DOCS/tech/release-howto.txt b/DOCS/tech/release-howto.txt
index 5cf0fef..b490f80 100644
--- a/DOCS/tech/release-howto.txt
+++ b/DOCS/tech/release-howto.txt
@@ -15,17 +15,12 @@ preparations:
create the release tree:
- tag Subversion with release name
+- Add a VERSION file with the release version to the root of the source tree.
- update release.sh script with version number
***the following steps are done automatically by release.sh script***
- checkout the mplayer src tree
- check out FFmpeg subdirs
- remove obsolete DOCS translations, help files
-- replace version.sh with this (change version number too...):
-
-============
-#!/bin/sh
-echo "#define VERSION \"1.0pre5-$1 \"" > version.h
-============
- build the HTML docs from XML sources, then clean up:
make html-chunked; make releaseclean
@@ -38,9 +33,9 @@ release the tree:
***end of part done by release.sh**
test it (download to your local machine, extract, compile, run)
- - compilers: gcc 3, gcc 2.95, mingw, cygwin
+ - compilers: gcc 4.x, gcc 3.x, gcc 2.95, MinGW, Cygwin
- architectures: PPC, AMD64, x86 with MMX[2], SSE[2], 3DNow
- - OS: Linux, BSD, Windows, MacOS X
+ - OS: Linux, BSD, Windows, Mac OS X
copy to FTP:
cp MPlayer-0.90rc5.tar.bz2 /home/ftp/MPlayer/releases/
diff --git a/DOCS/tech/slave.txt b/DOCS/tech/slave.txt
index 2ad276d..df23826 100644
--- a/DOCS/tech/slave.txt
+++ b/DOCS/tech/slave.txt
@@ -30,6 +30,8 @@ As a temporary hack, there is also the _experimental_ "pausing_keep_force "
prefix, with which MPlayer will not exit the pause loop at all.
Like this you can avoid the "frame stepping" effect of "pausing_keep "
but most commands will either not work at all or behave in unexpected ways.
+For "set_mouse_pos" and "key_down_event", "pausing_keep_force" is the default
+since other values do not make much sense for them.
Available commands ('mplayer -input cmdlist' will print a list):
diff --git a/DOCS/tech/svn-howto.txt b/DOCS/tech/svn-howto.txt
index ee93f9e..126e809 100644
--- a/DOCS/tech/svn-howto.txt
+++ b/DOCS/tech/svn-howto.txt
@@ -36,8 +36,8 @@ I. BASICS:
0. Get Subversion:
- The MPlayer project server runs Subversion 1.4. For optimal compatibility
- you should use version 1.4 or later.
+ The MPlayer project server runs Subversion 1.5. For optimal compatibility
+ you should use version 1.5 or later.
1. Checking out the source tree:
diff --git a/DOCS/tech/win32-codec-howto.txt b/DOCS/tech/win32-codec-howto.txt
index 81dfafc..e6a684d 100644
--- a/DOCS/tech/win32-codec-howto.txt
+++ b/DOCS/tech/win32-codec-howto.txt
@@ -13,10 +13,10 @@ If you want to add a codec yourself, read DOCS/tech/codecs.conf.txt.
-VFW codecs
+VfW codecs
~~~~~~~~~~
-VFW (Video for Windows) is the old video API for Windows. Its codecs have
+VfW (Video for Windows) is the old video API for Windows. Its codecs have
the '.dll' or (rarely) '.drv' extension. If MPlayer fails at playing your
AVI with this kind of message:
@@ -25,17 +25,36 @@ Cannot find codec matching selected -vo and video format 0x55594648.
It means your AVI is encoded with a codec which has the HFYU fourcc (HFYU =
HuffYUV codec, DIV3 = DivX Low Motion, etc.). Now that you know this, you
-have to find out which DLL Windows loads in order to play this file. In our
-case, the 'system.ini' contains this information in a line that reads:
+have to find out which DLL Windows loads in order to play this file.
+You can find the VfW codec by searching the internet for e.g. VIDC.HFYU.
+
+In our case, the 'system.ini' also contains this information in a line that reads:
VIDC.HFYU=huffyuv.dll
-So you need the 'huffyuv.dll' file. Note that the audio codecs are
-specified by the MSACM prefix:
+So you need the 'huffyuv.dll' file.
+
+
+
+ACM Codecs:
+~~~~~~~~~~~~
+MPlayer may fail at playing the audio in your file with this message:
+
+Cannot find codec for audio format 0x55.
+Read DOCS/HTML/en/codecs.html!
+Audio: no sound
+
+MPlayer calls this the TwoCC format identifier. From the TwoCC list we find:
+
+0x0055 MPEG-1 Layer 3 (MP3)
+
+If you are lucky, you can then just search the internet for "codec acm"
+e.g. "mp3 acm". Or if the codec is already installed on Windows,
+it will show up in the system.ini as:
msacm.l3acm=L3codeca.acm
-This is the MP3 codec.
+Note that the audio codecs are specified by the MSACM prefix:
@@ -53,7 +72,7 @@ New Method:
Using Microsoft GraphEdit (fast)
-- Get GraphEdit from either DirectX SDK or doom9.
+- Get GraphEdit from the Microsoft SDK, DirectX SDK or doom9.
- Start 'graphedit.exe'.
- From the menu select "Graph -> Insert Filters".
- Expand item "DirectShow Filters".
@@ -86,3 +105,15 @@ Take a deep breath and start searching the registry...
If searching fails, try enabling all the checkboxes. You may have
false hits, but you may get lucky...
+
+
+
+Tips:
+~~~~~~~
+If you get an error loading a new codec, it may need some more files to work.
+Start the filemon utility before loading MPlayer to find out which DLLs are
+trying to be loaded.
+
+Your codec may load some external DLL libraries. If the codec is already
+installed in Windows, run listdlls wmplayer.exe while Windows Media
+Player is playing your file to find out which.
diff --git a/DOCS/xml/configure b/DOCS/xml/configure
index a61f564..a15cdec 100755
--- a/DOCS/xml/configure
+++ b/DOCS/xml/configure
@@ -186,11 +186,13 @@ then
if test -z "$_fake_chunk_xsl"
then
echo "Found xsltproc. If it works, it's probably the best choice."
+ # HACK: xslt always need a target file if a doctype is set
+ _xsltcommand="OUTPUT=\"\$1\"; if test -d \"\$OUTPUT\" ; then OUTPUT=\"\$OUTPUT/dummy.html\" ; fi;"
if test -n "$_catalog"
then
- _xsltcommand="xsltproc --catalogs -o \$1 \$2 \$3"
+ _xsltcommand="$_xsltcommand xsltproc --catalogs -o \$OUTPUT \$2 \$3"
else
- _xsltcommand="xsltproc -o \$1 \$2 \$3"
+ _xsltcommand="$_xsltcommand xsltproc -o \$OUTPUT \$2 \$3"
fi
else
echo "Found xsltproc but no stylesheets on your system."
diff --git a/DOCS/xml/en/encoding-guide.xml b/DOCS/xml/en/encoding-guide.xml
index 4acc840..1be8519 100644
--- a/DOCS/xml/en/encoding-guide.xml
+++ b/DOCS/xml/en/encoding-guide.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- $Revision: 28510 $ -->
+<!-- $Revision: 28984 $ -->
<chapter id="encoding-guide">
<title>Encoding with <application>MEncoder</application></title>
@@ -357,7 +357,7 @@ practice, this means a value high enough so that it poses no limit, like
10000Kbit.) With no real restriction on bitrate, the result is that
the codec will use the lowest
possible quantizer for each macroblock (as specified by
-<option>vqmin</option> for
+<option>vqmin</option> for
<systemitem class="library">libavcodec</systemitem>, which is 2 by default).
As soon as you specify a
low enough bitrate that the codec
@@ -1327,7 +1327,7 @@ With these things in mind, here is our first example:
mencoder <replaceable>capture.avi</replaceable> -mc 0 -oac lavc -ovc lavc -lavcopts \
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
</screen>
-Note the <option>ilme</option> and <option>ildct</option> options.
+Note the <option>ilme</option> and <option>ildct</option> options.
</para>
</sect2>
@@ -1421,7 +1421,7 @@ which widely depend on personal taste and technical constraints.
bugs which have not yet been noticed and which can ruin an encode.
This is simply the tradeoff for using bleeding-edge technology.
</para>
-
+
<para>
What is more, beginning to use a new codec requires that you spend some
time becoming familiar with its options, so that you know what
@@ -1453,13 +1453,13 @@ which widely depend on personal taste and technical constraints.
However, they may have some very advanced options that, if enabled,
will make the encode really slow for marginal gains.
</para>
-
+
<para>
If you are after blazing speed you should stick around the default
settings of the video codec (although you should still try the other
options which are mentioned in other sections of this guide).
</para>
-
+
<para>
You may also consider choosing a codec which can do multi-threaded
processing, though this is only useful for users of machines with
@@ -1605,7 +1605,7 @@ will encode <replaceable>destination_sound.wav</replaceable> with
the encoding quality 1, which is roughly equivalent to 80Kb/s, and
is the minimum quality at which you should encode if you care about
quality.
-Please note that <application>MEncoder</application> currently cannot
+Please note that <application>MEncoder</application> currently cannot
mux Vorbis audio tracks
into the output file because it only supports AVI and MPEG
containers as an output, each of which may lead to audio/video
@@ -1773,7 +1773,7 @@ only cover its usage.
</para>
<para>
-Probably the easiest way to get started with Matroska is to use
+Probably the easiest way to get started with Matroska is to use
<application>MMG</application>, the graphical frontend shipped with
<application>mkvtoolnix</application>, and follow the
<ulink url="http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html">guide to mkvmerge GUI (mmg)</ulink>
@@ -2240,7 +2240,7 @@ will be 24000/1001 frames per second.
accurate method available for encoding both telecine and
"mixed progressive and telecine".
<screen>
-mencoder dvd://1 -oac copy -vf pullup,softskip
+mencoder dvd://1 -oac copy -vf pullup,softskip
-ovc lavc -ofps 24000/1001<!--
--></screen>
</para></listitem>
@@ -4006,7 +4006,7 @@ random differences in the achieved bitrate.
This option is for choosing the motion estimation search method.
Altering this option provides a straightforward quality-vs-speed
tradeoff. <option>me=dia</option> is only a few percent faster than
- the default search, at a cost of under 0.1dB global PSNR. The
+ the default search, at a cost of under 0.1dB global PSNR. The
default setting (<option>me=hex</option>) is a reasonable tradeoff
between speed and quality. <option>me=umh</option> gains a little under
0.1dB global PSNR, with a speed penalty that varies depending on
@@ -4235,7 +4235,7 @@ random differences in the achieved bitrate.
(understanding that there are diminishing returns which may become
vanishingly low, or even zero). The video stream will still have seekable
points as long as there are some scene changes.
-</para></listitem>
+</para></listitem>
<listitem>
<para>
<emphasis role="bold">deblock</emphasis>:
@@ -4551,17 +4551,17 @@ and other options. This is known to work on x86 on both *NIX and Windows.
</para>
<para>
First you must build the <application>vfw2menc</application> program.
-It is located in the <filename class="directory">TOOLS</filename> subdirectory
+It is located in the <filename class="directory">TOOLS</filename> subdirectory
of the MPlayer source tree.
To build on Linux, this can be done using <application>Wine</application>:
<screen>winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32</screen>
-To build on Windows in <application>MinGW</application> or
+To build on Windows in <application>MinGW</application> or
<application>Cygwin</application> use:
<screen>gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32</screen>
To build on <application>MSVC</application> you will need getopt.
-Getopt can be found in the original <application>vfw2menc</application>
+Getopt can be found in the original <application>vfw2menc</application>
archive available at:
The <ulink url="http://oss.netfarm.it/mplayer-win32.php">MPlayer on win32</ulink> project.
</para>
@@ -4571,13 +4571,13 @@ Below is an example with the VP6 codec.
<screen>
vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
</screen>
-This will open the VP6 codec dialog window.
+This will open the VP6 codec dialog window.
Repeat this step for the second pass
and use <option>-s <replaceable>secondpass.mcf</replaceable></option>.
</para>
</informalexample>
<para>
-Windows users can use
+Windows users can use
<option>-xvfwopts codec=vp6vfw.dll:compdata=dialog</option> to have
the codec dialog display before encoding starts.
</para>
@@ -4882,11 +4882,11 @@ mp4creator -optimize narnia.mp4</screen>
<para>
If you want to add tags to your video that show up in iTunes, you can use
<ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>.
-
+
<screen>AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen>
The <option>--metaEnema</option> option removes any existing metadata
- (<application>mp4creator</application> inserts its name in the
+ (<application>mp4creator</application> inserts its name in the
"encoding tool" tag), and <option>--freefree</option> reclaims the
space from the deleted metadata.
The <option>--stik</option> option sets the type of video (such as Movie
@@ -4954,7 +4954,7 @@ compliant.
<tbody>
<row>
<entry>NTSC DVD</entry>
- <entry>720x480, 704x480, 352x480, 352x240</entry>
+ <entry>720x480, 704x480, 352x480, 352x240</entry>
<entry>MPEG-2</entry>
<entry>9800 kbps</entry>
<entry>48000 Hz</entry>
@@ -4967,7 +4967,7 @@ compliant.
<entry>NTSC DVD</entry>
<entry>352x240<footnote id='fn-rare-resolutions'><para>
These resolutions are rarely used for DVDs because
- they are fairly low quality.</para></footnote></entry>
+ they are fairly low quality.</para></footnote></entry>
<entry>MPEG-1</entry>
<entry>1856 kbps</entry>
<entry>48000 Hz</entry>
@@ -5062,7 +5062,7 @@ highly bitrate-starved and require effort to obtain acceptable quality.
<title>GOP Size Constraints</title>
<para>
-DVD, VCD, and SVCD also constrain you to relatively low
+DVD, VCD, and SVCD also constrain you to relatively low
GOP (Group of Pictures) sizes.
For 30 fps material the largest allowed GOP size is 18.
For 25 or 24 fps, the maximum is 15.
@@ -5078,7 +5078,7 @@ The GOP size is set using the <option>keyint</option> option.
VCD video is required to be CBR at 1152 kbps.
This highly limiting constraint also comes along with an extremely low vbv
buffer size of 327 kilobits.
-SVCD allows varying video bitrates up to 2500 kbps, and a somewhat less
+SVCD allows varying video bitrates up to 2500 kbps, and a somewhat less
restrictive vbv buffer size of 917 kilobits is allowed.
DVD video bitrates may range anywhere up to 9800 kbps (though typical
bitrates are about half that), and the vbv buffer size is 1835 kilobits.
@@ -5125,7 +5125,7 @@ DVD (with timestamps on every frame, if possible):
<para>
DVD with NTSC Pullup:
<screen>-of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001</screen>
-This allows 24000/1001 fps progressive content to be encoded at 30000/1001
+This allows 24000/1001 fps progressive content to be encoded at 30000/1001
fps whilst maintaining DVD-compliance.
</para>
@@ -5191,7 +5191,7 @@ or in the manual page.
<para>
If the audio sample rate in the original file is not the same as
required by the target format, sample rate conversion is required.
-This is achieved using the <option>-srate</option> option and
+This is achieved using the <option>-srate</option> option and
the <option>-af lavcresample</option> audio filter together.
</para>
@@ -5259,7 +5259,7 @@ or DVD:
Used to set the GOP size.
18 for 30fps material, or 15 for 25/24 fps material.
Commercial producers seem to prefer keyframe intervals of 12.
- It is possible to make this much larger and still retain compatibility
+ It is possible to make this much larger and still retain compatibility
with most players.
A <option>keyint</option> of 25 should never cause any problems.
</para></listitem>
diff --git a/DOCS/xml/en/mencoder.xml b/DOCS/xml/en/mencoder.xml
index c5f7607..074df6d 100644
--- a/DOCS/xml/en/mencoder.xml
+++ b/DOCS/xml/en/mencoder.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- $Revision: 27843 $ -->
+<!-- $Revision: 29001 $ -->
<chapter id="mencoder">
<title>Basic usage of <application>MEncoder</application></title>
@@ -608,7 +608,7 @@ mencoder mf://<replaceable>frame001.jpg,frame002.jpg</replaceable> -mf w=800:h=6
Creating an MPEG-4 file from explicit list of JPEG files (list.txt in current
directory contains the list of files to use as source, one per line):
<screen>
-mencoder mf://<replaceable>@list.txt</replaceable> -mf w=800:h=600:fps=25:type=jpg \
+mencoder mf://<replaceable>@list.txt</replaceable> -mf w=800:h=600:fps=25:type=jpg \
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>output.avi</replaceable>
</screen>
</para>
diff --git a/DOCS/xml/en/tvinput.xml b/DOCS/xml/en/tvinput.xml
index 945c148..ad91fbd 100644
--- a/DOCS/xml/en/tvinput.xml
+++ b/DOCS/xml/en/tvinput.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- $Revision: 27815 $ -->
+<!-- $Revision: 29001 $ -->
<chapter id="tv">
<title>TV</title>
@@ -52,7 +52,7 @@ Here are just a few tips:
<listitem><para>
Choose some sane image dimensions. The dimensions of the resulting image
should be divisible by 16.
-</para></listitem>
+</para></listitem>
<listitem>
<para>
If you capture the video with the vertical resolution higher than half
@@ -88,7 +88,7 @@ Here are just a few tips:
time. If you have a large capture buffer, <application>MEncoder</application>
can survive an overload for few seconds but nothing more. It's better to
turn off the 3D OpenGL screensavers and similar stuff.
-</para></listitem>
+</para></listitem>
<listitem><para>
Don't mess with the system clock. <application>MEncoder</application> uses the
system clock for doing A/V sync. If you adjust the system clock (especially
@@ -118,7 +118,7 @@ Here are just a few tips:
<filename>linux/Documentation/sound/btaudio</filename> file (in the kernel
tree, not <application>MPlayer</application>'s) for some instructions on using
this driver.
-</para></listitem>
+</para></listitem>
<listitem><para>
If <application>MEncoder</application> cannot open the audio device, make
sure that it is really available. There can be some trouble with the sound
@@ -251,7 +251,7 @@ Here is an example for Russian:
</row>
<row>
<entry>C</entry>
- <entry>Cycle through teletext rendering modes (opaque, transparent, inverted opaque,
+ <entry>Cycle through teletext rendering modes (opaque, transparent, inverted opaque,
inverted transparent</entry>
</row>
<row>
diff --git a/DOCS/xml/en/usage.xml b/DOCS/xml/en/usage.xml
index 84b4e19..a03829b 100644
--- a/DOCS/xml/en/usage.xml
+++ b/DOCS/xml/en/usage.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- $Revision: 28532 $ -->
+<!-- $Revision: 29001 $ -->
<chapter id="usage">
<title>Usage</title>
@@ -602,11 +602,11 @@ is specified.
<title>MPEG audio Passthrough</title>
<para>
-Digital TV transmissions (such as DVB and ATSC) and some DVDs usually have
+Digital TV transmissions (such as DVB and ATSC) and some DVDs usually have
MPEG audio streams (in particular MP2).
-Some MPEG hardware decoders such as full-featured DVB cards and DXR2
-adapters can natively decode this format.
-<application>MPlayer</application> can be configured to relay the audio data
+Some MPEG hardware decoders such as full-featured DVB cards and DXR2
+adapters can natively decode this format.
+<application>MPlayer</application> can be configured to relay the audio data
without decoding it.
</para>
diff --git a/DOCS/xml/en/video.xml b/DOCS/xml/en/video.xml
index 198e5cc..84f353b 100644
--- a/DOCS/xml/en/video.xml
+++ b/DOCS/xml/en/video.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- $Revision: 27770 $ -->
+<!-- $Revision: 29001 $ -->
<chapter id="video">
<title>Video output devices</title>
@@ -2007,7 +2007,7 @@ the native OSD feature of DVB cards.
<application>MPlayer</application> supports hardware accelerated playback
with the Creative DXR2 card.
</para>
-
+
<para>
First of all you will need properly installed DXR2 drivers. You can find
the drivers and installation instructions at the
diff --git a/DOCS/xml/html-common.xsl b/DOCS/xml/html-common.xsl
index dc3cb14..d803b3d 100644
--- a/DOCS/xml/html-common.xsl
+++ b/DOCS/xml/html-common.xsl
@@ -2,7 +2,9 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
-<xsl:output method="html" indent="no"/>
+<xsl:output method="html" indent="no"
+ doctype-system="http://www.w3.org/TR/html4/loose.dtd"
+ doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/>
<!-- **************
Set parameters
diff --git a/DOCS/xml/hu/cd-dvd.xml b/DOCS/xml/hu/cd-dvd.xml
index c109c90..02887e4 100644
--- a/DOCS/xml/hu/cd-dvd.xml
+++ b/DOCS/xml/hu/cd-dvd.xml
@@ -167,7 +167,7 @@ nevezett értelmetlen korlátozást.
Szégyen, hogy a DVD meghajtókat arra kényszerÃtik, hogy a hat különbözÅ
régióból, amire a világot felosztották, csak az egyikben gyártott lemezeket
fogadják el. Hogy egy asztal körül ülŠpár ember hogy állhatott elŠegy ilyen
-ötlettel és hogyan várhatják el, hogy a 21. században elfogadnak egy ilyen
+ötlettel és hogyan várhatják el, hogy a 21. században elfogadnak egy ilyen
ötletet, az minden képzeletet felülmúl.
</para>
diff --git a/DOCS/xml/hu/documentation.xml b/DOCS/xml/hu/documentation.xml
index bf35629..83838c3 100644
--- a/DOCS/xml/hu/documentation.xml
+++ b/DOCS/xml/hu/documentation.xml
@@ -63,7 +63,7 @@ Az <application>MPlayer</application> egy Linuxon működŠvideolejátszó (fut
számos más Unix-on és nem-x86 processzorokon is, lásd <xref linkend="ports"/>).
Le tudja játszani a legtöbb MPEG, VOB, AVI, Ogg/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4,
FLI, RM, NuppelVideo, yuv4mpeg, FILM, RoQ, PVA, és Matroska file-t, és ezekhez
-felsorakoztat jónéhány natÃv, XAnim, RealPlayer és Win32 DLL codecet. Nézhetsz vele
+felsorakoztat jónéhány natÃv, XAnim, RealPlayer és Win32 DLL codecet. Nézhetsz vele
Video CD-t, SVCD-t, DVD-t, 3ivx, RealMedia, Sorenson, Theora
és MPEG-4 (DivX) filmet is. Az <application>MPlayer</application>
másik nagy elÅnye a megjelenÃtési módok széles választékában rejlik.
@@ -73,7 +73,7 @@ az SDL/GGI drivereit is), és néhány alacsony szintű kártyaspecifikus vezér
(Matrox, 3dfx, Radeon, Mach64, Permedia3) is használható!
Legtöbbjük támogat szoftveres vagy hardveres nagyÃtást, Ãgy a teljesképernyÅs
mód is elérhetÅ. Az <application>MPlayer</application> támogat továbbá hardveres
-MPEG kártyákkal történÅ dekódolást/megjelenÃtést, Ãgy például a
+MPEG kártyákkal történÅ dekódolást/megjelenÃtést, Ãgy például a
<link linkend="dvb">DVB</link> és <link linkend="dxr3">DXR3/Hollywood+</link>
kártyákon!
Ãs még nem is szóltam a szép, élsÃmÃtott, árnyékolt feliratozásról
diff --git a/DOCS/xml/hu/encoding-guide.xml b/DOCS/xml/hu/encoding-guide.xml
index e675f7b..434c7a4 100644
--- a/DOCS/xml/hu/encoding-guide.xml
+++ b/DOCS/xml/hu/encoding-guide.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- synced with r28510 -->
+<!-- synced with r28984 -->
<chapter id="encoding-guide">
<title>Kódolás a <application>MEncoder</application>rel</title>
@@ -1429,13 +1429,13 @@ a személyes igények és a technikai korlátok határoznak meg.
Azonban van néhány nagyon fejlett opció, amit ha engedélyezel, nagyon
nagy mértékben lelassÃtják a kódolást csekély javulást produkálva.
</para>
-
+
<para>
Ha a fantasztikus sebességet keresed, a codec alapértelmezett beállÃtásai
körül nézelÅdj (azonban Ãgy is ajánlott kipróbálni egyéb opciókat,
amiket ezen leÃrás más fejezetei emlÃtenek).
</para>
-
+
<para>
Megfontolandó olyan codec-et választani, ami több-szálas módban
dolgozza fel a forrást, azonban ez csak a több processzoros géppel
@@ -1681,7 +1681,7 @@ megy.
</para>
<para>
-Ezen hatalmas hátrány mellett az AVI-nak a következŠfŠkorlátai vannak:
+Ezen hatalmas hátrány mellett az AVI-nak a következŠfŠkorlátai vannak:
</para>
<orderedlist>
@@ -2364,7 +2364,7 @@ Az idÅtartam/hely alapján kell döntened.
</listitem>
<listitem><formalpara>
- <title>A kódolási paraméterekrÅl és a minÅségrÅl:</title>
+ <title>A kódolási paraméterekrÅl és a minÅségrÅl:</title>
<para>
Csak mert itt javasoltam az <option>mbd=2</option>-t, nem jelenti
azt, hogy máshol ne lehetne használni. A <option>trell</option>-lel
@@ -3902,7 +3902,7 @@ elért bitráta különbségbÅl adódik.
globális PSNR növelést jelent, változó 15%-33%-os sebességveszteség árán.
Mivel a kódolási idÅ vs. minÅség arány eléggé rossz, csak akkor ajánlott
használni, ha minden egyes bit fontos és a kódolási idÅ nem számÃt.
- </para>
+ </para>
</listitem>
<listitem>
<para>
@@ -3954,7 +3954,7 @@ elért bitráta különbségbÅl adódik.
Ezek legtöbbször ritka, szélsÅséges esetek, de ha teljesen biztos
akarsz lenni, gondolkozz el rajta, hogy van-e a videódban teljes
képernyÅs ismétlÅdÅ, csillogó minta vagy nagyon nagy ideiglenes
- elzáródás, ami kikényszerÃthet egy I-kockát.
+ elzáródás, ami kikényszerÃthet egy I-kockát.
Az elsÅ lépés <option>frameref</option>-jét úgy állÃtsd be, hogy
elég nagy legyen ahhoz, hogy tartalmazza a villódzási ciklust
(vagy az elzárást). Például ha a jelenet oda-vissza ugrál két kép
@@ -4197,7 +4197,7 @@ elért bitráta különbségbÅl adódik.
azt, hogy egyre csökkenŠhasznot hoz, mely végül szinte észrevehetetlenül
kicsi vagy akár nulla lesz). A videó folyam még Ãgy is fog tartalmazni
kereshetÅ pontokat, amÃg van benne jelenet váltás.
-</para></listitem>
+</para></listitem>
<listitem>
<para>
<emphasis role="bold">deblock</emphasis>:
@@ -4255,7 +4255,7 @@ elért bitráta különbségbÅl adódik.
Ez <emphasis role="bold">még</emphasis> nem igazolja a deblocking
szűrÅ erÅsségének csökkentését.
Ãltalában jobb zajminÅséget érhetsz el az utófeldolgozással.
- Ha a H.264 kódolásod túl foltos vagy maszatos, próbáld meg
+ Ha a H.264 kódolásod túl foltos vagy maszatos, próbáld meg
lejátszani a <option>-vf noise</option> kapcsolóval.
A <option>-vf noise=8a:4a</option>-nak a gyenge mellékhatásokat
el kell tüntetnie.
@@ -4409,7 +4409,7 @@ opciókat, ha a codec hibázik vagy rossz kimenetet ad.
<entry>jp2avi.dll</entry>
<entry>ImagePower MJPEG2000 (IPJ2)</entry>
<entry>d860a11766da0d0ea064672c6833768b</entry>
- <entry><option>-vf flip</option></entry>
+ <entry><option>-vf flip</option></entry>
</row>
<row>
<entry>m3jp2k32.dll</entry>
@@ -4845,7 +4845,7 @@ mp4creator -optimize narnia.mp4</screen>
<para>
Ha tag-eket akarsz hozzáfűzni a videódhoz, amiket az iTunes megjelnÃt, használhatod az
<ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>-t.
-
+
<screen>AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen>
A <option>--metaEnema</option> opció eltávolÃt minden meglévÅ metadata-t
@@ -4879,7 +4879,7 @@ mp4creator -optimize narnia.mp4</screen>
A <application>MEncoder</application> képes VCD, SCVD és DVD formátumú
MPEG fájlok létrehozására a
<systemitem class="library">libavcodec</systemitem> könyvtár segÃtségével.
-Ezek a fájlok a
+Ezek a fájlok a
<ulink url="http://www.gnu.org/software/vcdimager/vcdimager.html">vcdimager</ulink>-rel
vagy a
<ulink url="http://dvdauthor.sourceforge.net/">dvdauthor</ulink>-ral
@@ -4918,7 +4918,7 @@ legyen.
<tbody>
<row>
<entry>NTSC DVD</entry>
- <entry>720x480, 704x480, 352x480, 352x240</entry>
+ <entry>720x480, 704x480, 352x480, 352x240</entry>
<entry>MPEG-2</entry>
<entry>9800 kbps</entry>
<entry>48000 Hz</entry>
@@ -4931,7 +4931,7 @@ legyen.
<entry>NTSC DVD</entry>
<entry>352x240<footnote id='fn-rare-resolutions'><para>
Ezek a felbontások ritkán használatosak a DVD-ken, mert elég
- alacsony minÅségűek.</para></footnote></entry>
+ alacsony minÅségűek.</para></footnote></entry>
<entry>MPEG-1</entry>
<entry>1856 kbps</entry>
<entry>48000 Hz</entry>
diff --git a/DOCS/xml/hu/faq.xml b/DOCS/xml/hu/faq.xml
index caafd6d..45d30c3 100644
--- a/DOCS/xml/hu/faq.xml
+++ b/DOCS/xml/hu/faq.xml
@@ -466,7 +466,7 @@ Letöltöttem egy videót egy P2P hálózatról és nem megy!
</para></question>
<answer><para>
A fájlod valószÃnűleg sérült vagy fake. Ha egy ismerÅstÅl kaptad és Å
-azt mondja, hogy működik, hasonlÃtsd össze az
+azt mondja, hogy működik, hasonlÃtsd össze az
<application>md5sum</application> hash-eket.
</para></answer>
</qandaentry>
diff --git a/DOCS/xml/hu/mencoder.xml b/DOCS/xml/hu/mencoder.xml
index 6bce44c..2b429d6 100644
--- a/DOCS/xml/hu/mencoder.xml
+++ b/DOCS/xml/hu/mencoder.xml
@@ -373,7 +373,7 @@ mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
<para>
A <application>MEncoder</application> támogatja a Sony PSP videó formátumába
-történÅ kódolást, de a PSP szoftverének változatától függÅen különbözÅ
+történÅ kódolást, de a PSP szoftverének változatától függÅen különbözÅ
korlátok vannak.
Nyugodt lehetsz, ha a következŠkorlátokat figyelembe veszed:
<itemizedlist>
@@ -610,7 +610,7 @@ mencoder mf://<replaceable>frame001.jpg,frame002.jpg</replaceable> -mf w=800:h=6
Egy MPEG-4 fájl létrehozása JPEG fájlok explicit listájából (az aktuális könyvtárban
lévŠlista.txt tartalmazza a forrásként felhasználandó fájlokat, soronként egyet):
<screen>
-mencoder mf://<replaceable>@lista.txt</replaceable> -mf w=800:h=600:fps=25:type=jpg \
+mencoder mf://<replaceable>@lista.txt</replaceable> -mf w=800:h=600:fps=25:type=jpg \
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
</screen>
</para>
diff --git a/DOCS/xml/hu/ports.xml b/DOCS/xml/hu/ports.xml
index 18452fb..2a52ae9 100644
--- a/DOCS/xml/hu/ports.xml
+++ b/DOCS/xml/hu/ports.xml
@@ -527,7 +527,7 @@ levelezési listát is segÃtéségért és a legfrissebb információkért.
A hivatalos Windows-os binárisok megtalálhatóak a
<ulink url="http://www.mplayerhq.hu/design7/dload.html">letöltési oldalon</ulink>.
A külsÅ forrásból származó telepÃtÅ csomagokat és egyszerű GUI frontend-eket
-összegyűjtöttük a
+összegyűjtöttük a
<ulink url="http://www.mplayerhq.hu/design7/projects.html#windows">kapcsolódó projektek oldal</ulink>
Windows-os részében.
</para>
@@ -616,7 +616,7 @@ is segÃthet. Ha a lejátszás szaggatott, próbáld meg a
<option>-autosync 100</option> opciót. Ha ezek közül bármelyik segÃt, Ãrd
be a konfigurációs fájlodba.
</para>
-
+
<note>
<para>
Ha Pentium 4-ed van és fagyásokat tapasztalsz a RealPlayer
@@ -670,7 +670,7 @@ alaphelyzetben nincs benne a <application>MinGW</application>-ben.
ÃllÃtsd be a <option>--prefix=/mingw</option> kapcsolóval és
telepÃtsd, mielÅtt az <application>MPlayer</application>t fordÃtanád.
</para>
-
+
<para>
Az <application>MPlayer</application> és a szükséges függvénykönyvtárak
elkészÃtésének módját elolvashatod az
@@ -824,7 +824,7 @@ Lehet, hogy szerkesztened kell a <filename>config.mak</filename> fájlt és
<para>
Folytasd a
<screen>make</screen>
-paranccsal, majd menj a mplayerosx könyvtárba és Ãrd be
+paranccsal, majd menj a mplayerosx könyvtárba és Ãrd be
<screen>make dist</screen>
Ez egy tömörÃtett <systemitem>.dmg</systemitem> archÃvot hoz létre
egy használatra kész binárissal.
diff --git a/DOCS/xml/hu/skin.xml b/DOCS/xml/hu/skin.xml
index 71f95ef..cfbb458 100644
--- a/DOCS/xml/hu/skin.xml
+++ b/DOCS/xml/hu/skin.xml
@@ -92,13 +92,13 @@ aktiválható).
és <emphasis>cÃmkék</emphasis>.
Minden egyes elemnek meg kell adnod a pozÃcióját és a méretét.
</para>
-
+
<para>
Egy <emphasis role="bold">gomb</emphasis>nak három állása van (lenyomott,
felengedett, letiltott), Ãgy a képe függÅlegesen három részre van osztva.
Lásd a <link linkend="skin-button">gomb</link> elemet a részletekért.
</para>
-
+
<para>
Egy <emphasis role="bold">potmeter</emphasis>nek (fÅként a keresÅ sáv és a
hangerÅ/balansz állÃtó) bármennyi fázisa lehet a képének egymás alatti
@@ -106,7 +106,7 @@ aktiválható).
<link linkend="skin-hpotmeter">hpotmeter</link>t és
<link linkend="skin-potmeter">potmeter</link>t a részletekért.
</para>
-
+
<para>
A <emphasis role="bold">cÃmkék</emphasis> egy kicsit különlegesek: A
megrajzolásukhoz szükséges karaktereket egy kép fájlból nyerjük és
@@ -781,7 +781,7 @@ Ahol az <literal><replaceable>image</replaceable></literal> a betűhöz használ
kép fájl neve (nem kell megadnod a kiterjesztést).
<anchor id="skin-font-char"/>
<programlisting>"char" = X, Y, width, height</programlisting>
-Itt az <literal>X</literal> és az <literal>Y</literal> a
+Itt az <literal>X</literal> és az <literal>Y</literal> a
<literal>char</literal> karakter pozÃcióját adja meg a képen (<literal>0,0</literal>
a bal felsŠsarok). A <literal>width</literal> és a <literal>height</literal>
a karakter méretei pixelben.
diff --git a/DOCS/xml/hu/video.xml b/DOCS/xml/hu/video.xml
index f6055a9..7f1d109 100644
--- a/DOCS/xml/hu/video.xml
+++ b/DOCS/xml/hu/video.xml
@@ -2020,7 +2020,7 @@ lejátszást a Creative DXR2 kártyával.
<para>
Mindenek elÅtt megfelelÅen telepÃtett DXR2 vezérlÅ kell. A vezérlÅt és
-a telepÃtési útmutatót megtalálhatod a
+a telepÃtési útmutatót megtalálhatod a
<ulink url="http://dxr2.sf.net/">DXR2 Resource Center</ulink> oldalán.
</para>
diff --git a/DOCS/xml/ru/encoding-guide.xml b/DOCS/xml/ru/encoding-guide.xml
index 1f8024f..e7200d6 100644
--- a/DOCS/xml/ru/encoding-guide.xml
+++ b/DOCS/xml/ru/encoding-guide.xml
@@ -7,17 +7,17 @@
<title>Создание вÑÑококаÑеÑÑвенного MPEG-4 ("DivX") Ñипа из DVD ÑилÑма</title>
<para>
-Ðдним ÑаÑÑо задаваемÑм вопÑоÑом ÑвлÑеÑÑÑ "Ðак мне ÑделаÑÑ Ñип Ñамого вÑÑокого
+Ðдним ÑаÑÑо задаваемÑм вопÑоÑом ÑвлÑеÑÑÑ "Ðак мне ÑделаÑÑ Ñип Ñамого вÑÑокого
каÑеÑÑва Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑазмеÑа?". ÐÑÑгой вопÑÐ¾Ñ "Ðак мне ÑоздаÑÑ DVD Ñип Ñ ÑамÑм
-вÑÑоким возможнÑм каÑеÑÑвом? Я не беÑпокоÑÑÑ Ð¾ ÑазмеÑе Ñайла, мне нÑжно лиÑÑ
+вÑÑоким возможнÑм каÑеÑÑвом? Я не беÑпокоÑÑÑ Ð¾ ÑазмеÑе Ñайла, мне нÑжно лиÑÑ
наилÑÑÑее каÑеÑÑво.".
</para>
<para>
ÐоÑледний вопÑоÑ, поÑ
оже, оÑÑаÑÑи невеÑно ÑÑоÑмÑлиÑован. РконÑе конÑов, еÑли
-ÐÑ Ð½Ðµ беÑпокоиÑеÑÑ Ð¾ ÑазмеÑе Ñайла, поÑÐµÐ¼Ñ Ð±Ñ Ð¿ÑоÑÑо не ÑкопиÑоваÑÑ Ð²ÐµÑÑ MPEG-2
+ÐÑ Ð½Ðµ беÑпокоиÑеÑÑ Ð¾ ÑазмеÑе Ñайла, поÑÐµÐ¼Ñ Ð±Ñ Ð¿ÑоÑÑо не ÑкопиÑоваÑÑ Ð²ÐµÑÑ MPEG-2
видео поÑок Ñ DVD? ÐонеÑно, ÐÐ°Ñ AVI Ñайл бÑÐ´ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð¾ÐºÐ¾Ð»Ð¾ 5GB,
-но еÑли ÐÑ Ð¶ÐµÐ»Ð°ÐµÑе наилÑÑÑее каÑеÑÑво и не волнÑеÑеÑÑ Ð¾ ÑазмеÑе, Ñо ÑÑо,
+но еÑли ÐÑ Ð¶ÐµÐ»Ð°ÐµÑе наилÑÑÑее каÑеÑÑво и не волнÑеÑеÑÑ Ð¾ ÑазмеÑе, Ñо ÑÑо,
неÑомненно, лÑÑÑее ÑеÑение.
</para>
@@ -38,7 +38,7 @@
</para>
<para>
-ÐÑли ÑÑо кажеÑÑÑ Ð´Ð»Ñ ÐÐ°Ñ ÑлиÑком ÑложнÑм, Ñо Ðам, пожалÑй, ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ
+ÐÑли ÑÑо кажеÑÑÑ Ð´Ð»Ñ ÐÐ°Ñ ÑлиÑком ÑложнÑм, Ñо Ðам, пожалÑй, ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ
один из многоÑиÑленнÑÑ
неплоÑ
иÑ
ÑÑонÑендов, ÑказаннÑÑ
в
<ulink url="http://www.mplayerhq.hu/design7/projects.html#mencoder_frontends">Ñазделе MEncoder</ulink>
наÑей ÑÑÑаниÑÑ ÑодÑÑвеннÑÑ
пÑоекÑов.
@@ -59,8 +59,8 @@
<para>
ÐеÑвÑм и наиболее важнÑм Ñагом пеÑед кодиÑованием должно бÑÑÑ Ð¾Ð¿Ñеделение
Ñипа ÑодеÑжимого, Ñ ÐºÐ¾ÑоÑÑм ÐÑ ÑабоÑаеÑе.
-ÐÑли иÑÑоÑником ÐаÑиÑ
иÑÑ
однÑÑ
маÑеÑиалов ÑвлÑеÑÑÑ DVD или
-ÑиÑоковеÑаÑелÑное/кабелÑное/ÑпÑÑниковое TV, оно бÑÐ´ÐµÑ ÑодеÑжаÑÑÑÑ Ð² одном из
+ÐÑли иÑÑоÑником ÐаÑиÑ
иÑÑ
однÑÑ
маÑеÑиалов ÑвлÑеÑÑÑ DVD или
+ÑиÑоковеÑаÑелÑное/кабелÑное/ÑпÑÑниковое TV, оно бÑÐ´ÐµÑ ÑодеÑжаÑÑÑÑ Ð² одном из
двÑÑ
ÑоÑмаÑов: NTSC Ð´Ð»Ñ Ð¡ÐµÐ²ÐµÑной ÐмеÑики и Японии, PAL Ð´Ð»Ñ ÐвÑÐ¾Ð¿Ñ Ð¸ Ñ.д..
Ðднако, важно понимаÑÑ, ÑÑо ÑÑо ÑолÑко ÑоÑмаÑиÑование Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° на
Ñелевидении, и оно ÑаÑÑо
@@ -69,7 +69,7 @@
ÐпÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, ÑÑо NTSC маÑеÑиал ÑÑÑеÑÑвенно более Ñложен Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑованиÑ,
Ñ.к. в нÑм ÑодеÑжиÑÑÑ Ð±Ð¾Ð»ÑÑе ÑлеменÑов, коÑоÑÑе нÑжно иденÑиÑиÑиÑоваÑÑ.
ÐÐ»Ñ Ð¿ÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑдаÑного кодиÑованиÑ, Ðам необÑ
одимо знаÑÑ Ð¸ÑÑ
однÑй ÑоÑмаÑ.
-ÐÑказ Ð¾Ñ Ð¿ÑинÑÑÐ¸Ñ ÑÑого во внимание пÑиведÑÑ Ðº ÑазлиÑнÑм деÑекÑам в ÐаÑем
+ÐÑказ Ð¾Ñ Ð¿ÑинÑÑÐ¸Ñ ÑÑого во внимание пÑиведÑÑ Ðº ÑазлиÑнÑм деÑекÑам в ÐаÑем
кодиÑовании, вклÑÑÐ°Ñ Ð±ÐµÐ·Ð¾Ð±ÑазнÑе гÑебеÑки (аÑÑеÑакÑÑ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑки)
и повÑоÑÑÑÑиеÑÑ Ð¸Ð»Ð¸ даже поÑеÑÑннÑе кадÑÑ.
ÐÑоме ÑÑ
ÑдÑÐµÐ½Ð¸Ñ ÐºÐ°ÑÑинки, аÑÑеÑакÑÑ Ñак же ÑменÑÑаÑÑ ÑÑÑекÑивноÑÑÑ ÐºÐ¾Ð´Ð¸ÑованиÑ:
@@ -80,7 +80,7 @@
<sect3 id="menc-feat-dvd-mpeg4-preparing-encode-fps">
<title>ÐпÑеделение кадÑовой ÑаÑÑоÑÑ Ð¸ÑÑоÑника</title>
<para>
-ÐÐ¾Ñ ÑпиÑок, ÑодеÑжаÑий обÑие ÑÐ¸Ð¿Ñ Ð¸ÑÑ
однÑÑ
маÑеÑиалов, где они,
+ÐÐ¾Ñ ÑпиÑок, ÑодеÑжаÑий обÑие ÑÐ¸Ð¿Ñ Ð¸ÑÑ
однÑÑ
маÑеÑиалов, где они,
пÑеимÑÑеÑÑвенно, вÑÑÑеÑаÑÑÑÑ Ð¸ иÑ
ÑвойÑÑва:
</para>
@@ -110,7 +110,7 @@
РдÑÑгиÑ
оÑноÑениÑÑ
аналогиÑно PAL.
</para></listitem>
<listitem><para>
- <emphasis role="bold">ÐнимаÑиÑ</emphasis>: ÐбÑÑно ÑиÑÑеÑÑÑ Ð½Ð° 24 fps,
+ <emphasis role="bold">ÐнимаÑиÑ</emphasis>: ÐбÑÑно ÑиÑÑеÑÑÑ Ð½Ð° 24 fps,
но Ñакже ÑÑÑеÑÑвÑÑÑ ÑазновидноÑÑи Ñо ÑмеÑанной кадÑовой ÑаÑÑоÑой.
</para></listitem>
<listitem><para>
@@ -119,7 +119,7 @@
24 и 30 кадÑов в ÑекÑÐ½Ð´Ñ ÑипиÑÐ½Ñ Ð´Ð»Ñ NTSC, и 25 fps ÑипиÑно Ð´Ð»Ñ PAL.
</para></listitem>
<listitem><para>
- <emphasis role="bold">СÑаÑÑй ÑилÑм</emphasis>: РазлиÑнÑе низкие
+ <emphasis role="bold">СÑаÑÑй ÑилÑм</emphasis>: РазлиÑнÑе низкие
кадÑовÑе ÑаÑÑоÑÑ.
</para></listitem>
</itemizedlist>
@@ -146,18 +146,18 @@
<emphasis role="bold">ÐÑбой</emphasis> ÑилÑм, подгоÑовленнÑй длÑ
пÑоÑмоÑÑа на Ñелевидении (вклÑÑÐ°Ñ DVD), пÑеобÑазÑеÑÑÑ Ð² ÑоÑмаÑ,
оÑнованнÑй на полÑÑ
.
-<!-- FIXME: СÑÑеÑÑвÑÐµÑ Ð»Ð¸ лÑÑÑий *кÑаÑкий* (1-2 Ñлова) пеÑевод длÑ
- ÑеÑминов pulldown и telecine? РлиÑеÑаÑÑÑе, коÑоÑÑÑ Ñ Ð½Ð°ÑÑл,
- иÑполÑзÑÑÑ Ð¸Ð»Ð¸ ÑказаннÑе мной, по ÑÑÑи дела, ÑÑанÑлиÑеÑаÑии,
+<!-- FIXME: СÑÑеÑÑвÑÐµÑ Ð»Ð¸ лÑÑÑий *кÑаÑкий* (1-2 Ñлова) пеÑевод длÑ
+ ÑеÑминов pulldown и telecine? РлиÑеÑаÑÑÑе, коÑоÑÑÑ Ñ Ð½Ð°ÑÑл,
+ иÑполÑзÑÑÑ Ð¸Ð»Ð¸ ÑказаннÑе мной, по ÑÑÑи дела, ÑÑанÑлиÑеÑаÑии,
или Ñак и оÑÑавлÑÑÑ Ð°Ð½Ð³Ð»Ð¸Ð¹Ñкие названиÑ.
Ð ÑоÑнÑй пеÑевод можно вÑполниÑÑ ÑолÑко ÑелÑм пÑедложением
- (Ñ.е. опÑеделением), ÑÑо ÑовеÑÑенно неÑмеÑÑно в конÑекÑÑе
+ (Ñ.е. опÑеделением), ÑÑо ÑовеÑÑенно неÑмеÑÑно в конÑекÑÑе
данного докÑменÑа, где ÑÑи ÑеÑÐ¼Ð¸Ð½Ñ ÑаÑÑо вÑÑÑеÑаÑÑÑÑ. -->
-РазлиÑнÑе меÑодÑ, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑÑÑ
ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñделано, ÑовокÑпно
-назÑваÑÑÑÑ "ÑелеÑин" (англ. telecine), одним из ваÑианÑов коÑоÑого
+РазлиÑнÑе меÑодÑ, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑÑÑ
ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñделано, ÑовокÑпно
+назÑваÑÑÑÑ "ÑелеÑин" (англ. telecine), одним из ваÑианÑов коÑоÑого
ÑвлÑеÑÑÑ Ð¾ÑвÑаÑиÑелÑнÑй NTSC "3:2 пÑлдаÑн" (англ. pulldown).
-Ðа иÑклÑÑением ÑлÑÑаев, когда ÑоÑÐ¼Ð°Ñ Ð¸ÑÑ
одного маÑеÑиала бÑл
-Ñакже оÑнован на полÑÑ
(и Ñ Ñакой же ÑаÑÑоÑой полей), ÐÑ Ð¿Ð¾Ð»ÑÑиÑе
+Ðа иÑклÑÑением ÑлÑÑаев, когда ÑоÑÐ¼Ð°Ñ Ð¸ÑÑ
одного маÑеÑиала бÑл
+Ñакже оÑнован на полÑÑ
(и Ñ Ñакой же ÑаÑÑоÑой полей), ÐÑ Ð¿Ð¾Ð»ÑÑиÑе
ÑилÑм в ÑоÑмаÑе оÑлиÑном Ð¾Ñ Ð¸ÑÑ
одного.
</para>
@@ -165,14 +165,14 @@
<title>СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко обÑиÑ
Ñипов пÑлдаÑна:</title>
<listitem><para>
<emphasis role="bold">PAL 2:2 пÑлдаÑн</emphasis>: ÐаилÑÑÑий из вÑеÑ
.
- ÐаждÑй ÐºÐ°Ð´Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð·Ð° вÑÐµÐ¼Ñ Ð´Ð»Ð¸ÑелÑноÑÑи двÑÑ
полей пÑÑем
+ ÐаждÑй ÐºÐ°Ð´Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð·Ð° вÑÐµÐ¼Ñ Ð´Ð»Ð¸ÑелÑноÑÑи двÑÑ
полей пÑÑем
извлеÑÐµÐ½Ð¸Ñ ÑÑÑнÑÑ
и неÑÑÑнÑÑ
ÑÑÑок и иÑ
попеÑеменного показа.
ÐÑли в иÑÑ
одном маÑеÑиале 24 fps, Ñо ÑÑо ÑÑкоÑÑÐµÑ Ð²Ð¾ÑпÑоизведение ÑилÑма
на 4%.
</para></listitem>
<listitem><para>
<emphasis role="bold">PAL 2:2:2:2:2:2:2:2:2:2:2:3 пÑлдаÑн</emphasis>:
- ÐаждÑй 12-й ÐºÐ°Ð´Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð·Ð° вÑÐµÐ¼Ñ Ð´Ð»Ð¸ÑелÑноÑÑи ÑÑÑÑ
полей,
+ ÐаждÑй 12-й ÐºÐ°Ð´Ñ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð·Ð° вÑÐµÐ¼Ñ Ð´Ð»Ð¸ÑелÑноÑÑи ÑÑÑÑ
полей,
вмеÑÑо двÑÑ
.
ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ 4%-го ÑÑкоÑениÑ, но Ð´ÐµÐ»Ð°ÐµÑ Ð¾Ð±ÑаÑение
пÑоÑеÑÑа ÑÑÑеÑÑвенно более ÑложнÑм.
@@ -183,7 +183,7 @@
<emphasis role="bold">NTSC 3:2 ÑелеÑин</emphasis>: ÐадÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑÑÑ
попеÑеменно за вÑÐµÐ¼Ñ Ð´Ð»Ð¸ÑелÑноÑÑи 3-Ñ
полей или 2-Ñ
полей.
ÐÑо даÑÑ ÑаÑÑоÑÑ Ð¿Ð¾Ð»ÐµÐ¹ в 2.5 Ñаза болÑÑе иÑÑ
одной ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов.
- РезÑлÑÑÐ°Ñ Ñакже оÑÐµÐ½Ñ Ð½ÐµÐ·Ð½Ð°ÑиÑелÑно замедлÑеÑÑÑ Ð¾Ñ 60 до 60000/1001
+ РезÑлÑÑÐ°Ñ Ñакже оÑÐµÐ½Ñ Ð½ÐµÐ·Ð½Ð°ÑиÑелÑно замедлÑеÑÑÑ Ð¾Ñ 60 до 60000/1001
полей в ÑекÑÐ½Ð´Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð°Ð½Ð¸Ñ ÑаÑÑоÑÑ Ð¿Ð¾Ð»ÐµÐ¹ NTSC.
</para></listitem>
<listitem><para>
@@ -205,19 +205,19 @@
</para>
<para>
-Ðогда видео наÑ
одиÑÑÑ Ð½Ð° DVD, поÑледоваÑелÑнÑе паÑÑ Ð¿Ð¾Ð»ÐµÐ¹
+Ðогда видео наÑ
одиÑÑÑ Ð½Ð° DVD, поÑледоваÑелÑнÑе паÑÑ Ð¿Ð¾Ð»ÐµÐ¹
гÑÑппиÑÑÑÑÑÑ ÐºÐ°Ðº кадÑ, даже еÑли они не пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ
одновÑеменного оÑобÑажениÑ.
СÑандаÑÑ MPEG-2, иÑполÑзÑемÑй на DVD и ÑиÑÑовом TV пÑедоÑÑавлÑеÑ
возможноÑÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно кодиÑоваÑÑ Ð¸ÑÑ
однÑе кадÑÑ Ñ Ð¿Ð¾ÑÑÑоÑной
-ÑазвÑÑÑкой и ÑоÑ
ÑанÑÑÑ ÑиÑло полей, в ÑеÑении коÑоÑÑÑ
кадÑ
+ÑазвÑÑÑкой и ÑоÑ
ÑанÑÑÑ ÑиÑло полей, в ÑеÑении коÑоÑÑÑ
кадÑ
должен бÑÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½, в его заголовке.
ÐÑли бÑл иÑполÑзован Ñакой меÑод, ÑилÑм ÑаÑÑо бÑÐ´ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ
как "мÑгкий ÑелеÑин", Ñ.к. пÑоÑеÑÑ ÑолÑко ÑказÑÐ²Ð°ÐµÑ DVD-плееÑÑ
о необÑ
одимоÑÑи пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑлдаÑна к ÑилÑмÑ, не изменÑÑ Ð¿Ñи ÑÑом
Ñам ÑилÑм.
ÐÑÐ¾Ñ ÑлÑÑай ÑÑÑеÑÑвенно пÑедпоÑÑиÑелен, Ñ.к. он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»ÐµÐ³ÐºÐ¾ обÑаÑÑн
-(в дейÑÑвиÑелÑноÑÑи, пÑоигноÑиÑован) кодеÑом и Ñ.к. он ÑоÑ
ÑанÑеÑ
+(в дейÑÑвиÑелÑноÑÑи, пÑоигноÑиÑован) кодеÑом и Ñ.к. он ÑоÑ
ÑанÑеÑ
макÑималÑное каÑеÑÑво.
Ðднако, многие ÑиÑоковеÑаÑелÑнÑе и DVD ÑÑÑдии не иÑполÑзÑÑÑ
надлежаÑÑÑ ÑеÑ
Ð½Ð¾Ð»Ð¾Ð³Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ вмеÑÑо ÑÑого пÑоизводÑÑ
@@ -226,28 +226,28 @@
</para>
<para>
-ÐоÑÑдок дейÑÑÐ²Ð¸Ñ Ð² ÑакиÑ
ÑлÑÑаÑÑ
бÑÐ´ÐµÑ Ð¾Ð¿Ð¸Ñан
+ÐоÑÑдок дейÑÑÐ²Ð¸Ñ Ð² ÑакиÑ
ÑлÑÑаÑÑ
бÑÐ´ÐµÑ Ð¾Ð¿Ð¸Ñан
<link linkend="menc-feat-telecine">позже в данном ÑÑководÑÑве</link>.
-СейÑÐ°Ñ Ð¼Ñ Ð´Ð°Ð´Ð¸Ð¼ Ðам неÑколÑко ÑовеÑов по иденÑиÑикаÑии Ñипа
+СейÑÐ°Ñ Ð¼Ñ Ð´Ð°Ð´Ð¸Ð¼ Ðам неÑколÑко ÑовеÑов по иденÑиÑикаÑии Ñипа
маÑеÑиала, Ñ ÐºÐ¾ÑоÑÑм ÐÑ ÑабоÑаеÑе:
</para>
<itemizedlist>
-<title>ÐблаÑÑи NTSC:</title>
+<title>Ð ÐµÐ³Ð¸Ð¾Ð½Ñ NTSC:</title>
<listitem><para>
- ÐÑли пÑи пÑоÑмоÑÑе ÐаÑего ÑилÑма <application>MPlayer</application>
+ ÐÑли пÑи пÑоÑмоÑÑе ÐаÑего ÑилÑма <application>MPlayer</application>
вÑводиÑ, ÑÑо ÑаÑÑоÑа кадÑов бÑла изменена до 24000/1001 и она
никогда не менÑеÑÑÑ Ð¾Ð±ÑаÑно, Ñо ÑÑо поÑÑи навеÑнÑка ÑодеÑжимое
- Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой, коÑоÑое бÑло подвеÑгнÑÑо
+ Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой, коÑоÑое бÑло подвеÑгнÑÑо
"мÑÐ³ÐºÐ¾Ð¼Ñ ÑелеÑинÑ".
</para></listitem>
<listitem><para>
- ÐÑли <application>MPlayer</application> оÑобÑÐ°Ð¶Ð°ÐµÑ Ð¿Ð¾Ð¿ÐµÑеменнÑе
- пеÑеклÑÑÐµÐ½Ð¸Ñ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов Ð¼ÐµÐ¶Ð´Ñ 24000/1001 и 30000/1001, и ÐÑ
+ ÐÑли <application>MPlayer</application> оÑобÑÐ°Ð¶Ð°ÐµÑ Ð¿Ð¾Ð¿ÐµÑеменнÑе
+ пеÑеклÑÑÐµÐ½Ð¸Ñ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов Ð¼ÐµÐ¶Ð´Ñ 24000/1001 и 30000/1001, и ÐÑ
иногда видиÑе "гÑебеÑки", еÑÑÑ Ð½ÐµÑколÑко возможноÑÑей.
- СегменÑÑ Ñ 24000/1001 fps поÑÑи навеÑнÑка ÑвлÑÑÑÑÑ "мÑгко
+ СегменÑÑ Ñ 24000/1001 fps поÑÑи навеÑнÑка ÑвлÑÑÑÑÑ "мÑгко
ÑелеÑиненнÑм" ÑодеÑжимÑм Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой, но ÑаÑÑи Ñ
- 30000/1001 fps могÑÑ Ð±ÑÑÑ ÐºÐ°Ðº "жÑÑÑко ÑелеÑиненÑм" ÑодеÑжимÑм
+ 30000/1001 fps могÑÑ Ð±ÑÑÑ ÐºÐ°Ðº "жÑÑÑко ÑелеÑиненÑм" ÑодеÑжимÑм
Ñ 24000/1001 fps, Ñак и NTSC видео Ñ 60000/1001 полÑми в ÑекÑндÑ.
ÐÑполÑзÑйÑе два нижеÑледÑÑÑиÑ
ÑÑководÑÑва Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого,
Ñ ÐºÐ°ÐºÐ¸Ð¼ ÑлÑÑаем ÐÑ Ð¸Ð¼ÐµÐµÑе дело.
@@ -255,7 +255,7 @@
<listitem><para>
ÐÑли <application>MPlayer</application> никогда не показÑваеÑ
Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°Ð´Ñовой ÑаÑÑоÑÑ Ð¸ каждÑй оÑделÑнÑй кадÑ, где еÑÑÑ
- движение, оказÑваеÑÑÑ Ð³ÑебÑнкой, ÐÐ°Ñ ÑилÑм еÑÑÑ NTSC видео Ñ
+ движение, оказÑваеÑÑÑ Ð³ÑебÑнкой, ÐÐ°Ñ ÑилÑм еÑÑÑ NTSC видео Ñ
60000/1001 полÑми в ÑекÑндÑ.
</para></listitem>
<listitem><para>
@@ -267,7 +267,7 @@
</itemizedlist>
<itemizedlist>
-<title>ÐблаÑÑи PAL:</title>
+<title>Ð ÐµÐ³Ð¸Ð¾Ð½Ñ PAL:</title>
<listitem><para>
ÐÑли ÐÑ Ð½Ðµ видиÑе никакой гÑебÑнки, ÐÐ°Ñ ÑилÑм еÑÑÑ 2:2 пÑлдаÑн.
</para></listitem>
@@ -276,18 +276,18 @@
ÐÐ°Ñ ÑилÑм пÑедÑÑавлÑÐµÑ Ñобой 2:2:2:2:2:2:2:2:2:2:2:3 пÑлдаÑн.
</para></listitem>
<listitem><para>
- ÐÑли ÐÑ Ð²Ñегда видиÑе гÑебÑнки во вÑÐµÐ¼Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ, знаÑÐ¸Ñ ÐаÑ
+ ÐÑли ÐÑ Ð²Ñегда видиÑе гÑебÑнки во вÑÐµÐ¼Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ, знаÑÐ¸Ñ ÐаÑ
ÑилÑм ÑвлÑеÑÑÑ PAL видео Ñ 50 полÑми в ÑекÑндÑ.
</para></listitem>
</itemizedlist>
<note><title>ÐодÑказка:</title>
<para>
- <application>MPlayer</application> Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¼ÐµÐ´Ð»Ð¸ÑÑ Ð²Ð¾ÑпÑоизведение
+ <application>MPlayer</application> Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¼ÐµÐ´Ð»Ð¸ÑÑ Ð²Ð¾ÑпÑоизведение
ÑилÑма Ñ Ð¾Ð¿Ñией -speed или воÑпÑоизводиÑÑ ÐµÐ³Ð¾ покадÑово.
- ÐопÑобÑйÑе иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ <option>-speed 0.2</option> длÑ
- оÑÐµÐ½Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ пÑоÑмоÑÑа ÑилÑма или неÑколÑко Ñаз нажмиÑе
- клавиÑÑ "<keycap>.</keycap>" Ð´Ð»Ñ Ð²Ð¾ÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кадÑа
+ ÐопÑобÑйÑе иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ <option>-speed 0.2</option> длÑ
+ оÑÐµÐ½Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ пÑоÑмоÑÑа ÑилÑма или нажимайÑе
+ клавиÑÑ "<keycap>.</keycap>" Ð´Ð»Ñ Ð²Ð¾ÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кадÑа
за Ñаз и идеÑниÑиÑиÑÑйÑе обÑазеÑ, еÑли не можеÑе его ÑвидеÑÑ Ð½Ð°
полной ÑкоÑоÑÑи.
</para>
@@ -298,7 +298,7 @@
<!-- ********** -->
<sect2 id="menc-feat-dvd-mpeg4-2pass">
-<title>ÐоÑÑоÑннÑй кванÑоваÑÐµÐ»Ñ Ð¿ÑоÑив многопÑоÑ
одноÑÑи</title>
+<title>ÐоÑÑоÑннÑй кванÑоваÑÐµÐ»Ñ Ð² ÑÑавнении Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿ÑоÑ
одноÑÑÑÑ</title>
<para>
Ðозможно кодиÑоваÑÑ ÐÐ°Ñ ÑилÑм, ÑиÑоко ваÑÑиÑÑÑ ÐºÐ°ÑеÑÑво.
@@ -310,7 +310,7 @@
</para>
<para>
-ÐÑÑÑ ÑÑи подÑ
ода пÑи кодиÑовании видео: поÑÑоÑннÑй биÑпоÑок (CBR),
+ÐÑÑÑ ÑÑи подÑ
ода пÑи кодиÑовании видео: поÑÑоÑннÑй биÑпоÑок (CBR),
поÑÑоÑннÑй кванÑоваÑÐµÐ»Ñ Ð¸ многопÑоÑ
одноÑÑÑ (ABR или ÑÑÑеднÑннÑй биÑпоÑок).
</para>
@@ -322,8 +322,8 @@
Ðднако, в ÑакиÑ
пÑоÑÑÑÑ
ÑежимаÑ
как CBR кодеÑÑ Ð½Ðµ знаÑÑ Ð·Ð°Ð³ÑÑженноÑÑÑ
биÑпоÑока в поÑледÑÑÑиÑ
ÑÑенаÑ
и Ñ.о. не могÑÑ Ð¿ÑевÑÑиÑÑ Ð·Ð°ÑÑебованнÑй
биÑпоÑок Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑиÑ
пÑомежÑÑков вÑемени.
-Ðолее пÑодвинÑÑÑе ÑежимÑ, Ñакие как многопÑоÑ
однÑй Ñежим, могÑÑ
-ÑÑиÑÑваÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿ÑедÑдÑÑиÑ
пÑоÑ
одов; ÑÑо ÑеÑÐ°ÐµÑ Ð¿ÑоблемÑ,
+Ðолее ÑовеÑÑеннÑе ÑежимÑ, Ñакие как многопÑоÑ
однÑй Ñежим, могÑÑ
+ÑÑиÑÑваÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿ÑедÑдÑÑиÑ
пÑоÑ
одов; ÑÑо ÑеÑÐ°ÐµÑ Ð¿ÑоблемÑ,
ÑпомÑнÑÑÑÑ Ð²ÑÑе.
</para>
@@ -346,10 +346,10 @@
Ркаждом из ÑÑиÑ
Ñежимов видеокодек (Ñакой как
<systemitem class="library">libavcodec</systemitem>)
ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ°Ð´Ñ Ð½Ð° макÑоблоки ÑазмеÑом 16Ñ
16 пикÑелей и поÑом
-пÑименÑÐµÑ ÐºÐ²Ð°Ð½ÑоваÑÐµÐ»Ñ Ðº ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¼Ð°ÐºÑоблокÑ. Чем менÑÑе кванÑовалÑ,
+пÑименÑÐµÑ ÐºÐ²Ð°Ð½ÑоваÑÐµÐ»Ñ Ðº ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¼Ð°ÐºÑоблокÑ. Чем менÑÑе кванÑовалÑ,
Ñем лÑÑÑе каÑеÑÑво и вÑÑе биÑпоÑок.
ÐеÑод, иÑполÑзÑемÑй видео кодеÑом Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого, какой
-кванÑоваÑÐµÐ»Ñ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ макÑоблока, ваÑÑиÑÑеÑÑÑ Ð¸
+кванÑоваÑÐµÐ»Ñ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ макÑоблока, ваÑÑиÑÑеÑÑÑ Ð¸
Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð¸Ñ Ñонкой наÑÑÑойке. (ÐÑо кÑайнее ÑпÑоÑение ÑеалÑного
пÑоÑеÑÑа, но оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÐºÐ¾Ð½ÑепÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ.)
</para>
@@ -361,7 +361,7 @@
ÐÑли ÐÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно не волнÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ñайла, ÐÑ Ð¼Ð¾Ð¶ÐµÑе Ñакже
иÑполÑзоваÑÑ CBR и ÑказаÑÑ Ð±ÐµÑконеÑнÑй биÑпоÑок. (Ðа пÑакÑике ÑÑо
ознаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, доÑÑаÑоÑно болÑÑое Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¾ÑÑÑÑÑÑвиÑ
-пÑедела, напÑимеÑ, 10000 ÐбиÑ.) Ð ÑезÑлÑÑаÑе, без ÑеалÑного огÑаниÑениÑ
+пÑедела, напÑимеÑ, 10000 ÐбиÑ.) Ð ÑезÑлÑÑаÑе, без ÑеалÑного огÑаниÑениÑ
биÑпоÑока, кодек иÑполÑзÑÐµÑ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑÑий возможнÑй кванÑоваÑÐµÐ»Ñ Ð´Ð»Ñ
каждого макÑоблока (как Ñказано опÑией
<option>vqmin</option> длÑ
@@ -371,27 +371,26 @@
иÑпоÑÑиÑе каÑеÑÑво ÐаÑего видео.
ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑого, Ðам, веÑоÑÑно, пÑидÑÑÑÑ ÑменÑÑиÑÑ ÑазмеÑÑ
ÐаÑего видео, ÑоглаÑно меÑодÑ, опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð´Ð°Ð»ÐµÐµ в ÑÑом ÑÑководÑÑве.
-РобÑиÑ
ÑеÑÑаÑ
, Ðам ÑледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ CBR ÑовÑем, еÑли ÐÑ Ð·Ð°Ð±Ð¾ÑиÑеÑÑ
-о каÑеÑÑве.
+РобÑем, Ðам ÑледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ CBR ÑовÑем, еÑли ÐÑ Ð·Ð°Ð±Ð¾ÑиÑеÑÑ Ð¾ каÑеÑÑве.
</para>
<para>
С поÑÑоÑннÑм кванÑоваÑелем кодек иÑполÑзÑÐµÑ Ð´Ð»Ñ Ð²ÑеÑ
макÑоблоков
один и ÑÐ¾Ñ Ð¶Ðµ кванÑоваÑелÑ, ÑказаннÑй в опÑии
-<option>vqscale</option> (длÑ
+<option>vqscale</option> (длÑ
<systemitem class="library">libavcodec</systemitem>).
-ÐÑли ÐÑ Ñ
оÑиÑе Ñип наивÑÑÑего возможного каÑеÑÑва, Ñнова не взиÑаÑ
+ÐÑли ÐÑ Ñ
оÑиÑе Ñип наивÑÑÑего возможного каÑеÑÑва, Ñнова не взиÑаÑ
на биÑпоÑок, ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ
<option>vqscale=2</option>.
-ÐÑо пÑиведÑÑ Ðº ÑÐ¾Ð¼Ñ Ð¶Ðµ биÑпоÑÐ¾ÐºÑ Ð¸ PSNR (Ð¿Ð¸ÐºÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ñигнала к ÑÑмÑ),
-ÑÑо и CBR Ñ
-<option>vbitrate</option>=беÑконеÑноÑÑи и знаÑением по ÑмолÑаниÑ
+ÐÑо пÑиведÑÑ Ðº ÑÐ¾Ð¼Ñ Ð¶Ðµ биÑпоÑÐ¾ÐºÑ Ð¸ PSNR (Ð¿Ð¸ÐºÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ñигнала к ÑÑмÑ),
+ÑÑо и CBR Ñ
+<option>vbitrate</option>=беÑконеÑноÑÑи и знаÑением по ÑмолÑаниÑ
<option>vqmin</option>, ÑавнÑм 2.
</para>
<para>
ÐÑоблема Ñ Ð¿Ð¾ÑÑоÑннÑм кванÑованием заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо кодек иÑполÑзÑеÑ
-заданнÑй кванÑоваÑÐµÐ»Ñ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ Ñого, ÑÑебÑеÑÑÑ ÑÑо длÑ
+заданнÑй кванÑоваÑÐµÐ»Ñ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ Ñого, ÑÑебÑеÑÑÑ ÑÑо длÑ
макÑоблока или неÑ. То еÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзование болÑÑего кванÑоваÑелÑ
Ð´Ð»Ñ Ð¼Ð°ÐºÑоблока без ÑÑ
ÑдÑÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð³Ð¾ каÑеÑÑва. ÐаÑем ÑÑаÑиÑÑ Ð±Ð¸ÑÑ Ð½Ð°
излиÑне низкий кванÑоваÑелÑ? У ÐаÑего пÑоÑеÑÑоÑа еÑÑÑ ÑÑолÑко ÑакÑов,
@@ -400,13 +399,13 @@
</para>
<para>
-ÐÑи двÑпÑоÑ
одном кодиÑовании пеÑвÑй пÑоÑ
од ÑоздаÑÑ Ñип ÑилÑма Ñак,
+ÐÑи двÑпÑоÑ
одном кодиÑовании пеÑвÑй пÑоÑ
од ÑоздаÑÑ Ñип ÑилÑма Ñак,
как бÑдÑо ÑÑо бÑл CBR, но ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð»Ð¾Ð³ ÑвойÑÑв Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ кадÑа.
ÐÑа инÑоÑмаÑÐ¸Ñ Ð·Ð°Ñем бÑÐ´ÐµÑ Ð¸ÑполÑзована во вÑÐµÐ¼Ñ Ð²ÑоÑого пÑоÑ
ода
Ð´Ð»Ñ Ð¿ÑинÑÑÐ¸Ñ Ð¸Ð½ÑеллекÑÑалÑнÑÑ
ÑеÑений о Ñом, какой кванÑоваÑелÑ
-ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ. Ðо вÑÐµÐ¼Ñ Ð±ÑÑÑÑого Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÑен Ñ
-вÑÑокой деÑализаÑией Ñ Ð±Ð¾Ð»ÑÑой веÑоÑÑноÑÑÑÑ Ð±ÑдÑÑ Ð¸ÑполÑзованÑ
-бÐлÑÑие кванÑоваÑели, а во вÑÐµÐ¼Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÑен
+ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ. Ðо вÑÐµÐ¼Ñ Ð±ÑÑÑÑого Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÑен Ñ
+вÑÑокой деÑализаÑией Ñ Ð±Ð¾Ð»ÑÑой веÑоÑÑноÑÑÑÑ Ð±ÑдÑÑ Ð¸ÑполÑзованÑ
+б<emphasis>о</emphasis>лÑÑие кванÑоваÑели, а во вÑÐµÐ¼Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ ÑÑен
Ñ Ð½Ð¸Ð·ÐºÐ¾Ð¹ деÑализаÑией — менÑÑие.
ÐбÑÑно колиÑеÑÑво Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð³ÑÐ°ÐµÑ ÑÑÑеÑÑвенно более важнÑÑ ÑолÑ,
Ñем колиÑеÑÑво деÑалей.
@@ -417,7 +416,7 @@
ÐÑли ÐÑ Ð¸ÑполÑзÑеÑе <option>vqscale=3</option>, Ñо ÐÑ Ð½Ðµ полÑÑаеÑе
Ñип наивÑÑÑего каÑеÑÑва. ÐÑедположим, ÐÑ Ð´ÐµÐ»Ð°ÐµÑе Ñип DVD, иÑполÑзÑÑ
<option>vqscale=3</option>, ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ 1800 ÐбиÑ.
-ÐÑли ÐÑ ÑделаеÑе двÑпÑоÑ
одное кодиÑование Ñ
+ÐÑли ÐÑ ÑделаеÑе двÑпÑоÑ
одное кодиÑование Ñ
<option>vbitrate=1800</option>, полÑÑивÑееÑÑ Ð²Ð¸Ð´ÐµÐ¾ бÑÐ´ÐµÑ Ð¾Ð±Ð»Ð°Ð´Ð°ÑÑ
<emphasis role="bold">лÑÑÑим каÑеÑÑвом</emphasis> длÑ
<emphasis role="bold">Ñого же биÑпоÑока</emphasis>.
@@ -446,8 +445,8 @@
<para>
ÐÑли ÐаÑей ÑелÑÑ ÑвлÑеÑÑÑ Ð¾Ð¿ÑеделÑннÑй ÑазмеÑ, Ðам нÑжно как-нибÑдÑ
вÑÑиÑлиÑÑ Ð±Ð¸ÑпоÑок. Ðо пеÑед ÑÑим, Ðам нÑжно знаÑÑ, ÑколÑко меÑÑа
-нÑжно заÑезеÑвиÑоваÑÑ Ð¿Ð¾ аÑдио доÑожкÑ(и), Ñак ÑÑо Ðам необÑ
одимо
-<link linkend="menc-feat-dvd-mpeg4-audio">извлеÑÑ Ð¸Ñ
</link> ÑпеÑва.
+нÑжно заÑезеÑвиÑоваÑÑ Ð¿Ð¾ аÑдио доÑожкÑ(и), Ñак ÑÑо Ðам необÑ
одимо
+ÑпеÑва <link linkend="menc-feat-dvd-mpeg4-audio">извлеÑÑ Ð¸Ñ
</link>.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑаÑÑÑиÑаÑÑ Ð±Ð¸ÑпоÑок Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑей ÑоÑмÑлÑ:
<systemitem>биÑпоÑок = (конеÑнÑй_ÑазмеÑ_в_ÐÐÐ°Ð¹Ñ - ÑазмеÑ_звÑка_в_ÐÐайÑ) *
1024 * 1024 / длиÑелÑноÑÑÑ_в_ÑекÑндаÑ
* 8 / 1000</systemitem>.
@@ -465,14 +464,14 @@
<para>
Ðз-за оÑобенноÑÑей MPEG-подобного ÑжаÑиÑ, ÑÑÑеÑÑвÑÑÑ ÑазлиÑнÑе
-огÑаниÑениÑ, коÑоÑÑм ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑледоваÑÑ Ð´Ð»Ñ Ð´Ð¾ÑÑижениÑ
+огÑаниÑениÑ, коÑоÑÑм ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑледоваÑÑ Ð´Ð»Ñ Ð´Ð¾ÑÑижениÑ
макÑималÑного каÑеÑÑва.
MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑваемÑе макÑоблоками.
ÐаждÑй макÑоблок ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· 4 блоков 8Ñ
8 Ñ Ð¸Ð½ÑоÑмаÑией о лÑме
(инÑенÑивноÑÑи) и двÑÑ
блоков 8Ñ
8 Ñ Ð¸Ð½ÑоÑмаÑией о Ñ
Ñоме (ÑвеÑе)
половинного ÑазÑеÑÐµÐ½Ð¸Ñ (один Ð´Ð»Ñ ÐºÑаÑно-биÑÑзовой оÑи и дÑÑгой
Ð´Ð»Ñ Ð¶ÑлÑо-голÑбой оÑи).
-Ðаже еÑли ÑиÑина и вÑÑоÑа ÐаÑего ÑилÑма не кÑаÑÐ½Ñ 16, кодеÑ
+Ðаже еÑли ÑиÑина и вÑÑоÑа ÐаÑего ÑилÑма не кÑаÑÐ½Ñ 16, кодеÑ
вÑÑ Ñавно иÑполÑзÑÐµÑ Ð½Ñжное колиÑеÑÑво макÑоблоков 16Ñ
16 Ð´Ð»Ñ Ð¿Ð¾ÐºÑÑÑиÑ
вÑей облаÑÑи каÑÑинки, дополниÑелÑÐ½Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð±ÑÐ´ÐµÑ Ð²Ð¿ÑÑÑÑÑ Ð¿Ð¾ÑÑаÑена.
Так ÑÑо в инÑеÑеÑаÑ
макÑимизаÑии каÑеÑÑва пÑи ÑикÑиÑованном ÑазмеÑе
@@ -481,8 +480,8 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
У болÑÑинÑÑва DVD Ñакже еÑÑÑ Ð¾Ð¿ÑеделÑнное подобие ÑÑÑнÑÑ
Ð¿Ð¾Ð»Ð¾Ñ Ð½Ð°
-кÑаÑÑ
. ÐÑли ÐÑ Ð¸Ñ
оÑÑавиÑе, ÑÑо можеÑ
-<emphasis role="bold">ÑилÑно</emphasis> повÑедиÑÑ ÐºÐ°ÑеÑÑво
+кÑаÑÑ
. ÐÑли ÐÑ Ð¸Ñ
оÑÑавиÑе, ÑÑо можеÑ
+<emphasis role="bold">ÑилÑно</emphasis> повÑедиÑÑ ÐºÐ°ÑеÑÑво
неÑколÑкими пÑÑÑми.
</para>
@@ -490,7 +489,7 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<listitem>
<para>
MPEG-подобное ÑжаÑие оÑÐµÐ½Ñ ÑÑвÑÑвиÑелÑно к пÑеобÑазованиÑм
- ÑаÑÑоÑнÑÑ
инÑеÑвалов, в ÑаÑÑноÑÑи, к диÑкÑеÑÐ½Ð¾Ð¼Ñ ÐºÐ¾ÑинÑÑномÑ
+ ÑаÑÑоÑнÑÑ
инÑеÑвалов, в ÑаÑÑноÑÑи, к диÑкÑеÑÐ½Ð¾Ð¼Ñ ÐºÐ¾ÑинÑÑномÑ
пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ (DCT), коÑоÑое аналогиÑно пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¤ÑÑÑе.
ÐÑÐ¾Ñ Ð²Ð¸Ð´ ÑжаÑÐ¸Ñ ÑÑÑекÑивен Ð´Ð»Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñазов и ÑглаженнÑÑ
пеÑеÑ
одов, но Ñ Ð½ÐµÐ³Ð¾ возникаÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð¾ÑÑÑÑми кÑаÑми.
@@ -504,22 +503,22 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ ÑолÑко в ÑлÑÑае Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð¾ÑÑÑого кÑÐ°Ñ Ð²Ð½ÑÑÑÑ Ð±Ð»Ð¾ÐºÐ°.
ÐÑли ÐаÑи ÑÑÑнÑе Ð¿Ð¾Ð»Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ ÑоÑно на гÑаниÑаÑ
, кÑаÑнÑÑ
16
пикÑелÑм, ÑÑо не пÑоблема.
- Ðднако, ÑÑÑнÑе полоÑÑ Ð½Ð° DVD Ñедко Ñ
оÑоÑо ÑаÑположенÑ, Ñак ÑÑо
- на пÑакÑике Ðам вÑегда пÑидÑÑÑÑ ÑÑекаÑÑ ÑÑоÑÐ¾Ð½Ñ Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ
- ÑÑиÑ
пÑоблем.
+ Ðднако, ÑÑÑнÑе полоÑÑ Ð½Ð° DVD Ñедко Ñ
оÑоÑо ÑаÑположенÑ, Ñак ÑÑо
+ на пÑакÑике Ðам вÑегда пÑидÑÑÑÑ ÑÑекаÑÑ ÑÑоÑÐ¾Ð½Ñ Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ
+ ÑÑиÑ
пÑоблем.
</para>
</listitem>
</orderedlist>
<para>
-Рдополнение к пÑеобÑазованиÑм ÑаÑÑоÑнÑÑ
инÑеÑвалов, MPEG-подобное
-ÑжаÑие иÑполÑзÑÐµÑ Ð²ÐµÐºÑоÑÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ оÑ
+Рдополнение к пÑеобÑазованиÑм ÑаÑÑоÑнÑÑ
инÑеÑвалов, MPEG-подобное
+ÑжаÑие иÑполÑзÑÐµÑ Ð²ÐµÐºÑоÑÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ оÑ
одного кадÑа к дÑÑгомÑ. ÐекÑоÑÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ, еÑÑеÑÑвенно, ÑабоÑаÑÑ
ÑÑÑеÑÑвенно менее ÑÑÑекÑивно Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ
обÑекÑов, идÑÑиÑ
оÑ
кÑаÑв каÑÑинки, поÑколÑÐºÑ Ð¾Ð½Ð¸ оÑÑÑÑÑÑвÑÑÑ Ð² пÑедÑдÑÑиÑ
кадÑаÑ
.
Ðока каÑÑинка пÑоÑÑиÑаеÑÑÑ Ð²Ð¿Ð»Ð¾ÑÑ Ð´Ð¾ кÑÐ°Ñ ÐºÐ¾Ð´Ð¸ÑÑемой облаÑÑи,
Ñ Ð²ÐµÐºÑоÑов Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ñоблем Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸ÐµÐ¼ обÑекÑов
-за пÑÐµÐ´ÐµÐ»Ñ ÐºÐ°ÑÑинки. Ðднако, пÑи налиÑии ÑеÑнÑÑ
полей
+за пÑÐµÐ´ÐµÐ»Ñ ÐºÐ°ÑÑинки. Ðднако, пÑи налиÑии ÑеÑнÑÑ
полей
могÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¿ÑоблемÑ:
</para>
@@ -529,13 +528,13 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ макÑоблока MPEG-подобное ÑжаÑие ÑоÑ
ÑанÑÐµÑ Ð²ÐµÐºÑоÑ,
опÑеделÑÑÑий ÐºÐ°ÐºÐ°Ñ ÑаÑÑÑ Ð¿ÑедÑдÑÑего кадÑа должна бÑÑÑ ÑкопиÑована
в ÑÑÐ¾Ñ Ð¼Ð°ÐºÑоблок как оÑнова Ð´Ð»Ñ Ð¿ÑедÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑледÑÑÑего кадÑа.
- ÐодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð¸Ñ ÑолÑко оÑÑавÑаÑÑÑ ÑазноÑÑÑ. ÐÑли макÑоблок
+ ÐодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð¸Ñ ÑолÑко оÑÑавÑаÑÑÑ ÑазноÑÑÑ. ÐÑли макÑоблок
пÑоÑÑиÑаеÑÑÑ Ð´Ð¾ кÑÐ°Ñ ÐºÐ°ÑÑинки и ÑодеÑÐ¶Ð¸Ñ ÑаÑÑÑ ÑÑÑной полоÑÑ,
Ñо векÑоÑÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð´ÑÑгиÑ
ÑаÑÑей каÑÑинки пеÑепиÑÑÑ ÑÑÑнÑÑ Ð¿Ð¾Ð»Ð¾ÑÑ.
- ÐÑо ознаÑаеÑ, ÑÑо много биÑов нÑжно поÑÑаÑиÑÑ Ð»Ð¸Ð±Ð¾ на повÑоÑное
- ÑеÑнение пеÑепиÑанной полоÑÑ, либо (ÑÑо более веÑоÑÑно) векÑоÑ
- Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¸ÑполÑзован вовÑе и вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑого
- макÑоблока бÑдÑÑ Ñвно кодиÑованÑ. ÐÑÑгими Ñловами, ÑÑÑекÑивноÑÑÑ
+ ÐÑо ознаÑаеÑ, ÑÑо много биÑов нÑжно поÑÑаÑиÑÑ Ð»Ð¸Ð±Ð¾ на повÑоÑное
+ ÑеÑнение пеÑепиÑанной полоÑÑ, либо (ÑÑо более веÑоÑÑно) векÑоÑ
+ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¸ÑполÑзован вовÑе и вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑого
+ макÑоблока бÑдÑÑ Ñвно кодиÑованÑ. Так или инаÑе, ÑÑÑекÑивноÑÑÑ
кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑеÑÑвенно ÑменÑÑаеÑÑÑ.
</para>
@@ -547,22 +546,22 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<listitem>
<para>
- ÐаконеÑ, пÑедположим, ÑÑо Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð½Ð°Ñ
одÑÑийÑÑ Ð²Ð½ÑÑÑи каÑÑинки
+ ÐаконеÑ, пÑедположим, ÑÑо Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð½Ð°Ñ
одÑÑийÑÑ Ð²Ð½ÑÑÑи каÑÑинки
макÑоблок и обÑÐµÐºÑ Ð´Ð²Ð¸Ð¶ÐµÑÑÑ Ð² ÑÑÐ¾Ñ Ð±Ð»Ð¾Ðº Ð¾Ñ ÐºÑÐ°Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ.
- MPEG-подобное кодиÑование не Ð¼Ð¾Ð¶ÐµÑ ÑказаÑÑ "ÑкопиÑÑй ÑÑ ÑаÑÑÑ,
+ MPEG-подобное кодиÑование не Ð¼Ð¾Ð¶ÐµÑ ÑказаÑÑ "ÑкопиÑÑй ÑÑ ÑаÑÑÑ,
ÑÑо внÑÑÑи каÑÑинки, но не ÑÑÑнÑÑ Ð¿Ð¾Ð»Ð¾ÑÑ". Так ÑÑо ÑÑÑÐ½Ð°Ñ Ð¿Ð¾Ð»Ð¾Ñа
- Ñакже бÑÐ´ÐµÑ ÑкопиÑована внÑÑÑÑ, в ÑезÑлÑÑаÑе Ñего маÑÑа биÑов
+ Ñакже бÑÐ´ÐµÑ ÑкопиÑована внÑÑÑÑ, в ÑезÑлÑÑаÑе Ñего маÑÑа биÑов
бÑÐ´ÐµÑ Ð¿Ð¾ÑÑаÑена на кодиÑование ÑаÑÑи изобÑажениÑ, коÑоÑое должно
бÑÑÑ Ð½Ð° меÑÑе полоÑÑ.
</para>
<para>
ÐÐ»Ñ ÑлÑÑаев, когда вÑÑ Ð¸Ð·Ð¾Ð±Ñажение движеÑÑÑ Ðº кÑÐ°Ñ ÐºÐ¾Ð´Ð¸ÑÑемой
- облаÑÑи, Ñ MPEG еÑÑÑ ÑпеÑиалÑнÑе опÑимизаÑии Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑного
- копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÑелей на кÑай каÑÑинки, когда векÑÐ¾Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ
- идÑÑ Ð¸Ð·Ð²Ð½Ðµ облаÑÑи кодиÑованиÑ. ÐÑа возможноÑÑÑ ÑÑановиÑÑÑ
- беÑполезной, еÑли Ñ ÑилÑма еÑÑÑ ÑÑÑнÑе полоÑÑ. РоÑлиÑии оÑ
- ÑлÑÑаев 1 и 2, вÑÑавнивание гÑÐ°Ð½Ð¸Ñ Ð´Ð¾ кÑаÑноÑÑи 16 здеÑÑ
+ облаÑÑи, Ñ MPEG еÑÑÑ ÑпеÑиалÑнÑе опÑимизаÑии Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑÑÑÑегоÑÑ
+ копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÑелей к кÑÐ°Ñ ÐºÐ°ÑÑинки, когда векÑÐ¾Ñ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ
+ идÑÑ Ð¸Ð·Ð²Ð½Ðµ облаÑÑи кодиÑованиÑ. ÐÑа возможноÑÑÑ ÑÑановиÑÑÑ
+ беÑполезной, еÑли Ñ ÑилÑма еÑÑÑ ÑÑÑнÑе полоÑÑ. РоÑлиÑии оÑ
+ ÑлÑÑаев 1 и 2, вÑÑавнивание гÑÐ°Ð½Ð¸Ñ Ð´Ð¾ кÑаÑноÑÑи 16 здеÑÑ
не поможеÑ.
</para>
</listitem>
@@ -575,9 +574,9 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
</orderedlist>
<para>
-ÐлагодаÑÑ Ð²Ñем ÑÑим пÑиÑинам, ÑекомендÑеÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑÑезаÑÑ
+ÐлагодаÑÑ Ð²Ñем ÑÑим пÑиÑинам, ÑекомендÑеÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑÑезаÑÑ
ÑÑÑнÑе полоÑÑ. Ðолее Ñого, еÑли еÑÑÑ Ð¾Ð±Ð»Ð°ÑÑи ÑÑмов/иÑкажений
-на кÑаÑÑ
каÑÑинки, Ñо иÑ
ÑÑезание Ñакже поÑпоÑобÑÑвÑÐµÑ ÑлÑÑÑениÑ
+на кÑаÑÑ
каÑÑинки, Ñо иÑ
ÑÑезание Ñакже поÑпоÑобÑÑвÑÐµÑ ÑлÑÑÑениÑ
каÑеÑÑва кодиÑованиÑ. ÐидеоÑилÑ, желаÑÑие ÑоÑ
ÑаниÑÑ Ð¾Ñигинал как
можно более ÑоÑно, могÑÑ Ð²Ð¾Ð·ÑажаÑÑ Ð¿ÑоÑив Ñакого ÑÑеÑениÑ; но
еÑли ÐÑ Ð½Ðµ планиÑÑеÑе кодиÑоваÑÑ Ð¿Ñи поÑÑоÑнном кванÑоваÑеле,
@@ -593,7 +592,7 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐÑпомниÑе из пÑедÑдÑÑего Ñаздела, ÑÑо конеÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ°ÑÑинки,
-подлежаÑей кодиÑованиÑ, должен бÑÑÑ ÐºÑаÑен 16 (как вÑÑоÑа, Ñак
+подлежаÑей кодиÑованиÑ, должен бÑÑÑ ÐºÑаÑен 16 (как вÑÑоÑа, Ñак
и ÑиÑина). ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑигнÑÑо ÑÑеÑением, маÑÑÑабиÑованием
или комбинаÑией Ñого и дÑÑгого.
</para>
@@ -601,11 +600,11 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐÑÑÑ Ð½ÐµÑколÑко ÑекомендаÑий Ð´Ð»Ñ ÑÑеÑениÑ, коÑоÑÑм необÑ
одимо ÑледоваÑÑ
Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²ÑÐµÐ¶Ð´ÐµÐ½Ð¸Ñ ÑилÑма.
-ÐбÑÑнÑй ÑоÑÐ¼Ð°Ñ YUV, 4:2:0, ÑоÑ
ÑанÑÐµÑ Ñ
ÑÐ¾Ð¼Ñ (инÑоÑмаÑÐ¸Ñ Ð¾ ÑвеÑе)
-половинной диÑкÑеÑизаÑии, Ñ.е. Ñ
Ñома ÑоÑ
ÑанÑеÑÑÑ Ð² два Ñаза Ñеже
-в каждом напÑавлении, Ñем лÑма (инÑоÑмаÑÐ¸Ñ Ð¾Ð± инÑенÑивноÑÑи).
+ÐбÑÑнÑй ÑоÑÐ¼Ð°Ñ YUV, 4:2:0, ÑоÑ
ÑанÑÐµÑ ÑвеÑноÑÑÑ (инÑоÑмаÑÐ¸Ñ Ð¾ ÑвеÑе)
+половинной диÑкÑеÑизаÑии, Ñ.е. ÑвеÑноÑÑÑ ÑоÑ
ÑанÑеÑÑÑ Ð² два Ñаза Ñеже
+в каждом напÑавлении, Ñем ÑÑкоÑÑноÑÑÑ (инÑоÑмаÑÐ¸Ñ Ð¾Ð± инÑенÑивноÑÑи).
РаÑÑмоÑÑиÑе ÑледÑÑÑÑÑ Ð´Ð¸Ð°Ð³ÑаммÑ, где L обознаÑÐ°ÐµÑ ÑоÑки диÑкÑеÑизаÑии
-лÑÐ¼Ñ Ð¸ C — Ñ
ÑомÑ.
+ÑÑкоÑÑноÑÑи и C — ÑвеÑноÑÑи.
</para>
<informaltable>
@@ -685,15 +684,15 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
Ðак ÐÑ Ð²Ð¸Ð´Ð¸Ñе, ÑÑÑоки и ÑÑолбÑÑ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÐµÑÑеÑÑвеннÑм обÑазом
идÑÑ Ð² паÑаÑ
. ÐоÑÑÐ¾Ð¼Ñ ÑмеÑÐµÐ½Ð¸Ñ Ð¸ ÑазмеÑÑ ÑÑеÑениÑ
<emphasis>должнÑ</emphasis> бÑÑÑ ÑÑÑнÑми ÑиÑлами.
-ÐнаÑе Ñ
Ñома пеÑеÑÑÐ°Ð½ÐµÑ Ð¿ÑавилÑно ÑооÑвеÑÑÑвоваÑÑ Ð»Ñме.
+ÐнаÑе ÑвеÑноÑÑÑ Ð¿ÐµÑеÑÑÐ°Ð½ÐµÑ Ð¿ÑавилÑно ÑооÑвеÑÑÑвоваÑÑ ÑÑкоÑÑноÑÑи.
ТеоÑеÑиÑеÑки возможно ÑÑеÑение Ñ Ð½ÐµÑÑÑнÑми ÑмеÑениÑми, но оно
-поÑÑебÑÐµÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ
ÑомÑ, ÑÑо поÑенÑиалÑно ÑвлÑеÑÑÑ
+поÑÑебÑÐµÑ Ð¿ÐµÑекванÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвеÑноÑÑи, ÑÑо поÑенÑиалÑно ÑвлÑеÑÑÑ
опеÑаÑией Ñ Ð¿Ð¾ÑеÑей каÑеÑÑва и не поддеÑживаеÑÑÑ ÑилÑÑÑом
ÑÑеÑÐµÐ½Ð¸Ñ ÑÑоÑон crop.
</para>
<para>
-Ðолее Ñого, видео Ñ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой диÑкÑеÑизиÑÑеÑÑÑ
+Ðолее Ñого, видео Ñ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой диÑкÑеÑизиÑÑеÑÑÑ
ÑледÑÑÑим обÑазом:
</para>
@@ -941,7 +940,7 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
</para>
<para>
-ÐÑÑеÑÑвеннÑе ÑазÑеÑÐµÐ½Ð¸Ñ DVD ÑоÑÑавлÑÑÑ 720x480 Ð´Ð»Ñ NTSC и 720x576
+ÐÑÑеÑÑвеннÑе ÑазÑеÑÐµÐ½Ð¸Ñ DVD ÑоÑÑавлÑÑÑ 720x480 Ð´Ð»Ñ NTSC и 720x576
Ð´Ð»Ñ PAL, но ÑÑÑеÑÑвÑÐµÑ Ñлаг ÑооÑноÑÐµÐ½Ð¸Ñ ÑÑоÑон, коÑоÑÑй ÑказÑваеÑ
ÑвлÑеÑÑÑ Ð»Ð¸ видео полноÑкÑаннÑм (4:3) или ÑиÑокоÑкÑаннÑм (16:9).
Ðногие (еÑли не болÑÑинÑÑво) ÑиÑокоÑкÑаннÑÑ
DVD не ÑоÑно ÑооÑвеÑÑÑвÑÑÑ
@@ -951,14 +950,14 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
<application>MPlayer</application> пÑедоÑÑавлÑÐµÑ ÑилÑÑÑ Ð¾Ð±Ð½Ð°ÑÑжениÑ
-ÑÑеÑениÑ, коÑоÑÑй опÑеделÑÐµÑ Ð¿ÑÑмоÑголÑник, до коÑоÑго нÑжно ÑÑеÑÑ
+ÑÑеÑениÑ, коÑоÑÑй опÑеделÑÐµÑ Ð¿ÑÑмоÑголÑник, до коÑоÑго нÑжно ÑÑеÑÑ
(<option>-vf cropdetect</option>).
ÐапÑÑÑиÑе <application>MPlayer</application> Ñ
<option>-vf cropdetect</option> и он вÑдаÑÑ Ð½Ð°ÑÑÑойки
ÑÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹.
-С ÑелÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑоÑнÑÑ
паÑамеÑÑов ÑÑеÑениÑ, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑоигÑÑваÑÑ
-ÑилÑм доÑÑаÑоÑно долго Ð´Ð»Ñ Ñого, ÑÑоб бÑла иÑполÑзована вÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ
-изобÑажениÑ.
+С ÑелÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑоÑнÑÑ
паÑамеÑÑов ÑÑеÑениÑ, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑоигÑÑваÑÑ
+ÑилÑм доÑÑаÑоÑно долго Ð´Ð»Ñ Ñого, ÑÑоб бÑла иÑполÑзована вÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ
+изобÑажениÑ.
</para>
<para>
@@ -966,18 +965,17 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<application>MPlayer</application>, иÑполÑзÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½ÑÑ ÑÑÑокÑ,
вÑведеннÑÑ <option>cropdetect</option>, и подÑÑÑойÑе пÑÑмоÑголÑник
пÑи необÑ
одимоÑÑи.
-ФилÑÑÑ <option>rectangle</option> Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, позволив
+ФилÑÑÑ <option>rectangle</option> Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, позволив
Ðам инÑеÑакÑивно менÑÑÑ Ð¿ÑÑмоÑголÑник ÑÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐаÑего ÑилÑма.
Ðе забÑвайÑе ÑледоваÑÑ ÑказаннÑм вÑÑе ÑÑководÑÑвам по делимоÑÑи,
-ÑÑÐ¾Ð±Ñ Ð½Ðµ иÑпоÑÑиÑÑ Ð²ÑÑавнивание Ñ
ÑомÑ.
+ÑÑÐ¾Ð±Ñ Ð½Ðµ иÑпоÑÑиÑÑ Ð²ÑÑавнивание ÑвеÑноÑÑи.
</para>
<para>
Ð ÑÑде ÑлÑÑаев маÑÑÑабиÑование Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑнÑм.
ÐаÑÑÑабиÑование по веÑÑикалÑÐ½Ð¾Ð¼Ñ Ð½Ð°Ð¿ÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°ÑÑÑднено длÑ
ÑеÑеÑÑÑÑоÑного видео, и еÑли ÐÑ Ñ
оÑиÑе ÑоÑ
ÑаниÑÑ ÑеÑеÑÑÑÑоÑноÑÑÑ,
-Ðам в болÑÑинÑÑве ÑлÑÑаев бÑÐ´ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимо воздеÑживаÑÑÑÑ Ð¾Ñ
-маÑÑÑабиÑованиÑ.
+Ðам, как пÑавило, бÑÐ´ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимо воздеÑживаÑÑÑÑ Ð¾Ñ Ð¼Ð°ÑÑÑабиÑованиÑ.
ÐÑли ÐÑ Ð½Ðµ бÑдеÑе маÑÑÑабиÑоваÑÑ, но вÑÑ ÐµÑÑ Ð¶ÐµÐ»Ð°ÐµÑе ÑазмеÑÑ,
кÑаÑнÑе 16, Ñо Ðам пÑидÑÑÑÑ Ð¿ÑоводиÑÑ Ð¸Ð·Ð»Ð¸Ñнее ÑÑеÑение.
Ðе пÑоводиÑе неполное ÑÑеÑение, поÑколÑÐºÑ ÑÑÑнÑе полоÑÑ Ð¾ÑенÑ
@@ -986,24 +984,22 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐоÑколÑÐºÑ MPEG-4 иÑполÑзÑÐµÑ Ð¼Ð°ÐºÑоблоки 16Ñ
16, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑбедиÑÑÑÑ,
-ÑÑо каждое измеÑение кодиÑÑемого видео кÑаÑно 16; инаÑе ÐÑ ÑÑ
ÑдÑиÑе
-каÑеÑÑво, оÑобенно на малÑÑ
биÑпоÑокаÑ
. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо,
-окÑÑглив ÑиÑÐ¸Ð½Ñ Ð¸ вÑÑоÑÑ Ð¿ÑÑмоÑголÑника ÑÑеÑÐµÐ½Ð¸Ñ Ð´Ð¾ ближайÑего
+ÑÑо каждое измеÑение кодиÑÑемого видео кÑаÑно 16; инаÑе ÐÑ ÑÑ
ÑдÑиÑе
+каÑеÑÑво, оÑобенно на малÑÑ
биÑпоÑокаÑ
. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо,
+окÑÑглив ÑиÑÐ¸Ð½Ñ Ð¸ вÑÑоÑÑ Ð¿ÑÑмоÑголÑника ÑÑеÑÐµÐ½Ð¸Ñ Ð´Ð¾ ближайÑего
менÑÑего Ñелого, кÑаÑного 16.
-УÑиÑÑÐ²Ð°Ñ ÑÑÑановленное Ñанее, пÑи ÑÑеÑении ÐÑ Ð¼Ð¾Ð¶ÐµÑе заÑ
оÑеÑÑ ÑвелиÑиÑÑ
-ÑмеÑение по Y на Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ ÑазноÑÑи ÑÑаÑой и новой вÑÑоÑÑ, Ñак ÑÑо
-полÑÑенное видео бÑÐ´ÐµÑ Ð±ÑаÑÑÑÑ Ð¸Ð· ÑенÑÑа кадÑа.
-
+Ðак Ñказано вÑÑе, пÑи ÑÑеÑении Ðам необÑ
одимо ÑвелиÑиÑÑ ÑмеÑение по
+Y на Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ ÑазноÑÑи ÑÑаÑой и новой вÑÑоÑÑ, Ñак ÑÑо полÑÑенное
+видео бÑÐ´ÐµÑ Ð±ÑаÑÑÑÑ Ð¸Ð· ÑенÑÑа кадÑа.
Риз-за ÑпоÑоба диÑкÑеÑизаÑии DVD видео, ÑбедиÑеÑÑ, ÑÑо ÑмеÑение
-еÑÑÑ ÑÑÑное ÑиÑло. (ФакÑиÑеÑки, возÑмиÑе за пÑавило никогда не
+еÑÑÑ ÑÑÑное ÑиÑло. (ФакÑиÑеÑки, возÑмиÑе за пÑавило никогда не
иÑполÑзоваÑÑ Ð½ÐµÑÑÑнÑе велиÑÐ¸Ð½Ñ Ð´Ð»Ñ Ð»ÑбÑÑ
паÑамеÑÑов ÑÑеÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸
маÑÑÑабиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾.) ÐÑли ÐÑ Ð±ÐµÑпокоиÑеÑÑ Ð¸Ð·-за неÑколÑкиÑ
излиÑне оÑбÑоÑеннÑÑ
биÑов, возможно, ÐÑ Ð¿ÑедпоÑÑÑÑе взамен
маÑÑÑабиÑоваÑÑ Ð²Ð¸Ð´ÐµÐ¾. ÐÑ ÑаÑÑмоÑÑим ÑÑо ниже в наÑем пÑимеÑе.
-
РдейÑÑвиÑелÑноÑÑи, ÐÑ Ð¼Ð¾Ð¶ÐµÑе довеÑиÑÑ ÑилÑÑÑÑ
<option>cropdetect</option> ÑделаÑÑ Ð´Ð»Ñ ÐÐ°Ñ Ð²ÑÑ Ð²ÑÑеÑпомÑнÑÑое,
-Ñ.к. Ñ Ð½ÐµÐ³Ð¾ еÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑй паÑамеÑÑ Ð¾ÐºÑÑглениÑ
+Ñ.к. Ñ Ð½ÐµÐ³Ð¾ еÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑй паÑамеÑÑ Ð¾ÐºÑÑглениÑ
<option>round</option>, ÑавнÑй 16 по ÑмолÑаниÑ.
</para>
@@ -1015,13 +1011,13 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐоÑле вÑего вÑÑе Ñказанного и Ñделанного, ÐÑ, веÑоÑÑно, полÑÑиÑе
-видео не ÑоÑно ÑоÑмаÑа 1:85.1 или 2.35:1, а Ñ Ñем-Ñо близким
-к ÑÑомÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑÑиÑлиÑÑ Ð½Ð¾Ð²Ñй коÑÑÑиÑÐ¸ÐµÐ½Ñ ÑооÑноÑениÑ
-ÑÑоÑон вÑÑÑнÑÑ, но <application>MEncoder</application>
+видео не ÑоÑно ÑоÑмаÑа 1:85.1 или 2.35:1, а Ñ Ñем-Ñо близким
+к ÑÑомÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑÑиÑлиÑÑ Ð½Ð¾Ð²Ñй коÑÑÑиÑÐ¸ÐµÐ½Ñ ÑооÑноÑениÑ
+ÑÑоÑон вÑÑÑнÑÑ, но <application>MEncoder</application>
пÑедоÑÑавлÑÐµÑ Ð¾Ð¿ÑÐ¸Ñ Ð´Ð»Ñ <systemitem class="library">libavcodec</systemitem>,
назÑваемÑÑ <option>autoaspect</option>, коÑоÑÐ°Ñ ÑÐ´ÐµÐ»Ð°ÐµÑ ÑÑо длÑ
-ÐаÑ. Ðи в коем ÑлÑÑае не ÑвелиÑивайÑе ÑÐ°Ð·Ð¼ÐµÑ ÑÑого видео Ñ ÑелÑÑ
-квадÑаÑизаÑии пикÑелей, еÑли ÐÑ Ð½Ðµ желаеÑе впÑÑÑÑÑ Ð¿Ð¾ÑÑаÑиÑÑ
+ÐаÑ. Ðи в коем ÑлÑÑае не ÑвелиÑивайÑе ÑÐ°Ð·Ð¼ÐµÑ ÑÑого видео Ñ ÑелÑÑ
+квадÑаÑизаÑии пикÑелей, еÑли ÐÑ Ð½Ðµ желаеÑе впÑÑÑÑÑ Ð¿Ð¾ÑÑаÑиÑÑ
меÑÑо на жÑÑÑком диÑке.
ÐаÑÑÑабиÑование должно вÑполнÑÑÑÑÑ Ð¿Ñи воÑпÑоизведении, и плееÑ
иÑполÑзÑÐµÑ ÐºÐ¾ÑÑÑиÑÐ¸ÐµÐ½Ñ ÑооÑноÑÐµÐ½Ð¸Ñ ÑÑоÑон, ÑоÑ
ÑанÑннÑй в AVI, длÑ
@@ -1038,12 +1034,12 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐÑли ÐÑ Ð½Ðµ ÑобиÑаеÑеÑÑ ÐºÐ¾Ð´Ð¸ÑоваÑÑ Ð² Ñежиме поÑÑоÑнного кванÑоваÑелÑ,
-Ðам нÑжно вÑбÑаÑÑ Ð±Ð¸ÑпоÑок.
+Ðам нÑжно вÑбÑаÑÑ Ð±Ð¸ÑпоÑок.
ÐонÑÑие биÑпоÑока оÑÐµÐ½Ñ Ð¿ÑоÑÑо: ÑÑо ÑÑеднее ÑиÑло биÑов, коÑоÑÑе
бÑдÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐаÑего ÑилÑма, в ÑекÑндÑ.
ÐбÑÑно биÑпоÑок измеÑÑеÑÑÑ Ð² килобиÑаÑ
(1000 биÑ) в ÑекÑндÑ.
-Ð Ð°Ð·Ð¼ÐµÑ ÐаÑего ÑилÑма на диÑке еÑÑÑ Ð±Ð¸ÑпоÑок, ÑмноженнÑй на
-длиÑелÑноÑÑÑ ÑилÑма, плÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие накладнÑе ÑаÑÑ
одÑ
+Ð Ð°Ð·Ð¼ÐµÑ ÐаÑего ÑилÑма на диÑке еÑÑÑ Ð±Ð¸ÑпоÑок, ÑмноженнÑй на
+длиÑелÑноÑÑÑ ÑилÑма, плÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие накладнÑе ÑаÑÑ
одÑ
(Ñм. Ñаздел
<link linkend="menc-feat-dvd-mpeg4-muxing-avi-limitations">конÑÐµÐ¹Ð½ÐµÑ AVI</link>
Ð´Ð»Ñ Ð¿ÑимеÑа).
@@ -1054,9 +1050,9 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐиÑпоÑок изменÑеÑÑÑ <emphasis role="bold">не</emphasis>
-пÑопоÑÑионалÑно ÑазÑеÑениÑ.
-То еÑÑÑ Ñайл ÑазÑеÑением 320Ñ
240 Ñ 200 кбиÑ/Ñек не бÑдеÑ
-Ñого же каÑеÑÑва, ÑÑо ÑÑÐ¾Ñ Ð¶Ðµ ÑилÑм ÑазÑеÑением 640Ñ
480
+пÑопоÑÑионалÑно ÑазÑеÑениÑ.
+То еÑÑÑ Ñайл ÑазÑеÑением 320Ñ
240 Ñ 200 кбиÑ/Ñек не бÑдеÑ
+Ñого же каÑеÑÑва, ÑÑо ÑÑÐ¾Ñ Ð¶Ðµ ÑилÑм ÑазÑеÑением 640Ñ
480
и 800 кбиÑ/Ñек!
ÐÐ»Ñ ÑÑого еÑÑÑ Ð´Ð²Ðµ пÑиÑинÑ:
<orderedlist>
@@ -1065,19 +1061,19 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
замеÑаеÑе MPEG аÑÑеÑакÑÑ, еÑли они болÑÑе!
ÐÑÑеÑакÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ Ð½Ð° маÑÑÑабе блоков (8Ñ
8).
ÐÐ°Ñ Ð³Ð»Ð°Ð· не ÑÐ²Ð¸Ð´Ð¸Ñ Ð¾Ñибки в 4800 маленÑкиÑ
блоков Ñак же
- легко, как и в 1200 болÑÑиÑ
блоков (пÑедполагаÑ
+ легко, как и в 1200 болÑÑиÑ
блоков (пÑедполагаÑ
маÑÑÑабиÑование обоиÑ
ÑилÑмов на полнÑй ÑкÑан).
</para></listitem>
<listitem><para>
- <emphasis role="bold">ТеоÑеÑиÑеÑкаÑ</emphasis>: Ðогда ÐÑ
+ <emphasis role="bold">ТеоÑеÑиÑеÑкаÑ</emphasis>: Ðогда ÐÑ
ÑменÑÑаеÑе ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð·Ð¾Ð±ÑажениÑ, но пÑодолжаеÑе иÑполÑзоваÑÑ
- блоки Ñого же ÑазмеÑа (8Ñ
8) Ð´Ð»Ñ Ð¿ÑоÑÑÑанÑÑвеннÑÑ
ÑаÑÑоÑнÑÑ
+ блоки Ñого же ÑазмеÑа (8Ñ
8) Ð´Ð»Ñ Ð¿ÑоÑÑÑанÑÑвеннÑÑ
ÑаÑÑоÑнÑÑ
пÑеобÑазований, ÐÑ Ð¿ÐµÑемеÑаеÑе болÑÑе даннÑÑ
в вÑÑокоÑаÑÑоÑнÑе
полоÑÑ. ÐÑÑбо говоÑÑ, каждÑй пикÑÐµÐ»Ñ ÑодеÑÐ¶Ð¸Ñ Ð±Ð¾Ð»ÑÑе деÑалей,
Ñем ÑанÑÑе.
- Так ÑÑо неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÐаÑа каÑÑинка Ñ ÑменÑÑеннÑм
+ Так ÑÑо неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÐаÑа каÑÑинка Ñ ÑменÑÑеннÑм
маÑÑÑабом ÑодеÑÐ¶Ð¸Ñ 1/4 инÑоÑмаÑии в пÑоÑÑÑанÑÑвеннÑÑ
напÑавлениÑÑ
,
- она вÑÑ ÐµÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð±Ð¾Ð»ÑÑÐ£Ñ ÑаÑÑÑ Ð¸Ð½ÑоÑмаÑии в
+ она вÑÑ ÐµÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð±Ð¾Ð»ÑÑÐ£Ñ ÑаÑÑÑ Ð¸Ð½ÑоÑмаÑии в
ÑаÑÑоÑнÑÑ
инÑеÑвалаÑ
(пÑедполагаÑ, ÑÑо вÑÑокие ÑаÑÑоÑÑ Ð±Ñли
не иÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð² оÑигиналÑном 640Ñ
480 изобÑажении).
</para></listitem>
@@ -1086,7 +1082,7 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<para>
ÐоÑледние ÑÑководÑÑва Ñекомендовали вÑÐ±Ð¾Ñ Ð±Ð¸ÑпоÑока и ÑазÑеÑениÑ,
-оÑновÑваÑÑÑ Ð½Ð° пÑиближении "Ð±Ð¸Ñ Ð½Ð° пикÑелÑ", но ÑÑо обÑÑно не
+оÑновÑваÑÑÑ Ð½Ð° пÑиближении "Ð±Ð¸Ñ Ð½Ð° пикÑелÑ", но ÑÑо обÑÑно не
веÑно из-за ÑпомÑнÑÑÑÑ
вÑÑе пÑиÑин.
ÐоÑ
оже, лÑÑÑей оÑенкой ÑвлÑеÑÑÑ ÑоÑÑ Ð±Ð¸ÑпоÑока пÑопоÑÑионалÑно
квадÑаÑÐ½Ð¾Ð¼Ñ ÐºÐ¾ÑÐ½Ñ ÑазÑеÑениÑ, Ñак ÑÑо 320Ñ
240 и 400 кбиÑ/Ñек
@@ -1107,7 +1103,7 @@ MPEG ÑÐ°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð²Ð¸Ð´ÐµÐ¾ на квадÑаÑÑ 16Ñ
16, назÑвае
<title>РаÑÑÑÑ ÑазÑеÑениÑ</title>
<para>
-СледÑÑÑие Ñаги помогÑÑ Ðам ÑаÑÑÑиÑаÑÑ ÑазÑеÑение Ð´Ð»Ñ ÐаÑего
+СледÑÑÑие Ñаги помогÑÑ Ðам ÑаÑÑÑиÑаÑÑ ÑазÑеÑение Ð´Ð»Ñ ÐаÑего
кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±ÐµÐ· ÑлиÑком ÑилÑного иÑÐºÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾, ÑÑиÑÑваÑ
неÑколÑко видов инÑоÑмаÑии об иÑÑ
одном видео.
ÐÑежде вÑего, Ðам необÑ
одимо ÑаÑÑÑиÑаÑÑ ÐºÐ¾ÑÑÑиÑÐ¸ÐµÐ½Ñ ÑооÑноÑениÑ
@@ -1142,21 +1138,21 @@ CQ ÑооÑвеÑÑÑвÑÐµÑ ÑиÑÐ»Ñ Ð±Ð¸Ñов на пикÑÐµÐ»Ñ Ð¸ на
ÐÑÑбо говоÑÑ, Ñем болÑÑе CQ, Ñем менÑÑе веÑоÑÑноÑÑÑ ÑвидеÑÑ
аÑÑеÑакÑÑ ÐºÐ¾Ð´Ð¸ÑованиÑ.
Ðднако, еÑли Ñ ÐÐ°Ñ ÐµÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй ÑÐ°Ð·Ð¼ÐµÑ Ð´Ð»Ñ ÐаÑего ÑилÑма
-(напÑимеÑ, 1 или 2 CD), еÑÑÑ Ð¾Ð³ÑаниÑенное обÑее ÑиÑло биÑов,
-коÑоÑÑе ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑÑаÑиÑÑ; поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¶Ð½Ð¾ найÑи Ñ
оÑоÑий
+(напÑимеÑ, 1 или 2 CD), еÑÑÑ Ð¾Ð³ÑаниÑенное обÑее ÑиÑло биÑов,
+коÑоÑÑе ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑÑаÑиÑÑ; поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¶Ð½Ð¾ найÑи Ñ
оÑоÑий
компÑомиÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑжимаемоÑÑÑÑ Ð¸ каÑеÑÑвом.
</para>
<para>
CQ завиÑÐ¸Ñ Ð¾Ñ Ð±Ð¸ÑпоÑока, ÑÑÑекÑивноÑÑи видеокодека и ÑазÑеÑÐµÐ½Ð¸Ñ ÑилÑма.
ÐбÑÑно, в ÑелÑÑ
ÑвелиÑÐµÐ½Ð¸Ñ CQ, Ðам нÑжно бÑÐ´ÐµÑ ÑменÑÑиÑÑ ÑазмеÑ
-ÑилÑма, пÑи ÑÑловии, ÑÑо биÑпоÑок, вÑÑиÑленнÑй как ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð½ÐµÑного
+ÑилÑма, пÑи ÑÑловии, ÑÑо биÑпоÑок, вÑÑиÑленнÑй как ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð½ÐµÑного
ÑазмеÑа, и длина ÑилÑма поÑÑоÑннÑ.
С MPEG-4 ASP кодеками, Ñакими как <systemitem class="library">Xvid</systemitem>
-и <systemitem class="library">libavcodec</systemitem>, CQ
+и <systemitem class="library">libavcodec</systemitem>, CQ
менÑÑе 0.18 обÑÑно пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñ Ð±Ð¾Ð»ÑÑим ÑиÑлом
ÑегменÑов "квадÑаÑиками", из-за недоÑÑаÑоÑного ÑиÑла биÑов длÑ
-кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии в каждом макÑоблоке.
+кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии в каждом макÑоблоке.
(MPEG4, как и многие дÑÑгие кодеки, гÑÑппиÑÑÐµÑ Ð¿Ð¸ÐºÑели в блоки по
неÑколÑко пикÑелей Ð´Ð»Ñ ÑжаÑÐ¸Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ; еÑли биÑов не Ñ
ваÑаеÑ,
гÑаниÑÑ ÑÑиÑ
блоков замеÑнÑ.)
@@ -1169,17 +1165,17 @@ CQ завиÑÐ¸Ñ Ð¾Ñ Ð±Ð¸ÑпоÑока, ÑÑÑекÑивноÑÑи видео
<link linkend="menc-feat-xvid-example-settings"><systemitem class="library">Xvid</systemitem></link>
Ð´Ð¾Ð»Ð¶Ð½Ñ ÑделаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм полÑÑение Ñого же каÑеÑÑва Ñ CQ в диапазоне
Ð¾Ñ 0.18 до 0.20 Ð´Ð»Ñ Ñипа на 1 CD и 0.24-0.26 Ð´Ð»Ñ Ñипа на 2 CD.
-ÐÑполÑзÑÑ MPEG-4 AVC кодеки, Ñакие как
+ÐÑполÑзÑÑ MPEG-4 AVC кодеки, Ñакие как
<systemitem class="library">x264</systemitem>, ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ
CQ в диапазоне Ð¾Ñ 0.14 до 0.16 Ñо ÑÑандаÑÑнÑми опÑиÑми кодиÑованиÑ
-и Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑмеÑÑ Ð´Ð¾ÑÑиÑÑ ÑакиÑ
низкиÑ
знаÑений, как 0.10 - 0.12
+и Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑмеÑÑ Ð´Ð¾ÑÑиÑÑ ÑакиÑ
низкиÑ
знаÑений, как 0.10 — 0.12
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
<link linkend="menc-feat-x264-example-settings">пÑодвинÑÑÑÑ
опÑий кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ <systemitem class="library">x264</systemitem></link>.
</para>
<para>
ÐожалÑйÑÑа, обÑаÑиÑе внимание, ÑÑо CQ — лиÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑелÑÐ½Ð°Ñ Ð²ÐµÐ»Ð¸Ñина,
-Ñ.к. она завиÑÐ¸Ñ Ð¾Ñ ÐºÐ¾Ð´Ð¸ÑÑемого ÑодеÑжимого; CQ 0.18 Ð¼Ð¾Ð¶ÐµÑ Ñ
оÑоÑо
+Ñ.к. она завиÑÐ¸Ñ Ð¾Ñ ÐºÐ¾Ð´Ð¸ÑÑемого ÑодеÑжимого; CQ 0.18 Ð¼Ð¾Ð¶ÐµÑ Ñ
оÑоÑо
ÑмоÑÑеÑÑÑÑ Ð´Ð»Ñ ÐеÑгмана (Bergman), в оÑлиÑии Ð¾Ñ Ñакого ÑилÑма как
ÐаÑÑиÑа (The Matrix), ÑодеÑжаÑего много ÑÑен Ñ Ð±ÑÑÑÑÑм движением.
С дÑÑгой ÑÑоÑонÑ, беÑполезно ÑвелиÑиваÑÑ CQ вÑÑе 0.30, Ñ.к. ÐÑ
@@ -1199,7 +1195,7 @@ CQ в диапазоне Ð¾Ñ 0.14 до 0.16 Ñо ÑÑандаÑÑнÑми оп
<para>
ÐзÑÑение иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾ ÑилÑÑÑов <application>MEncoder</application>
важно Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ñ
оÑоÑиÑ
ÑезÑлÑÑаÑов кодиÑованиÑ.
-ÐÑÑ Ð¾Ð±ÑабоÑка видео вÑполнÑеÑÑÑ Ð¿Ð¾ÑÑедÑÑвом ÑилÑÑÑов: ÑÑеÑение,
+ÐÑÑ Ð¾Ð±ÑабоÑка видео вÑполнÑеÑÑÑ Ð¿Ð¾ÑÑедÑÑвом ÑилÑÑÑов: ÑÑеÑение,
маÑÑÑабиÑование, подÑÑÑойка ÑвеÑа, Ñдаление ÑÑма, ÑвелиÑение
ÑÑÑкоÑÑи, деинÑеÑÐ»ÐµÐ¹Ñ (пÑеобÑазование видео из ÑеÑеÑÑÑÑоÑной
ÑазвÑÑÑки в поÑÑÑоÑнÑÑ), ÑелеÑин, обÑаÑнÑй ÑелеÑин и Ñдаление
@@ -1215,7 +1211,7 @@ CQ в диапазоне Ð¾Ñ 0.14 до 0.16 Ñо ÑÑандаÑÑнÑми оп
<screen>-vf ÑилÑÑÑ1=опÑии,ÑилÑÑÑ2=опÑии,...</screen>
-ÐолÑÑинÑÑво ÑилÑÑÑов иÑполÑзÑÑÑ ÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð¾Ð¿Ñий,
+ÐолÑÑинÑÑво ÑилÑÑÑов иÑполÑзÑÑÑ ÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð¾Ð¿Ñий,
ÑазделÑннÑе двоеÑоÑиÑми, но ÑинÑакÑÐ¸Ñ ÑÑиÑ
паÑамеÑÑов ÑазлиÑаеÑÑÑ
Ñ ÑазнÑÑ
ÑилÑÑÑов, Ñак ÑÑо ÑиÑайÑе манÑал Ð´Ð»Ñ Ð´ÐµÑалÑной
инÑоÑмаÑии о ÑилÑÑÑаÑ
, коÑоÑÑе ÐÑ Ð¶ÐµÐ»Ð°ÐµÑе иÑполÑзоваÑÑ.
@@ -1227,7 +1223,7 @@ CQ в диапазоне Ð¾Ñ 0.14 до 0.16 Ñо ÑÑандаÑÑнÑми оп
<screen>-vf crop=688:464:12:4,scale=640:464</screen>
-ÑпеÑва ÑÑеÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾ 688Ñ
464 Ñ Ð²ÐµÑÑ
ним левÑм
+ÑпеÑва ÑÑеÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾ 688Ñ
464 Ñ Ð²ÐµÑÑ
ним левÑм
Ñглом (12,4), а заÑем маÑÑÑабиÑÑÐµÑ ÑезÑлÑÑÐ°Ñ Ð´Ð¾ 640Ñ
464.
</para>
@@ -1236,29 +1232,29 @@ CQ в диапазоне Ð¾Ñ 0.14 до 0.16 Ñо ÑÑандаÑÑнÑми оп
ÑÑдом Ñ Ð½Ð¸Ð¼) Ñ ÑелÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿ÑеимÑÑеÑÑва Ð¾Ñ Ð¸ÑполÑзованиÑ
инÑоÑмаÑии поÑле видеодекодеÑа, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑна или
иÑкажена дÑÑгими ÑилÑÑÑами.
-ÐажнейÑими пÑимеÑами ÑвлÑÑÑÑÑ: <option>pp</option> (поÑÑобÑабоÑка,
+ÐажнейÑими пÑимеÑами ÑвлÑÑÑÑÑ: <option>pp</option> (поÑÑобÑабоÑка,
ÑолÑко пÑи вÑполнении опеÑаÑий ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾Ñной ÑегменÑаÑии
(deblocking) или ÑвелиÑÐµÐ½Ð¸Ñ ÑÑÑкоÑÑи кÑаÑв (deringing)),
<option>spp</option> (дÑÑгой ÑилÑÑÑ Ð¿Ð¾ÑÑобÑабоÑки, ÑлÑжаÑий длÑ
ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð°ÑÑеÑакÑов MPEG), <option>pullup</option> (обÑаÑнÑй
-ÑелеÑин), и <option>softpulldown</option> (Ð´Ð»Ñ Ð¿ÑеобÑазованиÑ
+ÑелеÑин), и <option>softpulldown</option> (Ð´Ð»Ñ Ð¿ÑеобÑазованиÑ
мÑгкого ÑелеÑина в жÑÑÑкий).
</para>
<para>
-РобÑем ÑлÑÑае, Ðам ÑледÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð½Ð°ÑÑолÑко мало ÑилÑÑÑаÑии,
+РобÑем ÑлÑÑае, Ðам ÑледÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ð½Ð°ÑÑолÑко мало ÑилÑÑÑаÑии,
наÑколÑко ÑÑо возможно, Ð´Ð»Ñ Ñого ÑÑоб оÑÑаÑÑÑÑ Ð±Ð»Ð¸Ð·ÐºÐ¾ к оÑигиналÑномÑ
DVD иÑÑоÑникÑ. УÑеÑение ÑаÑÑо необÑ
одимо (как опиÑано вÑÑе), но
-избегайÑе маÑÑÑабиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾. ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑменÑÑение
-ÑазмеÑа иногда пÑедпоÑÑиÑелÑно иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±ÐлÑÑиÑ
-кванÑоваÑелей, нÑжно избегаÑÑ Ð¸ Ñого, и дÑÑгого: помниÑе,
+избегайÑе маÑÑÑабиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾. ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑменÑÑение
+ÑазмеÑа иногда пÑедпоÑÑиÑелÑно иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±ÐлÑÑиÑ
+кванÑоваÑелей, нÑжно избегаÑÑ Ð¸ Ñого, и дÑÑгого: помниÑе,
ÑÑо Ð¼Ñ Ñ Ñамого наÑала ÑеÑили обменÑÑÑ Ð±Ð¸ÑÑ Ð½Ð° каÑеÑÑво.
</para>
<para>
Также не коÑÑекÑиÑÑйÑе гаммÑ, конÑÑаÑÑноÑÑÑ, ÑÑкоÑÑÑ Ð¸ Ñ.п.. То,
ÑÑо Ñ
оÑоÑо вÑглÑÐ´Ð¸Ñ Ð½Ð° ÐаÑем мониÑоÑе, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð»Ð¾Ñ
о вÑглÑдеÑÑ
-на дÑÑгиÑ
. ÐÑи коÑÑекÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ ÑолÑко пÑи
+на дÑÑгиÑ
. ÐÑи коÑÑекÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ ÑолÑко пÑи
воÑпÑоизведении.
</para>
@@ -1269,11 +1265,11 @@ DVD иÑÑоÑникÑ. УÑеÑение ÑаÑÑо необÑ
одимо (как
ÐÑÑ Ñаз, пÑиÑиной ÑÑÐ¾Ð¼Ñ ÑвлÑеÑÑÑ Ñо, ÑÑо ÑÑим биÑам можно найÑи
лÑÑÑее пÑименение: заÑем ÑÑаÑиÑÑ Ð¸Ñ
, кодиÑÑÑ ÑÑм, еÑли ÐÑ Ð¿ÑоÑÑо
можеÑе веÑнÑÑÑ ÑÑÐ¾Ñ ÑÑм в пÑоÑеÑÑе воÑпÑоизведениÑ?
-УвелиÑение паÑамеÑÑов Ð´Ð»Ñ <option>hqdn3d</option> дополниÑелÑно
+УвелиÑение паÑамеÑÑов Ð´Ð»Ñ <option>hqdn3d</option> дополниÑелÑно
ÑлÑÑÑÐ¸Ñ ÑжимаемоÑÑÑ, но ÑвелиÑив знаÑÐµÐ½Ð¸Ñ ÑлиÑком ÑилÑно, ÐÑ ÑиÑкÑеÑе
-ÑÑ
ÑдÑиÑÑ ÑазлиÑимоÑÑÑ Ð¸Ð·Ð¾Ð±ÑажениÑ.
-РекомендованнÑе вÑÑе знаÑÐµÐ½Ð¸Ñ (<option>2:1:2</option>) Ñлегка
-конÑеÑваÑивнÑ; не бойÑеÑÑ ÑкÑпеÑименÑиÑоваÑÑ Ñ Ð±Ð¾Ð»ÐµÐµ вÑÑокими
+ÑÑ
ÑдÑиÑÑ ÑазлиÑимоÑÑÑ Ð¸Ð·Ð¾Ð±ÑажениÑ.
+РекомендованнÑе вÑÑе знаÑÐµÐ½Ð¸Ñ (<option>2:1:2</option>) Ñлегка
+конÑеÑваÑивнÑ; не бойÑеÑÑ ÑкÑпеÑименÑиÑоваÑÑ Ñ Ð±Ð¾Ð»ÐµÐµ вÑÑокими
знаÑениÑми и ÑамоÑÑоÑÑелÑно оÑениваÑÑ ÑезÑлÑÑаÑÑ.
</para>
</sect2>
@@ -1284,9 +1280,9 @@ DVD иÑÑоÑникÑ. УÑеÑение ÑаÑÑо необÑ
одимо (как
<title>ЧеÑеÑÑÑÑоÑÐ½Ð°Ñ ÑазвÑÑÑка и ÑелеÑин</title>
<para>
-ÐоÑÑи вÑе ÑилÑÐ¼Ñ ÑнимаÑÑÑÑ Ð¿Ñи 24 fps [кадÑ/Ñек]. ÐоÑколÑкÑ
+ÐоÑÑи вÑе ÑилÑÐ¼Ñ ÑнимаÑÑÑÑ Ð¿Ñи 24 fps [кадÑ/Ñек]. ÐоÑколÑкÑ
в NTSC иÑполÑзÑеÑÑÑ 30000/1001 fps, нÑжно вÑполниÑÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ
-обÑабоÑÐºÑ Ð´Ð»Ñ Ñакого 24 fps видео, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ коÑÑекÑно
+обÑабоÑÐºÑ Ð´Ð»Ñ Ñакого 24 fps видео, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ коÑÑекÑно
воÑпÑоизводилоÑÑ Ð¿Ñи кадÑовой ÑаÑÑоÑе NTSC. ÐÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð½Ð°Ð·ÑваеÑÑÑ
3:2 пÑлдаÑн, обÑÑно назÑваемÑй ÑелеÑин (поÑколÑÐºÑ Ð¿ÑлдаÑн ÑаÑÑо
пÑименÑеÑÑÑ Ð² пÑоÑеÑÑе показа Ñелевизионного ÑилÑма, англ. telecine);
@@ -1303,13 +1299,13 @@ DVD иÑÑоÑникÑ. УÑеÑение ÑаÑÑо необÑ
одимо (как
воÑпÑоизводиÑÑÑ Ñлегка бÑÑÑÑее, но еÑли ÐÑ Ð½Ðµ пÑиÑелеÑ, Ñо,
веÑоÑÑно, не замеÑиÑе ÑазниÑÑ.
У болÑÑинÑÑва PAL DVD аÑдио ÑкоÑÑекÑиÑовано по вÑÑоÑе звÑка Ñак,
-ÑÑо, воÑпÑоизводÑÑÑ Ð¿Ñи 25 fps, оно звÑÑÐ¸Ñ Ð½Ð¾ÑмалÑно, неÑмоÑÑÑ Ð½Ð°
-Ñо, ÑÑо аÑдиодоÑожка (и, ÑледоваÑелÑно, веÑÑ ÑилÑм) пÑоигÑÑваÑÑÑÑ
+ÑÑо, воÑпÑоизводÑÑÑ Ð¿Ñи 25 fps, оно звÑÑÐ¸Ñ Ð½Ð¾ÑмалÑно, неÑмоÑÑÑ Ð½Ð°
+Ñо, ÑÑо аÑдиодоÑожка (и, ÑледоваÑелÑно, веÑÑ ÑилÑм) пÑоигÑÑваÑÑÑÑ
на 4% бÑÑÑÑее, Ñем NTSC DVD.
</para>
<para>
-ÐоÑколÑÐºÑ Ð²Ð¸Ð´ÐµÐ¾ на PAL DVD не пеÑеделÑваеÑÑÑ, Ðам не ÑÑоиÑ
+ÐоÑколÑÐºÑ Ð²Ð¸Ð´ÐµÐ¾ на PAL DVD не пеÑеделÑваеÑÑÑ, Ðам не ÑÑоиÑ
беÑпокоиÑÑÑ Ð¾ ÑаÑÑоÑе кадÑов. У иÑÑоÑника 25 fps и Ñ ÐаÑего
Ñипа бÑÐ´ÐµÑ 25 fps. Ðднако, еÑли ÐÑ Ð´ÐµÐ»Ð°ÐµÑе Ñип NTSC DVD ÑилÑма,
Ðам, бÑÑÑ Ð¼Ð¾Ð¶ÐµÑ, пÑидÑÑÑÑ Ð²ÑполниÑÑ Ð¾Ð±ÑаÑнÑй ÑелеÑин.
@@ -1317,7 +1313,7 @@ DVD иÑÑоÑникÑ. УÑеÑение ÑаÑÑо необÑ
одимо (как
<para>
ÐÐ»Ñ ÑилÑмов, ÑнÑÑÑÑ
на 24 fps, видео на NTSC DVD идÑÑ Ð»Ð¸Ð±Ð¾ Ñ ÑелеÑином
-30000/1001, либо Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой 24000/1001 fps и
+30000/1001, либо Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой 24000/1001 fps и
пÑедназнаÑаеÑÑÑ Ð´Ð»Ñ ÑелеÑина на леÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ DVD плееÑа.
С дÑÑгой ÑÑоÑонÑ, TV ÑеÑÐ¸Ð°Ð»Ñ Ð¸Ð´ÑÑ Ð¾Ð±ÑÑно ÑолÑко Ñ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой,
но без ÑелеÑина. ÐÑо не ÑÑÑогое пÑавило: еÑÑÑ ÑеÑÐ¸Ð°Ð»Ñ Ñ
@@ -1349,14 +1345,14 @@ pullup,softskip</option>.
<para>
ÐÑли ÐÑ Ð¶ÐµÐ»Ð°ÐµÑе кодиÑоваÑÑ ÑилÑм Ñ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой
-(NTSC или PAL видео), Ðам нÑжно ÑеÑиÑÑ, бÑдеÑе ли ÐÑ ÐµÐ³Ð¾
+(NTSC или PAL видео), Ðам нÑжно ÑеÑиÑÑ, бÑдеÑе ли ÐÑ ÐµÐ³Ð¾
пÑеобÑазовÑваÑÑ Ð² поÑÑÑоÑнÑÑ ÑазвÑÑÑÐºÑ Ð¸Ð»Ð¸ неÑ.
-ХоÑÑ Ñакое пÑеобÑазование (деинÑеÑлейÑ) ÑÐ´ÐµÐ»Ð°ÐµÑ ÐÐ°Ñ ÑилÑм
+ХоÑÑ Ñакое пÑеобÑазование (деинÑеÑлейÑ) ÑÐ´ÐµÐ»Ð°ÐµÑ ÐÐ°Ñ ÑилÑм
пÑигоднÑм Ð´Ð»Ñ Ð´Ð¸Ñплеев Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой, ÑакиÑ
как
компÑÑÑеÑнÑе мониÑоÑÑ Ð¸ пÑоекÑоÑÑ, ÑÑо бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑÐ²Ð¾Ñ ÑенÑ:
-ÑаÑÑоÑа полей ÑменÑÑиÑÑÑ Ð²Ð´Ð²Ð¾Ðµ Ð¾Ñ 50 или 60000/1001 до 25 или
-30000/1001 Ð¿Ð¾Ð»Ñ Ð² ÑекÑндÑ, и пÑимеÑно половина инÑоÑмаÑии в
-ÐаÑем ÑилÑме бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑна в ÑÑенаÑ
Ñо знаÑиÑелÑнÑм движением.
+ÑаÑÑоÑа полей ÑменÑÑиÑÑÑ Ð²Ð´Ð²Ð¾Ðµ Ð¾Ñ 50 или 60000/1001 до 25 или
+30000/1001 Ð¿Ð¾Ð»Ñ Ð² ÑекÑндÑ, и пÑимеÑно половина инÑоÑмаÑии в
+ÐаÑем ÑилÑме бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑна в ÑÑенаÑ
Ñо знаÑиÑелÑнÑм движением.
</para>
<para>
@@ -1364,9 +1360,9 @@ pullup,softskip</option>.
не ÑекомендÑеÑÑÑ Ð´ÐµÐ»Ð°ÑÑ Ð´ÐµÐ¸Ð½ÑеÑлейÑ. ÐÑ Ð²Ñегда можеÑе пÑеобÑазоваÑÑ
ÑазвÑÑÑÐºÑ ÑилÑма в пÑоÑеÑÑе воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ (пÑи воÑпÑоизведении
на ÑÑÑÑойÑÑваÑ
Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой).
-ÐоÑноÑÑÑ ÑовÑеменнÑÑ
компÑÑÑеÑов вÑнÑÐ¶Ð´Ð°ÐµÑ Ð¿Ð»ÐµÐµÑÑ Ð¸ÑполÑзоваÑÑ
+ÐоÑноÑÑÑ ÑовÑеменнÑÑ
компÑÑÑеÑов вÑнÑÐ¶Ð´Ð°ÐµÑ Ð¿Ð»ÐµÐµÑÑ Ð¸ÑполÑзоваÑÑ
ÑилÑÑÑ Ð´ÐµÐ¸Ð½ÑеÑлейÑа, ÑÑо Ñлегка ÑÑ
ÑдÑÐ°ÐµÑ ÐºÐ°ÑеÑÑво изобÑажениÑ.
-Ðо плееÑÑ Ð±ÑдÑÑего бÑдÑÑ ÑпоÑÐ¾Ð±Ð½Ñ Ð¸Ð¼Ð¸ÑиÑоваÑÑ Ð´Ð¸Ñплей TV Ñ
+Ðо плееÑÑ Ð±ÑдÑÑего бÑдÑÑ ÑпоÑÐ¾Ð±Ð½Ñ Ð¸Ð¼Ð¸ÑиÑоваÑÑ Ð´Ð¸Ñплей TV Ñ
ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой, вÑполнÑÑ Ð´ÐµÐ¸Ð½ÑеÑÐ»ÐµÐ¹Ñ Ð½Ð° полной ÑаÑÑоÑе
полей и инÑеÑполиÑÑÑ 50 или 60000/1001 кадÑов в ÑекÑÐ½Ð´Ñ Ð´Ð»Ñ
ÑеÑеÑÑÑÑоÑного видео.
@@ -1385,8 +1381,8 @@ pullup,softskip</option>.
ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑки.
</para></listitem>
<listitem><para>
- ФилÑÑÑÑ Ð¿Ð¾ÑÑобÑабоÑки и ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑÑма могÑÑ Ð½Ðµ ÑабоÑаÑÑ ÐºÐ°Ðº
- ожидаеÑÑÑ, ÑолÑко еÑли ÐÑ Ð¾Ñобо не позабоÑиÑеÑÑ Ð¾Ð± иÑ
+ ФилÑÑÑÑ Ð¿Ð¾ÑÑобÑабоÑки и ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ ÑÑма могÑÑ Ð½Ðµ ÑабоÑаÑÑ ÐºÐ°Ðº
+ ожидаеÑÑÑ, ÑолÑко еÑли ÐÑ Ð¾Ñобо не позабоÑиÑеÑÑ Ð¾Ð± иÑ
пÑименении к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ð»Ñ Ð·Ð° Ñаз, инаÑе они могÑÑ
повÑедиÑÑ Ð²Ð¸Ð´ÐµÐ¾ пÑи невеÑном иÑполÑзовании.
</para></listitem>
@@ -1398,7 +1394,7 @@ pullup,softskip</option>.
mencoder <replaceable>заÑ
ваÑ.avi</replaceable> -mc 0 -oac lavc -ovc lavc -lavcopts \
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
</screen>
-ÐбÑаÑиÑе внимание на опÑии <option>ilme</option> и <option>ildct</option>.
+ÐбÑаÑиÑе внимание на опÑии <option>ilme</option> и <option>ildct</option>.
</para>
</sect2>
@@ -1411,12 +1407,12 @@ vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
ÐлгоÑиÑÐ¼Ñ Ð°Ñдио/видео (A/V) ÑинÑ
ÑонизаÑии <application>MEncoder</application>
бÑли ÑазÑабоÑÐ°Ð½Ñ Ñ ÑелÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñайлов Ñ Ð¿Ð¾Ð²ÑеждÑнной
ÑинÑ
ÑонизаÑией.
-Ðднако, в ÑÑде ÑлÑÑаев они могÑÑ Ð¿ÑивеÑÑи к ненÑÐ¶Ð½Ð¾Ð¼Ñ Ð¿ÑопÑÑкÑ
+Ðднако, в ÑÑде ÑлÑÑаев они могÑÑ Ð¿ÑивеÑÑи к ненÑÐ¶Ð½Ð¾Ð¼Ñ Ð¿ÑопÑÑкÑ
или повÑоÑÐµÐ½Ð¸Ñ ÐºÐ°Ð´Ñов и, возможно, к лÑгкой A/V ÑаÑÑинÑ
ÑонизаÑии
-коÑÑекÑнÑÑ
вÑ
однÑÑ
даннÑÑ
(конеÑно, пÑÐ¾Ð±Ð»ÐµÐ¼Ñ A/V ÑинÑ
ÑонизаÑии
+коÑÑекÑнÑÑ
вÑ
однÑÑ
даннÑÑ
(конеÑно, пÑÐ¾Ð±Ð»ÐµÐ¼Ñ A/V ÑинÑ
ÑонизаÑии
возникаÑÑ ÑолÑко пÑи обÑабоÑке или копиÑовании аÑдиоÑÑека пÑи
кодиÑовании видео, ÑÑо наÑÑоÑÑелÑно ÑекомендÑеÑÑÑ).
-ÐоÑÑÐ¾Ð¼Ñ ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеклÑÑиÑÑÑÑ Ð½Ð° базовÑÑ A/V ÑинÑ
ÑонизаÑиÑ
+ÐоÑÑÐ¾Ð¼Ñ ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеклÑÑиÑÑÑÑ Ð½Ð° базовÑÑ A/V ÑинÑ
ÑонизаÑиÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿Ñии <option>-mc 0</option> или ÑазмеÑÑиÑÑ ÑÑо в
конÑигÑÑаÑионном Ñайле <systemitem>~/.mplayer/mencoder</systemitem>,
еÑли ÐÑ ÑабоÑаеÑе ÑолÑко Ñ Ñ
оÑоÑими иÑÑоÑниками (DVD, TV-заÑ
ваÑ,
@@ -1425,13 +1421,13 @@ vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
</para>
<para>
-ÐÑли ÐÑ Ñ
оÑиÑе дополниÑелÑно заÑиÑиÑÑÑÑ Ð¾Ñ ÑÑÑаннÑÑ
пÑопÑÑков
+ÐÑли ÐÑ Ñ
оÑиÑе дополниÑелÑно заÑиÑиÑÑÑÑ Ð¾Ñ ÑÑÑаннÑÑ
пÑопÑÑков
и повÑоÑений кадÑов, ÐÑ Ð¼Ð¾Ð¶ÐµÑе одновÑеменно иÑполÑзоваÑÑ Ð¾Ð¿Ñии
<option>-mc 0</option> и <option>-noskip</option>.
-ÐÑо пÑедоÑвÑаÑÐ¸Ñ <emphasis>лÑбÑÑ</emphasis> A/V коÑÑекÑиÑ, и
+ÐÑо пÑедоÑвÑаÑÐ¸Ñ <emphasis>лÑбÑÑ</emphasis> A/V коÑÑекÑиÑ, и
бÑÐ´ÐµÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑ ÐºÐ°Ð´ÑÑ Ð¾Ð´Ð¸Ð½ в один, Ñак ÑÑо ÐÑ Ð½Ðµ ÑможеÑе ÑÑо
иÑполÑзоваÑÑ, еÑли бÑдеÑе пÑименÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо ÑилÑÑÑÑ, коÑоÑÑе
-непÑедÑказÑемо добавлÑÑÑ Ð¸Ð»Ð¸ оÑбÑаÑÑваÑÑ ÐºÐ°Ð´ÑÑ, либо еÑли Ñ
+непÑедÑказÑемо добавлÑÑÑ Ð¸Ð»Ð¸ оÑбÑаÑÑваÑÑ ÐºÐ°Ð´ÑÑ, либо еÑли Ñ
ÐаÑего вÑ
одного Ñайла пеÑеменнÑй биÑопоÑок!
ÐоÑÑÐ¾Ð¼Ñ Ð¸ÑполÑзование <option>-noskip</option> в обÑем ÑлÑÑае не
ÑекомендÑеÑÑÑ.
@@ -1442,7 +1438,7 @@ vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
поддеÑживаемое <application>MEncoder</application>, вÑзÑвало
A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
ÐÑо навеÑнÑка пÑоизойдÑÑ Ð¿Ñи иÑполÑзовании ÑовмеÑÑно Ñ Ð½ÐµÐºÐ¾ÑоÑÑми
-ÑилÑÑÑами, поÑÑÐ¾Ð¼Ñ ÑейÑÐ°Ñ <emphasis>не</emphasis> ÑекомендÑеÑÑÑ
+ÑилÑÑÑами, поÑÑÐ¾Ð¼Ñ ÑейÑÐ°Ñ <emphasis>не</emphasis> ÑекомендÑеÑÑÑ
иÑполÑзоваÑÑ ÑÑÑÑ
пÑоÑ
однÑй аÑдио Ñежим.
ÐÑа возможноÑÑÑ Ð¾ÑÑавлена ÑолÑко Ð´Ð»Ñ ÑовмеÑÑимоÑÑи и Ð´Ð»Ñ Ð¾Ð¿ÑÑнÑÑ
полÑзоваÑелей, понимаÑÑиÑ
когда ÑÑо безопаÑно, а когда неÑ.
@@ -1453,7 +1449,7 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<para>
Также бÑли ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± A/V ÑаÑÑинÑ
ÑонизаÑии пÑи кодиÑовании
Ñо ÑÑандаÑÑного ввода (stdin) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ <application>MEncoder</application>.
-Ðе делайÑе ÑÑого! ÐÑегда взамен иÑполÑзÑйÑе Ñайл или CD/DVD и Ñ.п.
+Ðе делайÑе ÑÑого! ÐÑегда взамен иÑполÑзÑйÑе Ñайл или CD/DVD и Ñ.п.
ÑÑÑÑойÑÑво.
</para>
</sect2>
@@ -1464,7 +1460,7 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<title>ÐÑÐ±Ð¾Ñ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ¾Ð´ÐµÐºÐ°</title>
<para>
-То, какой видеокодек лÑÑÑе вÑбÑаÑÑ, завиÑÐ¸Ñ Ð¾Ñ Ð½ÐµÑколÑкиÑ
+То, какой видеокодек лÑÑÑе вÑбÑаÑÑ, завиÑÐ¸Ñ Ð¾Ñ Ð½ÐµÑколÑкиÑ
ÑакÑоÑов, ÑакиÑ
как ÑазмеÑ, каÑеÑÑво, ÑÑÑойÑивоÑÑÑ Ðº оÑибкам,
пÑакÑиÑноÑÑÑ Ð¸ ÑаÑпÑоÑÑÑанÑнноÑÑÑ, многие из коÑоÑÑÑ
ÑилÑно
завиÑÑÑ Ð¾Ñ Ð»Ð¸ÑнÑÑ
пÑедпоÑÑений и ÑеÑ
ниÑеÑкиÑ
огÑаниÑений.
@@ -1473,13 +1469,13 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<listitem>
<para>
<emphasis role="bold">ÐÑÑекÑивноÑÑÑ ÑжаÑиÑ</emphasis>:
- ÐоÑÑаÑоÑно оÑевидно, ÑÑо болÑÑинÑÑво кодеков нового поколениÑ
+ ÐоÑÑаÑоÑно оÑевидно, ÑÑо болÑÑинÑÑво кодеков нового поколениÑ
ÑазÑабоÑÐ°Ð½Ñ Ð´Ð»Ñ ÑвелиÑÐµÐ½Ð¸Ñ ÐºÐ°ÑеÑÑва и ÑÑепени ÑжаÑиÑ.
ÐоÑÑомÑ, авÑоÑÑ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑководÑÑва и многие дÑÑгие лÑди полагаÑÑ,
ÑÑо ÐÑ Ð½Ðµ можеÑе оÑибиÑÑÑÑ
<footnote id='fn-menc-feat-dvd-mpeg4-codec-cpu'><para>
- ÐеÑмоÑÑÑ Ð½Ð° ÑÑо, бÑдÑÑе оÑÑоÑожнÑ: Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ MPEG-4 AVC
- видео Ñ DVD ÑазÑеÑением необÑ
одима бÑÑÑÑÐ°Ñ Ð¼Ð°Ñина (напÑимеÑ,
+ ÐеÑмоÑÑÑ Ð½Ð° ÑÑо, бÑдÑÑе оÑÑоÑожнÑ: Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ MPEG-4 AVC
+ видео Ñ DVD ÑазÑеÑением необÑ
одима бÑÑÑÑÐ°Ñ Ð¼Ð°Ñина (напÑимеÑ,
Pentium 4 ÑвÑÑе 1.5 ÐÐÑ Ð¸Ð»Ð¸ Pentium M ÑвÑÑе 1 ÐÐÑ).
</para></footnote>,
вÑбиÑÐ°Ñ MPEG-4 AVC кодеки (напÑимеÑ,
@@ -1487,24 +1483,24 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
вмеÑÑо ÑакиÑ
MPEG-4 ASP кодеков, как
<systemitem class="library">libavcodec</systemitem> MPEG-4 или
<systemitem class="library">Xvid</systemitem>.
- (ÐпÑÑнÑе ÑазÑабоÑÑики кодеков могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¸Ð½ÑеÑеÑÐ¾Ð²Ð°Ð½Ñ Ð²
+ (ÐпÑÑнÑе ÑазÑабоÑÑики кодеков могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¸Ð½ÑеÑеÑÐ¾Ð²Ð°Ð½Ñ Ð²
ознакомлении Ñ ÑоÑкой зÑÐµÐ½Ð¸Ñ ÐиÑ
аÑÐ»Ñ ÐидеÑмайеÑа (Michael
Niedermayer)
"<ulink url="http://guru.multimedia.cx/?p=10">поÑÐµÐ¼Ñ MPEG4-ASP оÑÑÑой</ulink>".)
ÐналогиÑно, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð»ÑÑÑее каÑеÑÑво Ñ MPEG-4 ASP, по
ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ MPEG-2 кодеками.
</para>
-
+
<para>
- Ðднако, новÑе кодеки, наÑ
одÑÑиеÑÑ Ð² инÑенÑивной ÑазÑабоÑке,
- могÑÑ ÑÑÑадаÑÑ Ð¾Ñ ÐµÑÑ Ð½Ðµ замеÑеннÑÑ
оÑибок, коÑоÑÑе могÑÑ
- иÑпоÑÑиÑÑ ÐºÐ¾Ð´Ð¸Ñование. ÐÑоÑÑо ÑÑо плаÑа за иÑполÑзование
+ Ðднако, новÑе кодеки, наÑ
одÑÑиеÑÑ Ð² инÑенÑивной ÑазÑабоÑке,
+ могÑÑ ÑÑÑадаÑÑ Ð¾Ñ ÐµÑÑ Ð½Ðµ замеÑеннÑÑ
оÑибок, коÑоÑÑе могÑÑ
+ иÑпоÑÑиÑÑ ÐºÐ¾Ð´Ð¸Ñование. ÐÑоÑÑо ÑÑо плаÑа за иÑполÑзование
пеÑедовÑÑ
ÑеÑ
нологий.
</para>
-
+
<para>
Ðолее ÑÑÑеÑÑвенно Ñо, ÑÑо Ð´Ð»Ñ Ð½Ð°Ñала иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кодека
- необÑ
одимо поÑÑаÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð½Ð° изÑÑение его опÑий Ñак, ÑÑÐ¾Ð±Ñ ÐÑ
+ необÑ
одимо поÑÑаÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð½Ð° изÑÑение его опÑий Ñак, ÑÑÐ¾Ð±Ñ ÐÑ
знали, ÑÑо нÑжно подÑÑÑаиваÑÑ Ð´Ð»Ñ Ð´Ð¾ÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ каÑеÑÑва
изобÑажениÑ.
</para>
@@ -1512,10 +1508,10 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<listitem><para>
<emphasis role="bold">ÐппаÑаÑÐ½Ð°Ñ ÑовмеÑÑимоÑÑÑ</emphasis>:
- ÐбÑÑно необÑ
одимо длиÑелÑное вÑÐµÐ¼Ñ Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки
+ ÐбÑÑно необÑ
одимо длиÑелÑное вÑÐµÐ¼Ñ Ð´Ð»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки
поÑледниÑ
видеокодеков в авÑономнÑе видеоплееÑÑ.
- РиÑоге, болÑÑинÑÑво поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко MPEG-1 (наподобие
- VCD, XVCD и KVCD), MPEG-2 (напÑимеÑ, DVD, SVCD и KVCD) и MPEG-4
+ РиÑоге, болÑÑинÑÑво поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко MPEG-1 (наподобие
+ VCD, XVCD и KVCD), MPEG-2 (напÑимеÑ, DVD, SVCD и KVCD) и MPEG-4
ASP (напÑимеÑ, DivX,
<systemitem class="library">libavcodec</systemitem> LMP4 и
<systemitem class="library">Xvid</systemitem>)
@@ -1529,34 +1525,34 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<emphasis role="bold">ÐÑÑÑее ÑооÑноÑение каÑеÑÑва и вÑемени кодиÑованиÑ</emphasis>:
Ðодеки, Ñже иÑполÑзÑÑÑиеÑÑ Ð¾Ð¿ÑеделÑнное вÑÐµÐ¼Ñ (напÑимеÑ,
<systemitem class="library">libavcodec</systemitem> MPEG-4 и
- <systemitem class="library">Xvid</systemitem>) обÑÑно ÑилÑно
- опÑимизиÑÐ¾Ð²Ð°Ð½Ñ Ð²ÑевозможнÑми оÑÑÑоÑмнÑми алгоÑиÑмами и
+ <systemitem class="library">Xvid</systemitem>) обÑÑно ÑилÑно
+ опÑимизиÑÐ¾Ð²Ð°Ð½Ñ Ð²ÑевозможнÑми оÑÑÑоÑмнÑми алгоÑиÑмами и
аÑÑемблеÑнÑм SIMD кодом. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ обладаÑÑ ÑенденÑией
доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð»ÑÑÑего ÑооÑноÑÐµÐ½Ð¸Ñ ÐºÐ°ÑеÑÑва к вÑемени кодиÑованиÑ.
Ðднако, Ñ Ð½Ð¸Ñ
могÑÑ Ð±ÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе оÑÐµÐ½Ñ Ð¿ÑодвинÑÑÑе опÑии,
коÑоÑÑе, бÑдÑÑи вклÑÑеннÑми, ÑделаÑÑ ÐºÐ¾Ð´Ð¸Ñование оÑÐµÐ½Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñм
Ñади неÑÑÑеÑÑвенного вÑигÑÑÑа.
</para>
-
+
<para>
- ÐÑли Ðам нÑжна вÑÑÐ¾ÐºÐ°Ñ ÑкоÑоÑÑÑ, пÑимеÑно пÑидеÑживайÑеÑÑ Ð½Ð°ÑÑÑоек
+ ÐÑли Ðам нÑжна вÑÑÐ¾ÐºÐ°Ñ ÑкоÑоÑÑÑ, пÑимеÑно пÑидеÑживайÑеÑÑ Ð½Ð°ÑÑÑоек
видеокодека по ÑмолÑÐ°Ð½Ð¸Ñ (Ñ
оÑÑ Ðам ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð¿ÑобоваÑÑ Ð´ÑÑгие опÑии,
- ÑпоминаемÑе в инÑÑ
ÑазделаÑ
данного ÑÑководÑÑва).
+ ÑпоминаемÑе в инÑÑ
ÑазделаÑ
данного ÑÑководÑÑва).
</para>
-
+
<para>
- ÐÑ Ñак же можеÑе ÑаÑÑмоÑÑеÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾ÑоÑного
+ ÐÑ Ñак же можеÑе ÑаÑÑмоÑÑеÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿Ð¾ÑоÑного
кодека, Ñ
оÑÑ ÑÑо полезно ÑолÑко Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелей маÑин Ñ
неÑколÑкими пÑоÑеÑÑоÑами.
<systemitem class="library">libavcodec</systemitem> MPEG-4 позволÑеÑ
ÑÑо, но вÑигÑÑÑ Ð² ÑкоÑоÑÑи огÑаниÑен и еÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑой оÑÑиÑаÑелÑнÑй
ÑÑÑÐµÐºÑ Ð´Ð»Ñ ÐºÐ°ÑеÑÑва каÑÑинки.
ÐногопоÑоÑное кодиÑование <systemitem class="library">Xvid</systemitem>,
- вклÑÑаемое опÑией <option>threads</option>, Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ
+ вклÑÑаемое опÑией <option>threads</option>, Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ
ÑÑкоÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ (на пÑимеÑно 40-60% в ÑипиÑнÑÑ
ÑлÑÑаÑÑ
)
Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑим ÑÑ
ÑдÑением каÑÑинки или вообÑе без него.
- <systemitem class="library">x264</systemitem> Ñакже позволÑеÑ
- многопоÑоÑное кодиÑование, ÑÑо обÑÑно ÑÑкоÑÑÐµÑ Ð¿ÑоÑеÑÑ Ð½Ð° 94%
+ <systemitem class="library">x264</systemitem> Ñакже позволÑеÑ
+ многопоÑоÑное кодиÑование, ÑÑо обÑÑно ÑÑкоÑÑÐµÑ Ð¿ÑоÑеÑÑ Ð½Ð° 94%
Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ CPU ÑдÑа Ñ ÑменÑÑением PSNR Ð¾Ñ 0.005 дРдо 0.01 дРпÑи ÑипиÑнÑÑ
наÑÑÑойкаÑ
.
</para>
@@ -1565,21 +1561,21 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<listitem>
<para>
<emphasis role="bold">ÐиÑнÑе пÑедпоÑÑениÑ</emphasis>:
- ÐдеÑÑ Ð²ÑÑ ÑÑановиÑÑÑ Ð¿Ð¾ÑÑи неÑазÑмнÑм: из-за ÑеÑ
же пÑиÑин, по
+ ÐдеÑÑ Ð²ÑÑ ÑÑановиÑÑÑ Ð¿Ð¾ÑÑи неÑазÑмнÑм: из-за ÑеÑ
же пÑиÑин, по
коÑоÑÑм одни пÑидеÑживаÑÑÑÑ DivX 3 в ÑеÑении леÑ, в Ñо вÑемÑ
как новÑе кодеки Ñже ÑвоÑÑÑ ÑÑдеÑа, дÑÑгие лÑди пÑедпоÑиÑаÑÑ
<systemitem class="library">Xvid</systemitem> или
<systemitem class="library">libavcodec</systemitem> MPEG-4
иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ <systemitem class="library">x264</systemitem>.
</para>
-
+
<para>
- Ðам нÑжно пÑинимаÑÑ ÑеÑение ÑамоÑÑоÑÑелÑно; не ÑлÑÑайÑе ÑовеÑов
+ Ðам нÑжно пÑинимаÑÑ ÑеÑение ÑамоÑÑоÑÑелÑно; не ÑлÑÑайÑе ÑовеÑов
лÑдей, пÑизнаÑÑиÑ
ÑолÑко один кодек.
СделайÑе неÑколÑко обÑазÑов клипов из иÑкомÑÑ
иÑÑоÑников и
ÑÑавниÑе ÑазнÑе опÑии кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ кодеки, Ñ ÑелÑÑ Ð²ÑбоÑа
Ñого, ÑÑо Ðам наиболее подÑ
одиÑ.
- ÐÑÑÑий кодек — ÑÑо ÑоÑ, коÑоÑÑм ÐÑ Ñами овладели, и
+ ÐÑÑÑий кодек — ÑÑо ÑоÑ, коÑоÑÑм ÐÑ Ñами овладели, и
коÑоÑÑй вÑглÑÐ´Ð¸Ñ Ð»ÑÑÑе вÑего Ð´Ð»Ñ ÐаÑиÑ
глаз на ÐаÑем диÑплее
<footnote id='fn-menc-feat-dvd-mpeg4-codec-playback'><para>
Ðдин и ÑÐ¾Ñ Ð¶Ðµ ÑезÑлÑÑÐ°Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ вÑглÑдеÑÑ Ñаким же
@@ -1604,30 +1600,30 @@ A/V ÑаÑÑинÑ
ÑонизаÑиÑ.
<title>ÐÑдио</title>
<para>
-ÐÑдио — ÑÑо гоÑаздо более пÑоÑÑÐ°Ñ Ð¿Ñоблема: еÑли ÐÑ
+ÐÑдио — ÑÑо гоÑаздо более пÑоÑÑÐ°Ñ Ð¿Ñоблема: еÑли ÐÑ
беÑпокоиÑеÑÑ Ð¾ каÑеÑÑве, пÑоÑÑо оÑÑавÑÑе вÑÑ ÐºÐ°Ðº еÑÑÑ.
-Ðаже поÑоки AC-3 5.1 не более Ñем 448 ÐбиÑ/Ñ Ð¸ они ÑÑоÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾
-биÑа. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоблазниÑÑÑÑ Ð¿ÐµÑекодиÑованием аÑдио в
-вÑÑококаÑеÑÑвеннÑй Vorbis (он же ogg ÑоÑмаÑ), но лиÑÑ Ñо, ÑÑо
+Ðаже поÑоки AC-3 5.1 не более Ñем 448 ÐбиÑ/Ñ Ð¸ они ÑÑоÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾
+биÑа. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоблазниÑÑÑÑ Ð¿ÐµÑекодиÑованием аÑдио в
+вÑÑококаÑеÑÑвеннÑй Vorbis (он же ogg ÑоÑмаÑ), но лиÑÑ Ñо, ÑÑо
Ñ ÐÐ°Ñ ÑÐµÐ³Ð¾Ð´Ð½Ñ Ð½ÐµÑ A/V пÑиÑмника Ð´Ð»Ñ Ð¿ÑопÑÑÐºÐ°Ð½Ð¸Ñ AC-3, не ознаÑаеÑ,
-ÑÑо Ñ ÐÐ°Ñ Ð½Ðµ бÑÐ´ÐµÑ ÐµÐ³Ð¾ завÑÑа. ÐÐ»Ñ Ð¶Ð¸Ð·Ð½ÐµÑпоÑобноÑÑи ÐаÑиÑ
DVD
+ÑÑо Ñ ÐÐ°Ñ Ð½Ðµ бÑÐ´ÐµÑ ÐµÐ³Ð¾ завÑÑа. ÐÐ»Ñ Ð¶Ð¸Ð·Ð½ÐµÑпоÑобноÑÑи ÐаÑиÑ
DVD
Ñипов в бÑдÑÑем, ÑоÑ
ÑанÑйÑе поÑок AC-3.
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоÑ
ÑаниÑÑ Ð¿Ð¾Ñок AC-3, копиÑÑÑ ÐµÐ³Ð¾ непоÑÑедÑÑвенно в
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоÑ
ÑаниÑÑ Ð¿Ð¾Ñок AC-3, копиÑÑÑ ÐµÐ³Ð¾ непоÑÑедÑÑвенно в
видеопоÑок <link linkend="menc-feat-mpeg4">в пÑоÑеÑÑе кодиÑованиÑ</link>.
-ÐÑ Ñакже можеÑе извлеÑÑ AC-3 поÑок Ñ ÑелÑÑ Ð¼ÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾
+ÐÑ Ñакже можеÑе извлеÑÑ AC-3 поÑок Ñ ÑелÑÑ Ð¼ÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾
в конÑейнеÑÑ Ð½Ð°Ð¿Ð¾Ð´Ð¾Ð±Ð¸Ðµ NUT или Matroska (ÐаÑÑÑÑка).
<screen>
mplayer <replaceable>Ñайл_иÑÑоÑника.vob</replaceable> -aid 129 -dumpaudio -dumpfile <replaceable>звÑк.ac3</replaceable></screen>
ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð² Ñайл <replaceable>звÑк.ac3</replaceable> аÑдиодоÑожкÑ
Ñ Ð½Ð¾Ð¼ÐµÑом 129 из Ñайла
<replaceable>Ñайл_иÑÑоÑника.vob</replaceable> (ÐбÑаÑиÑе внимание:
-DVD VOB ÑÐ°Ð¹Ð»Ñ Ð¾Ð±ÑÑно иÑполÑзÑÑÑ Ð½ÑмеÑаÑÐ¸Ñ Ð°Ñдио, оÑлиÑнÑÑ Ð¾Ñ
+DVD VOB ÑÐ°Ð¹Ð»Ñ Ð¾Ð±ÑÑно иÑполÑзÑÑÑ Ð½ÑмеÑаÑÐ¸Ñ Ð°Ñдио, оÑлиÑнÑÑ Ð¾Ñ
ÑÑандаÑÑной, ÑÑо ознаÑаеÑ, ÑÑо аÑдиодоÑожка VOB 129 — ÑÑо вÑоÑаÑ
аÑдиодоÑожка Ñайла).
</para>
<para>
-Ðо иногда Ñ ÐÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно Ð½ÐµÑ Ð¸Ð½Ð¾Ð³Ð¾ вÑбоÑа, Ñем далее ÑжимаÑÑ
+Ðо иногда Ñ ÐÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно Ð½ÐµÑ Ð¸Ð½Ð¾Ð³Ð¾ вÑбоÑа, Ñем далее ÑжимаÑÑ
звÑк Ð´Ð»Ñ Ñого, ÑÑоб болÑÑе биÑов могло бÑÑÑ Ð¿Ð¾ÑÑаÑено на видео.
ÐолÑÑинÑÑво лÑдей пÑедпоÑиÑаÑÑ ÑжимаÑÑ Ð·Ð²Ñк Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ MP3 или
Vorbis аÑдиокодеков.
@@ -1637,7 +1633,7 @@ Vorbis аÑдиокодеков.
<para>
<emphasis>Ðе</emphasis> иÑполÑзÑйÑе <option>-nosound</option> пÑи
-кодиÑовании Ñайла Ñ Ð°Ñдио, даже еÑли позже ÐÑ Ð±ÑдеÑе оÑделÑно
+кодиÑовании Ñайла Ñ Ð°Ñдио, даже еÑли позже ÐÑ Ð±ÑдеÑе оÑделÑно
кодиÑоваÑÑ Ð¸ мÑлÑÑеплекÑиÑоваÑÑ Ð°Ñдио.
ХоÑÑ ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð² идеалÑнÑÑ
ÑлÑÑаÑÑ
, иÑполÑзование
<option>-nosound</option> обÑÑно ÑкÑÑÐ²Ð°ÐµÑ ÑÑд пÑоблем в ÐаÑиÑ
@@ -1649,46 +1645,46 @@ Vorbis аÑдиокодеков.
</para>
<para>
-Ðам необÑ
одимо обÑабоÑаÑÑ Ð·Ð²Ñк Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
-<application>MEncoder</application>.
-ÐапÑимеÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе копиÑоваÑÑ Ð¸ÑÑ
однÑÑ Ð·Ð²ÑковÑÑ Ð´Ð¾ÑÐ¾Ð¶ÐºÑ Ð²
+Ðам необÑ
одимо обÑабоÑаÑÑ Ð·Ð²Ñк Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
+<application>MEncoder</application>.
+ÐапÑимеÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе копиÑоваÑÑ Ð¸ÑÑ
однÑÑ Ð·Ð²ÑковÑÑ Ð´Ð¾ÑÐ¾Ð¶ÐºÑ Ð²
пÑоÑеÑÑе кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ <option>-oac copy</option> или
пÑеобÑазоваÑÑ ÐµÑ Ð² "лÑгкий" 4 кÐÑ Ð¼Ð¾Ð½Ð¾ WAV PCM Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
<option>-oac pcm -channels 1 -srate 4000</option>.
-ÐнаÑе, в ÑÑде ÑлÑÑаев, бÑÐ´ÐµÑ ÑоздаваÑÑÑÑ Ð²Ð¸Ð´ÐµÐ¾ Ñайл,
+ÐнаÑе, в ÑÑде ÑлÑÑаев, бÑÐ´ÐµÑ ÑоздаваÑÑÑÑ Ð²Ð¸Ð´ÐµÐ¾ Ñайл,
ÑаÑÑинÑ
ÑонизиÑованнÑй Ñ Ð°Ñдио.
Такие ÑлÑÑаи пÑоиÑÑ
одÑÑ, когда ÑиÑло кадÑов видео иÑÑ
одного Ñайла
не ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ длиной кадÑов аÑдио, или когда бÑли
-ÑазÑÑвÑ/ÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñока, где поÑвилиÑÑ Ð¿ÑопÑÑеннÑе или излиÑние
+ÑазÑÑвÑ/ÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñока, где поÑвилиÑÑ Ð¿ÑопÑÑеннÑе или излиÑние
аÑдиокадÑÑ.
ÐÑавилÑнÑм ÑеÑением подобнÑÑ
пÑоблем ÑвлÑеÑÑÑ Ð²ÑÑавка ÑиÑÐ¸Ð½Ñ Ð¸Ð»Ð¸
ÑÑеÑение аÑдио в ÑакиÑ
ÑоÑкаÑ
.
Ðднако, <application>MPlayer</application> не Ð¼Ð¾Ð¶ÐµÑ ÑÑо ÑделаÑÑ
и еÑли ÐÑ Ð´ÐµÐ¼ÑлÑÑиплекÑиÑÑеÑе AC-3 аÑдио и кодиÑÑеÑе его оÑделÑнÑм
пÑиложением (или ÑоздаÑÑе дамп в PCM Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
-<application>MPlayer</application>), ÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÑанÑÑÑÑ
+<application>MPlayer</application>), ÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÑанÑÑÑÑ
неÑкоÑÑекÑиÑованнÑми и единÑÑвеннÑй иÑпоÑоб иÑ
иÑпÑавиÑÑ —
пÑопÑÑкаÑÑ/дÑблиÑоваÑÑ Ð²Ð¸Ð´ÐµÐ¾ÐºÐ°Ð´ÑÑ Ð² меÑÑаÑ
ÑÑивки.
-Ðока <application>MEncoder</application> Ð²Ð¸Ð´Ð¸Ñ Ð°Ñдио пÑи
+Ðока <application>MEncoder</application> Ð²Ð¸Ð´Ð¸Ñ Ð°Ñдио пÑи
кодиÑовании видео, он Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑ ÑÑÐ¾Ñ Ð¿ÑопÑÑк/дÑблиÑование
(ÑÑо обÑÑно не вÑзÑвÑÐµÑ Ð¿Ñоблем, Ñ.к. пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ñи полноÑÑÑÑ
ÑÑÑнÑÑ
кадÑаÑ
или пÑи Ñмене ÑÑен), но еÑли
<application>MEncoder</application> не доÑÑÑпно аÑдио, он пÑоÑÑо
бÑÐ´ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð²Ñе кадÑÑ "как еÑÑÑ" и они не бÑдÑÑ ÑовпадаÑÑ
-Ñ Ð¾ÐºÐ¾Ð½ÑаÑелÑнÑм аÑдиопоÑоком, когда ÐÑ, напÑимеÑ, обÑединиÑе
+Ñ Ð¾ÐºÐ¾Ð½ÑаÑелÑнÑм аÑдиопоÑоком, когда ÐÑ, напÑимеÑ, обÑединиÑе
аÑдио и видео доÑожки в Matroska Ñайл.
</para>
<para>
-ÐÑежде вÑего, Ðам необÑ
одимо пÑеобÑазоваÑÑ DVD звÑк в WAV Ñайл,
-коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð°Ñдиокодеком в каÑеÑÑве вÑ
однÑÑ
+ÐÑежде вÑего, Ðам необÑ
одимо пÑеобÑазоваÑÑ DVD звÑк в WAV Ñайл,
+коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð°Ñдиокодеком в каÑеÑÑве вÑ
однÑÑ
даннÑÑ
. ÐапÑимеÑ:
<screen>
-mplayer <replaceable>иÑÑ
однÑй_Ñайл.vob</replaceable> -ao pcm:file=<replaceable>звÑк.wav</replaceable>
+mplayer <replaceable>иÑÑ
однÑй_Ñайл.vob</replaceable> -ao pcm:file=<replaceable>звÑк.wav</replaceable>
-vc dummy -aid 1 -vo null
</screen>
ÑоÑ
ÑÐ°Ð½Ð¸Ñ Ð²ÑоÑÑÑ Ð°ÑдиодоÑÐ¾Ð¶ÐºÑ Ð¸Ð· Ñайла
-<replaceable>иÑÑ
однÑй_Ñайл.vob</replaceable> в Ñайл
+<replaceable>иÑÑ
однÑй_Ñайл.vob</replaceable> в Ñайл
<replaceable>звÑк.wav</replaceable>.
Ðозможно, ÐÑ Ð·Ð°Ñ
оÑиÑе ноÑмализоваÑÑ Ð·Ð²Ñк пеÑед кодиÑованием,
поÑколÑÐºÑ Ð°ÑдиодоÑожки DVD обÑÑно запиÑÑваÑÑÑÑ Ñ Ð¼Ð°Ð»ÐµÐ½Ñкой
@@ -1699,14 +1695,14 @@ mplayer <replaceable>иÑÑ
однÑй_Ñайл.vob</replaceable> -ao pcm:file=<r
Ð´ÐµÐ»Ð°ÐµÑ Ñо же Ñамое.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑжаÑÑ Ð² Vorbis или MP3. ÐапÑимеÑ:
<screen>oggenc -q1 <replaceable>звÑк.wav</replaceable></screen>
-кодиÑÑÐµÑ <replaceable>звÑк.wav</replaceable> Ñ ÐºÐ°ÑеÑÑвом 1,
+кодиÑÑÐµÑ <replaceable>звÑк.wav</replaceable> Ñ ÐºÐ°ÑеÑÑвом 1,
ÑÑо пÑимеÑно ÑквиваленÑно 80 Ðб/Ñ Ð¸ ÑвлÑеÑÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑм каÑеÑÑвом,
пÑи коÑоÑом Ðам нÑжно кодиÑоваÑÑ, еÑли ÐÑ Ð·Ð°Ð±Ð¾ÑиÑеÑÑ Ð¾ каÑеÑÑве.
-ÐожалÑйÑÑа, обÑаÑиÑе внимание, ÑÑо <application>MEncoder</application>
-на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¼ÑлÑÑиплекÑиÑование аÑдиопоÑоков
+ÐожалÑйÑÑа, обÑаÑиÑе внимание, ÑÑо <application>MEncoder</application>
+на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¼ÑлÑÑиплекÑиÑование аÑдиопоÑоков
Vorbis в вÑÑ
одной Ñайл, поÑколÑÐºÑ Ð¾Ð½ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко AVI и
-MPEG конÑейнеÑÑ Ð´Ð»Ñ Ð²ÑÑ
однÑÑ
Ñайлов, иÑполÑзование каждого из
-коÑоÑÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к пÑоблемам A/V ÑинÑ
ÑонизаÑии Ñ
+MPEG конÑейнеÑÑ Ð´Ð»Ñ Ð²ÑÑ
однÑÑ
Ñайлов, иÑполÑзование каждого из
+коÑоÑÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к пÑоблемам A/V ÑинÑ
ÑонизаÑии Ñ
некоÑоÑÑми плееÑами, в ÑлÑÑае когда AVI Ñайл ÑодеÑÐ¶Ð¸Ñ VBR
аÑдиопоÑоки наподобие Vorbis.
Ðе беÑпокойÑеÑÑ, в данном докÑменÑе бÑÐ´ÐµÑ ÑаÑÑказано как ÐÑ
@@ -1721,8 +1717,8 @@ MPEG конÑейнеÑÑ Ð´Ð»Ñ Ð²ÑÑ
однÑÑ
Ñайлов, иÑполÑзо
<para>
ТепеÑÑ, поÑле Ñого как ÐÑ ÐºÐ¾Ð´Ð¸Ñовали видео, ÑкоÑее вÑего, ÐÑ
-заÑ
оÑиÑе мÑлÑÑиплекÑиÑоваÑÑ ÐµÐ³Ð¾ Ñ Ð¾Ð´Ð½Ð¸Ð¼ или неÑколÑкими
-аÑдиопоÑоками в Ñакие видео конÑейнеÑÑ ÐºÐ°Ðº AVI, MPEG,
+заÑ
оÑиÑе мÑлÑÑиплекÑиÑоваÑÑ ÐµÐ³Ð¾ Ñ Ð¾Ð´Ð½Ð¸Ð¼ или неÑколÑкими
+аÑдиопоÑоками в Ñакие видео конÑейнеÑÑ ÐºÐ°Ðº AVI, MPEG,
Matroska или NUT.
Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка вÑвода аÑдио и видео в
<application>MEncoder</application> еÑÑÑ ÑолÑко Ð´Ð»Ñ ÑоÑмаÑов
@@ -1741,7 +1737,7 @@ mencoder -oac copy -ovc copy -o <replaceable>вÑÑ
одной_ÑилÑм.avi</re
</para>
<para>
-<application>MEncoder</application>
+<application>MEncoder</application>
Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ ÑкÑпеÑименÑалÑной поддеÑжкой
<systemitem class="library">libavformat</systemitem> —
библиоÑеки из пÑоекÑа FFmpeg, поддеÑживаÑÑей мÑлÑÑиплекÑиÑование
@@ -1754,12 +1750,12 @@ mencoder -oac copy -ovc copy -o <replaceable>вÑÑ
одной_ÑилÑм.asf</re
</screen>
ÐÑо ÑÐ´ÐµÐ»Ð°ÐµÑ Ñо же Ñамое, ÑÑо и пÑедÑдÑÑий пÑимеÑ, но вÑÑ
однÑм
конÑейнеÑом бÑÐ´ÐµÑ ASF.
-ÐожалÑйÑÑа, обÑаÑиÑе внимание, ÑÑо ÑÑа поддеÑжка веÑÑма
+ÐожалÑйÑÑа, обÑаÑиÑе внимание, ÑÑо ÑÑа поддеÑжка веÑÑма
ÑкÑпеÑименÑалÑна (но ÑÑановиÑÑÑ Ð»ÑÑÑе c каждÑм днÑм), и бÑдеÑ
-ÑабоÑаÑÑ ÑолÑко в ÑлÑÑае компилÑÑии <application>MPlayer</application>
-Ñ Ð²ÐºÐ»ÑÑенной поддеÑжкой
-<systemitem class="library">libavformat</systemitem> (ÑÑо ознаÑаеÑ,
-ÑÑо в болÑÑинÑÑве ÑлÑÑаев бинаÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¸Ð· пакеÑов не бÑдеÑ
+ÑабоÑаÑÑ ÑолÑко в ÑлÑÑае компилÑÑии <application>MPlayer</application>
+Ñ Ð²ÐºÐ»ÑÑенной поддеÑжкой
+<systemitem class="library">libavformat</systemitem> (ÑÑо ознаÑаеÑ,
+ÑÑо в болÑÑинÑÑве ÑлÑÑаев бинаÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¸Ð· пакеÑов не бÑдеÑ
ÑабоÑаÑÑ).
</para>
@@ -1769,25 +1765,25 @@ mencoder -oac copy -ovc copy -o <replaceable>вÑÑ
одной_ÑилÑм.asf</re
<para>
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑолкнÑÑÑÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑÑми ÑеÑÑÑзнÑми пÑоблемами A/V
-ÑинÑ
ÑонизаÑии пÑи попÑÑке мÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐаÑего видео
+ÑинÑ
ÑонизаÑии пÑи попÑÑке мÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐаÑего видео
Ñ Ð½ÐµÐºÐ¾ÑоÑÑми аÑдиодоÑожками, где, как Ð±Ñ ÐÑ Ð½Ðµ подбиÑали задеÑжкÑ
аÑдио, никогда не полÑÑаеÑÑÑ Ð¿ÑавилÑÐ½Ð°Ñ ÑинÑ
ÑонизаÑиÑ.
ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоиÑÑ
одиÑÑ Ð¿Ñи иÑполÑзовании некоÑоÑÑÑ
видеоÑилÑÑÑов,
пÑопÑÑкаÑÑиÑ
или дÑблиÑÑÑÑиÑ
некоÑоÑÑе кадÑÑ, напÑÐ¸Ð¼ÐµÑ ÑилÑÑÑов
обÑаÑного ÑелеÑина.
-ÐаÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð²Ð¸Ð´ÐµÐ¾ÑилÑÑÑ
+ÐаÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð²Ð¸Ð´ÐµÐ¾ÑилÑÑÑ
<option>harddup</option> в конÑе ÑепоÑки ÑилÑÑÑов Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ
подобнÑÑ
пÑоблем.
</para>
<para>
-Ðез опÑии <option>harddup</option>, в ÑлÑÑае когда
-<application>MEncoder</application> Ñ
оÑÐµÑ Ð´ÑблиÑоваÑÑ ÐºÐ°Ð´Ñ, он
-полагаеÑÑÑ Ð½Ð° Ñо, ÑÑо мÑлÑÑиплекÑÐ¾Ñ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ Ð¾ÑмеÑÐºÑ Ð²
+Ðез опÑии <option>harddup</option>, в ÑлÑÑае когда
+<application>MEncoder</application> Ñ
оÑÐµÑ Ð´ÑблиÑоваÑÑ ÐºÐ°Ð´Ñ, он
+полагаеÑÑÑ Ð½Ð° Ñо, ÑÑо мÑлÑÑиплекÑÐ¾Ñ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ Ð¾ÑмеÑÐºÑ Ð²
конÑейнеÑе Ñаким обÑазом, ÑÑо поÑледний ÐºÐ°Ð´Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð²ÑоÑен длÑ
доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ÑинÑ
ÑонизаÑии без ÑеалÑной запиÑи кадÑа.
С опÑией <option>harddup</option>, <application>MEncoder</application>
-вмеÑÑо ÑÑого пÑоÑÑо еÑÑ Ñаз помеÑÑÐ¸Ñ Ð¿Ð¾Ñледний ÐºÐ°Ð´Ñ Ð² ÑепоÑкÑ
+вмеÑÑо ÑÑого пÑоÑÑо еÑÑ Ñаз помеÑÑÐ¸Ñ Ð¿Ð¾Ñледний ÐºÐ°Ð´Ñ Ð² ÑепоÑкÑ
ÑилÑÑÑов.
ÐÑо ознаÑаеÑ, ÑÑо ÐºÐ¾Ð´ÐµÑ Ð¿Ð¾Ð»ÑÑÐ¸Ñ <emphasis>ÑоÑно</emphasis>
Ñакой же ÐºÐ°Ð´Ñ Ð´Ð²Ð°Ð¶Ð´Ñ Ð¸ ÑожмÑÑ ÐµÐ³Ð¾.
@@ -1797,12 +1793,12 @@ mencoder -oac copy -ovc copy -o <replaceable>вÑÑ
одной_ÑилÑм.asf</re
</para>
<para>
-Также Ñ ÐÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ бÑÑÑ Ð¸Ð½Ð¾Ð³Ð¾ вÑбоÑа, как иÑполÑзоваÑÑ
-<option>harddup</option> Ñ ÑоÑмаÑами конÑейнеÑов, коÑоÑÑе
-не ÑлиÑком плоÑно ÑвÑÐ·Ð°Ð½Ñ Ñ
-<application>MEncoder</application>, напÑимеÑ, Ñ ÑоÑмаÑами,
-поддеÑживаемÑми Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
-<systemitem class="library">libavformat</systemitem>,
+Также Ñ ÐÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ бÑÑÑ Ð¸Ð½Ð¾Ð³Ð¾ вÑбоÑа, как иÑполÑзоваÑÑ
+<option>harddup</option> Ñ ÑоÑмаÑами конÑейнеÑов, коÑоÑÑе
+не ÑлиÑком плоÑно ÑвÑÐ·Ð°Ð½Ñ Ñ
+<application>MEncoder</application>, напÑимеÑ, Ñ ÑоÑмаÑами,
+поддеÑживаемÑми Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
+<systemitem class="library">libavformat</systemitem>,
коÑоÑÑе могÑÑ Ð½Ðµ поддеÑживаÑÑ Ð´ÑблиÑование кадÑов на ÑÑовне
конÑейнеÑа.
</para>
@@ -1813,7 +1809,7 @@ mencoder -oac copy -ovc copy -o <replaceable>вÑÑ
одной_ÑилÑм.asf</re
<title>ÐгÑаниÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑа AVI</title>
<para>
-ХоÑÑ ÑÑо ÑамÑй ÑиÑоко ÑаÑпÑоÑÑÑанÑннÑй ÑоÑÐ¼Ð°Ñ ÐºÐ¾Ð½ÑейнеÑа поÑле
+ХоÑÑ ÑÑо ÑамÑй ÑиÑоко ÑаÑпÑоÑÑÑанÑннÑй ÑоÑÐ¼Ð°Ñ ÐºÐ¾Ð½ÑейнеÑа поÑле
MPEG-1, он Ñакже Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑми ÑÑÑеÑÑвеннÑми недоÑÑаÑками.
ÐожалÑй, они наиболее оÑÐµÐ²Ð¸Ð´Ð½Ñ Ð² его избÑÑоÑноÑÑи.
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑепоÑки AVI Ñайла ÑеÑÑеÑÑÑ 24 байÑа на заголовки и
@@ -1832,7 +1828,7 @@ MPEG-1, он Ñакже Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑми ÑÑÑеÑÑве
<orderedlist>
<listitem><para>
ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑ
Ñанено ÑолÑко ÑодеÑжимое Ñ ÑикÑиÑованной ÑаÑÑоÑой
- кадÑов. Ð ÑаÑÑноÑÑи, ÑÑо оÑобенно огÑаниÑиваеÑ, когда ÐаÑ
+ кадÑов. Ð ÑаÑÑноÑÑи, ÑÑо оÑобенно огÑаниÑиваеÑ, когда ÐаÑ
иÑÑ
однÑй маÑеÑиал ÑмеÑанного ÑодеÑжимого: напÑимеÑ, ÑвлÑеÑÑÑ
ÑмеÑÑÑ NTSC видео и киномаÑеÑиала.
РдейÑÑвиÑелÑноÑÑи, еÑÑÑ Ñ
аки, позволÑÑÑие ÑоÑ
ÑанÑÑÑ ÑодеÑжимое
@@ -1843,7 +1839,7 @@ MPEG-1, он Ñакже Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑми ÑÑÑеÑÑве
ÐÑдио в AVI ÑайлаÑ
должно бÑÑÑ Ð¸Ð»Ð¸ Ñ Ð¿Ð¾ÑÑоÑннÑм биÑпоÑоком (CBR)
или Ñ Ð¿Ð¾ÑÑоÑннÑм ÑазмеÑом кадÑа (Ñ.е. вÑе кадÑÑ Ð´ÐµÐºÐ¾Ð´Ð¸ÑÑÑÑÑÑ
в одно и Ñо же ÑиÑло вÑбоÑок).
- Ð ÑожалениÑ, ÑамÑй ÑÑÑекÑивнÑй кодек, Vorbis, не ÑдовлеÑвоÑÑеÑ
+ Ð ÑожалениÑ, ÑамÑй ÑÑÑекÑивнÑй кодек, Vorbis, не ÑдовлеÑвоÑÑеÑ
ни Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð· даннÑÑ
ÑÑебований.
ÐоÑÑомÑ, еÑли ÐÑ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑе ÑоÑ
ÑанÑÑÑ ÐÐ°Ñ ÑилÑм в AVI, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ
иÑполÑзоваÑÑ Ð¼ÐµÐ½ÐµÐµ ÑÑÑекÑивнÑй кодек, Ñакой как MP3 или AC-3.
@@ -1859,7 +1855,7 @@ Vorbis кодиÑование.
инÑÑÑÑменÑ, коÑоÑÑй ÐÑ Ð¸ÑполÑзÑеÑе Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑованиÑ.
Ðднако, возможно иÑполÑзоваÑÑ <application>MEncoder</application>
ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾ и заÑем иÑполÑзоваÑÑ Ð²Ð½ÐµÑние
-ÑÑилиÑÑ Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð°Ñдио и мÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ в
+ÑÑилиÑÑ Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð°Ñдио и мÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ³Ð¾ в
конÑÐµÐ¹Ð½ÐµÑ Ð´ÑÑгого ÑоÑмаÑа.
</para>
</sect3>
@@ -1874,10 +1870,10 @@ Matroska — ÑÑо ÑвободнÑй, оÑкÑÑÑÑй ÑÑандаÑÑ Ñ
пÑодвинÑÑÑÑ
возможноÑÑей, коÑоÑÑе ÑÑаÑÑе конÑейнеÑÑ (наподобие
AVI) не поддеÑживаÑÑ.
ÐапÑимеÑ, Matroska поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð°ÑдиоÑодеÑжимое Ñ Ð¿ÐµÑеменнÑм
-биÑпоÑоком (VBR), пеÑеменнÑе ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов (VFR), ÑазделÑ,
+биÑпоÑоком (VBR), пеÑеменнÑе ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов (VFR), ÑазделÑ,
ÑайловÑе вложениÑ, код обнаÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¾Ñибок (EDC) и ÑовÑеменнÑе
-A/V кодеки, Ñакие как "ÐÑодвинÑÑое ÐÑдио ÐодиÑование" ("Advanced
-Audio Coding", AAC), "Vorbis" или "MPEG-4 AVC" (H.264), Ñакже
+A/V кодеки, Ñакие как "ÐÑодвинÑÑое ÐÑдио ÐодиÑование" ("Advanced
+Audio Coding", AAC), "Vorbis" или "MPEG-4 AVC" (H.264), Ñакже
не поддеÑживаемÑе AVI.
</para>
@@ -1885,7 +1881,7 @@ Audio Coding", AAC), "Vorbis" или "MPEG-4 AVC" (H.264), Ñакже
УÑилиÑÑ, необÑ
одимÑе Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Matroska Ñайлов, ÑообÑа
назÑваÑÑÑÑ <application>mkvtoolnix</application>, и доÑÑÑпнÑ
Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва Unix плаÑÑоÑм, Ñак же как и Ð´Ð»Ñ Window$.
-ÐоÑколÑÐºÑ Matroska — оÑкÑÑÑÑй ÑоÑмаÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе найÑи
+ÐоÑколÑÐºÑ Matroska — оÑкÑÑÑÑй ÑоÑмаÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе найÑи
инÑе ÑÑилиÑÑ, коÑоÑÑе лÑÑÑе Ðам подÑ
одÑÑ, но поÑколÑкÑ
<application>mkvtoolnix</application> — наиболее обÑие
и поддеÑживаÑÑÑÑ Ñамой командой ÑазÑабоÑÑиков Matroska, мÑ
@@ -1894,8 +1890,8 @@ Audio Coding", AAC), "Vorbis" или "MPEG-4 AVC" (H.264), Ñакже
<para>
Ðозможно, ÑамÑм пÑоÑÑÑм ÑпоÑобом наÑаÑÑ Ð¸ÑполÑзоваÑÑ Matroska
-ÑвлÑеÑÑÑ Ð¸ÑполÑзование <application>MMG</application>,
-гÑаÑиÑеÑкой оболоÑки, поÑÑавлÑемой Ñ
+ÑвлÑеÑÑÑ Ð¸ÑполÑзование <application>MMG</application>,
+гÑаÑиÑеÑкой оболоÑки, поÑÑавлÑемой Ñ
<application>mkvtoolnix</application>. СледÑйÑе
<ulink url="http://www.bunkus.org/videotools/mkvtoolnix/doc/mkvmerge-gui.html">ÑÑководÑÑÐ²Ñ Ðº mkvmerge GUI (mmg)</ulink>.
</para>
@@ -1912,7 +1908,7 @@ mkvmerge -o <replaceable>вÑÑ
одной_Ñайл.mkv</replaceable> <replaceabl
Ñайл <replaceable>вÑÑ
одной_Ñайл.mkv</replaceable>.
Ðак бÑло оÑмеÑено Ñанее, Matroska ÑпоÑобна ÑеализоваÑÑ Ð³Ð¾Ñаздо
болÑÑее, напÑимеÑ, множеÑÑвеннÑе аÑдиодоÑожки (вклÑÑÐ°Ñ ÑонкÑÑ
-наÑÑÑÐ¾Ð¹ÐºÑ Ð°Ñдио/видео ÑинÑ
ÑонизаÑии), ÑазделÑ, ÑÑбÑиÑÑÑ,
+наÑÑÑÐ¾Ð¹ÐºÑ Ð°Ñдио/видео ÑинÑ
ÑонизаÑии), ÑазделÑ, ÑÑбÑиÑÑÑ,
Ñазбиение и Ñ.д..
ÐожалÑйÑÑа, обÑаÑиÑеÑÑ Ðº докÑменÑаÑии на ÑÑи пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ
деÑалей.
@@ -1933,7 +1929,7 @@ mkvmerge -o <replaceable>вÑÑ
одной_Ñайл.mkv</replaceable> <replaceabl
<formalpara>
<title>ЧÑо Ñакое ÑелеÑин?</title>
<para>
-ÐÑли ÐÑ Ð½Ðµ понимаеÑе многое из Ñого, ÑÑо здеÑÑ Ð½Ð°Ð¿Ð¸Ñано,
+ÐÑли ÐÑ Ð½Ðµ понимаеÑе многое из Ñого, ÑÑо здеÑÑ Ð½Ð°Ð¿Ð¸Ñано,
пÑоÑÑиÑе
<ulink url="http://en.wikipedia.org/wiki/Telecine">ÑÑаÑÑÑ Ðикипедии о ÑелеÑине</ulink>.
ÐÑо понÑÑное и ÑазÑмно обÑиÑное опиÑание Ñого, ÑÑо Ñакое
@@ -1944,29 +1940,29 @@ mkvmerge -o <replaceable>вÑÑ
одной_Ñайл.mkv</replaceable> <replaceabl
<title>ÐамеÑание о ÑиÑлаÑ
.</title>
<para>
Ðногие докÑменÑÑ, вклÑÑÐ°Ñ ÑказаннÑÑ Ð²ÑÑе ÑÑаÑÑÑ, ÑÑÑлаÑÑÑÑ
-на колиÑеÑÑво полей в ÑекÑÐ½Ð´Ñ 59.94 Ð´Ð»Ñ NTSC видео и
-ÑооÑвеÑÑÑвÑÑÑие кадÑовÑе ÑаÑÑоÑÑ 29.97 (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð²ÐµÑженного
+на колиÑеÑÑво полей в ÑекÑÐ½Ð´Ñ 59.94 Ð´Ð»Ñ NTSC видео и
+ÑооÑвеÑÑÑвÑÑÑие кадÑовÑе ÑаÑÑоÑÑ 29.97 (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð²ÐµÑженного
ÑелеÑÐ¸Ð½Ñ Ð¸ ÑеÑеÑÑÑÑоÑного видео) и 23.976 (Ð´Ð»Ñ Ð¿Ð¾ÑÑÑоÑного).
ÐÐ»Ñ Ð¿ÑоÑÑоÑÑ Ð² ÑÑде ÑÑаÑей ÑÑи ÑиÑла даже окÑÑглÑÑÑÑÑ Ð´Ð¾ 60, 30
и 24 ÑооÑвеÑÑÑвенно.
</para></formalpara>
<para>
-СÑÑого говоÑÑ, вÑе ÑÑи ÑиÑла ÑвлÑÑÑÑÑ Ð°Ð¿Ð¿ÑокÑимаÑиÑми.
-ЧÑÑно-белое NTSC видео бÑло ÑоÑно Ñ 60 полÑми в ÑекÑндÑ, но
+СÑÑого говоÑÑ, вÑе ÑÑи ÑиÑла ÑвлÑÑÑÑÑ Ð°Ð¿Ð¿ÑокÑимаÑиÑми.
+ЧÑÑно-белое NTSC видео бÑло ÑоÑно Ñ 60 полÑми в ÑекÑндÑ, но
позже бÑла вÑбÑана ÑаÑÑоÑа 60000/1001 Ð´Ð»Ñ Ð°Ð´Ð°Ð¿ÑаÑии ÑвеÑовой
-инÑоÑмаÑии Ñ Ð¾Ð´Ð½Ð¾Ð²ÑеменнÑм ÑоÑ
Ñанением ÑовмеÑÑимоÑÑи Ñ ÑÑÑно-белÑм
-Ñелевидением.
+инÑоÑмаÑии Ñ Ð¾Ð´Ð½Ð¾Ð²ÑеменнÑм ÑоÑ
Ñанением ÑовмеÑÑимоÑÑи Ñ ÑÑÑно-белÑм
+Ñелевидением.
ЦиÑÑовое NTSC видео (Ñакое как на DVD) Ñакже Ñ 60000/1001
полÑми в ÑекÑндÑ. ÐÑÑÑда возникла кадÑÐ¾Ð²Ð°Ñ ÑаÑÑоÑа 30000/1001
-кадÑ/Ñек Ð´Ð»Ñ ÑеÑеÑÑÑÑоÑного и ÑелеÑиненного видео; поÑÑÑоÑное
+кадÑ/Ñек Ð´Ð»Ñ ÑеÑеÑÑÑÑоÑного и ÑелеÑиненного видео; поÑÑÑоÑное
видео идÑÑ Ñ 24000/1001 кадÑ/Ñек.
</para>
<para>
СÑаÑÑе веÑÑии докÑменÑаÑии <application>MEncoder</application>
и много аÑÑ
ивнÑÑ
ÑообÑений из ÑпиÑков ÑаÑÑÑлки ÑÑÑлаÑÑÑÑ Ð½Ð°
-59.94, 29.97 и 23.976. ÐÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ <application>MEncoder</application>
+59.94, 29.97 и 23.976. ÐÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ <application>MEncoder</application>
бÑла обновлена Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÑобнÑÑ
знаÑений, и Ðам Ñак же
ÑледÑÐµÑ Ð¸Ñ
иÑполÑзоваÑÑ.
</para>
@@ -1980,26 +1976,26 @@ mkvmerge -o <replaceable>вÑÑ
одной_Ñайл.mkv</replaceable> <replaceabl
<title>Ðак иÑполÑзÑеÑÑÑ ÑелеÑин.</title>
<para>
ÐÑÑ Ð²Ð¸Ð´ÐµÐ¾, пÑедназнаÑенное Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа на NTSC Ñелевидении
-должно бÑÑÑ Ñ 60000/1001 полÑми в ÑекÑндÑ. ФилÑмÑ, ÑделаннÑе
+должно бÑÑÑ Ñ 60000/1001 полÑми в ÑекÑндÑ. ФилÑмÑ, ÑделаннÑе
Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° на TV ÑаÑÑо ÑнимаÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно пÑи 60000/1001
-полей в ÑекÑндÑ, но болÑÑинÑÑво кино ÑнимаеÑÑÑ Ð½Ð° 24 или
-24000/1001 кадÑаÑ
в ÑекÑндÑ. РпÑоÑеÑÑе ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ DVD Ñ
+полей в ÑекÑндÑ, но болÑÑинÑÑво кино ÑнимаеÑÑÑ Ð½Ð° 24 или
+24000/1001 кадÑаÑ
в ÑекÑндÑ. РпÑоÑеÑÑе ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ DVD Ñ
киноÑилÑмом, видео пÑеобÑазÑеÑÑÑ Ð´Ð»Ñ ÑÐµÐ»ÐµÐ²Ð¸Ð´ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ
пÑоÑеÑÑа, назÑваемого ÑелеÑин.
</para></formalpara>
<para>
-РдейÑÑвиÑелÑноÑÑи, видео никогда не Ñ
ÑаниÑÑÑ Ð½Ð° DVD Ñ
+РдейÑÑвиÑелÑноÑÑи, видео никогда не Ñ
ÑаниÑÑÑ Ð½Ð° DVD Ñ
60000/1001 полÑми в ÑекÑндÑ. ÐÐ»Ñ Ð²Ð¸Ð´ÐµÐ¾, оÑигиналÑно ÑвлÑÑÑегоÑÑ
-60000/1001, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¿Ð°Ñа полей обÑединÑеÑÑÑ Ð´Ð»Ñ ÑоÑмиÑованиÑ
+60000/1001, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¿Ð°Ñа полей обÑединÑеÑÑÑ Ð´Ð»Ñ ÑоÑмиÑованиÑ
кадÑа, пÑÐ¸Ð²Ð¾Ð´Ñ Ðº 30000/1001 кадÑам в ÑекÑндÑ. ÐаÑем аппаÑаÑнÑе
DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑок, Ð´Ð»Ñ Ð¾Ð¿ÑеделениÑ
-Ñого какие, ÑÑÑнÑе или неÑÑÑнÑе ÑÑÑоки Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоÑмиÑоваÑÑ Ð¿ÐµÑвÑй
+Ñого какие, ÑÑÑнÑе или неÑÑÑнÑе ÑÑÑоки Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоÑмиÑоваÑÑ Ð¿ÐµÑвÑй
кадÑ.
</para>
<para>
-ÐбÑÑно, ÑодеÑжимое Ñ ÑаÑÑоÑой кадÑов 24000/1001 оÑÑаÑÑÑÑ
+ÐбÑÑно, ÑодеÑжимое Ñ ÑаÑÑоÑой кадÑов 24000/1001 оÑÑаÑÑÑÑ
неизменнÑм пÑи кодиÑовании на DVD и DVD Ð¿Ð»ÐµÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ вÑполниÑÑ
ÑелеÑин на леÑÑ. Ðднако, иногда видео подвеÑгаеÑÑÑ ÑелеÑинÑ
<emphasis>до</emphasis> запиÑи на DVD; и Ñ
оÑÑ Ð¾Ð½Ð¾ изнаÑалÑно
@@ -2009,11 +2005,11 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
</para>
<para>
-ÐÑи ÑаÑÑмоÑÑении оÑделÑнÑÑ
кадÑов, полÑÑеннÑÑ
из 60000/1001
-полей в ÑекÑндÑ, ÑелеÑиненнÑÑ
или наобоÑоÑ, ÑеÑеÑÑÑÑоÑнаÑ
-ÑазвÑÑÑка ÑÑÑко видна в ÑлÑÑае, еÑли еÑÑÑ ÐºÐ°ÐºÐ¾Ðµ-либо движение,
-поÑколÑÐºÑ Ð¾Ð´Ð½Ð¾ поле (Ñкажем, Ñ ÑÑÑнÑми номеÑами ÑÑÑок)
-оÑобÑÐ°Ð¶Ð°ÐµÑ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени на 1/(60000/1001) ÑекÑÐ½Ð´Ñ Ð¿Ð¾Ð·Ð¶Ðµ, Ñем
+ÐÑи ÑаÑÑмоÑÑении оÑделÑнÑÑ
кадÑов, полÑÑеннÑÑ
из 60000/1001
+полей в ÑекÑндÑ, ÑелеÑиненнÑÑ
или наобоÑоÑ, ÑеÑеÑÑÑÑоÑнаÑ
+ÑазвÑÑÑка ÑÑÑко видна в ÑлÑÑае, еÑли еÑÑÑ ÐºÐ°ÐºÐ¾Ðµ-либо движение,
+поÑколÑÐºÑ Ð¾Ð´Ð½Ð¾ поле (Ñкажем, Ñ ÑÑÑнÑми номеÑами ÑÑÑок)
+оÑобÑÐ°Ð¶Ð°ÐµÑ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени на 1/(60000/1001) ÑекÑÐ½Ð´Ñ Ð¿Ð¾Ð·Ð¶Ðµ, Ñем
дÑÑгое поле. ÐоÑпÑоизведение ÑеÑеÑÑÑÑоÑного видео на компÑÑÑеÑе
вÑглÑÐ´Ð¸Ñ ÑквеÑно по двÑм пÑиÑинам: мониÑÐ¾Ñ Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð±Ð¾Ð»ÐµÐµ вÑÑоким
ÑазÑеÑением и видео показÑваеÑÑÑ Ð¿Ð¾ÐºÐ°Ð´Ñово, вмеÑÑо оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾
@@ -2026,20 +2022,20 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
ÐÑÐ¾Ñ Ñаздел пÑименим ÑолÑко к NTSC DVD, а не к PAL.
</para></listitem>
<listitem><para>
-ÐÑимеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½ÑÑ
ÑÑÑок <application>MEncoder</application>
-в данном Ñазделе <emphasis role="bold">не</emphasis>
+ÐÑимеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½ÑÑ
ÑÑÑок <application>MEncoder</application>
+в данном Ñазделе <emphasis role="bold">не</emphasis>
пÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ ÑеалÑного иÑполÑзованиÑ. Ðни пÑоÑÑо ÑвлÑÑÑÑÑ
-минималÑно необÑ
одимÑм ÑÑебованием Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑованиÑ
+минималÑно необÑ
одимÑм ÑÑебованием Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑованиÑ
ÑооÑвеÑÑÑвÑÑÑей каÑегоÑии видео. То, как ÑделаÑÑ Ñ
оÑоÑие DVD
-ÑÐ¸Ð¿Ñ Ð¸Ð»Ð¸ Ñонко наÑÑÑоиÑÑ
-<systemitem class="library">libavcodec</systemitem> длÑ
-доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑималÑного каÑеÑÑва, не вÑ
Ð¾Ð´Ð¸Ñ Ð² Ñамки данного
+ÑÐ¸Ð¿Ñ Ð¸Ð»Ð¸ Ñонко наÑÑÑоиÑÑ
+<systemitem class="library">libavcodec</systemitem> длÑ
+доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑималÑного каÑеÑÑва, не вÑ
Ð¾Ð´Ð¸Ñ Ð² Ñамки данного
Ñаздела; обÑаÑиÑеÑÑ Ðº дÑÑгим Ñазделам
<link linkend="encoding-guide">Ð ÑководÑÑва по кодиÑованиÑ
Ñ MEncoder</link>.
</para></listitem>
<listitem><para>
-ÐÑÑÑ Ð½ÐµÑколÑко ÑноÑок, ÑпеÑиÑиÑнÑÑ
Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑководÑÑва,
+ÐÑÑÑ Ð½ÐµÑколÑко ÑноÑок, ÑпеÑиÑиÑнÑÑ
Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑководÑÑва,
обознаÑеннÑÑ
ÑледÑÑÑим обÑазом:
<link linkend="menc-feat-telecine-footnotes">[1]</link>
</para></listitem>
@@ -2057,8 +2053,8 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
</para>
<para>
-ÐÑи воÑпÑоизведении DVD Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой в
-<application>MPlayer</application>, <application>MPlayer</application>
+ÐÑи воÑпÑоизведении DVD Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой в
+<application>MPlayer</application>, <application>MPlayer</application>
вÑÐ²ÐµÐ´ÐµÑ ÑледÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ñи наÑале воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑилÑма:
<screen>demux_mpg: обнаÑÑжено 24000/1001 кадÑа/Ñек NTSC ÑодеÑжимое Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой,
@@ -2071,11 +2067,11 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<para>
ÐÑи пÑоÑмоÑÑе видео Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой ÐÑ Ð½Ðµ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð°
-наблÑдаÑÑ ÑеÑеÑÑÑÑоÑноÑÑÑ. Ðднако, бÑдÑÑе оÑÑоÑожнÑ, поÑколÑкÑ
-иногда еÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð¿ÑимеÑÑ ÑелеÑина Ñам, где ÐÑ ÑÑого не
-ожидаеÑе. Ðной наблÑдалиÑÑ DVD Ñ TV-ÑоÑ, Ñ ÐºÐ¾ÑоÑÑÑ
бÑла одна
+наблÑдаÑÑ ÑеÑеÑÑÑÑоÑноÑÑÑ. Ðднако, бÑдÑÑе оÑÑоÑожнÑ, поÑколÑкÑ
+иногда еÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ Ð¿ÑимеÑÑ ÑелеÑина Ñам, где ÐÑ ÑÑого не
+ожидаеÑе. Ðной наблÑдалиÑÑ DVD Ñ TV-ÑоÑ, Ñ ÐºÐ¾ÑоÑÑÑ
бÑла одна
ÑекÑнда ÑелеÑина пÑи каждой Ñмене ÑÑен или в ÑлÑÑайнÑÑ
на вид
-меÑÑаÑ
. ÐÐ´Ð½Ð°Ð¶Ð´Ñ Ñ Ð²Ð¸Ð´ÐµÐ» DVD, Ñ ÐºÐ¾ÑоÑого одна половина бÑла Ñ
+меÑÑаÑ
. ÐÐ´Ð½Ð°Ð¶Ð´Ñ Ñ Ð²Ð¸Ð´ÐµÐ» DVD, Ñ ÐºÐ¾ÑоÑого одна половина бÑла Ñ
поÑÑÑоÑной ÑазвÑÑÑкой, а вÑоÑÐ°Ñ — ÑелеÑиненной. ÐÑли ÐÑ
желаеÑе бÑÑÑ <emphasis>дейÑÑвиÑелÑно</emphasis> ÑвеÑеннÑми,
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑоÑканиÑоваÑÑ Ð²ÐµÑÑ ÑилÑм:
@@ -2084,24 +2080,24 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
ÐÑполÑзование <option>-benchmark</option> позволÑеÑ
<application>MPlayer</application> воÑпÑоизводиÑÑ ÑилÑм ÑÑолÑ
-бÑÑÑÑо, ÑÐºÐ¾Ð»Ñ ÑÑо возможно; Ñем не менее, в завиÑимоÑÑи оÑ
-ÐаÑего железа, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð½ÐµÐºÐ¾ÑоÑое вÑемÑ. ÐÑÑкий Ñаз,
+бÑÑÑÑо, ÑÐºÐ¾Ð»Ñ ÑÑо возможно; Ñем не менее, в завиÑимоÑÑи оÑ
+ÐаÑего железа, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð½ÐµÐºÐ¾ÑоÑое вÑемÑ. ÐÑÑкий Ñаз,
когда demux_mpg бÑÐ´ÐµÑ ÑообÑаÑÑ Ð¾Ð± изменении ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов,
ÑÑÑока пÑÑмо над ÑообÑением Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ Ðам вÑемÑ, пÑи коÑоÑом
пÑоизоÑло изменение.
</para>
<para>
-Ðногда видео на DVD Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой назÑваÑÑ
+Ðногда видео на DVD Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой назÑваÑÑ
"мÑгким ÑелеÑином", поÑколÑÐºÑ Ð¿ÑедполагаеÑÑÑ, ÑÑо
-ÑелеÑин бÑÐ´ÐµÑ Ð²Ñполнен DVD плееÑом.
+ÑелеÑин бÑÐ´ÐµÑ Ð²Ñполнен DVD плееÑом.
</para>
</sect3>
<sect3 id="menc-feat-telecine-ident-telecined">
<title>ТелеÑин</title>
<para>
-ТелеÑиненное видео изнаÑалÑно ÑнимаеÑÑÑ Ð½Ð° 24000/1001 кадÑ/Ñек,
+ТелеÑиненное видео изнаÑалÑно ÑнимаеÑÑÑ Ð½Ð° 24000/1001 кадÑ/Ñек,
но подвеÑгаеÑÑÑ ÑелеÑÐ¸Ð½Ñ <emphasis>до</emphasis> запиÑи на DVD.
</para>
@@ -2113,7 +2109,7 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<para>
ÐÑи пÑоÑмоÑÑе ÑелеÑиненного видео, ÐÑ Ð±ÑдеÑе видеÑÑ "меÑÑаÑÑие"
-аÑÑеÑакÑÑ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑки: они бÑдÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑно
+аÑÑеÑакÑÑ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑки: они бÑдÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑно
повÑоÑÑÑÑÑÑ Ð¸ иÑÑезаÑÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе деÑалÑно ÑÑо ÑаÑÑмоÑÑеÑÑ ÑледÑÑÑим обÑазом:
<orderedlist>
@@ -2128,15 +2124,15 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
впеÑÑд.
</para></listitem>
<listitem><para>
- ÐаблÑдайÑе за поÑледоваÑелÑноÑÑÑÑ ÐºÐ°Ð´Ñов Ñ ÑеÑеÑÑÑÑоÑной и
- поÑÑÑоÑной ÑазвÑÑÑкой. ÐÑли ÐÑ Ð²Ð¸Ð´Ð¸Ñе ÑледÑÑÑÑÑ ÑÑÑÑкÑÑÑÑ:
+ ÐаблÑдайÑе за поÑледоваÑелÑноÑÑÑÑ ÐºÐ°Ð´Ñов Ñ ÑеÑеÑÑÑÑоÑной и
+ поÑÑÑоÑной ÑазвÑÑÑкой. ÐÑли ÐÑ Ð²Ð¸Ð´Ð¸Ñе ÑледÑÑÑÑÑ ÑÑÑÑкÑÑÑÑ:
ЧЧЧÐÐ,ЧЧЧÐÐ,ЧЧЧÐÐ,... (где Ч — ÑеÑеÑÑÑÑоÑнÑе, а Ð —
- поÑÑÑоÑнÑе кадÑÑ), знаÑÐ¸Ñ Ð²Ð¸Ð´ÐµÐ¾ ÑелеÑиненное. ÐÑли ÐÑ
+ поÑÑÑоÑнÑе кадÑÑ), знаÑÐ¸Ñ Ð²Ð¸Ð´ÐµÐ¾ ÑелеÑиненное. ÐÑли ÐÑ
наблÑдаеÑе инÑÑ ÑÑÑÑкÑÑÑÑ, видео Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑелеÑиненнÑм,
иÑполÑзÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо неÑÑандаÑÑнÑй меÑод;
- <application>MEncoder</application> не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑеобÑазоваÑÑ
+ <application>MEncoder</application> не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑеобÑазоваÑÑ
без поÑеÑÑ Ð½ÐµÑÑандаÑÑнÑй ÑелеÑин в поÑÑÑоÑнÑÑ ÑазвÑÑÑкÑ.
- ÐÑли ÐÑ Ð½Ðµ видиÑе вообÑе никакой ÑÑÑÑкÑÑÑÑ, знаÑÐ¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ
+ ÐÑли ÐÑ Ð½Ðµ видиÑе вообÑе никакой ÑÑÑÑкÑÑÑÑ, знаÑÐ¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ
веÑоÑÑно, ÑÑо видео Ñ ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой.
</para></listitem>
</orderedlist>
@@ -2150,8 +2146,8 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<para>
ÐÑÑгой ÑпоÑоб вÑÑÑниÑÑ, бÑл ÐÐ°Ñ Ð¸ÑÑоÑник подвеÑжен ÑелеÑÐ¸Ð½Ñ Ð¸Ð»Ð¸ неÑ, заклÑÑаеÑÑÑ
-в воÑпÑоизведении иÑÑ
одного маÑеÑиала Ñ Ð¾Ð¿ÑиÑми командной ÑÑÑоки
-<option>-vf pullup</option> и <option>-v</option>, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ, как
+в воÑпÑоизведении иÑÑ
одного маÑеÑиала Ñ Ð¾Ð¿ÑиÑми командной ÑÑÑоки
+<option>-vf pullup</option> и <option>-v</option>, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ, как
<option>pullup</option> ÑопоÑÑавлÑÐµÑ ÐºÐ°Ð´ÑÑ.
ÐÑли иÑÑоÑник бÑл ÑелеÑиненнÑм, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвидеÑÑ Ð² конÑоли 3:2 ÑÑÑÑкÑÑÑÑ Ñ
ÑеÑедÑÑÑимиÑÑ <systemitem>0+.1.+2</systemitem> и <systemitem>0++1</systemitem>.
@@ -2198,15 +2194,15 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<para>
Ðогда <application>MPlayer</application> воÑпÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑÑÑ ÐºÐ°ÑегоÑиÑ, он бÑдеÑ
-(как пÑавило, пеÑиодиÑеÑки) пеÑеклÑÑаÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ "30000/1001 кадÑов/Ñек NTSC
-ÑодеÑжимÑм" и "24000/1001 кадÑа/Ñек NTSC ÑодеÑжимÑм Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой".
-СмоÑÑиÑе ÐºÐ¾Ð½ÐµÑ Ð²Ñвода <application>MPlayer</application>, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ
+(как пÑавило, пеÑиодиÑеÑки) пеÑеклÑÑаÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ "30000/1001 кадÑов/Ñек NTSC
+ÑодеÑжимÑм" и "24000/1001 кадÑа/Ñек NTSC ÑодеÑжимÑм Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой".
+СмоÑÑиÑе ÐºÐ¾Ð½ÐµÑ Ð²Ñвода <application>MPlayer</application>, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ
ÑÑи ÑообÑениÑ.
</para>
<para>
-Ðам ÑледÑÐµÑ Ð¿ÑовеÑиÑÑ ÑÐ°Ð·Ð´ÐµÐ»Ñ Ñ "30000/1001 кадÑов/Ñек NTSC ÑодеÑжимÑм",
-ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо видео дейÑÑвиÑелÑно ÑелеÑиненное, а не пÑоÑÑо
+Ðам ÑледÑÐµÑ Ð¿ÑовеÑиÑÑ ÑÐ°Ð·Ð´ÐµÐ»Ñ Ñ "30000/1001 кадÑов/Ñек NTSC ÑодеÑжимÑм",
+ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо видео дейÑÑвиÑелÑно ÑелеÑиненное, а не пÑоÑÑо
ÑеÑеÑÑÑÑоÑное.
</para>
</sect3>
@@ -2221,8 +2217,8 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
</para>
<para>
-ÐÑа каÑегоÑÐ¸Ñ Ð²ÑглÑÐ´Ð¸Ñ Ñакже, как и "ÑмеÑаннÑе поÑÑÑоÑÐ½Ð°Ñ ÑазвеÑÑка и ÑелеÑин",
-до ÑеÑ
поÑ, пока не пÑовеÑиÑе ÑÐ°Ð·Ð´ÐµÐ»Ñ 30000/1001 кадÑ/Ñек и не ÑвидиÑе,
+ÐÑа каÑегоÑÐ¸Ñ Ð²ÑглÑÐ´Ð¸Ñ Ñакже, как и "ÑмеÑаннÑе поÑÑÑоÑÐ½Ð°Ñ ÑазвеÑÑка и ÑелеÑин",
+до ÑеÑ
поÑ, пока не пÑовеÑиÑе ÑÐ°Ð·Ð´ÐµÐ»Ñ 30000/1001 кадÑ/Ñек и не ÑвидиÑе,
ÑÑо ÑÑÑÑкÑÑÑа ÑелеÑина оÑÑÑÑÑÑвÑеÑ.
</para>
</sect3>
@@ -2234,9 +2230,9 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<title>Ðак кодиÑоваÑÑ ÐºÐ°Ð¶Ð´ÑÑ ÐºÐ°ÑегоÑиÑ</title>
<para>
-Ðак Ñже бÑло Ñказано вÑÑе, поÑледÑÑÑие пÑимеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½ÑÑ
ÑÑÑок
-<application>MEncoder</application> <emphasis role="bold">не</emphasis> ознаÑаÑÑ,
-ÑÑо надо иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ иÑ
; они вÑего лиÑÑ Ð¿ÑимеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñного набоÑа паÑамеÑÑов
+Ðак Ñже бÑло Ñказано вÑÑе, поÑледÑÑÑие пÑимеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½ÑÑ
ÑÑÑок
+<application>MEncoder</application> <emphasis role="bold">не</emphasis> ознаÑаÑÑ,
+ÑÑо надо иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ иÑ
; они вÑего лиÑÑ Ð¿ÑимеÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñного набоÑа паÑамеÑÑов
Ð´Ð»Ñ Ð¿ÑавилÑного кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ каÑегоÑии.
</para>
@@ -2246,8 +2242,8 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<para>
Ðидео Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвеÑÑкой не ÑÑебÑÐµÑ ÑпеÑиалÑной обÑабоÑки Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑованиÑ.
-ÐдинÑÑвеннÑй нÑжнÑй Ðам Ð´Ð»Ñ ÑвеÑенноÑÑи паÑамеÑÑ — ÑÑо
-<option>-ofps 24000/1001</option>.
+ÐдинÑÑвеннÑй нÑжнÑй Ðам Ð´Ð»Ñ ÑвеÑенноÑÑи паÑамеÑÑ — ÑÑо
+<option>-ofps 24000/1001</option>.
РпÑоÑивном ÑлÑÑае <application>MEncoder</application> бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ ÐºÐ¾Ð´Ð¸ÑоваÑÑ
Ñ 30000/1001 кадÑами в ÑекÑÐ½Ð´Ñ Ð¸ ÑоздаÑÑ Ð´ÑблиÑÑÑÑиеÑÑ ÐºÐ°Ð´ÑÑ.
</para>
@@ -2274,7 +2270,7 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
ТелеÑин Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑаÑÑн Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾ÑигиналÑного 24000/1001 ÑодеÑжимого
пÑи помоÑи пÑоÑеÑÑа, назÑваемого обÑаÑнÑй ÑелеÑин.
<application>MPlayer</application> ÑодеÑÐ¶Ð¸Ñ Ð½ÐµÑколÑко ÑилÑÑÑов Ð´Ð»Ñ Ð²ÑполнениÑ
-ÑÑого; лÑÑÑий из ниÑ
, <option>pullup</option> опиÑан в Ñазделе
+ÑÑого; лÑÑÑий из ниÑ
, <option>pullup</option> опиÑан в Ñазделе
<link linkend="menc-feat-telecine-encode-mixedpt">ÑмеÑаннÑе поÑÑÑоÑÐ½Ð°Ñ ÑазвеÑÑка
и ÑелеÑин</link>.
</para>
@@ -2285,10 +2281,10 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<title>ЧеÑеÑÑÑÑоÑÐ½Ð°Ñ ÑазвеÑÑка</title>
<para>
-Ðа пÑакÑике в болÑÑинÑÑве ÑлÑÑаев невозможно полÑÑиÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿Ð¾ÑÑÑоÑное
+Ðа пÑакÑике в болÑÑинÑÑве ÑлÑÑаев невозможно полÑÑиÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿Ð¾ÑÑÑоÑное
видео из ÑеÑеÑÑÑÑоÑного ÑодеÑжимого.
ÐдинÑÑвеннÑй ÑпоÑоб ÑделаÑÑ ÑÑо без поÑеÑи Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ Ð²ÐµÑÑикалÑного ÑазÑеÑениÑ
-- ÑÑо ÑдвоиÑÑ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов и попÑÑаÑÑÑÑ "ÑгадаÑÑ", ÑÑо должно ÑоÑÑавиÑÑ
+- ÑÑо ÑдвоиÑÑ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов и попÑÑаÑÑÑÑ "ÑгадаÑÑ", ÑÑо должно ÑоÑÑавиÑÑ
ÑооÑвеÑÑÑвÑÑÑие линии каждого Ð¿Ð¾Ð»Ñ (ÑÑÐ¾Ñ ÑпоÑоб Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ´Ð¾ÑÑаÑки, ÑмоÑÑиÑе меÑод
3).
</para>
@@ -2299,7 +2295,7 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
кодиÑовÑика Ñ
оÑоÑо ÑжимаÑÑ, но <systemitem class="library">libavcodec</systemitem>
Ð¸Ð¼ÐµÐµÑ Ð´Ð²Ð° паÑамеÑÑа ÑпеÑиалÑно Ð´Ð»Ñ ÑÑÑÑ Ð»ÑÑÑего ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑеÑеÑÑÑÑоÑного
видео: <option>ildct</option> и <option>ilme</option>. Ð ÑÐ¾Ð¼Ñ Ð¶Ðµ, наÑÑоÑÑелÑно
- ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ
+ ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ
<option>mbd=2</option><link linkend="menc-feat-telecine-footnotes">[2]</link>,
поÑÐ¾Ð¼Ñ ÑÑо пÑи ÑÑом макÑоблоки в меÑÑаÑ
без Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ñ ÐºÐ°Ðº
неÑеÑеÑÑÑÑоÑнÑе. ÐмейÑе в видÑ, ÑÑо <option>-ofps</option> здеÑÑ ÐРнÑжна.
@@ -2307,15 +2303,15 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
</para></listitem>
<listitem><para>
ÐÑполÑзÑйÑе ÑилÑÑÑ Ð´ÐµÐ¸Ð½ÑеÑлейÑинга пеÑед кодиÑованием. СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко
- ÑакиÑ
ÑилÑÑÑов на вÑбоÑ, каждÑй Ð¸Ð¼ÐµÐµÑ Ñвои пÑеимÑÑеÑÑва и недоÑÑаÑки.
+ ÑакиÑ
ÑилÑÑÑов на вÑбоÑ, каждÑй Ð¸Ð¼ÐµÐµÑ Ñвои пÑеимÑÑеÑÑва и недоÑÑаÑки.
ÐбÑаÑиÑеÑÑ Ðº <option>mplayer -pphelp</option> и <option>mplayer -vf help</option>
- Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпнÑÑ
(grep по "deint"), пÑоÑÑиÑе
+ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпнÑÑ
(grep по "deint"), пÑоÑÑиÑе
<ulink url="http://guru.multimedia.cx/deinterlacing-filters/">СÑавнение
ÑилÑÑÑов деинÑеÑлейÑинга</ulink> Ðайкла ÐидеÑмайеÑа (Michael Niedermayer),
и поиÑиÑе в <ulink url="http://www.mplayerhq.hu/design7/mailing_lists.html">
ÑпиÑкаÑ
ÑаÑÑÑлки MPlayer</ulink>, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи множеÑÑво обÑÑждений ÑазлиÑнÑÑ
ÑилÑÑÑов.
- РопÑÑÑ, ÑаÑÑоÑа кадÑов не менÑеÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
<option>-ofps</option>.
+ РопÑÑÑ, ÑаÑÑоÑа кадÑов не менÑеÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
<option>-ofps</option>.
к ÑÐ¾Ð¼Ñ Ð¶Ðµ деинÑеÑлейÑинг ÑледÑÐµÑ Ð¿ÑоизводиÑÑ Ð¿Ð¾Ñле обÑезаниÑ
<link linkend="menc-feat-telecine-footnotes">[1]</link> и до маÑÑÑабиÑованиÑ.
<screen>mencoder dvd://1 -oac copy -vf yadif -ovc lavc</screen>
@@ -2323,23 +2319,23 @@ DVD плееÑÑ ÑиÑаÑÑ Ñлаг, вклÑÑеннÑй в видеопоÑ
<listitem><para>
Ð ÑожалениÑ, ÑÑа опÑÐ¸Ñ ÑÐ±Ð¾Ð¸Ñ Ñ <application>MEncoder</application>; она должна
Ñ
оÑоÑо ÑабоÑаÑÑ Ñ <application>MEncoder G2</application>, но его пока неÑ. ÐÑ
- можеÑе ÑÑолкнÑÑÑÑÑ Ñ ÐºÑаÑ
ами. Ðак Ð±Ñ Ñо ни бÑло, назнаÑение опÑии
+ можеÑе ÑÑолкнÑÑÑÑÑ Ñ ÐºÑаÑ
ами. Ðак Ð±Ñ Ñо ни бÑло, назнаÑение опÑии
<option> -vf tfields</option> — ÑоздаÑÑ Ð¿Ð¾Ð»Ð½Ñй ÐºÐ°Ð´Ñ Ð¸Ð· каждого полÑ, ÑÑо
Ð´ÐµÐ»Ð°ÐµÑ ÑаÑÑоÑÑ ÐºÐ°Ð´Ñов Ñавной 60000/1001. ÐÑеимÑÑеÑÑво ÑÑого подÑ
ода в Ñом, ÑÑо
никакие даннÑе не ÑеÑÑÑÑÑÑ; однако, Ñ.к. каждÑй ÐºÐ°Ð´Ñ Ð¿Ð¾Ð»ÑÑаеÑÑÑ ÑолÑко из одного
- полÑ, недоÑÑаÑÑие ÑÑÑоки Ð´Ð¾Ð»Ð¶Ð½Ñ ÐºÐ°Ðº-Ñо инÑеÑполиÑоваÑÑÑÑ.
-
+ полÑ, недоÑÑаÑÑие ÑÑÑоки Ð´Ð¾Ð»Ð¶Ð½Ñ ÐºÐ°Ðº-Ñо инÑеÑполиÑоваÑÑÑÑ.
+
Ðе ÑÑÑеÑÑвÑÐµÑ Ð¾ÑÐµÐ½Ñ Ñ
оÑоÑиÑ
меÑодов
генеÑаÑии недоÑÑаÑÑиÑ
даннÑÑ
, поÑÑÐ¾Ð¼Ñ ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð½ÐµÑколÑко поÑ
ожим
на пÑименение некоÑоÑÑÑ
ÑилÑÑÑов деинÑеÑлейÑинга. ÐенеÑаÑÐ¸Ñ Ð½ÐµÐ´Ð¾ÑÑаÑÑиÑ
ÑÑÑок Ñакже ÑоздаеÑ
дÑÑгие пÑоблемÑ, пÑоÑÑо поÑÐ¾Ð¼Ñ ÑÑо колиÑеÑÑво даннÑÑ
ÑдваиваеÑÑÑ.
Таким обÑазом, Ð´Ð»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°ÑеÑÑва ÑÑебÑÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокие знаÑениÑ
- биÑпоÑока, и болÑÑе ÑеÑÑÑÑов пÑоÑеÑÑоÑа иÑполÑзÑеÑÑÑ ÐºÐ°Ðº длÑ
+ биÑпоÑока, и болÑÑе ÑеÑÑÑÑов пÑоÑеÑÑоÑа иÑполÑзÑеÑÑÑ ÐºÐ°Ðº длÑ
кодиÑованиÑ, Ñак и Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸ÑованиÑ. <option>tfields</option> имееÑ
неÑколÑко ÑазлиÑнÑÑ
опÑий, опÑеделÑÑÑиÑ
ÑпоÑоб ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÐ´Ð¾ÑÑаÑÑиÑ
ÑÑÑок
каждого кадÑа. ÐÑли вÑбÑали ÑÑÐ¾Ñ ÑпоÑоб, обÑаÑиÑеÑÑ Ðº ÑÑководÑÑÐ²Ñ Ð¸ вÑбеÑиÑе
ÑÑ Ð¾Ð¿ÑиÑ, коÑоÑÐ°Ñ Ð»ÑÑÑе подÑ
Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ ÐаÑего маÑеÑиала. ÐмейÑе в видÑ, ÑÑо пÑи
- иÑполÑзовании <option>tfields</option> ÐÑ
+ иÑполÑзовании <option>tfields</option> ÐÑ
<emphasis role="bold">должнÑ</emphasis> ÑказаÑÑ ÐºÐ°Ðº <option>-fps</option>, Ñак
и <option>-ofps</option>, ÑÑÑановив им знаÑение, Ñавное Ñдвоенной ÑаÑÑоÑе
иÑÑ
одного маÑеÑиала.
@@ -2352,8 +2348,8 @@ mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
ÐÑли планиÑÑеÑе ÑилÑно ÑменÑÑаÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð·Ð¾Ð±ÑажениÑ, можно извлекаÑÑ Ð¸
декодиÑоваÑÑ ÑолÑко одно поле из двÑÑ
. ÐонеÑно, ÐÑ Ð¿Ð¾ÑеÑÑеÑе половинÑ
веÑÑикалÑного ÑазÑеÑениÑ, но еÑли планиÑÑеÑÑÑ ÑменÑÑаÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ°Ðº минимÑм
- вдвое, поÑеÑÑ Ð±ÑÐ´ÐµÑ Ð½Ðµ ÑилÑно замеÑна. Ð ÑезÑлÑÑаÑе полÑÑиÑÑÑ Ð¿Ð¾ÑÑÑоÑной
- ÑазвÑÑÑки Ñайл Ñ 30000/1001 кадÑами в ÑекÑндÑ. ÐÑоÑедÑÑа ÑледÑÑÑаÑ:
+ вдвое, поÑеÑÑ Ð±ÑÐ´ÐµÑ Ð½Ðµ ÑилÑно замеÑна. Ð ÑезÑлÑÑаÑе полÑÑиÑÑÑ Ð¿Ð¾ÑÑÑоÑной
+ ÑазвÑÑÑки Ñайл Ñ 30000/1001 кадÑами в ÑекÑндÑ. ÐÑоÑедÑÑа ÑледÑÑÑаÑ:
<option>-vf field</option>, заÑем обÑезание
<link linkend="menc-feat-telecine-footnotes">[1]</link> и маÑÑÑабиÑование
ÑооÑвеÑÑÑвÑÑÑим обÑазом. ÐомниÑе, ÑÑо поÑÑебÑеÑÑÑ ÑкоÑÑекÑиÑоваÑÑ Ð¼Ð°ÑÑÑабиÑование
@@ -2403,7 +2399,7 @@ mencoder dvd://1 -oac copy -vf pullup,softskip \
Ð¸Ð¼ÐµÐµÑ ÑенденÑÐ¸Ñ Ðº более ÑаÑÑÐ¾Ð¼Ñ Ð½Ð°Ñ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвий.
Ðакой ÑилÑÑÑ Ð±ÑÐ´ÐµÑ Ð»ÑÑÑе ÑабоÑаÑÑ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð¸ÑÑ
одного видео и
лиÑного вкÑÑа; не бойÑеÑÑ ÑкÑпеÑименÑиÑоваÑÑ Ñ Ñонкой наÑÑÑойкой
- опÑий ÑилÑÑÑов, еÑли Ñ Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð»ÑбÑм из ниÑ
(подÑобноÑÑи
+ опÑий ÑилÑÑÑов, еÑли Ñ ÐÐ°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð»ÑбÑм из ниÑ
(подÑобноÑÑи
ÑмоÑÑиÑе на ÑÑÑаниÑе ÑÑководÑÑва man). ÐÐ»Ñ Ð±Ð¾Ð»ÑÑинÑÑва каÑеÑÑвенного
иÑÑ
одного видео, однако, оба ÑилÑÑÑа ÑабоÑаÑÑ Ð´Ð¾ÑÑаÑоÑно Ñ
оÑоÑо,
Ñак ÑÑо наÑинаÑÑ ÑабоÑаÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð»ÑбÑм из ниÑ
.
@@ -2414,10 +2410,10 @@ mencoder dvd://1 -oac copy -vf filmdint -ovc lavc -ofps 24000/1001<!--
<listitem><para>
Ðолее ÑÑаÑÑй меÑод заклÑÑаеÑÑÑ Ð½Ðµ в пÑименении обÑаÑного ÑелеÑина к
ÑелеÑиненнÑм ÑаÑÑÑм, а, наобоÑоÑ, в ÑелеÑине не подвеÑженнÑÑ
ÑелеÑÐ¸Ð½Ñ ÑаÑÑей и
- поÑледÑÑÑем пÑименении обÑаÑного ÑелеÑина ко вÑÐµÐ¼Ñ Ð²Ð¸Ð´ÐµÐ¾. ÐвÑÑÐ¸Ñ Ð·Ð°Ð¿ÑÑанно?
+ поÑледÑÑÑем пÑименении обÑаÑного ÑелеÑина ко вÑÐµÐ¼Ñ Ð²Ð¸Ð´ÐµÐ¾. ÐвÑÑÐ¸Ñ Ð·Ð°Ð¿ÑÑанно?
softpulldown — ÑÑо ÑилÑÑÑ, пÑоÑ
одÑÑий по видео и делаÑÑий ÑелеÑиненнÑм веÑÑ
Ñайл. ÐÑли Ñледом за softpulldown ÑказаÑÑ Ð»Ð¸Ð±Ð¾ <option>detc</option>, либо
- <option>ivtc</option>, ÑиналÑнÑй ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿Ð¾ÑÑÑоÑнÑм.
+ <option>ivtc</option>, ÑиналÑнÑй ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿Ð¾ÑÑÑоÑнÑм.
<option>-ofps 24000/1001</option> необÑ
одима.
<screen>
mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
@@ -2446,23 +2442,23 @@ mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
</para>
<para>
- ÐÑа опÑÐ¸Ñ Ð¾Ð¿Ñеделенно не должна иÑполÑзоваÑÑÑÑ, еÑли ÐÑ Ñ
оÑиÑе Ñо
+ ÐÑа опÑÐ¸Ñ Ð¾Ð¿Ñеделенно не должна иÑполÑзоваÑÑÑÑ, еÑли ÐÑ Ñ
оÑиÑе Ñо
вÑеменем оÑобÑажаÑÑ Ð²Ð¸Ð´ÐµÐ¾ на ÑеÑеÑÑÑÑоÑном ÑÑÑÑойÑÑве (Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ TV каÑÑÑ,
напÑимеÑ). ÐÑли Ñ ÐÐ°Ñ ÐµÑÑÑ ÑеÑеÑÑÑÑоÑнÑе кадÑÑ Ð² видео Ñ 24000/1001 кадÑами в
ÑекÑндÑ, к ним, как и к пÑогÑеÑÑивнÑм, бÑÐ´ÐµÑ Ð¿Ñименен ÑелеÑин. Ðоловина иÑ
ÑеÑеÑÑÑÑоÑнÑÑ
"кадÑов" бÑдÑÑ Ð¾ÑобÑажаÑÑÑÑ Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑÑ ÑÑеÑ
полей
- (3/(60000/1001) ÑекÑнд), Ð´Ð°Ð²Ð°Ñ Ð² ÑезÑлÑÑаÑе непÑиÑÑно вÑглÑдÑÑий ÑÑÑекÑ
+ (3/(60000/1001) ÑекÑнд), Ð´Ð°Ð²Ð°Ñ Ð² ÑезÑлÑÑаÑе непÑиÑÑно вÑглÑдÑÑий ÑÑÑекÑ
<!-- FIXME is translation correct? -->
- "пÑÑжка назад во вÑемени". Ðаже еÑли ÐÑ Ð¿ÑобÑеÑе ÑÑо, ÐÑ
+ "пÑÑжка назад во вÑемени". Ðаже еÑли ÐÑ Ð¿ÑобÑеÑе ÑÑо, ÐÑ
<emphasis role="bold">должнÑ</emphasis> иÑполÑзоваÑÑ ÑилÑÑÑ Ð´ÐµÐ¸Ð½ÑеÑлейÑинга,
Ñакой как <option>lb</option> или <option>l5</option>.
</para>
<para>
ÐÐ»Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° поÑÑÑоÑном диÑплее ÑÑо Ñоже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð»Ð¾Ñ
ой идеей.
- ÐÑдÑÑ Ð¾ÑбÑаÑÑваÑÑÑÑ Ð¿Ð°ÑÑ Ð¿Ð¾ÑледоваÑелÑнÑÑ
ÑеÑеÑÑÑÑоÑнÑÑ
полей, пÑÐ¸Ð²Ð¾Ð´Ñ Ðº
+ ÐÑдÑÑ Ð¾ÑбÑаÑÑваÑÑÑÑ Ð¿Ð°ÑÑ Ð¿Ð¾ÑледоваÑелÑнÑÑ
ÑеÑеÑÑÑÑоÑнÑÑ
полей, пÑÐ¸Ð²Ð¾Ð´Ñ Ðº
ÑазÑÑвам, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¼ÐµÑнее, Ñем пÑи иÑполÑзовании вÑоÑого меÑода,
- оÑобÑажаÑÑего некоÑоÑÑе поÑÑÑоÑнÑе кадÑÑ Ð´Ð²Ð°Ð¶Ð´Ñ. ЧеÑеÑÑÑÑоÑное видео Ñ
+ оÑобÑажаÑÑего некоÑоÑÑе поÑÑÑоÑнÑе кадÑÑ Ð´Ð²Ð°Ð¶Ð´Ñ. ЧеÑеÑÑÑÑоÑное видео Ñ
30000/1001 кадÑами в ÑекÑÐ½Ð´Ñ Ñже неÑколÑко пÑеÑÑвиÑÑо, поÑÐ¾Ð¼Ñ ÑÑо в ÑеалÑноÑÑи
оно должно оÑобÑажаÑÑÑÑ Ñ 60000/1001 полÑми в ÑекÑндÑ, Ñак ÑÑо дÑблиÑÑÑÑиеÑÑ
кадÑÑ Ð½Ðµ Ñак ÑилÑно вÑделÑÑÑÑÑ.
@@ -2471,7 +2467,7 @@ mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
<para>
Так или инаÑе, лÑÑÑе вÑего пÑоанализиÑоваÑÑ ÐаÑе ÑодеÑжимое и как ÐÑ ÐµÐ³Ð¾
ÑобиÑаеÑеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ. ÐÑли видео на 90% поÑÑÑоÑное и ÐÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не бÑдеÑе
- показÑваÑÑ ÐµÐ³Ð¾ на TV, Ðам ÑледÑÐµÑ Ð¾ÑдаÑÑ Ð¿ÑедпоÑÑение поÑÑÑоÑÐ½Ð¾Ð¼Ñ Ð²Ð°ÑианÑÑ.
+ показÑваÑÑ ÐµÐ³Ð¾ на TV, Ðам ÑледÑÐµÑ Ð¾ÑдаÑÑ Ð¿ÑедпоÑÑение поÑÑÑоÑÐ½Ð¾Ð¼Ñ Ð²Ð°ÑианÑÑ.
ÐÑли оно ÑолÑко Ð½Ð°Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ Ð¿Ð¾ÑÑÑоÑное, ÐÑ, возможно, заÑ
оÑиÑе кодиÑоваÑÑ
его, как еÑли Ð±Ñ Ð¾Ð½Ð¾ бÑло ÑеÑеÑÑÑÑоÑнÑм.
</para>
@@ -2497,13 +2493,13 @@ mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
<title>Ðб ÑÑеÑении ÑÑоÑон:</title>
<para>
ÐидеоданнÑе на DVD Ñ
ÑанÑÑÑÑ Ð² ÑоÑмаÑе, назÑваемом YUV 4:2:0. Ð YUV
- видео, лÑма ("ÑÑкоÑÑÑ") и Ñ
Ñома ("ÑвеÑ") Ñ
ÑанÑÑÑÑ Ð¾ÑделÑно.
- ÐоÑколÑÐºÑ ÑеловеÑеÑкий глаз оÑÑаÑÑи менее ÑÑвÑÑвиÑелен к ÑвеÑÑ, Ñем к ÑÑкоÑÑи,
+ видео, лÑма ("ÑÑкоÑÑÑ") и Ñ
Ñома ("ÑвеÑ") Ñ
ÑанÑÑÑÑ Ð¾ÑделÑно.
+ ÐоÑколÑÐºÑ ÑеловеÑеÑкий глаз оÑÑаÑÑи менее ÑÑвÑÑвиÑелен к ÑвеÑÑ, Ñем к ÑÑкоÑÑи,
в YUV 4:2:0 изобÑажении пÑиÑÑÑÑÑвÑÐµÑ ÑолÑко один ÑвеÑноÑÑнÑй пикÑел на ÑеÑÑÑе
- ÑÑкоÑÑнÑÑ
. РизобÑажении Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой каждÑй квадÑÐ°Ñ Ð¸Ð· ÑеÑÑÑÑÑ
ÑÑкоÑÑнÑÑ
+ ÑÑкоÑÑнÑÑ
. РизобÑажении Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой каждÑй квадÑÐ°Ñ Ð¸Ð· ÑеÑÑÑÑÑ
ÑÑкоÑÑнÑÑ
пикÑелов (два на два) имеÑÑ Ð¾Ð´Ð¸Ð½ обÑий ÑвеÑноÑÑнÑй пикÑел. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾Ð±ÑезаÑÑ
поÑÑÑоÑнÑй YUV 4:2:0 до ÑÑÑнÑÑ
ÑазмеÑов и иÑполÑзоваÑÑ ÑÑÑнÑе ÑмеÑениÑ.
- ÐапÑимеÑ,
+ ÐапÑимеÑ,
<option>crop=716:380:2:26</option> — пÑавилÑно, а
<option>crop=716:380:3:26 </option> — неÑ.
</para>
@@ -2548,7 +2544,7 @@ mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
<systemitem class="library">libavcodec</systemitem>, коÑоÑÑе знаÑиÑелÑно
ÑвелиÑиваÑÑ ÐºÐ°ÑеÑÑво. Ðам вÑегда ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº минимÑм ÑÑи две,
за иÑклÑÑением ÑлÑÑаÑ, когда поÑеÑÑ ÑкоÑоÑÑи кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑима
- (напÑимеÑ, кодиÑование в ÑеалÑном вÑемени). ÐÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво дÑÑгиÑ
+ (напÑимеÑ, кодиÑование в ÑеалÑном вÑемени). ÐÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво дÑÑгиÑ
<systemitem class="library">libavcodec</systemitem> опÑий, ÑлÑÑÑаÑÑиÑ
каÑеÑÑво
(и замедлÑÑÑиÑ
кодиÑование), но иÑ
опиÑание вÑÑ
Ð¾Ð´Ð¸Ñ Ð·Ð° Ñамки ÑÑого
докÑменÑа.
@@ -2559,12 +2555,12 @@ mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
<title>РпÑоизводиÑелÑноÑÑи pullup:</title>
<para>
ÐÑполÑзование <option>pullup</option> (ÑовмеÑÑно Ñ <option>softskip</option>)
- Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾ Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой вполне безопаÑно и обÑÑно ÑвлÑеÑÑÑ Ñ
оÑоÑей
+ Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾ Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой вполне безопаÑно и обÑÑно ÑвлÑеÑÑÑ Ñ
оÑоÑей
идеей, еÑли ÑолÑко пÑо иÑÑоÑник не извеÑÑно доÑÑовеÑно, ÑÑо он полноÑÑÑÑ
поÑÑÑоÑнÑй. ÐоÑеÑÑ ÑкоÑоÑÑи мала в болÑÑинÑÑве ÑлÑÑаев.
РминималÑном ваÑианÑе кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ <option>pullup</option> замедлÑеÑ
<application>MEncoder</application> на 50%. Ðобавление обÑабоÑки звÑка и
- пÑодвинÑÑÑÑ
<option>lavcopts</option> опÑий заÑÐ¼ÐµÐ²Ð°ÐµÑ ÑÑÑ ÑазниÑÑ, ÑменÑÑаÑ
+ пÑодвинÑÑÑÑ
<option>lavcopts</option> опÑий заÑÐ¼ÐµÐ²Ð°ÐµÑ ÑÑÑ ÑазниÑÑ, ÑменÑÑаÑ
падение пÑоизводиÑелÑноÑÑи Ð¾Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ <option>pullup</option> до 2%.
</para>
</formalpara></listitem>
@@ -3021,13 +3017,13 @@ mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
Ридеале, ÐÑ, навеÑное, Ñ
оÑели Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÑоÑÑо ÑказаÑÑ ÐºÐ¾Ð´Ð¸ÑовÑикÑ
пеÑеклÑÑиÑÑÑÑ Ð½Ð° "вÑÑокое каÑеÑÑво" и наÑаÑÑ ÐºÐ¾Ð´Ð¸Ñование.
ÐÑо бÑло Ð±Ñ Ð·Ð°Ð¼ÐµÑаÑелÑно, но, к ÑожалениÑ, ÑÑÑдно ÑеализÑемо, поÑколÑкÑ
-ÑазлиÑнÑе опÑии кодиÑованиÑ, в завиÑимоÑÑи Ð¾Ñ Ð¸ÑÑ
одного маÑеÑиала, даÑÑ Ð² ÑезÑлÑÑаÑе
+ÑазлиÑнÑе опÑии кодиÑованиÑ, в завиÑимоÑÑи Ð¾Ñ Ð¸ÑÑ
одного маÑеÑиала, даÑÑ Ð² ÑезÑлÑÑаÑе
ÑазлиÑное каÑеÑÑво.
Так пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾ÑомÑ, ÑÑо ÑжаÑие завиÑÐ¸Ñ Ð¾Ñ Ð²Ð¸Ð·ÑалÑнÑÑ
ÑвойÑÑв видео.
ÐапÑимеÑ, аниме и Ð¶Ð¸Ð²Ð°Ñ ÑÑемка имеÑÑ ÑилÑно оÑлиÑаÑÑиеÑÑ ÑвойÑÑва и,
поÑÑомÑ, ÑÑебÑÑÑ ÑазнÑе опÑии Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑималÑного ÑезÑлÑÑаÑа.
-ХоÑоÑÐ°Ñ Ð½Ð¾Ð²Ð¾ÑÑÑ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо некоÑоÑÑе опÑии, Ñакие как
-<option>mbd=2</option>, <option>trell</option> и <option>v4mv</option>,
+ХоÑоÑÐ°Ñ Ð½Ð¾Ð²Ð¾ÑÑÑ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо некоÑоÑÑе опÑии, Ñакие как
+<option>mbd=2</option>, <option>trell</option> и <option>v4mv</option>,
никогда не ÑледÑÐµÑ Ð¾Ð¿ÑÑкаÑÑ.
ÐеÑалÑное опиÑание оÑновнÑÑ
опÑий кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑмоÑÑиÑе ниже.
</para>
@@ -3039,7 +3035,7 @@ mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
Ð¾Ñ ÑилÑма.
ÐамеÑÑÑе, еÑли Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ ÐÐ°Ñ ÑилÑм декодиÑовалÑÑ DivX5, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ
акÑивиÑоваÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð·Ð°ÐºÑÑÑÑÑ
GOP, иÑполÑзÑÑ Ð¾Ð¿ÑÐ¸Ñ <option>cgop</option>
- <systemitem class="library">libavcodec</systemitem>, но Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ Ð´ÐµÐ°ÐºÑивиÑоваÑÑ
+ <systemitem class="library">libavcodec</systemitem>, но Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ Ð´ÐµÐ°ÐºÑивиÑоваÑÑ
опÑеделение ÑÑен, ÑÑо не ÑвлÑеÑÑÑ Ñ
оÑоÑей идеей, поÑколÑÐºÑ Ð½ÐµÑколÑко вÑедиÑ
ÑÑÑекÑивноÑÑи.
</para></listitem>
@@ -3053,7 +3049,7 @@ mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
<emphasis role="bold">dia</emphasis>: диапазон поиÑка движениÑ. ÐолÑÑие
знаÑÐµÐ½Ð¸Ñ Ð»ÑÑÑе и медленнее.
ÐÑÑиÑаÑелÑнÑе знаÑÐµÐ½Ð¸Ñ — ÑÑо ÑовеÑÑенно дÑÑÐ³Ð°Ñ Ñкала.
- ХоÑоÑими знаÑениÑми ÑвлÑÑÑÑÑ -1 Ð´Ð»Ñ Ð±ÑÑÑÑого кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ 2-4 — длÑ
+ ХоÑоÑими знаÑениÑми ÑвлÑÑÑÑÑ -1 Ð´Ð»Ñ Ð±ÑÑÑÑого кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ 2-4 — длÑ
медленного.
</para></listitem>
<listitem><para>
@@ -3092,7 +3088,7 @@ mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
<emphasis role="bold">qns</emphasis>: оÑÐµÐ½Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾, оÑобенно в комбинаÑии Ñ qprd.
ÐÑа опÑÐ¸Ñ ÑÐºÐ°Ð¶ÐµÑ ÐºÐ¾Ð´Ð¸ÑовÑÐ¸ÐºÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð¸Ð·Ð¸ÑоваÑÑ ÑÑм Ð¾Ñ Ð°ÑÑеÑакÑов ÑжаÑÐ¸Ñ Ð²Ð¼ÐµÑÑо
ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°ÐºÐ¾Ð´Ð¸Ñованного видео, полноÑÑÑÑ ÑооÑвеÑÑÑвÑÑÑего иÑÑ
одномÑ.
- Ðе иÑполÑзÑйÑе ее, еÑли ÑолÑко не пеÑепÑобовали наÑÑÑоиÑÑ Ð²Ñе, ÑÑо бÑло
+ Ðе иÑполÑзÑйÑе ее, еÑли ÑолÑко не пеÑепÑобовали наÑÑÑоиÑÑ Ð²Ñе, ÑÑо бÑло
возможно, а ÑезÑлÑÑÐ°Ñ Ð²Ñе Ñаки недоÑÑаÑоÑно Ñ
оÑоÑ.
</para></listitem>
<listitem><para>
@@ -3109,8 +3105,8 @@ mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
Ðни кодиÑÑÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо во вÑеÑ
MPEG-поÑ
ожиÑ
алгоÑиÑмаÑ
.
ÐÐ´ÐµÑ ÑÑиÑ
опÑий заклÑÑаеÑÑÑ Ð² иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑой Ñ
оÑоÑей ÑвÑиÑÑики длÑ
опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, когда Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² блоке ниже Ñказанного Ðами поÑога, и ÑÑо его
- ÑÑÐ¾Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑоваÑÑ ÐºÐ°Ðº "блок без изменений".
- ÐÑо ÑоÑ
ÑанÑÐµÑ Ð±Ð¸ÑÑ Ð¸, возможно, ÑÑкоÑÑÐµÑ ÐºÐ¾Ð´Ð¸Ñование.
+ ÑÑÐ¾Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑоваÑÑ ÐºÐ°Ðº "блок без изменений".
+ ÐÑо ÑоÑ
ÑанÑÐµÑ Ð±Ð¸ÑÑ Ð¸, возможно, ÑÑкоÑÑÐµÑ ÐºÐ¾Ð´Ð¸Ñование.
vlelim=-4 и vcelim=9 вÑглÑдÑÑ Ð½ÐµÐ¿Ð»Ð¾Ñ
ими Ð´Ð»Ñ Ð¶Ð¸Ð²Ð¾Ð¹ ÑÑемки, но, ÑкоÑее вÑего, не
помогÑÑ Ð´Ð»Ñ Ð°Ð½Ð¸Ð¼Ðµ; пÑи кодиÑовании анимаÑии Ðам, возможно, ÑледÑÐµÑ Ð¾ÑÑавиÑÑ
ÑÑÑ Ð¾Ð¿ÑÐ¸Ñ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾Ð¹.
@@ -3164,7 +3160,7 @@ mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy
</para>
<para>
-ÐÑе наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑовеÑÑлиÑÑ Ð½Ð° ÑеÑÑовом видео 720x448 @30000/1001 fps
+ÐÑе наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑовеÑÑлиÑÑ Ð½Ð° ÑеÑÑовом видео 720x448 @30000/1001 fps
Ñ ÑелевÑм биÑпоÑоком 900кбиÑ/Ñек, на маÑине AMD-64 3400+ Ñ 2400 ÐÐÑ Ð¸ 64 биÑном Ñежиме.
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð½Ð°Ñ ÑкоÑоÑÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ (в
кадÑаÑ
в ÑекÑндÑ) и поÑеÑÑ PSNR (в дÐ) по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð½Ð°ÑÑÑойкой "оÑÐµÐ½Ñ Ð²ÑÑокое
@@ -3292,7 +3288,7 @@ vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
<para>
ÐÑак, ÐÑ ÑолÑко ÑÑо кÑпили новенÑкÑÑ, блеÑÑÑÑÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÑилÑма "ÐаÑÑи ÐоÑÑÐµÑ Ð¸ ТайнаÑ
ÐомнаÑа" (в ÑиÑокоÑкÑанном ÑоÑмаÑе, конеÑно) и Ñ
оÑиÑе ÑделаÑÑ Ñип ÑÑого DVD Ñак,
-ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÐµÐ³Ð¾ к ÐомаÑÐ½ÐµÐ¼Ñ ÐºÐ¸Ð½Ð¾ÑеаÑÑÑ Ð½Ð° PC. ÐÑо DVD пеÑвого Ñегиона,
+ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÐµÐ³Ð¾ к ÐомаÑÐ½ÐµÐ¼Ñ ÐºÐ¸Ð½Ð¾ÑеаÑÑÑ Ð½Ð° PC. ÐÑо DVD пеÑвого Ñегиона,
поÑÑÐ¾Ð¼Ñ NTSC. ÐÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ Ñакже пÑименим и Ð´Ð»Ñ PAL, за иÑклÑÑением Ñого, ÑÑо
надо бÑÐ´ÐµÑ Ð¾Ð¿ÑÑÑиÑÑ <option>-ofps 24000/1001</option> (поÑколÑÐºÑ ÑаÑÑоÑа кадÑов
на вÑÑ
оде ÑÐ°ÐºÐ°Ñ Ð¶Ðµ, как и на вÑ
оде), и, конеÑно, гÑаниÑÑ Ð¾Ð±ÑÐµÐ·Ð°Ð½Ð¸Ñ Ð±ÑдÑÑ
@@ -3308,17 +3304,17 @@ vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
</para>
<para id="menc-feat-dvd-mpeg4-example-crop">
-Ðалее, Ð¼Ñ Ñ
оÑим опÑеделиÑÑ Ð²ÐµÑнÑе гÑаниÑÑ Ð¾Ð±ÑезаниÑ, поÑÑÐ¾Ð¼Ñ Ð¸ÑполÑзÑем ÑилÑÑÑ
+Ðалее, Ð¼Ñ Ñ
оÑим опÑеделиÑÑ Ð²ÐµÑнÑе гÑаниÑÑ Ð¾Ð±ÑезаниÑ, поÑÑÐ¾Ð¼Ñ Ð¸ÑполÑзÑем ÑилÑÑÑ
cropdetect:
<screen>mplayer dvd://1 -vf cropdetect</screen>
УбедиÑеÑÑ, ÑÑо пеÑемеÑÑилиÑÑ Ðº полноÑÑÑÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð½Ð¾Ð¼Ñ ÐºÐ°Ð´ÑÑ (напÑимеÑ,
-к ÑвеÑлой ÑÑене поÑле пÑопÑÑеннÑÑ
наÑалÑнÑÑ
ÑиÑÑов и логоÑипов),
+к ÑвеÑлой ÑÑене поÑле пÑопÑÑеннÑÑ
наÑалÑнÑÑ
ÑиÑÑов и логоÑипов),
ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвидеÑÑ Ð² конÑоли <application>MPlayer</application>:
<screen>crop area: X: 0..719 Y: 57..419 (-vf crop=720:362:0:58)</screen>
ÐаÑем Ñнова воÑпÑоизводим ÑилÑм Ñ ÑÑим ÑилÑÑÑом Ð´Ð»Ñ Ð¿ÑовеÑки его коÑÑекÑноÑÑи:
<screen>mplayer dvd://1 -vf crop=720:362:0:58</screen>
Ð ÑбеждаемÑÑ, ÑÑо вÑе вÑглÑÐ´Ð¸Ñ Ð¿ÑекÑаÑно. Ðалее, пÑовеÑÑем, ÑÑо ÑиÑина и вÑÑоÑа
-делÑÑÑÑ Ð½Ð° 16. С ÑиÑиной вÑе в поÑÑдке, а Ñ Ð²ÑÑоÑой — неÑ.
+делÑÑÑÑ Ð½Ð° 16. С ÑиÑиной вÑе в поÑÑдке, а Ñ Ð²ÑÑоÑой — неÑ.
ÐоÑколÑÐºÑ Ð¼Ñ Ð½Ðµ заваливали маÑемаÑÐ¸ÐºÑ Ð² 7-ом клаÑÑе, Ñо знаем, ÑÑо ближайÑее
Ñелое, менÑÑее 362 и кÑаÑное 16, Ñавно 352.
</para>
@@ -3342,7 +3338,7 @@ cropdetect:
<para>
ÐÑли ÐÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелÑно забоÑÐ¸Ñ Ð¿Ð¾ÑеÑÑ ÑÑиÑ
10 пикÑелов, ÐÑ Ð¼Ð¾Ð¶ÐµÑе
-вмеÑÑо ÑÑого оÑмаÑÑÑабиÑоваÑÑ ÑилÑм, ÑменÑÑив ÑазмеÑноÑÑи до ближайÑиÑ
+вмеÑÑо ÑÑого оÑмаÑÑÑабиÑоваÑÑ ÑилÑм, ÑменÑÑив ÑазмеÑноÑÑи до ближайÑиÑ
кÑаÑнÑÑ
16 знаÑений.
ЦепоÑка ÑилÑÑÑов бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð¿ÑимеÑно Ñак:
<screen>-vf crop=720:362:0:58,scale=720:352</screen>
@@ -3379,23 +3375,23 @@ mencoder dvd://1 -ofps 24000/1001 -oac copy -o <replaceable>Harry_Potter_2.avi</
<para>
ÐпÑии <option>v4mv:mbd=2:trell</option> знаÑиÑелÑно ÑлÑÑÑÐ°Ñ ÐºÐ°ÑеÑÑво Ñеной
вÑемени кодиÑованиÑ. ÐÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
оÑнований оÑклÑÑаÑÑ ÑÑи
-опÑии, когда главнÑм кÑиÑеÑием ÑвлÑеÑÑÑ ÐºÐ°ÑеÑÑво. ÐпÑии
+опÑии, когда главнÑм кÑиÑеÑием ÑвлÑеÑÑÑ ÐºÐ°ÑеÑÑво. ÐпÑии
<option>cmp=3:subcmp=3</option> вÑбиÑаÑÑ ÑÑнкÑÐ¸Ñ ÑÑавнениÑ, даÑÑÑÑ
лÑÑÑее каÑеÑÑво, Ñем ÑÑандаÑÑнаÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑкÑпеÑименÑиÑоваÑÑ Ñ ÑÑим паÑамеÑÑом
(возможнÑе знаÑÐµÐ½Ð¸Ñ ÑмоÑÑиÑе на man ÑÑÑаниÑе), поÑколÑÐºÑ ÑазнÑе ÑÑнкÑии могÑÑ
даваÑÑ ÑазнÑй пÑиÑоÑÑ Ð² каÑеÑÑве в завиÑимоÑÑи Ð¾Ñ Ð¸ÑÑ
одного маÑеÑиала.
ÐапÑимеÑ, еÑли ÐÑ Ð·Ð°Ð¼ÐµÑаеÑе, ÑÑо <systemitem class="library">libavcodec</systemitem>
пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÑлиÑком много блоÑнÑÑ
аÑÑеÑакÑов (квадÑаÑиков), Ñо можеÑе попÑÑаÑÑÑÑ
-вÑбÑаÑÑ ÑкÑпеÑименÑалÑнÑй NSSE в каÑеÑÑве ÑÑнкÑии ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ñи помоÑи опÑии
+вÑбÑаÑÑ ÑкÑпеÑименÑалÑнÑй NSSE в каÑеÑÑве ÑÑнкÑии ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ñи помоÑи опÑии
<option>*cmp=10</option>.
</para>
<para>
ÐÐ»Ñ ÑÑого ÑилÑма полÑÑеннÑй AVI бÑÐ´ÐµÑ 138 минÑÑ Ð´Ð»Ð¸Ð½Ð½Ð¾Ð¹ и ÑазмеÑом около 3Ðб.
Ð, поÑколÑÐºÑ ÐÑ Ñказали, ÑÑо ÑÐ°Ð·Ð¼ÐµÑ Ñайла знаÑÐµÐ½Ð¸Ñ Ð½Ðµ имееÑ, ÑÑо вполне
-пÑиемлемÑй ÑезÑлÑÑаÑ. Ðднако, еÑли вÑе-Ñаки Ñ
оÑиÑе полÑÑиÑÑ Ð¼ÐµÐ½ÑÑий ÑÐ°Ð·Ð¼ÐµÑ Ñайла,
-можеÑе попÑобоваÑÑ ÑменÑÑиÑÑ Ð±Ð¸ÑпоÑок. УвелиÑение биÑпоÑока Ð¸Ð¼ÐµÐµÑ ÑнижаÑÑийÑÑ ÑÑÑекÑ,
-поÑÑомÑ, Ñ
оÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑÑно видеÑÑ ÑлÑÑÑение Ð¾Ñ 1800ÐбиÑ/Ñек до 2000ÐбиÑ/Ñек, оно
+пÑиемлемÑй ÑезÑлÑÑаÑ. Ðднако, еÑли вÑе-Ñаки Ñ
оÑиÑе полÑÑиÑÑ Ð¼ÐµÐ½ÑÑий ÑÐ°Ð·Ð¼ÐµÑ Ñайла,
+можеÑе попÑобоваÑÑ ÑменÑÑиÑÑ Ð±Ð¸ÑпоÑок. УвелиÑение биÑпоÑока Ð¸Ð¼ÐµÐµÑ ÑнижаÑÑийÑÑ ÑÑÑекÑ,
+поÑÑомÑ, Ñ
оÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑÑно видеÑÑ ÑлÑÑÑение Ð¾Ñ 1800ÐбиÑ/Ñек до 2000ÐбиÑ/Ñек, оно
Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ðµ ÑÑÐ¾Ð»Ñ Ð·Ð°Ð¼ÐµÑно вÑÑе 2000ÐбиÑ/Ñек.
</para>
@@ -3406,7 +3402,7 @@ mencoder dvd://1 -ofps 24000/1001 -oac copy -o <replaceable>Harry_Potter_2.avi</
ÑлÑÑÑÐ¸Ñ Ð²Ð¾ÑпÑинимаемое каÑеÑÑво и Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð±Ð»Ð¾ÑнÑÑ
аÑÑеÑакÑов в видео.
ÐпÑией <option>autoq</option> <application>MPlayer</application>'а ÐÑ Ð¼Ð¾Ð¶ÐµÑе
изменÑÑÑ Ð²ÐµÐ»Ð¸ÑÐ¸Ð½Ñ Ð¿Ñоизводимой ÑилÑÑÑом spp поÑÑобÑабоÑки в завиÑимоÑÑи оÑ
-доÑÑÑпнÑÑ
ÑеÑÑÑÑов CPU. Ðдобавок, на ÑÑом ÑÑапе ÐÑ Ð¼Ð¾Ð¶ÐµÑе заÑ
оÑеÑÑ Ð¿ÑимениÑÑ
+доÑÑÑпнÑÑ
ÑеÑÑÑÑов CPU. Ðдобавок, на ÑÑом ÑÑапе ÐÑ Ð¼Ð¾Ð¶ÐµÑе заÑ
оÑеÑÑ Ð¿ÑимениÑÑ
коÑÑекÑÐ¸Ñ Ð³Ð°Ð¼Ð¼Ñ Ð¸/или ÑвеÑа Ð´Ð»Ñ Ð»ÑÑÑего ÑооÑвеÑÑÑÐ²Ð¸Ñ ÐаÑÐµÐ¼Ñ Ð¼Ð¾Ð½Ð¸ÑоÑÑ. ÐапÑимеÑ:
<screen>
mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3
@@ -3432,7 +3428,7 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
<para>
ÐÑо ÑÑководÑÑво в оÑновном наÑелено на оÑобенноÑÑи пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑеÑ
же меÑодов,
ÑÑо опиÑÐ°Ð½Ñ Ð² ÑÑководÑÑве по кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ x264.
-ÐоÑÑомÑ, ÑнаÑала пÑоÑÑиÑе, пожалÑйÑÑа,
+ÐоÑÑомÑ, ÑнаÑала пÑоÑÑиÑе, пожалÑйÑÑа,
<link linkend="menc-feat-x264-encoding-options-intro">пеÑвÑÑ ÑаÑÑÑ</link>
Ñого ÑÑководÑÑва.
</para>
@@ -3443,7 +3439,7 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
<title>Ðакие опÑии ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð»ÑÑÑиÑ
ÑезÑлÑÑаÑов?</title>
<para>
-ÐожалÑйÑÑа, наÑниÑе Ñ Ð¿ÑоÑмоÑÑа Ñаздела
+ÐожалÑйÑÑа, наÑниÑе Ñ Ð¿ÑоÑмоÑÑа Ñаздела
<systemitem class="library">Xvid</systemitem> man ÑÑÑаниÑÑ
<application>MPlayer</application>.
ÐÑÐ¾Ñ Ñаздел пÑедполагаеÑÑÑ ÐºÐ°Ðº дополнение к man ÑÑÑаниÑе.
@@ -3497,24 +3493,24 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
УпÑавлÑÐµÑ ÑÑвÑÑвиÑелÑноÑÑÑÑ ÐºÐ¾Ð´Ð¸ÑовÑика к B-кадÑам, где болÑÑие знаÑениÑ
пÑиводÑÑ Ðº иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÑÑего колиÑеÑÑва B-кадÑов (и наобоÑоÑ).
ÐпÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° иÑполÑзоваÑÑÑÑ ÑовмеÑÑно Ñ <option>max_bframes</option>;
- еÑли ÐÑ ÑÑеÑÐ½ÐµÐ½Ñ Ð²ÐµÐ»Ð¸Ñиной биÑпоÑока, Ñо Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвелиÑиÑÑ Ð¸
+ еÑли ÐÑ ÑÑеÑÐ½ÐµÐ½Ñ Ð²ÐµÐ»Ð¸Ñиной биÑпоÑока, Ñо Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвелиÑиÑÑ Ð¸
<option>max_bframes</option>, и <option>bf_threshold</option>,
в Ñом вÑÐµÐ¼Ñ ÐºÐ°Ðº ÑвелиÑение <option>max_bframes</option> и ÑменÑÑение
<option>bf_threshold</option> позволÑÑ ÐºÐ¾Ð´Ð¸ÑовÑÐ¸ÐºÑ Ð¸ÑполÑзоваÑÑ Ð±Ð¾Ð»ÑÑе
B-кадÑов в меÑÑаÑ
, где ÑÑо <emphasis role="bold">дейÑÑвиÑелÑно</emphasis>
необÑ
одимо.
- Ðизкое колиÑеÑÑво <option>max_bframes</option> и вÑÑокое знаÑение
+ Ðизкое колиÑеÑÑво <option>max_bframes</option> и вÑÑокое знаÑение
<option>bf_threshold</option> — ÑÑо, возможно, не Ñамое мÑдÑое ÑеÑение,
поÑколÑÐºÑ Ð¾Ð½Ð¾ пÑинÑÐ´Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑовÑик ÑазмеÑаÑÑ B-кадÑÑ Ð² меÑÑаÑ
, коÑоÑÑе никак не
вÑигÑаÑÑ Ð¾Ñ ÑÑого, Ñем ÑамÑм ÑÑ
ÑдÑÐ°Ñ Ð²Ð¸Ð·ÑалÑное каÑеÑÑво.
Ðднако, еÑли Ðам ÑÑебÑеÑÑÑ ÑовмеÑÑимоÑÑÑ Ñ Ð°Ð¿Ð¿Ð°ÑаÑнÑми
пÑоигÑÑваÑелÑми, поддеÑживаÑÑими ÑолÑко ÑÑаÑÑе DivX пÑоÑили (коÑоÑÑе
- поддеÑживаÑÑ ÑолÑко 1 поÑледоваÑелÑнÑй B-кадÑ), ÑÑо единÑÑвеннÑй ÑпоÑоб
+ поддеÑживаÑÑ ÑолÑко 1 поÑледоваÑелÑнÑй B-кадÑ), ÑÑо единÑÑвеннÑй ÑпоÑоб
ÑвелиÑиÑÑ ÑжимаемоÑÑÑ Ð¿Ñи помоÑи B-кадÑов.
</para></listitem>
<listitem><para>
<emphasis role="bold">trellis</emphasis>
- ÐпÑимизиÑÑÐµÑ Ð¿ÑоÑеÑÑ ÐºÐ²Ð°Ð½ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑималÑного
+ ÐпÑимизиÑÑÐµÑ Ð¿ÑоÑеÑÑ ÐºÐ²Ð°Ð½ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑималÑного
ÑооÑноÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ PSNR и биÑпоÑоком, ÑÑо позволÑÐµÑ ÑÑÑеÑÑвенно ÑкономиÑÑ Ð±Ð¸ÑÑ.
ÐÑи биÑÑ Ð²Ð¿Ð¾ÑледÑÑвии бÑдÑÑ Ð¿Ð¾ÑÑаÑÐµÐ½Ñ Ð½Ð° дÑÑгие ÑаÑÑи видео, ÑÑо пÑÐ¸Ð²ÐµÐ´ÐµÑ Ðº
ÑвелиÑÐµÐ½Ð¸Ñ Ð¾Ð±Ñего каÑеÑÑва.
@@ -3570,10 +3566,10 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
</para></listitem>
<listitem><para>
<emphasis role="bold">lumi_mask</emphasis>
- ÐÑÑаеÑÑÑ Ð¾ÑдаÑÑ Ð¼ÐµÐ½ÑÑий биÑпоÑок облаÑÑÑм изобÑажениÑ, коÑоÑÑе
+ ÐÑÑаеÑÑÑ Ð¾ÑдаÑÑ Ð¼ÐµÐ½ÑÑий биÑпоÑок облаÑÑÑм изобÑажениÑ, коÑоÑÑе
ÑеловеÑеÑкий глаз не в ÑоÑÑоÑнии ÑвидеÑÑ Ð´Ð¾ÑÑаÑоÑно Ñ
оÑоÑо, ÑÑо
- Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑовÑÐ¸ÐºÑ Ð¿Ð¾ÑÑаÑиÑÑ ÑÑкономленнÑе биÑÑ Ð½Ð° более важнÑе
- ÑаÑÑи каÑÑинки. ÐаÑеÑÑво закодиÑованного маÑеÑиала, пÑивнеÑенное ÑÑой
+ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÐºÐ¾Ð´Ð¸ÑовÑÐ¸ÐºÑ Ð¿Ð¾ÑÑаÑиÑÑ ÑÑкономленнÑе биÑÑ Ð½Ð° более важнÑе
+ ÑаÑÑи каÑÑинки. ÐаÑеÑÑво закодиÑованного маÑеÑиала, пÑивнеÑенное ÑÑой
опÑией, ÑилÑно завиÑÐ¸Ñ Ð¾Ñ Ð»Ð¸ÑнÑÑ
пÑедпоÑÑений и Ð¾Ñ Ñипа и наÑÑÑоек мониÑоÑа,
иÑполÑзовавÑегоÑÑ Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа (обÑÑно ÑезÑлÑÑÐ°Ñ Ð²ÑглÑÐ´Ð¸Ñ Ð½Ðµ оÑÐµÐ½Ñ Ñ
оÑоÑо,
еÑли он ÑÑкий, или ÑвлÑеÑÑÑ TFT мониÑоÑом).
@@ -3581,7 +3577,7 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
<listitem>
<para>
<emphasis role="bold">qpel</emphasis>
- УвелиÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво пÑедполагаемÑÑ
векÑоÑов движениÑ, пÑÑÑм повÑÑениÑ
+ УвелиÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво пÑедполагаемÑÑ
векÑоÑов движениÑ, пÑÑÑм повÑÑениÑ
ÑоÑноÑÑи оÑенки Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð»ÑпикÑелÑной до ÑеÑвеÑÑÑпикÑелÑной.
ÐÐ´ÐµÑ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи лÑÑÑие векÑоÑÑ Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ, коÑоÑÑе взамен
ÑменÑÑÐ°Ñ Ð±Ð¸ÑпоÑок (Ñем ÑамÑм ÑвелиÑÐ¸Ð²Ð°Ñ ÐºÐ°ÑеÑÑво).
@@ -3590,11 +3586,11 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
даÑÑ (знаÑиÑелÑно) лÑÑÑие ÑезÑлÑÑаÑÑ.
ÐоÑÑаÑоÑно ÑаÑÑо кодек ÑÑаÑÐ¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе биÑÑ Ð½Ð° повÑÑеннÑÑ ÑоÑноÑÑÑ
впÑÑÑÑÑ, а взамен полÑÑÐ°ÐµÑ Ð¸Ð»Ð¸ вообÑе ниÑего, или неболÑÑое ÑвелиÑение каÑеÑÑва.
- Ð ÑожалениÑ, Ð½ÐµÑ ÑпоÑоба пÑедÑказаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе ÑлÑÑÑÐµÐ½Ð¸Ñ Ð¾Ñ <option>qpel</option>,
+ Ð ÑожалениÑ, Ð½ÐµÑ ÑпоÑоба пÑедÑказаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñе ÑлÑÑÑÐµÐ½Ð¸Ñ Ð¾Ñ <option>qpel</option>,
Ñак ÑÑо Ðам пÑидеÑÑÑ ÑделаÑÑ ÐºÐ¾Ð´Ð¸Ñование Ñ Ð½ÐµÐ¹ и без нее, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°ÑÑ
навеÑнÑка.
</para>
-
+
<para>
<option>qpel</option> Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑи ÑдвоиÑÑ Ð²ÑÐµÐ¼Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸
ÑÑебÑеÑ, как минимÑм, на 25% болÑÑей моÑноÑÑи пÑи декодиÑовании.
@@ -3606,7 +3602,7 @@ mplayer <replaceable>Harry_Potter_2.avi</replaceable> -vf spp,noise=9ah:5ah,eq2=
ÐÑÑаеÑÑÑ ÑÑкономиÑÑ Ð±Ð¸ÑÑ Ð² паноÑамнÑÑ
ÑÑенаÑ
, иÑполÑзÑÑ Ð¾Ð´Ð¸Ð½ векÑоÑ
Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñего кадÑа. ÐÑо поÑÑи вÑегда ÑвелиÑÐ¸Ð²Ð°ÐµÑ PSNR, но замеÑно
замедлÑÐµÑ ÐºÐ¾Ð´Ð¸Ñование (Ñак же как и декодиÑование).
- ÐоÑÑÐ¾Ð¼Ñ ÐÐ°Ñ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐµÐµ, ÑолÑко когда ÐÑ Ð²ÐºÐ»ÑÑили
+ ÐоÑÑÐ¾Ð¼Ñ ÐÐ°Ñ ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐµÐµ, ÑолÑко когда ÐÑ Ð²ÐºÐ»ÑÑили
<option>vhq</option> на макÑимÑм.
GMC <systemitem class="library">Xvid</systemitem>'а ÑвлÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑм,
Ñем Ñ DivX'а, но поддеÑживаеÑÑÑ ÑолÑко некоÑоÑÑми аппаÑаÑнÑми пÑоигÑÑваÑелÑми.
@@ -3902,7 +3898,7 @@ Xvid поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÑоÑили кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеÑез
</para>
<para>
-ÐÑе наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑовеÑÑлиÑÑ Ð½Ð° ÑеÑÑовом видео 720x448 @30000/1001 fps
+ÐÑе наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑовеÑÑлиÑÑ Ð½Ð° ÑеÑÑовом видео 720x448 @30000/1001 fps
Ñ ÑелевÑм биÑпоÑоком 900кбиÑ/Ñек, на маÑине AMD-64 3400+ Ñ 2400 ÐÐÑ Ð¸ 64 биÑном Ñежиме.
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð½Ð°Ñ ÑкоÑоÑÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ (в
кадÑаÑ
в ÑекÑндÑ) и поÑеÑÑ PSNR (в дÐ) по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð½Ð°ÑÑÑойкой "оÑÐµÐ½Ñ Ð²ÑÑокое
@@ -3913,7 +3909,7 @@ Xvid поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÑоÑили кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеÑез
<informaltable frame="all">
<tgroup cols="4">
<thead>
-<row><entry>ÐпиÑание</entry><entry>ÐпÑии кодиÑованиÑ</entry><entry>ÑкоÑоÑÑÑ
+<row><entry>ÐпиÑание</entry><entry>ÐпÑии кодиÑованиÑ</entry><entry>ÑкоÑоÑÑÑ
(в fps)</entry><entry>ÐÑноÑиÑелÑÐ½Ð°Ñ Ð¿Ð¾ÑеÑÑ PSNR (в дÐ)</entry></row>
</thead>
<tbody>
@@ -3966,8 +3962,8 @@ Xvid поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÑоÑили кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑеÑез
<title>ÐпÑии кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ x264</title>
<para>
-ÐаÑниÑе, пожалÑйÑÑа Ñ Ð¿ÑоÑмоÑÑа Ñаздела
-<systemitem class="library">x264</systemitem>
+ÐаÑниÑе, пожалÑйÑÑа Ñ Ð¿ÑоÑмоÑÑа Ñаздела
+<systemitem class="library">x264</systemitem>
man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
ÐÑÐ¾Ñ Ñаздел пÑедполагаеÑÑÑ Ð±ÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ к ÑÑÑаниÑе man.
ÐдеÑÑ ÐÑ Ð½Ð°Ð¹Ð´ÐµÑе бÑÑÑÑÑе подÑказки о Ñом, какие опÑии ÑаÑе вÑего инÑеÑеÑÑÑÑ
@@ -3998,7 +3994,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
Ñелей. РеÑение Ð´Ð»Ñ Ð¿ÐµÑвого клаÑÑа опÑий оÑÐµÐ½Ñ Ð¿ÑоÑÑое:
надо ÑолÑко опÑеделиÑÑ, ÑÑиÑаеÑе ли ÐÑ, ÑÑо ÑазниÑа в каÑеÑÑве опÑавдÑÐ²Ð°ÐµÑ ÑазниÑÑ Ð²
ÑкоÑоÑÑи. ÐÐ»Ñ Ð²ÑоÑого клаÑÑа опÑий пÑедпоÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð·Ð½Ð°ÑиÑелÑно более
-ÑÑбÑекÑивнÑми и завиÑеÑÑ Ð¾Ñ Ð±Ð¾Ð»ÑÑего ÑиÑла ÑакÑоÑов.
+ÑÑбÑекÑивнÑми и завиÑеÑÑ Ð¾Ñ Ð±Ð¾Ð»ÑÑего ÑиÑла ÑакÑоÑов.
ÐмейÑе в видÑ, ÑÑо некоÑоÑÑе из опÑий каÑегоÑии "полÑзоваÑелÑÑкиÑ
пÑедпоÑÑений и ÑпеÑиалÑнÑÑ
ÑÑебований" могÑÑ Ð²Ñе же имеÑÑ Ð±Ð¾Ð»ÑÑое влиÑние на ÑкоÑоÑÑÑ Ð¸Ð»Ð¸ каÑеÑÑво,
но ÑÑо не оÑновное иÑ
пÑедназнаÑение.
@@ -4035,16 +4031,16 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
<sect3 id="menc-feat-x264-encoding-options-speedvquality">
-<title>ÐпÑии, заÑÑагиваÑÑие, в оÑновном, ÑкоÑоÑÑÑ Ð¸ каÑеÑÑво</title>
+<title>ÐпÑии, заÑÑагиваÑÑие, в оÑновном, ÑкоÑоÑÑÑ Ð¸ каÑеÑÑво</title>
<itemizedlist>
<listitem>
<para>
<emphasis role="bold">subq</emphasis>:
- Ðз вÑеÑ
опÑий, позволÑÑÑиÑ
вÑбиÑаÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑкоÑоÑÑÑÑ Ð¸ каÑеÑÑвом,
+ Ðз вÑеÑ
опÑий, позволÑÑÑиÑ
вÑбиÑаÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑкоÑоÑÑÑÑ Ð¸ каÑеÑÑвом,
<option>subq</option> и <option>frameref</option> (ÑмоÑÑиÑе ниже), пожалÑй,
ÑамÑе важнÑе.
- ÐÑли ÐÑ Ð·Ð°Ð¸Ð½ÑеÑеÑÐ¾Ð²Ð°Ð½Ñ Ð² Ñонкой наÑÑÑойке либо ÑкоÑоÑÑи, либо каÑеÑÑва,
+ ÐÑли ÐÑ Ð·Ð°Ð¸Ð½ÑеÑеÑÐ¾Ð²Ð°Ð½Ñ Ð² Ñонкой наÑÑÑойке либо ÑкоÑоÑÑи, либо каÑеÑÑва,
ÑÑи две — пеÑвое, Ñ Ñего Ðам ÑÑÐ¾Ð¸Ñ Ð½Ð°ÑаÑÑ.
С ÑоÑки зÑÐµÐ½Ð¸Ñ ÑкоÑоÑÑи, опÑии <option>frameref</option> и
<option>subq</option> оÑÐµÐ½Ñ Ð¶ÐµÑÑко взаимодейÑÑвÑÑÑ Ð´ÑÑг Ñ Ð´ÑÑгом.
@@ -4054,29 +4050,29 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
С 6 ÑÑÑлоÑнÑми кадÑами ÑÑа велиÑина доÑÑÐ¸Ð³Ð°ÐµÑ 60%.
ÐÑÑÐµÐºÑ <option>subq</option> на PSNR вÑглÑÐ´Ð¸Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно поÑÑоÑннÑм, в оÑлиÑие
Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва ÑÑÑлоÑнÑÑ
кадÑов.
- Ðак пÑавило, <option>subq=5</option> доÑÑÐ¸Ð³Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного PSNR
+ Ðак пÑавило, <option>subq=5</option> доÑÑÐ¸Ð³Ð°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного PSNR
на 0.2-0.5 дРболÑÑего, Ñем пÑи <option>subq=1</option>.
ÐбÑÑно ÑÑого доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¼ÐµÑиÑÑ.
</para>
-
+
<para>
<option>subq=6</option> — медленнее и Ð´Ð°ÐµÑ Ð»ÑÑÑее каÑеÑÑво пÑи ÑазÑмной
Ñене.
ÐÑли ÑÑавниваÑÑ Ñ <option>subq=5</option>, он обÑÑно Ð´Ð°ÐµÑ Ð½Ð° 0.1-0.4 дÐ
болÑÑий глобалÑнÑй PSNR Ñеной поÑеÑи 25%-100% ÑкоÑоÑÑи.
- РоÑлиÑие Ð¾Ñ Ð¾ÑÑалÑнÑÑ
ÑÑовней <option>subq</option>, поведение
+ РоÑлиÑие Ð¾Ñ Ð¾ÑÑалÑнÑÑ
ÑÑовней <option>subq</option>, поведение
<option>subq=6</option> не Ñак ÑилÑно завиÑÐ¸Ñ Ð¾Ñ <option>frameref</option>
- и <option>me</option>. ÐмеÑÑо ÑÑого, ÑÑÑекÑивноÑÑÑ <option>subq=6</option>
+ и <option>me</option>. ÐмеÑÑо ÑÑого, ÑÑÑекÑивноÑÑÑ <option>subq=6</option>
по болÑÑей ÑаÑÑи завиÑÐ¸Ñ Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва иÑполÑзÑемÑÑ
B-кадÑов. ÐÑи
обÑÑном иÑполÑзовании ÑÑо ознаÑаеÑ, ÑÑо <option>subq=6</option> в ÑложнÑÑ
,
вÑÑокодинамиÑнÑÑ
ÑÑенаÑ
Ð¸Ð¼ÐµÐµÑ Ð±Ð¾Ð»ÑÑое влиÑние как на ÑкоÑоÑÑÑ, Ñак и на
каÑеÑÑво, но в ÑÑенаÑ
Ñ Ð¼Ð°Ð»Ñм колиÑеÑÑваÑ
Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð½Ð° не Ð¸Ð¼ÐµÐµÑ Ñакого
- ÑÑÑекÑа. ÐмейÑе в видÑ, ÑÑо по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑекомендÑеÑÑÑ Ð²Ñегда ÑÑÑанавливаÑÑ
+ ÑÑÑекÑа. ÐмейÑе в видÑ, ÑÑо по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑекомендÑеÑÑÑ Ð²Ñегда ÑÑÑанавливаÑÑ
<option>bframes</option> в знаÑение, оÑлиÑное Ð¾Ñ Ð½ÑÐ»Ñ (ÑмоÑÑиÑе далее).
</para>
<para>
<option>subq=7</option> — ÑамÑй медленнÑй Ñежим Ñ Ð½Ð°Ð¸Ð»ÑÑÑим каÑеÑÑвом.
- Ðо ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ <option>subq=6</option> он, обÑÑно, ÑлÑÑÑÐ°ÐµÑ Ð¾Ð±Ñий PSNR на
+ Ðо ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ <option>subq=6</option> он, обÑÑно, ÑлÑÑÑÐ°ÐµÑ Ð¾Ð±Ñий PSNR на
0.01-0.05 дРÑеной поÑеÑи 15%-30% ÑкоÑоÑÑи.
ÐоÑколÑÐºÑ ÑооÑноÑение каÑеÑÑва и вÑемени кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑÐµÐ½Ñ Ð½ÐµÐ²ÐµÐ»Ð¸ÐºÐ¾, Ðам
ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ Ñежим, ÑолÑко еÑли боÑеÑеÑÑ Ð·Ð° каждÑй биÑ, и вÑемÑ
@@ -4095,14 +4091,14 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
<option>frameref=3</option> медленнее пÑимеÑно на 15%, Ñем
<option>frameref=1</option>.
Ð ÑожалениÑ, ÑлÑÑÑение оÑÐµÐ½Ñ Ð±ÑÑÑÑо ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° неÑ.
- ÐÑ <option>frameref=6</option> можно ожидаÑÑ Ð¿ÑиÑоÑÑа PSNR лиÑÑ Ð½Ð°
+ ÐÑ <option>frameref=6</option> можно ожидаÑÑ Ð¿ÑиÑоÑÑа PSNR лиÑÑ Ð½Ð°
0.05-0.1 дРпо ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ <option>frameref=3</option> Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной
поÑеÑей 15% ÑкоÑоÑÑи.
- ÐÑÑе <option>frameref=6</option> каÑеÑÑво обÑÑно ÑвелиÑиваеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð½ÐµÐ·Ð½Ð°ÑиÑелÑно
+ ÐÑÑе <option>frameref=6</option> каÑеÑÑво обÑÑно ÑвелиÑиваеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð½ÐµÐ·Ð½Ð°ÑиÑелÑно
(Ñ
оÑÑ Ð½Ð° вÑем пÑоÑÑжении ÑÑой диÑкÑÑÑии Ðам ÑледÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð² видÑ, оно можеÑ
знаÑиÑелÑно изменÑÑÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð¸ÑÑ
одного маÑеÑиала).
- РдоволÑно ÑипиÑном ÑлÑÑае <option>frameref=12</option> ÑлÑÑÑÐ¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑй
- PSNR вÑего на 0.02дРпо ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ <option>frameref=6</option>,
+ РдоволÑно ÑипиÑном ÑлÑÑае <option>frameref=12</option> ÑлÑÑÑÐ¸Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑй
+ PSNR вÑего на 0.02дРпо ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ <option>frameref=6</option>,
Ñеной 15%-20% ÑкоÑоÑÑи.
ÐÑи ÑакиÑ
вÑÑокиÑ
знаÑениÑÑ
<option>frameref</option>, единÑÑвеннаÑ
дейÑÑвиÑелÑно Ñ
оÑоÑÐ°Ñ Ð²ÐµÑÑ, о коÑоÑой Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñказано, ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо
@@ -4112,11 +4108,11 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
</para>
<note><title>ÐамеÑание:</title>
<para>
- УвелиÑение <option>frameref</option> до ÑÑезмеÑно вÑÑокиÑ
знаÑений
+ УвелиÑение <option>frameref</option> до ÑÑезмеÑно вÑÑокиÑ
знаÑений
<emphasis role="bold">можеÑ</emphasis> и
<emphasis role="bold">обÑÑно наноÑиÑ</emphasis>
вÑед ÑÑÑекÑивноÑÑи кодиÑованиÑ, еÑли CABAC оÑклÑÑен.
- С задейÑÑвованнÑм CABAC (наÑÑÑойка по ÑмолÑаниÑ), возможноÑÑÑ ÑÑÑановки
+ С задейÑÑвованнÑм CABAC (наÑÑÑойка по ÑмолÑаниÑ), возможноÑÑÑ ÑÑÑановки
<option>frameref</option> "ÑлиÑком вÑÑоким" на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑглÑÐ´Ð¸Ñ ÑлиÑком
далекой, ÑÑÐ¾Ð±Ñ Ð¾Ð± ÑÑом беÑпокоиÑÑÑÑ, а в бÑдÑÑем опÑимизаÑии могÑÑ Ð²Ð¾Ð¾Ð±Ñе
ÑбÑаÑÑ ÑакÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ.
@@ -4127,17 +4123,17 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
заÑем ÑвелиÑиÑÑ Ð¸Ñ
во вÑоÑом. ÐбÑÑно, ÑÑо Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½Ð¸ÑÑожнÑм оÑÑиÑаÑелÑнÑм
ÑÑÑекÑом на конеÑное каÑеÑÑво: ÐÑ, возможно, поÑеÑÑеÑе вплоÑÑ Ð´Ð¾ 0.1дРPSNR,
ÑÑо должно бÑÑÑ ÑлиÑком малой ÑазниÑей, ÑÑÐ¾Ð±Ñ ÐµÑ Ð·Ð°Ð¼ÐµÑиÑÑ.
- Ðднако, ÑазлиÑнÑе знаÑÐµÐ½Ð¸Ñ <option>frameref</option> могÑÑ
+ Ðднако, ÑазлиÑнÑе знаÑÐµÐ½Ð¸Ñ <option>frameref</option> могÑÑ
иногда повлиÑÑÑ Ð½Ð° ÑеÑение о вÑбоÑе Ñипа кадÑа.
СкоÑее вÑего, ÑÑо доволÑно Ñедкие кÑайние ÑлÑÑаи, но еÑли ÐÑ Ñ
оÑиÑе бÑÑÑ ÑоÑно
ÑвеÑеннÑми, поÑмоÑÑиÑе, ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸ ÐаÑе видео полноÑкÑаннÑе
<!-- FIXME is translation correct? -->
пеÑиодиÑеÑки вÑпÑÑ
иваÑÑие изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑие паÑзÑ, коÑоÑÑе могÑÑ ÑÑаÑÑ
пÑиÑиной пÑинÑдиÑелÑной вÑÑавки I-кадÑа.
- ÐаÑÑÑойÑе <option>frameref</option> в пеÑвом пÑоÑ
оде Ñак, ÑÑобÑ
+ ÐаÑÑÑойÑе <option>frameref</option> в пеÑвом пÑоÑ
оде Ñак, ÑÑобÑ
она бÑла доÑÑаÑоÑно болÑÑой Ð´Ð»Ñ ÑодеÑÐ¶Ð°Ð½Ð¸Ñ Ð´Ð»Ð¸ÑелÑноÑÑи Ñикла вÑпÑÑ
иваниÑ
(или паÑзÑ).
- ÐапÑимеÑ, еÑли ÑÑÐµÐ½Ñ Ð²ÑпÑÑ
иваÑÑ Ð¸ гаÑнÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¸Ð·Ð¾Ð±ÑажениÑми в ÑеÑении
+ ÐапÑимеÑ, еÑли ÑÑÐµÐ½Ñ Ð²ÑпÑÑ
иваÑÑ Ð¸ гаÑнÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¸Ð·Ð¾Ð±ÑажениÑми в ÑеÑении
ÑÑÑÑ
кадÑов, ÑÑÑановиÑе <option>frameref</option> ÑавнÑм 3 или вÑÑе.
ÐÑа пÑоблема, возможно, оÑÐµÐ½Ñ Ñедко поÑвлÑеÑÑÑ Ð´Ð»Ñ Ð¶Ð¸Ð²Ð¾Ð¹ ÑÑемки, но она иногда
Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¿Ñи запиÑи видео игÑ.
@@ -4149,11 +4145,11 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
ÐÑа опÑÐ¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð²ÑбоÑа меÑода оÑенки движениÑ.
Ðзменение ÑÑой опÑии оказÑÐ²Ð°ÐµÑ Ð¿ÑÑмое влиÑние на ÑооÑноÑение
ÑкоÑоÑÑÑ-каÑеÑÑво. <option>me=dia</option> лиÑÑ Ð½Ð° неÑколÑко пÑоÑенÑов
- бÑÑÑÑее, Ñем поиÑк по ÑмолÑаниÑ, Ñеной не болÑÑе 0.1дРглобалÑного PSNR.
+ бÑÑÑÑее, Ñем поиÑк по ÑмолÑаниÑ, Ñеной не болÑÑе 0.1дРглобалÑного PSNR.
ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ (<option>me=hex</option>) — ÑазÑмнÑй вÑÐ±Ð¾Ñ Ð¼ÐµÐ¶Ð´Ñ ÑкоÑоÑÑÑÑ
и каÑеÑÑвом. <option>me=umh</option> немного, вплоÑÑ Ð´Ð¾ 0.1дÐ, ÑлÑÑÑаеÑ
- глобалÑнÑй PSNR, ÑооÑвеÑÑÑвÑÑÑее падение ÑкоÑоÑÑи менÑеÑÑÑ Ð²
- завиÑимоÑÑи Ð¾Ñ <option>frameref</option>. С вÑÑокими знаÑениÑми
+ глобалÑнÑй PSNR, ÑооÑвеÑÑÑвÑÑÑее падение ÑкоÑоÑÑи менÑеÑÑÑ Ð²
+ завиÑимоÑÑи Ð¾Ñ <option>frameref</option>. С вÑÑокими знаÑениÑми
<option>frameref</option> (напÑимеÑ, 12 или около Ñого), <option>me=umh</option>
пÑимеÑно на 40% медленнее, Ñем наÑÑÑойка по ÑмолÑÐ°Ð½Ð¸Ñ <option>me=hex</option>.
С <option>frameref=3</option>, падение ÑкоÑоÑÑи ÑменÑÑаеÑÑÑ Ð´Ð¾ 25%-30%.
@@ -4188,7 +4184,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
<para>
С оÑклÑÑеннÑм адапÑивнÑм пÑинÑÑием ÑеÑÐµÐ½Ð¸Ñ Ð¾ B-кадÑаÑ
(<option>nob_adapt</option> в <option>x264encopts</option>),
- опÑималÑное знаÑение ÑÑой опÑии обÑÑно не пÑевÑÑаеÑ
+ опÑималÑное знаÑение ÑÑой опÑии обÑÑно не пÑевÑÑаеÑ
<option>bframes=1</option>, инаÑе могÑÑ Ð¿Ð¾ÑÑÑадаÑÑ Ð²ÑÑокодинамиÑнÑе ÑÑенÑ.
С вклÑÑеннÑм адапÑивнÑм пÑинÑÑием ÑеÑÐµÐ½Ð¸Ñ Ð¾ B-кадÑаÑ
(поведение по ÑмолÑаниÑ),
можно безопаÑно иÑполÑзоваÑÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокие знаÑениÑ; кодиÑовÑик ÑменÑÑиÑ
@@ -4204,7 +4200,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
ÐамеÑÑÑе: она вклÑÑена по ÑмолÑаниÑ.
</para>
<para>
- Ðогда ÑÑа опÑÐ¸Ñ Ð²ÐºÐ»ÑÑена, кодиÑовÑик бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑазÑмно
+ Ðогда ÑÑа опÑÐ¸Ñ Ð²ÐºÐ»ÑÑена, кодиÑовÑик бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑазÑмно
бÑÑÑÑÑй пÑоÑеÑÑ Ð¿ÑинÑÑÐ¸Ñ ÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва B-кадÑов,
иÑполÑзÑемÑÑ
в ÑÑенаÑ
, коÑоÑÑе Ð¾Ñ ÑÑого не ÑилÑно вÑигÑаÑÑ.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ <option>b_bias</option> Ð´Ð»Ñ Ñонкой наÑÑÑойки Ñого,
@@ -4224,7 +4220,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
ÐÑ Ð¿Ð¾Ð»ÑÑиÑе неболÑÑое ÑлÑÑÑение каÑеÑÑва без поÑеÑи в ÑкоÑоÑÑи, как и говоÑиÑ
man ÑÑководÑÑво.
ÐмейÑе в видÑ, ÑÑо Ñакое видео не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑоÑиÑано оÑнованнÑми на
- libavcodec декодеÑами, ÑозданнÑми Ñанее, Ñем пÑимеÑно 5 ÐаÑÑа 2005.
+ libavcodec декодеÑами, ÑозданнÑми Ñанее, Ñем пÑимеÑно 5 ÐаÑÑа 2005.
</para></listitem>
<listitem>
<para>
@@ -4243,7 +4239,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
<para>
Ð ÑожалениÑ, ÑекÑÑий алгоÑиÑм адапÑивного пÑинÑÑÐ¸Ñ ÑеÑений о B-кадÑаÑ
имееÑ
ÑвеÑдÑÑ ÑклонноÑÑÑ Ðº Ð¸Ð·Ð±ÐµÐ³Ð°Ð½Ð¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ B-кадÑов пÑи заÑÑÑ
аниÑÑ
.
- Ðо ÑеÑ
поÑ, пока ÑÑо не измениÑÑÑ, Ñ
оÑоÑей идеей, возможно, бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ
+ Ðо ÑеÑ
поÑ, пока ÑÑо не измениÑÑÑ, Ñ
оÑоÑей идеей, возможно, бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ
<option>nob_adapt</option> к x264encopts, еÑли пÑедполагаеÑе, ÑÑо заÑÑÑ
аниÑ
бÑдÑÑ Ð´Ð°Ð²Ð°ÑÑ ÑÑÑеÑÑвеннÑй вклад в ÐаÑем конкÑеÑном видеоклипе.
</para>
@@ -4252,8 +4248,8 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
<para>
<emphasis role="bold">threads</emphasis>
ÐÑа опÑÐ¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¿Ð¾ÑодиÑÑ Ð¿Ð¾Ñоки Ð´Ð»Ñ Ð¿Ð°ÑаллелÑного кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð°
- неÑколÑкиÑ
CPU. ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑÑÑнÑÑ Ð²ÑбÑаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑоздаваемÑÑ
поÑоков или,
- ÑÑо лÑÑÑе, ÑÑÑановиÑÑ <option>threads=auto</option> и позволиÑÑ
+ неÑколÑкиÑ
CPU. ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑÑÑнÑÑ Ð²ÑбÑаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑоздаваемÑÑ
поÑоков или,
+ ÑÑо лÑÑÑе, ÑÑÑановиÑÑ <option>threads=auto</option> и позволиÑÑ
<systemitem class="library">x264</systemitem> опÑеделиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво доÑÑÑпнÑÑ
CPU и вÑбÑаÑÑ ÑооÑвеÑÑÑвÑÑÑее колиÑеÑÑво поÑоков.
ÐÑли Ñ ÐÐ°Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿ÑоÑеÑÑоÑÐ½Ð°Ñ Ð¼Ð°Ñина, Ðам ÑледÑÐµÑ Ð²ÑеÑÑез задÑмаÑÑÑÑ Ð¾Ð±
@@ -4295,11 +4291,11 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
Ðо-пеÑвÑÑ
, оно ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ Ð±Ð¸ÑпоÑок в 1400 кбиÑ/Ñек Ð´Ð»Ñ Ð¾Ð±ÐµÐ¸Ñ
ÑаÑÑей. ÐеÑваÑ
ÑаÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑÑезмеÑно кванÑованной, ÑÑо пÑÐ¸Ð²ÐµÐ´ÐµÑ Ðº
недопÑÑÑимо вÑглÑдÑÑÐµÐ¼Ñ Ð¸ неопÑавданно блоÑÐ½Ð¾Ð¼Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ. ÐÑоÑÐ°Ñ ÑаÑÑÑ Ð±ÑдеÑ
- ÑÑÑеÑÑвенно недоÑÑаÑоÑно кванÑованной; она Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ð¾ÑлиÑно, но Ñена
+ ÑÑÑеÑÑвенно недоÑÑаÑоÑно кванÑованной; она Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ð¾ÑлиÑно, но Ñена
биÑпоÑока Ð´Ð»Ñ ÑÑого каÑеÑÑва бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð½ÐµÐ¾Ð¿Ñавданной.
Чего намного ÑÑÑднее избежаÑÑ, Ñак ÑÑо пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¿ÐµÑеÑ
ода Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑмÑ
ÑÑенами. РпеÑвÑÑ
ÑекÑндаÑ
малодинамиÑной ÑаÑÑи кванÑоваÑÐµÐ»Ñ Ð±ÑÐ´ÐµÑ ÑÑезвÑÑайно
- пÑевÑÑен, поÑÐ¾Ð¼Ñ ÑÑо ÑпÑавление биÑпоÑоком вÑе еÑе Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð²ÑÑÑеÑиÑÑ Ñакие же
+ пÑевÑÑен, поÑÐ¾Ð¼Ñ ÑÑо ÑпÑавление биÑпоÑоком вÑе еÑе Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð²ÑÑÑеÑиÑÑ Ñакие же
ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº биÑпоÑÐ¾ÐºÑ ÐºÐ°Ðº и в пеÑвой ÑаÑÑи. ÐÑÐ¾Ñ "оÑибоÑнÑй пеÑиод" Ñ
ÑÑезвÑÑайно пÑевÑÑеннÑм кванÑованием бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ ÑаздÑажаÑÑе непÑиÑÑно и
иÑполÑзоваÑÑ Ð½Ð° Ñамом деле менÑÑе, Ñем 300 кбиÑ/Ñек, ÑÑебÑемÑÑ
ÐµÐ¼Ñ Ð´Ð»Ñ Ñого,
@@ -4309,7 +4305,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
</para>
<para>
ÐногопÑоÑ
одное кодиÑование Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедложиÑÑ Ð¾Ð³ÑомнÑе пÑеимÑÑеÑÑва по ÑÑавнениÑ
- Ñ Ð¾Ð´Ð½Ð¾Ð¿ÑоÑ
однÑм. ÐÑполÑзÑÑ ÑÑаÑиÑÑикÑ, ÑобÑаннÑÑ Ð¿Ñи пеÑвом пÑоÑ
оде,
+ Ñ Ð¾Ð´Ð½Ð¾Ð¿ÑоÑ
однÑм. ÐÑполÑзÑÑ ÑÑаÑиÑÑикÑ, ÑобÑаннÑÑ Ð¿Ñи пеÑвом пÑоÑ
оде,
кодиÑовÑик Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑениÑÑ, Ñ ÑазÑмной ÑоÑноÑÑÑÑ, "ÑÑоимоÑÑÑ" (в биÑаÑ
)
кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð»Ñбого заданного кадÑа пÑи лÑбом заданном кванÑоваÑеле.
ÐÑо Ð´ÐµÐ»Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм намного более ÑаÑионалÑное, лÑÑÑе ÑпланиÑованное
@@ -4335,7 +4331,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
x264 пÑедоÑÑавлÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´ÐµÐ»Ð°ÑÑ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ðµ колиÑеÑÑво поÑледоваÑелÑнÑÑ
пÑоÑ
одов. ÐÑли ÐÑ Ñказали <option>pass=1</option> пÑи пеÑвом пÑоÑ
оде,
иÑполÑзÑйÑе заÑем <option>pass=3</option> в поÑледÑÑÑем пÑоÑ
оде, ÑÑÐ¾Ñ Ð¿ÑоÑ
од
- бÑÐ´ÐµÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно ÑиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿ÑедÑдÑÑего пÑоÑ
ода и запиÑÑваÑÑ ÑвоÑ
+ бÑÐ´ÐµÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно ÑиÑаÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿ÑедÑдÑÑего пÑоÑ
ода и запиÑÑваÑÑ ÑвоÑ
ÑобÑÑвеннÑÑ. ÐополниÑелÑнÑй пÑоÑ
од, ÑледÑÑÑий за ÑÑим, бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¾ÑенÑ
Ñ
оÑоÑÑÑ Ð¾ÑÐ½Ð¾Ð²Ñ Ð´Ð»Ñ Ð¾ÑÑÑеÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑÐµÐ½Ñ ÑоÑнÑÑ
пÑедÑказаний ÑазмеÑов кадÑов пÑи
вÑбÑанном кванÑоваÑеле. Ðа пÑакÑике, обÑее ÑлÑÑÑение каÑеÑÑва Ð¾Ñ Ð¸ÑполÑзованиÑ
@@ -4355,7 +4351,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
ÑлÑÑай: <option>qcomp=0</option>, пÑедназнаÑен Ð´Ð»Ñ Ð¸ÑÑинно поÑÑоÑнного
биÑпоÑока. ÐбÑÑно ÑÑо ÑÐ´ÐµÐ»Ð°ÐµÑ Ð²ÑÑокодинамиÑнÑе ÑÑÐµÐ½Ñ Ð²ÑглÑдÑÑими пÑоÑÑо
ÑжаÑно, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº малодинамиÑнÑе ÑÑÐµÐ½Ñ Ð±ÑдÑÑ, возможно, вÑглÑдеÑÑ
- абÑолÑÑно великолепно, но пÑи ÑÑом бÑдÑÑ Ð¸ÑполÑзоваÑÑ Ð²Ð¾ много Ñаз болÑÑий
+ абÑолÑÑно великолепно, но пÑи ÑÑом бÑдÑÑ Ð¸ÑполÑзоваÑÑ Ð²Ð¾ много Ñаз болÑÑий
биÑпоÑок, Ñем им необÑ
одимо, ÑÑÐ¾Ð±Ñ Ð²ÑглÑдеÑÑ Ð»Ð¸ÑÑ Ð¿ÑевоÑÑ
одно.
ÐÑÑÐ³Ð°Ñ ÐºÑайноÑÑÑ: <option>qcomp=1</option>, добиваеÑÑÑ Ð¿ÑимеÑно одинакового
паÑамеÑÑа кванÑÐ¾Ð²Ð°Ð½Ð¸Ñ (QP). ÐоÑÑоÑннÑй QP не вÑглÑÐ´Ð¸Ñ Ð¿Ð»Ð¾Ñ
о, но болÑÑинÑÑво
@@ -4378,7 +4374,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
ÑбÑваÑÑим, вплоÑÑ Ð´Ð¾ иÑÑезаÑÑе малого или даже нÑлевого). Ðидео поÑок
по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð±ÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑоÑки пеÑемеÑениÑ, пока в нем еÑÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо изменениÑ
ÑÑен.
-</para></listitem>
+</para></listitem>
<listitem>
<para>
<emphasis role="bold">deblock</emphasis>:
@@ -4457,7 +4453,7 @@ man ÑÑÑаниÑÑ <application>MPlayer</application>'а.
</para>
<para>
-ÐÑе наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑовеÑÑлиÑÑ Ð½Ð° ÑеÑÑовом видео 720x448 @30000/1001 fps
+ÐÑе наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑовеÑÑлиÑÑ Ð½Ð° ÑеÑÑовом видео 720x448 @30000/1001 fps
Ñ ÑелевÑм биÑпоÑоком 900кбиÑ/Ñек, на маÑине AMD-64 3400+ Ñ 2400 ÐÐÑ Ð¸ 64-Ñ
биÑном Ñежиме.
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ наÑÑÑойки кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð½Ð°Ñ ÑкоÑоÑÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ (в
кадÑаÑ
в ÑекÑндÑ) и поÑеÑÑ PSNR (в дÐ) по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð½Ð°ÑÑÑойкой "оÑÐµÐ½Ñ Ð²ÑÑокое
@@ -4518,7 +4514,7 @@ Video for Windows пÑедоÑÑавлÑÐµÑ Ð¿ÑоÑÑое кодиÑовани
<para>
ÐмейÑе в видÑ, ÑÑо поддеÑжка ÑÑой возможноÑÑи оÑÐµÐ½Ñ ÑкÑпеÑименÑалÑÐ½Ð°Ñ Ð¸
некоÑоÑÑе кодеки могÑÑ Ð½Ðµ ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно. ÐекоÑоÑÑе кодеки могÑÑ ÑабоÑаÑÑ
-ÑолÑко в опÑеделеннÑÑ
пÑоÑÑÑанÑÑваÑ
ÑвеÑов, попÑобÑйÑе
+ÑолÑко в опÑеделеннÑÑ
пÑоÑÑÑанÑÑваÑ
ÑвеÑов, попÑобÑйÑе
<option>-vf format=bgr24</option> и <option>-vf format=yuy2</option>,
еÑли кодек вÑÐ´Ð°ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¸Ð»Ð¸ кодиÑÑÐµÑ Ð½ÐµÐ²ÐµÑно.
</para>
@@ -4661,8 +4657,8 @@ Video for Windows пÑедоÑÑавлÑÐµÑ Ð¿ÑоÑÑое кодиÑовани
</tgroup>
</informaltable>
-ÐеÑвÑй ÑÑÐ¾Ð»Ð±ÐµÑ ÑодеÑÐ¶Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð° кодеков, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказÑваÑÑÑÑ Ð¿Ð¾Ñле
-паÑамеÑÑа <literal>codec</literal>,
+ÐеÑвÑй ÑÑÐ¾Ð»Ð±ÐµÑ ÑодеÑÐ¶Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð° кодеков, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказÑваÑÑÑÑ Ð¿Ð¾Ñле
+паÑамеÑÑа <literal>codec</literal>,
напÑимеÑ: <option>-xvfwopts codec=divx.dll</option>
FourCC код, иÑполÑзÑемÑй каждÑм кодеком, Ñказан в ÑкобкаÑ
.
</para>
@@ -4699,7 +4695,7 @@ mencoder -dvd-device <replaceable>zeiram.iso</replaceable> dvd://7 -o <replaceab
<application>Cygwin</application> иÑполÑзÑйÑе:
<screen>gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32</screen>
-ÐÐ»Ñ ÑбоÑки в <application>MSVC</application> вам поÑÑебÑеÑÑÑ getopt.
+ÐÐ»Ñ ÑбоÑки в <application>MSVC</application> Ðам поÑÑебÑеÑÑÑ getopt.
Getopt можно найÑи в иÑÑ
одном аÑÑ
иве <application>vfw2menc</application>,
доÑÑÑпном в:
ÐÑÐ¾ÐµÐºÑ <ulink url="http://oss.netfarm.it/mplayer-win32.php">MPlayer на win32</ulink>.
@@ -4715,8 +4711,8 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
</para>
</informalexample>
<para>
-ÐолÑзоваÑели Windows могÑÑ Ð¸ÑполÑзоваÑÑ
-<option>-xvfwopts codec=vp6vfw.dll:compdata=dialog</option>,
+ÐолÑзоваÑели Windows могÑÑ Ð¸ÑполÑзоваÑÑ
+<option>-xvfwopts codec=vp6vfw.dll:compdata=dialog</option>,
Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° окна наÑÑÑоек кодека пеÑед наÑалом кодиÑованиÑ.
</para>
</sect2>
@@ -4727,7 +4723,7 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<sect1 id="menc-feat-quicktime-7">
-<title>ÐÑполÑзование <application>MEncoder</application>
+<title>ÐÑполÑзование <application>MEncoder</application>
Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑовмеÑÑимÑÑ
Ñ <application>QuickTime</application>
Ñайлов</title>
@@ -4737,7 +4733,7 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
ÑайлÑ?</title>
<para>
- ÐÑÑÑ Ð½ÐµÑколÑко пÑиÑин, по коÑоÑÑм Ñоздание
+ ÐÑÑÑ Ð½ÐµÑколÑко пÑиÑин, по коÑоÑÑм Ñоздание
<application>QuickTime</application>-ÑовмеÑÑимÑÑ
Ñайлов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ
желаÑелÑно.
</para>
@@ -4747,7 +4743,7 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
ÑезÑлÑÑÐ°Ñ ÐаÑего кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° болÑÑинÑÑве плаÑÑоÑм (Windows, Mac OS X, Unices …).
</para></listitem>
<listitem><para>
- <application>QuickTime</application>
+ <application>QuickTime</application>
позволÑÐµÑ Ð²Ð¾ÑполÑзоваÑÑÑÑ Ð¿ÑеимÑÑеÑÑвами болÑÑего ÑиÑла возможноÑÑей
аппаÑаÑного и пÑогÑаммного ÑÑкоÑÐµÐ½Ð¸Ñ Ð½Ð° Mac OS X, Ñем плаÑÑоÑмо-незавиÑимÑе
плееÑÑ Ð½Ð°Ð¿Ð¾Ð´Ð¾Ð±Ð¸Ðµ <application>MPlayer</application> или
@@ -4757,7 +4753,7 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
</para></listitem>
<listitem><para>
<application>QuickTime</application> 7 поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð´ÐµÐº нового поколениÑ
- H.264, коÑоÑÑй даÑÑ ÑÑÑеÑÑвенно лÑÑÑее каÑеÑÑво изобÑажениÑ, Ñем
+ H.264, коÑоÑÑй даÑÑ ÑÑÑеÑÑвенно лÑÑÑее каÑеÑÑво изобÑажениÑ, Ñем
пÑедÑдÑÑие Ð¿Ð¾ÐºÐ¾Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´ÐµÐºÐ¾Ð² (MPEG-2, MPEG-4 …).
</para></listitem>
</itemizedlist>
@@ -4767,11 +4763,11 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<title>ÐгÑаниÑÐµÐ½Ð¸Ñ <application>QuickTime</application> 7</title>
<para>
- <application>QuickTime</application> 7 поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ H.264 видео и
- AAC аÑдио, но не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¸Ñ
мÑлÑÑиплекÑиÑование в ÑоÑмаÑ
+ <application>QuickTime</application> 7 поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ H.264 видео и
+ AAC аÑдио, но не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¸Ñ
мÑлÑÑиплекÑиÑование в ÑоÑмаÑ
конÑейнеÑа AVI.
- Ðднако, ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ <application>MEncoder</application>
- Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾ и аÑдио, а поÑом иÑполÑзоваÑÑ Ð²Ð½ÐµÑнÑÑ
+ Ðднако, ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ <application>MEncoder</application>
+ Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾ и аÑдио, а поÑом иÑполÑзоваÑÑ Ð²Ð½ÐµÑнÑÑ
пÑогÑаммÑ, ÑакÑÑ ÐºÐ°Ðº <application>mp4creator</application> (ÑаÑÑÑ
<ulink url="http://mpeg4ip.sourceforge.net/">пакеÑа MPEG4I</ulink>)
Ð´Ð»Ñ ÑемÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾ и аÑдио доÑожек в конÑÐµÐ¹Ð½ÐµÑ MP4.
@@ -4790,15 +4786,15 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<listitem><para>
<emphasis role="bold">B-кадÑÑ</emphasis>:
<application>QuickTime</application> 7 поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¼Ð°ÐºÑимÑм 1 B-кадÑ,
- Ñ.е. <option>-x264encopts bframes=1</option>. ÐÑо ознаÑаеÑ, ÑÑо
- <option>b_pyramid</option> и <option>weight_b</option> не дадÑÑ
- ÑÑÑекÑа, поÑколÑÐºÑ Ð¸Ð¼ необÑ
одимо, ÑÑÐ¾Ð±Ñ <option>bframes</option>
+ Ñ.е. <option>-x264encopts bframes=1</option>. ÐÑо ознаÑаеÑ, ÑÑо
+ <option>b_pyramid</option> и <option>weight_b</option> не дадÑÑ
+ ÑÑÑекÑа, поÑколÑÐºÑ Ð¸Ð¼ необÑ
одимо, ÑÑÐ¾Ð±Ñ <option>bframes</option>
бÑло болÑÑе 1.
</para></listitem>
<listitem><para>
<emphasis role="bold">ÐакÑоблоки</emphasis>:
<application>QuickTime</application> 7 не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ 8x8 DCT макÑоблоки.
- ÐÑа опÑÐ¸Ñ (<option>8x8dct</option>) вÑклÑÑена по ÑмолÑаниÑ, Ñак ÑÑо
+ ÐÑа опÑÐ¸Ñ (<option>8x8dct</option>) вÑклÑÑена по ÑмолÑаниÑ, Ñак ÑÑо
пÑоÑÑо ÑдоÑÑовеÑÑÑеÑÑ, ÑÑо Ñвно ÐµÑ Ð½Ðµ задали.
ÐÑо Ñакже ознаÑаеÑ, ÑÑо опÑÐ¸Ñ <option>i8x8</option> бÑÐ´ÐµÑ Ð±ÐµÑполезна,
Ñ.к. ей необÑ
одима <option>8x8dct</option>.
@@ -4806,7 +4802,7 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<listitem><para>
<emphasis role="bold">ÐоÑÑÑиÑÐ¸ÐµÐ½Ñ ÑооÑноÑÐµÐ½Ð¸Ñ ÑÑоÑон</emphasis>:
<application>QuickTime</application> 7 не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¸Ð½ÑоÑмаÑиÑ
- SAR (коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¿ÑопоÑÑий пикÑела, sample aspect ratio)
+ SAR (коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¿ÑопоÑÑий пикÑела, sample aspect ratio)
в MPEG-4 ÑайлаÑ
; он пÑÐµÐ´Ð¿Ð¾Ð»Ð°Ð³Ð°ÐµÑ SAR=1. ÐÑоÑÑиÑе
<link linkend="menc-feat-quicktime-7-scale">Ñаздел о маÑÑÑабиÑовании</link>
Ð´Ð»Ñ Ð¾Ð±Ñ
ода пÑоблемÑ.
@@ -4820,23 +4816,23 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<para>
ÐÑедположим, ÑÑо ÐÑ Ñ
оÑиÑе ÑделаÑÑ Ñип ÑвежекÑпленной копии "Ð¥Ñоник
ÐаÑнии" и ÐÐ°Ñ Ñегион DVD 1, ÑÑо ознаÑаеÑ, ÑÑо ÑÑо NTSC.
- ÐÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ бÑÐ´ÐµÑ Ñакже пÑименим к PAL, за иÑклÑÑением Ñого, ÑÑо Ðам
+ ÐÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ бÑÐ´ÐµÑ Ñакже пÑименим к PAL, за иÑклÑÑением Ñого, ÑÑо Ðам
нÑжно бÑÐ´ÐµÑ Ð¾Ð¿ÑÑÑиÑÑ <option>-ofps 24000/1001</option> и иÑполÑзоваÑÑ
Ñлегка оÑлиÑаÑÑиеÑÑ ÑазмеÑÑ Ð´Ð»Ñ <option>crop</option> и <option>scale</option>.
</para>
<para>
- ÐоÑле запÑÑка <option>mplayer dvd://1</option>, ÐÑ ÑледÑеÑе пÑоÑеÑÑÑ,
- опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð² Ñазделе <link linkend="menc-feat-telecine">Ðак ÑабоÑаÑÑ
- Ñ ÑелеÑином и ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой на NTSC DVD</link> и обнаÑÑживаеÑе,
- ÑÑо ÑÑо 24000/1001 fps видео Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой. ÐÑо неÑколÑко
- ÑпÑоÑÐ°ÐµÑ Ð¾Ð±ÑабоÑкÑ, поÑколÑÐºÑ Ðам не нÑжно иÑполÑзоваÑÑ ÑилÑÑÑ
- обÑаÑного ÑелеÑина, Ñакой как <option>pullup</option>, или ÑилÑÑÑ
+ ÐоÑле запÑÑка <option>mplayer dvd://1</option>, ÐÑ ÑледÑеÑе пÑоÑеÑÑÑ,
+ опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð² Ñазделе <link linkend="menc-feat-telecine">Ðак ÑабоÑаÑÑ
+ Ñ ÑелеÑином и ÑеÑеÑÑÑÑоÑной ÑазвÑÑÑкой на NTSC DVD</link> и обнаÑÑживаеÑе,
+ ÑÑо ÑÑо 24000/1001 fps видео Ñ Ð¿Ð¾ÑÑÑоÑной ÑазвÑÑÑкой. ÐÑо неÑколÑко
+ ÑпÑоÑÐ°ÐµÑ Ð¾Ð±ÑабоÑкÑ, поÑколÑÐºÑ Ðам не нÑжно иÑполÑзоваÑÑ ÑилÑÑÑ
+ обÑаÑного ÑелеÑина, Ñакой как <option>pullup</option>, или ÑилÑÑÑ
деинÑеÑлейÑа, Ñакой как <option>yadif</option>.
</para>
<para>
- ÐаÑем Ðам необÑ
одимо ÑÑеÑÑ ÑÑÑнÑе полоÑÑ ÑвеÑÑ
Ñ Ð¸ ÑÐ½Ð¸Ð·Ñ Ð²Ð¸Ð´ÐµÐ¾, как
+ ÐаÑем Ðам необÑ
одимо ÑÑеÑÑ ÑÑÑнÑе полоÑÑ ÑвеÑÑ
Ñ Ð¸ ÑÐ½Ð¸Ð·Ñ Ð²Ð¸Ð´ÐµÐ¾, как
опиÑано в <link linkend="menc-feat-dvd-mpeg4-example-crop">ÑÑом</link>
Ñазделе.
</para>
@@ -4848,22 +4844,22 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<para>
СледÑÑÑий Ñаг дейÑÑвиÑелÑно дÑÑеÑаздиÑаÑÑий.
- <application>QuickTime</application> 7 не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ MPEG-4 видео
- Ñ ÐºÐ¾ÑÑÑиÑиенÑом ÑооÑноÑÐµÐ½Ð¸Ñ ÑÑоÑон пикÑела, оÑлиÑнÑм Ð¾Ñ 1. Так ÑÑо Ðам
- пÑидÑÑÑÑ Ð¼Ð°ÑÑÑабиÑоваÑÑ Ð²Ð¸Ð´ÐµÐ¾ либо в ÑÑоÑÐ¾Ð½Ñ ÑвелиÑÐµÐ½Ð¸Ñ (ÑÑо впÑÑÑÑÑ
- поÑÑаÑÐ¸Ñ Ð¼Ð½Ð¾Ð³Ð¾ меÑÑа на диÑке), либо в ÑÑÑÐ¾Ð½Ñ ÑменÑÑÐµÐ½Ð¸Ñ (ÑÑо пÑиведÑÑ
+ <application>QuickTime</application> 7 не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ MPEG-4 видео
+ Ñ ÐºÐ¾ÑÑÑиÑиенÑом ÑооÑноÑÐµÐ½Ð¸Ñ ÑÑоÑон пикÑела, оÑлиÑнÑм Ð¾Ñ 1. Так ÑÑо Ðам
+ пÑидÑÑÑÑ Ð¼Ð°ÑÑÑабиÑоваÑÑ Ð²Ð¸Ð´ÐµÐ¾ либо в ÑÑоÑÐ¾Ð½Ñ ÑвелиÑÐµÐ½Ð¸Ñ (ÑÑо впÑÑÑÑÑ
+ поÑÑаÑÐ¸Ñ Ð¼Ð½Ð¾Ð³Ð¾ меÑÑа на диÑке), либо в ÑÑÑÐ¾Ð½Ñ ÑменÑÑÐµÐ½Ð¸Ñ (ÑÑо пÑиведÑÑ
к поÑеÑе некоÑоÑÑÑ
деÑалей иÑÑоÑника) Ð´Ð»Ñ ÐºÐ²Ð°Ð´ÑаÑизаÑии пикÑелов.
- Ðакой Ð±Ñ ÑпоÑоб ÐÑ Ð½Ðµ вÑбÑали, ÑÑо бÑÐ´ÐµÑ ÐºÑайне неÑÑÑекÑивнÑм, но
+ Ðакой Ð±Ñ ÑпоÑоб ÐÑ Ð½Ðµ вÑбÑали, ÑÑо бÑÐ´ÐµÑ ÐºÑайне неÑÑÑекÑивнÑм, но
не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿ÑÑено, еÑли ÐÑ Ñ
оÑиÑе, ÑÑоб ÐаÑе видео воÑпÑоизводилоÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ <application>QuickTime</application> 7.
- <application>MEncoder</application> Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑимениÑÑ Ð½ÐµÐ¾Ð±Ñ
одимое
+ <application>MEncoder</application> Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑимениÑÑ Ð½ÐµÐ¾Ð±Ñ
одимое
ÑвелиÑиваÑÑее или ÑменÑÑаÑÑее маÑÑÑабиÑование, еÑли ÐµÐ¼Ñ ÑказаÑÑ
<option>-vf scale=-10:-1</option> или <option>-vf scale=-1:-10</option>
ÑооÑвеÑÑÑвенно.
- ÐÑо оÑмаÑÑÑабиÑÑÐµÑ ÐаÑе видео до коÑÑекÑной ÑиÑÐ¸Ð½Ñ Ð´Ð»Ñ ÑÑеÑÑнной
- вÑÑоÑÑ, окÑÑглÑнной до ближайÑего множиÑÐµÐ»Ñ 16 Ð´Ð»Ñ Ð¾Ð¿ÑималÑного
+ ÐÑо оÑмаÑÑÑабиÑÑÐµÑ ÐаÑе видео до коÑÑекÑной ÑиÑÐ¸Ð½Ñ Ð´Ð»Ñ ÑÑеÑÑнной
+ вÑÑоÑÑ, окÑÑглÑнной до ближайÑего множиÑÐµÐ»Ñ 16 Ð´Ð»Ñ Ð¾Ð¿ÑималÑного
ÑжаÑиÑ.
- ÐомниÑе, ÑÑо еÑли пÑоизводиÑе обÑезание, Ñо нÑжно ÑпеÑва обÑезаÑÑ, а лиÑÑ Ð·Ð°Ñем
+ ÐомниÑе, ÑÑо еÑли пÑоизводиÑе обÑезание, Ñо нÑжно ÑпеÑва обÑезаÑÑ, а лиÑÑ Ð·Ð°Ñем
маÑÑÑабиÑоваÑÑ:
<screen>-vf crop=720:352:0:62,scale=-10:-1</screen>
@@ -4876,12 +4872,12 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<para>
ÐоÑколÑÐºÑ ÐÑ Ð±ÑдеÑе мÑлÑÑиплекÑиÑоваÑÑ Ð² дÑÑгой конÑейнеÑ, ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ
- вÑегда иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ <option>harddup</option>, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ,
+ вÑегда иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ <option>harddup</option>, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ,
ÑÑо дÑблиÑÑÑÑиеÑÑ ÐºÐ°Ð´ÑÑ Ð±ÑдÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑно дÑблиÑоваÑÑÑÑ Ð² полÑÑенном
видео. Ðез ÑÑой опÑии <application>MEncoder</application> бÑÐ´ÐµÑ Ð¿ÑоÑÑо
ÑаÑполагаÑÑ Ð¼Ð°ÑÐºÐµÑ Ð² видеопоÑоке о Ñом, ÑÑо ÐºÐ°Ð´Ñ Ð±Ñл повÑоÑен, и бÑдеÑ
- полагаÑÑÑÑ Ð½Ð° Ñо, ÑÑо клиенÑÑкое пÑогÑаммное обеÑпеÑение Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ ÐºÐ°Ð´Ñ
- дваждÑ. Ð ÑожалениÑ, ÑÑо "мÑгкое дÑблиÑование" не пеÑеживаеÑ
+ полагаÑÑÑÑ Ð½Ð° Ñо, ÑÑо клиенÑÑкое пÑогÑаммное обеÑпеÑение Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ ÐºÐ°Ð´Ñ
+ дваждÑ. Ð ÑожалениÑ, ÑÑо "мÑгкое дÑблиÑование" не пеÑеживаеÑ
ÑемÑлÑÑиплекÑиÑование, в ÑезÑлÑÑаÑе Ñего аÑдио бÑÐ´ÐµÑ Ð¿Ð¾ÑÑепенно ÑеÑÑÑÑ
ÑинÑ
ÑонизаÑÐ¸Ñ Ñ Ð²Ð¸Ð´ÐµÐ¾.
</para>
@@ -4897,15 +4893,15 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<title>ÐиÑпоÑок</title>
<para>
- Ðак обÑÑно, вÑÐ±Ð¾Ñ Ð±Ð¸ÑпоÑока завиÑÐ¸Ñ Ð¾Ñ ÑеÑ
ниÑеÑкиÑ
ÑвойÑÑв иÑÑ
одного
+ Ðак обÑÑно, вÑÐ±Ð¾Ñ Ð±Ð¸ÑпоÑока завиÑÐ¸Ñ Ð¾Ñ ÑеÑ
ниÑеÑкиÑ
ÑвойÑÑв иÑÑ
одного
маÑеÑиала, как обÑÑÑнÑеÑÑÑ
<link linkend="menc-feat-dvd-mpeg4-resolution-bitrate">здеÑÑ</link>,
как, впÑоÑем, и Ð¾Ñ Ð»Ð¸Ñного вкÑÑа.
- ÐÑÐ¾Ñ ÑилÑм Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½ÐµÐ±Ð¾Ð»ÑÑим колиÑеÑÑвом Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸ болÑÑим
- колиÑеÑÑвом деÑалей, но H.264 видео Ñ
оÑоÑо вÑглÑÐ´Ð¸Ñ Ð½Ð° ÑÑÑеÑÑвенно
+ ÐÑÐ¾Ñ ÑилÑм Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½ÐµÐ±Ð¾Ð»ÑÑим колиÑеÑÑвом Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¸ болÑÑим
+ колиÑеÑÑвом деÑалей, но H.264 видео Ñ
оÑоÑо вÑглÑÐ´Ð¸Ñ Ð½Ð° ÑÑÑеÑÑвенно
менÑÑиÑ
биÑпоÑокаÑ
, Ñем XviD или дÑÑгие MPEG-4 кодеки.
- ÐоÑле длиÑелÑного ÑкÑпеÑименÑиÑованиÑ, авÑÐ¾Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑководÑÑва
- ÑеÑил кодиÑоваÑÑ ÑилÑм на 900 кбиÑ/Ñек, и ÑÑиÑаеÑ, ÑÑо он вÑглÑдиÑ
+ ÐоÑле длиÑелÑного ÑкÑпеÑименÑиÑованиÑ, авÑÐ¾Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑÑководÑÑва
+ ÑеÑил кодиÑоваÑÑ ÑилÑм на 900 кбиÑ/Ñек, и ÑÑиÑаеÑ, ÑÑо он вÑглÑдиÑ
оÑÐµÐ½Ñ Ñ
оÑоÑо. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑменÑÑиÑÑ Ð±Ð¸ÑпоÑок, еÑли Ðам нÑжно ÑоÑ
ÑаниÑÑ
болÑÑе меÑÑа, или ÑвелиÑиÑÑ, еÑли Ðам нÑжно ÑлÑÑÑиÑÑ ÐºÐ°ÑеÑÑво.
</para>
@@ -4916,14 +4912,14 @@ vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf
<title>ÐÑÐ¸Ð¼ÐµÑ ÐºÐ¾Ð´Ð¸ÑованиÑ</title>
<para>
- ТепеÑÑ ÐÑ Ð³Ð¾ÑÐ¾Ð²Ñ Ðº кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾. ÐоÑколÑÐºÑ ÐÑ Ð·Ð°Ð±Ð¾ÑиÑеÑÑ
+ ТепеÑÑ ÐÑ Ð³Ð¾ÑÐ¾Ð²Ñ Ðº кодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾. ÐоÑколÑÐºÑ ÐÑ Ð·Ð°Ð±Ð¾ÑиÑеÑÑ
о каÑеÑÑве, ÐÑ , ÑазÑмееÑÑÑ, бÑдеÑе делаÑÑ Ð´Ð²ÑпÑоÑ
одное кодиÑование.
ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑого ÑокÑаÑÐµÐ½Ð¸Ñ Ð²Ñемени кодиÑованиÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ
опÑÐ¸Ñ <option>turbo</option> пÑи пеÑвом пÑоÑ
оде; ÑÑо ÑменÑÑиÑ
- <option>subq</option> и <option>frameref</option> до 1.
+ <option>subq</option> и <option>frameref</option> до 1.
ЧÑÐ¾Ð±Ñ ÑоÑ
ÑаниÑÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ меÑÑа на диÑке, ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ
- паÑамеÑÑ <option>ss</option> Ð´Ð»Ñ Ð¾ÑÑÐµÐ·Ð°Ð½Ð¸Ñ Ð¿ÐµÑвÑÑ
неÑколÑкиÑ
- ÑекÑнд видео. (Я обнаÑÑжил, ÑÑо, в ÑаÑÑноÑÑи, Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑилÑма
+ паÑамеÑÑ <option>ss</option> Ð´Ð»Ñ Ð¾ÑÑÐµÐ·Ð°Ð½Ð¸Ñ Ð¿ÐµÑвÑÑ
неÑколÑкиÑ
+ ÑекÑнд видео. (Я обнаÑÑжил, ÑÑо, в ÑаÑÑноÑÑи, Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑилÑма
еÑÑÑ 32 ÑекÑÐ½Ð´Ñ ÑиÑÑов и логоÑипов.)
<option>bframes</option> Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ 0 или 1.
оÑÑалÑнÑе опÑии опиÑÐ°Ð½Ñ Ð² Ñазделе <link
@@ -4938,8 +4934,8 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
-oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \
-ofps 24000/1001</screen>
- ÐÑли Ñ ÐÐ°Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿ÑоÑеÑÑоÑÐ½Ð°Ñ Ð¼Ð°Ñина, не ÑпÑÑÑиÑе ÑÐ°Ð½Ñ Ð·Ð½Ð°ÑиÑелÑно
- ÑÑкоÑиÑÑ ÐºÐ¾Ð´Ð¸Ñование задейÑÑвованием
+ ÐÑли Ñ ÐÐ°Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¿ÑоÑеÑÑоÑÐ½Ð°Ñ Ð¼Ð°Ñина, не ÑпÑÑÑиÑе ÑÐ°Ð½Ñ Ð·Ð½Ð°ÑиÑелÑно
+ ÑÑкоÑиÑÑ ÐºÐ¾Ð´Ð¸Ñование задейÑÑвованием
<link linkend="menc-feat-x264-encoding-options-speedquality-threads">
многопоÑоÑного Ñежима <systemitem class="library">x264</systemitem></link>,
добавив <option>threads=auto</option> в <option>x264encopts</option> в
@@ -4947,7 +4943,7 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
</para>
<para>
- ÐÑоÑой пÑоÑ
од вÑполнÑеÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно, за иÑклÑÑением Ñого, ÑÑо Ðам
+ ÐÑоÑой пÑоÑ
од вÑполнÑеÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно, за иÑклÑÑением Ñого, ÑÑо Ðам
нÑжно ÑказаÑÑ Ð²ÑÑ
одной Ñайл и ÑÑÑановиÑÑ <option>pass=2</option>.
<screen>mencoder dvd://1 <emphasis role="bold">-o наÑниÑ.avi</emphasis> -ss 32 -ovc x264 \
@@ -4961,7 +4957,7 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
<para>
ÐолÑÑивÑееÑÑ AVI должно Ñ
оÑоÑо воÑпÑоизводиÑÑÑÑ Ð²
<application>MPlayer</application>, но, конеÑно же,
- <application>QuickTime</application> не ÑÐ¼Ð¾Ð¶ÐµÑ ÐµÐ³Ð¾ воÑпÑоизвеÑÑи,
+ <application>QuickTime</application> не ÑÐ¼Ð¾Ð¶ÐµÑ ÐµÐ³Ð¾ воÑпÑоизвеÑÑи,
Ñ.к. не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ H.264, мÑлÑÑиплекÑиÑованнÑй в AVI.
Так ÑÑо ÑледÑÑÑий Ñаг — ÑемÑлÑÑиплекÑиÑование видео в конÑÐµÐ¹Ð½ÐµÑ MP4.
</para>
@@ -4971,14 +4967,14 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
<title>РемÑлÑÑиплекÑиÑование в MP4</title>
<para>
- СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑпоÑобов ÑемÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ AVI Ñайлов
- в MP4. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ <application>mp4creator</application>,
+ СÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑпоÑобов ÑемÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ AVI Ñайлов
+ в MP4. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ <application>mp4creator</application>,
ÑвлÑÑÑийÑÑ ÑаÑÑÑÑ
<ulink url="http://mpeg4ip.sourceforge.net/">пакеÑа MPEG4IP</ulink>.
</para>
<para>
- СпеÑва демÑлÑÑиплекÑиÑÑйÑе AVI в оÑделÑнÑе аÑдио и видео поÑоки
+ СпеÑва демÑлÑÑиплекÑиÑÑйÑе AVI в оÑделÑнÑе аÑдио и видео поÑоки
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ <application>MPlayer</application>.
<screen>mplayer наÑниÑ.avi -dumpaudio -dumpfile наÑниÑ.aac
@@ -4990,7 +4986,7 @@ mplayer наÑниÑ.avi -dumpvideo -dumpfile наÑниÑ.h264</screen>
</para>
<para>
- ТепеÑÑ Ð¸ÑполÑзÑйÑе <application>mp4creator</application> Ð´Ð»Ñ ÑозданиÑ
+ ТепеÑÑ Ð¸ÑполÑзÑйÑе <application>mp4creator</application> Ð´Ð»Ñ ÑозданиÑ
нового MP4 Ñайла из аÑдио и видео поÑоков.
<screen>mp4creator -create=наÑниÑ.aac наÑниÑ.mp4
@@ -5005,9 +5001,9 @@ mp4creator -create=наÑниÑ.h264 -rate=23.976 наÑниÑ.mp4</screen>
ТепеÑÑ Ñайл <systemitem>наÑниÑ.mp4</systemitem> должен пÑоигÑÑваÑÑÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð»Ñбого <application>QuickTime</application> 7 пÑиложениÑ,
напÑимеÑ, <application>QuickTime Player</application> или
- <application>iTunes</application>.
- ÐÑли ÐÑ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑе пÑоÑмоÑÑ Ð²Ð¸Ð´ÐµÐ¾ в вÑб-бÑаÑзеÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð°
- <application>QuickTime</application>, Ðам Ñакже необÑ
одимо
+ <application>iTunes</application>.
+ ÐÑли ÐÑ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑе пÑоÑмоÑÑ Ð²Ð¸Ð´ÐµÐ¾ в вÑб-бÑаÑзеÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð°
+ <application>QuickTime</application>, Ðам Ñакже необÑ
одимо
модиÑиÑиÑоваÑÑ ÑилÑм Ñаким обÑазом, ÑÑÐ¾Ð±Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½
<application>QuickTime</application> мог наÑаÑÑ ÐµÐ³Ð¾ воÑпÑоизведение
еÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð·Ð°Ð³ÑÑзки. <application>mp4creator</application>
@@ -5017,7 +5013,7 @@ mp4creator -create=наÑниÑ.h264 -rate=23.976 наÑниÑ.mp4</screen>
mp4creator -hint=2 наÑниÑ.mp4
mp4creator -optimize наÑниÑ.mp4</screen>
- ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¿Ð¾Ð»ÑÑеннÑй ÑезÑлÑÑаÑ, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо
+ ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ Ð¿Ð¾Ð»ÑÑеннÑй ÑезÑлÑÑаÑ, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо
вÑпомогаÑелÑнÑе доÑожки бÑли ÑÑпеÑно ÑозданÑ.
<screen>mp4creator -list наÑниÑ.mp4</screen>
@@ -5038,18 +5034,18 @@ mp4creator -optimize наÑниÑ.mp4</screen>
<title>Ðобавление Ñегов меÑаданнÑÑ
</title>
<para>
- ÐÑли ÐÑ Ñ
оÑиÑе добавиÑÑ Ð² видео Ñеги, коÑоÑÑе оÑобÑажаÑÑÑÑ Ð² iTunes, ÐÑ
+ ÐÑли ÐÑ Ñ
оÑиÑе добавиÑÑ Ð² видео Ñеги, коÑоÑÑе оÑобÑажаÑÑÑÑ Ð² iTunes, ÐÑ
можеÑе иÑполÑзоваÑÑ
<ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>.
-
+
<screen>AtomicParsley наÑниÑ.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen>
ÐпÑÐ¸Ñ <option>--metaEnema</option> ÑдалÑÐµÑ Ð»ÑбÑе ÑÑÑеÑÑвÑÑÑие меÑаданнÑе
(<application>mp4creator</application> вÑÑавлÑÐµÑ ÑÐ²Ð¾Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ в Ñег
"ÑÑилиÑа кодиÑованиÑ") и <option>--freefree</option> вÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¼ÐµÑÑо,
оÑÑавÑееÑÑ Ð¾Ñ ÑдалÑннÑÑ
меÑаданнÑÑ
.
- ÐпÑÐ¸Ñ <option>--stik</option> ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñип видео (напÑимеÑ,
- Movie или TV Show), коÑоÑÑй иÑполÑзÑеÑÑÑ iTunes Ð´Ð»Ñ Ð³ÑÑппиÑовки
+ ÐпÑÐ¸Ñ <option>--stik</option> ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñип видео (напÑимеÑ,
+ Movie или TV Show), коÑоÑÑй иÑполÑзÑеÑÑÑ iTunes Ð´Ð»Ñ Ð³ÑÑппиÑовки
ÑодÑÑвеннÑÑ
видеоÑайлов.
ÐпÑÐ¸Ñ <option>--overWrite</option> пеÑезапиÑÑÐ²Ð°ÐµÑ Ð¸ÑÑ
однÑй Ñайл; без неÑ
<application>AtomicParsley</application> ÑоздаÑÑ Ð½Ð¾Ð²Ñй Ñайл Ñ Ð°Ð²ÑомаÑиÑеÑким
@@ -5065,7 +5061,7 @@ mp4creator -optimize наÑниÑ.mp4</screen>
<sect1 id="menc-feat-vcd-dvd">
-<title>ÐÑполÑзование <application>MEncoder</application>
+<title>ÐÑполÑзование <application>MEncoder</application>
Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ VCD/SVCD/DVD-ÑовмеÑÑимÑÑ
Ñайлов.</title>
<sect2 id="menc-feat-vcd-dvd-constraints">
@@ -5074,11 +5070,11 @@ mp4creator -optimize наÑниÑ.mp4</screen>
<para>
<application>MEncoder</application> ÑпоÑобен ÑоздаваÑÑ MPEG ÑÐ°Ð¹Ð»Ñ VCD, SCVD
и DVD ÑоÑмаÑа, иÑполÑзÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ <systemitem class="library">libavcodec</systemitem>.
-ÐÑи ÑÐ°Ð¹Ð»Ñ Ð·Ð°Ñем могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ ÑовмеÑÑно Ñ
+ÐÑи ÑÐ°Ð¹Ð»Ñ Ð·Ð°Ñем могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ ÑовмеÑÑно Ñ
<ulink url="http://www.gnu.org/software/vcdimager/vcdimager.html">vcdimager</ulink>
или
<ulink url="http://dvdauthor.sourceforge.net/">dvdauthor</ulink>
-Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ñков, коÑоÑÑе бÑдÑÑ Ð²Ð¾ÑпÑоизводиÑÑÑÑ Ð½Ð° ÑÑандаÑÑном видео
+Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð´Ð¸Ñков, коÑоÑÑе бÑдÑÑ Ð²Ð¾ÑпÑоизводиÑÑÑÑ Ð½Ð° ÑÑандаÑÑном видео
пÑоигÑÑваÑеле.
</para>
@@ -5112,7 +5108,7 @@ DVD, SVCD, и VCD ÑоÑмаÑÑ Ð¾Ð±Ð»Ð°Ð´Ð°ÑÑ Ð¶ÐµÑÑкими огÑани
<tbody>
<row>
<entry>NTSC DVD</entry>
- <entry>720x480, 704x480, 352x480, 352x240</entry>
+ <entry>720x480, 704x480, 352x480, 352x240</entry>
<entry>MPEG-2</entry>
<entry>9800 кбиÑ/Ñ</entry>
<entry>48000 ÐÑ</entry>
@@ -5125,7 +5121,7 @@ DVD, SVCD, и VCD ÑоÑмаÑÑ Ð¾Ð±Ð»Ð°Ð´Ð°ÑÑ Ð¶ÐµÑÑкими огÑани
<entry>NTSC DVD</entry>
<entry>352x240<footnote id='fn-rare-resolutions'><para>
ÐÑи ÑазÑеÑÐµÐ½Ð¸Ñ Ñедко иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ DVD, поÑколÑÐºÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно низкое
- каÑеÑÑво.</para></footnote></entry>
+ каÑеÑÑво.</para></footnote></entry>
<entry>MPEG-1</entry>
<entry>1856 кбиÑ/Ñ</entry>
<entry>48000 ÐÑ</entry>
@@ -5220,7 +5216,7 @@ DVD, SVCD, и VCD ÑоÑмаÑÑ Ð¾Ð±Ð»Ð°Ð´Ð°ÑÑ Ð¶ÐµÑÑкими огÑани
<title>ÐгÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° ÑÐ°Ð·Ð¼ÐµÑ GOP</title>
<para>
-DVD, VCD, и SVCD Ñакже огÑаниÑиваÑÑ ÐÐ°Ñ Ð¾ÑноÑиÑелÑно низкими ÑазмеÑами
+DVD, VCD, и SVCD Ñакже огÑаниÑиваÑÑ ÐÐ°Ñ Ð¾ÑноÑиÑелÑно низкими ÑазмеÑами
GOP (Group of Pictures, ÐÑÑппа ÐзобÑажений).
ÐÐ»Ñ Ð¼Ð°ÑеÑиала Ñ 30 fps макÑималÑнÑй допÑÑÑимÑй ÑÐ°Ð·Ð¼ÐµÑ GOP Ñавен 18.
ÐÐ»Ñ 25 или 24 fps, макÑимÑм Ñавен 15.
@@ -5325,14 +5321,14 @@ DVD Ñ NTSC Pullup:
<title>СоÑ
Ñанение A/V ÑинÑ
ÑонизаÑии</title>
<para>
-ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑоÑ
ÑанÑÑÑ Ð°Ñдио/видео ÑинÑ
ÑонизаÑÐ¸Ñ Ð½Ð° пÑоÑÑжении вÑего
+ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ ÑоÑ
ÑанÑÑÑ Ð°Ñдио/видео ÑинÑ
ÑонизаÑÐ¸Ñ Ð½Ð° пÑоÑÑжении вÑего
кодиÑованиÑ, <application>MEncoder</application> должен вÑбÑаÑÑваÑÑ Ð¸Ð»Ð¸
дÑблиÑоваÑÑ ÐºÐ°Ð´ÑÑ. ÐÑо доволÑно неплоÑ
о ÑабоÑÐ°ÐµÑ Ð¿Ñи мÑлÑÑиплекÑиÑовании в AVI
Ñайл, но Ñ Ð´ÑÑгими мÑлÑÑиплекÑоÑами, Ñакими как MPEG, поÑÑи гаÑанÑиÑовано
-пÑÐ¸Ð²ÐµÐ´ÐµÑ Ðº наÑÑÑÐµÐ½Ð¸Ñ A/V ÑинÑ
ÑонизаÑии. ÐÐ»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
пÑоблем,
+пÑÐ¸Ð²ÐµÐ´ÐµÑ Ðº наÑÑÑÐµÐ½Ð¸Ñ A/V ÑинÑ
ÑонизаÑии. ÐÐ»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
пÑоблем,
необÑ
одимо добавиÑÑ Ð²Ð¸Ð´ÐµÐ¾ ÑилÑÑÑ <option>harddup</option> в ÐºÐ¾Ð½ÐµÑ ÑепоÑки
ÑилÑÑÑов. ÐополниÑелÑнÑÑ ÑеÑ
ниÑеÑкÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ <option>harddup</option> можно
-найÑи в Ñазделе
+найÑи в Ñазделе
<link linkend="menc-feat-dvd-mpeg4-muxing-filter-issues">УлÑÑÑение
мÑлÑÑиплекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ надежноÑÑи A/V ÑинÑ
ÑонизаÑии</link> или в man ÑÑководÑÑве.
</para>
@@ -5369,8 +5365,8 @@ VCD и SVCD:
<title>Ðведение</title>
<para>
- ÐÑполÑзÑÑ ÑооÑвеÑÑÑвÑÑÑие опÑии, можно пÑименÑÑÑ
- <systemitem class="library">libavcodec</systemitem> Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ VCD/SVCD/DVD
+ ÐÑполÑзÑÑ ÑооÑвеÑÑÑвÑÑÑие опÑии, можно пÑименÑÑÑ
+ <systemitem class="library">libavcodec</systemitem> Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ VCD/SVCD/DVD
ÑовмеÑÑимого видео.
</para>
</sect3>
@@ -5405,7 +5401,7 @@ VCD и SVCD:
<option>mpeg1video</option> Ð´Ð»Ñ VCD;
<option>mpeg2video</option> Ð´Ð»Ñ SVCD;
<option>mpeg2video</option> обÑÑно иÑполÑзÑеÑÑÑ Ð´Ð»Ñ DVD, но ÐÑ Ñакже можеÑе
- иÑполÑзоваÑÑ
+ иÑполÑзоваÑÑ
<option>mpeg1video</option> Ð´Ð»Ñ CIF ÑазÑеÑений.
</para></listitem>
<listitem><para>
@@ -5491,15 +5487,15 @@ keyint=15:vstrict=0:acodec=ac3
<title>РаÑÑиÑеннÑе опÑии</title>
<para>
-ÐÐ»Ñ Ð´Ð¾ÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ вÑÑокого каÑеÑÑва кодиÑованиÑ, ÐÑ Ñакже можеÑе
+ÐÐ»Ñ Ð´Ð¾ÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ вÑÑокого каÑеÑÑва кодиÑованиÑ, ÐÑ Ñакже можеÑе
добавиÑÑ Ð¾Ð¿Ñии lavcopts, ÑлÑÑÑаÑÑие каÑеÑÑво, Ñакие как
<option>trell</option>, <option>mbd=2</option> и дÑÑгие.
-ÐбÑаÑиÑе внимание, ÑÑо <option>qpel</option> и <option>v4mv</option>,
+ÐбÑаÑиÑе внимание, ÑÑо <option>qpel</option> и <option>v4mv</option>,
ÑаÑÑо полезнÑе Ñ MPEG-4, не пÑÐ¸Ð¼ÐµÐ½Ð¸Ð¼Ñ Ðº MPEG-1 или MPEG-2.
Также, еÑли ÐÑ Ñ
оÑиÑе вÑполниÑÑ Ð¾ÑÐµÐ½Ñ Ð²ÑÑококаÑеÑÑвенное кодиÑование
DVD, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм добавление <option>dc=10</option> в lavcopts.
-ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¿Ð¾Ð´Ð°Ð²Ð¸ÑÑ Ð¿Ð¾Ñвление блоков в одноÑодно окÑаÑеннÑÑ
-облаÑÑÑÑ
. ÐÐ¾Ð´Ð²Ð¾Ð´Ñ Ð¸Ñог, Ð²Ð¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð½Ð°ÑÑÑоек lavcopts длÑ
+ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¿Ð¾Ð´Ð°Ð²Ð¸ÑÑ Ð¿Ð¾Ñвление блоков в одноÑодно окÑаÑеннÑÑ
+облаÑÑÑÑ
. ÐÐ¾Ð´Ð²Ð¾Ð´Ñ Ð¸Ñог, Ð²Ð¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð½Ð°ÑÑÑоек lavcopts длÑ
вÑÑококаÑеÑÑвенного DVD:
</para>
@@ -5519,7 +5515,7 @@ vqmin=1:lmin=1:dc=10:vstrict=0
<title>ÐодиÑование звÑка</title>
<para>
-VCD и SVCD поддеÑживаÑÑ Ð·Ð²Ñк MPEG-1 layer II, иÑполÑзÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð·
+VCD и SVCD поддеÑживаÑÑ Ð·Ð²Ñк MPEG-1 layer II, иÑполÑзÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð·
<systemitem class="library">toolame</systemitem>,
<systemitem class="library">twolame</systemitem>,
или MP2 <systemitem class="library">libavcodec</systemitem> кодиÑовÑик.
diff --git a/Makefile b/Makefile
index a7461a0..263f3cd 100644
--- a/Makefile
+++ b/Makefile
@@ -92,8 +92,6 @@ SRCS_COMMON = asxparser.c \
libmpcodecs/dec_video.c \
libmpcodecs/img_format.c \
libmpcodecs/mp_image.c \
- libmpcodecs/native/nuppelvideo.c \
- libmpcodecs/native/rtjpegn.c \
libmpcodecs/native/xa_gsm.c \
libmpcodecs/pullup.c \
libmpcodecs/vd.c \
@@ -102,7 +100,6 @@ SRCS_COMMON = asxparser.c \
libmpcodecs/vd_mpegpes.c \
libmpcodecs/vd_mtga.c \
libmpcodecs/vd_null.c \
- libmpcodecs/vd_nuv.c \
libmpcodecs/vd_raw.c \
libmpcodecs/vd_sgi.c \
libmpcodecs/vf.c \
@@ -187,7 +184,6 @@ SRCS_COMMON = asxparser.c \
libmpdemux/demux_mov.c \
libmpdemux/demux_mpg.c \
libmpdemux/demux_nsv.c \
- libmpdemux/demux_nuv.c \
libmpdemux/demux_pva.c \
libmpdemux/demux_rawaudio.c \
libmpdemux/demux_rawvideo.c \
@@ -600,6 +596,7 @@ SRCS_MPLAYER-$(IVTV) += libao2/ao_ivtv.c libvo/vo_ivtv.c
SRCS_MPLAYER-$(JACK) += libao2/ao_jack.c
SRCS_MPLAYER-$(JOYSTICK) += input/joystick.c
SRCS_MPLAYER-$(JPEG) += libvo/vo_jpeg.c
+SRCS_MPLAYER-$(KVA) += libvo/vo_kva.c
SRCS_MPLAYER-$(LIBMENU) += libmenu/menu.c \
libmenu/menu_chapsel.c \
libmenu/menu_cmdlist.c \
@@ -688,7 +685,7 @@ SRCS_MENCODER-$(FAAC) += libmpcodecs/ae_faac.c
SRCS_MENCODER-$(LIBAVCODEC) += libmpcodecs/ae_lavc.c libmpcodecs/ve_lavc.c
SRCS_MENCODER-$(LIBAVFORMAT) += libmpdemux/muxer_lavf.c
SRCS_MENCODER-$(LIBDV) += libmpcodecs/ve_libdv.c
-SRCS_MENCODER-$(LIBLZO) += libmpcodecs/ve_nuv.c
+SRCS_MENCODER-$(LIBLZO) += libmpcodecs/ve_nuv.c libmpcodecs/native/rtjpegn.c
SRCS_MENCODER-$(MP3LAME) += libmpcodecs/ae_lame.c
SRCS_MENCODER-$(QTX_CODECS_WIN32) += libmpcodecs/ve_qtvideo.c
SRCS_MENCODER-$(TOOLAME) += libmpcodecs/ae_toolame.c
@@ -825,7 +822,7 @@ mplayer$(EXESUF): $(MPLAYER_DEPS)
$(CC) -o $@ $^ $(LDFLAGS_MPLAYER)
codec-cfg$(EXESUF): codec-cfg.c help_mp.h
- $(HOST_CC) -O -DCODECS2HTML $(EXTRA_INC) -o $@ $<
+ $(HOST_CC) -O -DCODECS2HTML -I. -o $@ $<
codecs.conf.h: codec-cfg$(EXESUF) etc/codecs.conf
./$^ > $@
@@ -855,18 +852,19 @@ version.h: version.sh
# Make sure all generated header files are created.
$(DEPS) $(MENCODER_DEPS) $(MPLAYER_DEPS): codecs.conf.h help_mp.h version.h
-libdvdcss/%.o libdvdcss/%.d: CFLAGS += -D__USE_UNIX98 -D_GNU_SOURCE -DVERSION=\"1.2.10\" $(CFLAGS_LIBDVDCSS)
-libdvdnav/%.o libdvdnav/%.d: CFLAGS += -D__USE_UNIX98 -D_GNU_SOURCE -DHAVE_CONFIG_H -DVERSION=\"MPlayer-custom\"
-libdvdread4/%.o libdvdread4/%.d: CFLAGS += -D__USE_UNIX98 -D_GNU_SOURCE -DHAVE_CONFIG_H $(CFLAGS_LIBDVDCSS_DVDREAD)
-libfaad2/%.o libfaad2/%.d: CFLAGS += -Ilibfaad2 -D_GNU_SOURCE -DHAVE_CONFIG_H $(CFLAGS_FAAD_FIXED)
+libdvdcss/%: CFLAGS += -D__USE_UNIX98 -D_GNU_SOURCE -DVERSION=\"1.2.10\" $(CFLAGS_LIBDVDCSS)
+libdvdnav/%: CFLAGS += -D__USE_UNIX98 -D_GNU_SOURCE -DHAVE_CONFIG_H -DVERSION=\"MPlayer-custom\"
+libdvdnav/% stream/stream_dvdnav%: CFLAGS += $(CFLAGS_LIBDVDNAV)
+libdvdread4/%: CFLAGS += -D__USE_UNIX98 -D_GNU_SOURCE -DHAVE_CONFIG_H $(CFLAGS_LIBDVDCSS_DVDREAD)
+libfaad2/%: CFLAGS += -Ilibfaad2 -D_GNU_SOURCE -DHAVE_CONFIG_H $(CFLAGS_FAAD_FIXED)
-loader/% loader/%: CFLAGS += -Iloader -fno-omit-frame-pointer $(CFLAGS_NO_OMIT_LEAF_FRAME_POINTER)
-#loader/%.o loader/%.d: CFLAGS += -Ddbg_printf=__vprintf -DTRACE=__vprintf -DDETAILED_OUT
-loader/win32.o loader/win32.d: CFLAGS += $(CFLAGS_STACKREALIGN)
+loader/%: CFLAGS += -Iloader -fno-omit-frame-pointer $(CFLAGS_NO_OMIT_LEAF_FRAME_POINTER)
+#loader/%: CFLAGS += -Ddbg_printf=__vprintf -DTRACE=__vprintf -DDETAILED_OUT
+loader/win32%: CFLAGS += $(CFLAGS_STACKREALIGN)
-mp3lib/decode_i586.o: CFLAGS += -fomit-frame-pointer
+mp3lib/decode_i586%: CFLAGS += -fomit-frame-pointer
-tremor/%.o tremor/%.d: CFLAGS += $(CFLAGS_TREMOR_LOW)
+tremor/%: CFLAGS += $(CFLAGS_TREMOR_LOW)
vidix/%: CFLAGS += $(CFLAGS_DHAHELPER) $(CFLAGS_SVGALIB_HELPER)
@@ -992,7 +990,7 @@ testsclean:
TOOLS = $(addprefix TOOLS/,alaw-gen asfinfo avi-fix avisubdump compare dump_mp4 movinfo netstream subrip vivodump)
ifdef ARCH_X86
-TOOLS += TOOLS/modify_reg
+TOOLS += TOOLS/fastmemcpybench TOOLS/modify_reg
endif
ALLTOOLS = $(TOOLS) TOOLS/bmovl-test TOOLS/vfw2menc
@@ -1002,7 +1000,7 @@ alltools: $(addsuffix $(EXESUF),$(ALLTOOLS))
toolsclean:
-rm -f $(foreach file,$(ALLTOOLS),$(call ADD_ALL_EXESUFS,$(file)))
- -rm -f TOOLS/fastmem*-* TOOLS/realcodecs/*.so.6.0
+ -rm -f TOOLS/realcodecs/*.so.6.0
TOOLS/bmovl-test$(EXESUF): -lSDL_image
@@ -1019,22 +1017,11 @@ TOOLS/vivodump$(EXESUF): TOOLS/vivodump.c
TOOLS/netstream$(EXESUF) TOOLS/vivodump$(EXESUF): $(subst mplayer.o,mplayer-nomain.o,$(OBJS_MPLAYER)) $(filter-out %mencoder.o,$(OBJS_MENCODER)) $(OBJS_COMMON) $(COMMON_LIBS)
$(CC) $(CFLAGS) -o $@ $^ $(EXTRALIBS_MPLAYER) $(EXTRALIBS_MENCODER) $(COMMON_LDFLAGS)
-fastmemcpybench: TOOLS/fastmemcpybench.c
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem-mmx$(EXESUF) -DNAME=\"mmx\" -DHAVE_MMX
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem-k6$(EXESUF) -DNAME=\"k6\ \" -DHAVE_MMX -DHAVE_AMD3DNOW
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem-k7$(EXESUF) -DNAME=\"k7\ \" -DHAVE_MMX -DHAVE_AMD3DNOW -DHAVE_MMX2
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem-sse$(EXESUF) -DNAME=\"sse\" -DHAVE_MMX -DHAVE_SSE -DHAVE_MMX2
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem2-mmx$(EXESUF) -DNAME=\"mga-mmx\" -DCONFIG_MGA -DHAVE_MMX
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem2-k6$(EXESUF) -DNAME=\"mga-k6\ \" -DCONFIG_MGA -DHAVE_MMX -DHAVE_AMD3DNOW
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem2-k7$(EXESUF) -DNAME=\"mga-k7\ \" -DCONFIG_MGA -DHAVE_MMX -DHAVE_AMD3DNOW -DHAVE_MMX2
- $(CC) $(CFLAGS) $< -o TOOLS/fastmem2-sse$(EXESUF) -DNAME=\"mga-sse\" -DCONFIG_MGA -DHAVE_MMX -DHAVE_SSE -DHAVE_MMX2
-
REAL_SRCS = $(wildcard TOOLS/realcodecs/*.c)
REAL_TARGETS = $(REAL_SRCS:.c=.so.6.0)
realcodecs: $(REAL_TARGETS)
-
-fastmemcpybench realcodecs: CFLAGS += -g
+realcodecs: CFLAGS += -g
%.so.6.0: %.o
ld -shared -o $@ $< -ldl -lc
@@ -1098,18 +1085,17 @@ vidix/dhahelperwin/dhahelper-rc.o: vidix/dhahelperwin/common.ver vidix/dhahelper
vidix/dhahelperwin/base.tmp: vidix/dhahelperwin/dhahelper.o vidix/dhahelperwin/dhahelper-rc.o
$(CC) -Wl,--base-file,$@ -Wl,--entry,_DriverEntry at 8 -nostartfiles \
- -nostdlib -o vidix/dhahelperwin/junk.tmp $^ -lntoskrnl
- -rm -f vidix/dhahelperwin/junk.tmp
+ -nostdlib -o $(@D)/junk.tmp $^ -lntoskrnl
+ -rm -f $(@D)/junk.tmp
vidix/dhahelperwin/temp.exp: vidix/dhahelperwin/base.tmp
- dlltool --dllname vidix/dhahelperwin/dhahelper.sys --base-file $< --output-exp $@
+ dlltool --dllname $(@D)/dhahelper.sys --base-file $< --output-exp $@
vidix/dhahelperwin/dhahelper.sys: vidix/dhahelperwin/temp.exp vidix/dhahelperwin/dhahelper.o vidix/dhahelperwin/dhahelper-rc.o
$(CC) -Wl,--subsystem,native -Wl,--image-base,0x10000 \
-Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 \
-Wl,--entry,_DriverEntry at 8 -Wl,$< -mdll -nostartfiles -nostdlib \
- -o $@ vidix/dhahelperwin/dhahelper.o \
- vidix/dhahelperwin/dhahelper-rc.o -lntoskrnl
+ -o $@ $(@:.sys=.o) $(@:.sys=-rc.o) -lntoskrnl
strip $@
install-dhahelperwin:
diff --git a/TOOLS/binary_codecs.sh b/TOOLS/binary_codecs.sh
index c4ab61c..410bede 100755
--- a/TOOLS/binary_codecs.sh
+++ b/TOOLS/binary_codecs.sh
@@ -1,9 +1,12 @@
#!/bin/sh
set -e
+# avoid insecure tempfile creation
+umask 0022
+
# This script will download binary codecs for MPlayer unto a Debian system.
-# Author: thuglife, mennucc1
+# Author: thuglife, mennucc1
#
CODECDIR=/usr/lib/codecs
@@ -22,23 +25,24 @@ choosemirror ()
{
cd $PREFDIR
- #if [ ! -r mirrors ] || find mirrors -mtime +20 ; then
- echo Downloading mirrors list..
+ #if [ ! -r mirrors ] || find mirrors -mtime +20 ; then
+ echo "Downloading mirrors list"
wget -nv -c -N $MYSITE/mirrors || true
#fi
if [ ! -r bestsites ] || [ mirrors -nt bestsites ] || \
- find bestsites -mtime +20 > /dev/null ; then
- if which netselect > /dev/null ; then
- echo Choosing best mirrors using netselect....
- netselect -s 5 $( cat mirrors ) | awk '{print $2}' > bestsites
+ find bestsites -mtime +20 | grep -q bestsites ; then
+ if which netselect > /dev/null ; then
+ echo Choosing best mirrors using netselect
+ netselect -s 5 -t 5 $( cat mirrors ) | awk '{print $2}' > bestsites
elif which fping > /dev/null ; then
- fping -C 1 $( sed 's#.*//##;s#/.*##' mirrors ) 2>&1 | \
- egrep -v 'bytes.*loss' | sort -n -k3 | \
- grep -v ': *-' | awk '/:/{print $1}' | head -5 > bestsites
+ fping -C 1 $( sed 's#.*//##;s#/.*##' mirrors ) 2>&1 | \
+ egrep -v 'bytes.*loss' | sort -n -k3 | \
+ grep -v ': *-' | awk '/:/{print $1}' | head -5 | ( while read mainsite ; do
+ grep $mainsite $PREFDIR/mirrors ; done ) > bestsites
else
- echo "(If you install 'netselect', it will select the best mirror for you"
+ echo "(If you install 'netselect' or 'fping', it will select the best mirror for you"
echo " you may wish to stop this script and rerun after installation)"
- sleep 5
+ sleep 3
head -3 mirrors > bestsites
fi
fi
@@ -54,24 +58,22 @@ INSTALL () {
cd $CODECDIR/mplayer_binary_codecs
if [ -r $filename ] ; then
- cp $filename $filename.bak
+ cp $filename $filename.bak
fi
- if [ "$url" = @MAINSITE@ ] ; then
- cat $PREFDIR/bestsites | while read mainsite ; do
+ if [ "$url" = @MAINSITE@ ] ; then
+ cat $PREFDIR/bestsites | while read mainsite ; do
echo Downloading $filename from $mainsite ...
- wget -v -c -N $mainsite/$dir/$filename || true
+ wget -c -N $mainsite/$dir/$filename || true
if [ -r "$filename" ] ; then
UNPACK "$filename"
- [ -r $filename.bak ] && rm $filename.bak
return 0
fi
done
else
- wget -v -c -N $url/$dir/$filename || true
- if [ -r "$filename" ] ; then
+ wget -c -N $url/$dir/$filename || true
+ if [ -r "$filename" ] ; then
UNPACK "$filename"
- [ -r $filename.bak ] && rm $filename.bak
return 0
fi
fi
@@ -83,28 +85,41 @@ INSTALL () {
UNPACK ()
{
filename="$1"
- if [ ! -r $filename.bak ] || ! cmp $filename.bak $filename ; then
- echo Installing $filename ...
- if [ -r $filename.list ] ; then
- tr '\n' '\000' < $filename.list | xargs -r0 rm || true
+ if [ -r $filename.bak ] && cmp $filename.bak $filename && [ -r $filename.list ] ; then
+ echo It appears that $filename was already succesfully installed
+ [ -r $filename.bak ] && rm $filename.bak
+ else
+ if grep -q " $filename$" $PREFDIR/MD5SUMS ; then
+ echo Checking MD5 for $filename
+ grep " $filename$" $PREFDIR/MD5SUMS | md5sum -c -
+ else
+ echo Warning: no MD5 for $filename were found. Hit enter to continue.
+ read dummy
+ fi
+ echo Installing $filename ...
+ if [ -r $filename.list ] ; then
+ tr '\n' '\000' < $filename.list | xargs -r0 rm || true
UNLINK $filename.list
rm $filename.list
fi
+ tarfail () { echo FAILED $filename ; rm $filename.list ; exit 1 ; }
+
case "$filename" in
*.tar.gz)
- tar xvzf $filename > $filename.list
+ tar xvzf $filename > $filename.list || tarfail
#rm $filename
;;
*.tgz)
- tar xvzf $filename > $filename.list
+ tar xvzf $filename > $filename.list || tarfail
#rm $filename
;;
*.tar.bz2)
- tar --bzip2 -xvf $filename > $filename.list
+ tar --bzip2 -xvf $filename > $filename.list || tarfail
#rm $filename
;;
esac
+ [ -r $filename.bak ] && rm $filename.bak
LINK $filename.list
echo "Installed $filename Succesfully!"
fi
@@ -135,22 +150,51 @@ fi
case "$1" in
install)
+ if test -x /bin/bzip2 || test -x /usr/bin/bzip2 ; then : ; else
+ echo You need to install bzip2
+ exit 1
+ fi
choosemirror
cd $PREFDIR
- #if [ ! -r codecs_list ] || find codecs_list -mtime +20 ; then
- echo 'Getting codecs list ...'
+ #if [ ! -r codecs_list ] || find codecs_list -mtime +20 ; then
+ echo "Getting codecs list"
wget -nv -c -N $MYSITE/codecs_list || true
#fi
- if grep -q "^$dpkgarch" $PREFDIR/codecs_list ] ; then
+ cd $PREFDIR
+ echo Downloading MD5 sums from main site
+ [ -r MD5SUMS ] && mv MD5SUMS MD5SUMS.bak
+ if wget -nv -N http://www.mplayerhq.hu/MPlayer/releases/codecs/MD5SUMS ; then
+ [ -r MD5SUMS.bak ] && rm MD5SUMS.bak
+ else
+ echo "failed"
+ if [ -r MD5SUMS.bak ] ; then
+ echo "trying to use backup"
+ mv MD5SUMS.bak MD5SUMS
+ fi
+ fi
+
+ if grep -q "^$dpkgarch" $PREFDIR/codecs_list ; then
egrep -v "^[[:space:]]*(#|$)" $PREFDIR/codecs_list | \
while read arch url dir file info ; do
if [ "$dpkgarch" = "$arch" ]; then
- echo Installing $file $info...
- INSTALL "$url" "$dir" "$file"
- n=1
+ echo Downloading and installing $file $info...
+ INSTALL "$url" "$dir" "$file"
fi
done
+ needlibstd=no
+ test "$dpkgarch" = "powerpc" && needlibstd=yes
+ test "$dpkgarch" = "i386" && needlibstd=yes
+ if test "$needlibstd" = "yes" && ! test -r /usr/lib/libstdc++.so.5 ; then
+ echo "Warning: you need to install libstdc++ 5 libraries"
+ echo -n "Do it now? "
+ read R
+ case $R in
+ y*) apt-get install libstdc++5 ;;
+ *) echo "If you change your mind, use the command"
+ echo " apt-get install libstdc++5" ;;
+ esac
+ fi
else
echo "Sorry, no codecs for your arch '$dpkgarch'. Sorry dude :("
exit 1
diff --git a/TOOLS/fastmemcpybench.c b/TOOLS/fastmemcpybench.c
index 2d8ac2b..35946d8 100644
--- a/TOOLS/fastmemcpybench.c
+++ b/TOOLS/fastmemcpybench.c
@@ -1,14 +1,12 @@
/*
- fastmemcpybench.c used to benchmark fastmemcpy.h code from libvo.
-
- Note: this code can not be used on PentMMX-PII because they contain
- a bug in rdtsc. For Intel processors since P6(PII) rdpmc should be used
- instead. For PIII it's disputable and seems bug was fixed but I don't
- tested it.
+ * benchmark tool for fast_memcpy code from libvo
+ *
+ * NOTE: This code can not be used on Pentium MMX / II because they contain
+ * a bug in rdtsc. For Intel processors since P6(PII) rdpmc should be used
+ * instead. For PIII it's disputable and it seems the bug was fixed but this
+ * was not confirmed through testing.
*/
-/* According to Uoti this code is broken. */
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -19,6 +17,92 @@
#include <sys/time.h>
#include <inttypes.h>
+#include "config.h"
+#include "cpudetect.h"
+
+#define BLOCK_SIZE 4096
+#define CONFUSION_FACTOR 0
+
+#if HAVE_MMX
+#define COMPILE_MMX
+#endif
+
+#if HAVE_MMX2
+#define COMPILE_MMX2
+#endif
+
+#if HAVE_AMD3DNOW
+#define COMPILE_AMD3DNOW
+#endif
+
+#if HAVE_SSE
+#define COMPILE_SSE
+#endif
+
+#ifdef COMPILE_MMX
+#undef RENAME
+#undef HAVE_MMX
+#undef HAVE_MMX2
+#undef HAVE_AMD3DNOW
+#undef HAVE_SSE
+#undef HAVE_SSE2
+#define HAVE_MMX 1
+#define HAVE_MMX2 0
+#define HAVE_AMD3DNOW 0
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define RENAME(a) a ## _MMX
+#include "libvo/aclib_template.c"
+#endif
+
+#ifdef COMPILE_MMX2
+#undef RENAME
+#undef HAVE_MMX
+#undef HAVE_MMX2
+#undef HAVE_AMD3DNOW
+#undef HAVE_SSE
+#undef HAVE_SSE2
+#define HAVE_MMX 1
+#define HAVE_MMX2 1
+#define HAVE_AMD3DNOW 0
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define RENAME(a) a ## _MMX2
+#include "libvo/aclib_template.c"
+#endif
+
+#ifdef COMPILE_AMD3DNOW
+#undef RENAME
+#undef HAVE_MMX
+#undef HAVE_MMX2
+#undef HAVE_AMD3DNOW
+#undef HAVE_SSE
+#undef HAVE_SSE2
+#define HAVE_MMX 1
+#define HAVE_MMX2 0
+#define HAVE_AMD3DNOW 1
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define RENAME(a) a ## _3DNow
+#include "libvo/aclib_template.c"
+#endif
+
+#ifdef COMPILE_SSE
+#undef RENAME
+#undef HAVE_MMX
+#undef HAVE_MMX2
+#undef HAVE_AMD3DNOW
+#undef HAVE_SSE
+#undef HAVE_SSE2
+#define HAVE_MMX 1
+#define HAVE_MMX2 1
+#define HAVE_AMD3DNOW 0
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define RENAME(a) a ## _SSE
+#include "libvo/aclib_template.c"
+#endif
+
//#define ARR_SIZE 100000
#define ARR_SIZE (1024*768*2)
@@ -27,50 +111,48 @@
#include "drivers/mga_vid.h"
static mga_vid_config_t mga_vid_config;
-static unsigned char* frame=NULL;
+static unsigned char* frame = NULL;
static int f;
static int mga_init(void)
{
- f = open("/dev/mga_vid",O_RDWR);
- if(f == -1)
- {
- fprintf(stderr,"Couldn't open /dev/mga_vid\n");
- return -1;
- }
-
- mga_vid_config.num_frames=1;
- mga_vid_config.frame_size=ARR_SIZE;
- mga_vid_config.format=MGA_VID_FORMAT_YUY2;
-
- mga_vid_config.colkey_on=0;
- mga_vid_config.src_width = 640;
- mga_vid_config.src_height= 480;
- mga_vid_config.dest_width = 320;
- mga_vid_config.dest_height= 200;
- mga_vid_config.x_org= 0;
- mga_vid_config.y_org= 0;
-
- mga_vid_config.version=MGA_VID_VERSION;
- if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config))
- {
- perror("Error in mga_vid_config ioctl()");
- printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
- exit(1);
- }
- ioctl(f,MGA_VID_ON,0);
-
- frame = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,f,0);
- if(!frame){
- printf("Can't mmap mga frame\n");
- exit(1);
- }
-
- //clear the buffer
- //memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
-
- return 0;
-
+ f = open("/dev/mga_vid", O_RDWR);
+ if (f == -1) {
+ fprintf(stderr, "Couldn't open /dev/mga_vid.\n");
+ return -1;
+ }
+
+ mga_vid_config.num_frames = 1;
+ mga_vid_config.frame_size = ARR_SIZE;
+ mga_vid_config.format = MGA_VID_FORMAT_YUY2;
+
+ mga_vid_config.colkey_on = 0;
+ mga_vid_config.src_width = 640;
+ mga_vid_config.src_height = 480;
+ mga_vid_config.dest_width = 320;
+ mga_vid_config.dest_height = 200;
+ mga_vid_config.x_org = 0;
+ mga_vid_config.y_org = 0;
+
+ mga_vid_config.version = MGA_VID_VERSION;
+ if (ioctl(f, MGA_VID_CONFIG, &mga_vid_config)) {
+ perror("Error in mga_vid_config ioctl()");
+ printf("Your mga_vid driver version is incompatible with this MPlayer version!\n");
+ exit(1);
+ }
+ ioctl(f, MGA_VID_ON, 0);
+
+ frame = (char*)mmap(0, mga_vid_config.frame_size*mga_vid_config.num_frames,
+ PROT_WRITE,MAP_SHARED, f, 0);
+ if (!frame) {
+ printf("Can't mmap MGA frame.\n");
+ exit(1);
+ }
+
+ //clear the buffer
+ //memset(frames[0], 0x80, mga_vid_config.frame_size*mga_vid_config.num_frames);
+
+ return 0;
}
#endif
@@ -78,45 +160,68 @@ static int mga_init(void)
// Returns current time in microseconds
static unsigned int GetTimer(void)
{
- struct timeval tv;
- struct timezone tz;
-// float s;
- gettimeofday(&tv,&tz);
-// s=tv.tv_usec;s*=0.000001;s+=tv.tv_sec;
- return tv.tv_sec * 1000000 + tv.tv_usec;
-}
-
-static inline unsigned long long int read_tsc( void )
+ struct timeval tv;
+ struct timezone tz;
+ //float s;
+ gettimeofday(&tv, &tz);
+ //s = tv.tv_usec; s *= 0.000001; s += tv.tv_sec;
+ return tv.tv_sec * 1000000 + tv.tv_usec;
+}
+
+static inline unsigned long long int read_tsc(void)
{
- unsigned long long int retval;
- __asm__ volatile ("rdtsc":"=A"(retval)::"memory");
- return retval;
+ unsigned long long int retval;
+ __asm__ volatile ("rdtsc":"=A" (retval)::"memory");
+ return retval;
}
-unsigned char __attribute__((aligned(4096)))arr1[ARR_SIZE],arr2[ARR_SIZE];
+unsigned char __attribute__((aligned(4096)))arr1[ARR_SIZE], arr2[ARR_SIZE];
-int main( void )
+int main(void)
{
- unsigned long long int v1,v2;
- unsigned char * marr1,*marr2;
- int i;
- unsigned int t;
+ unsigned long long int v1, v2;
+ unsigned char *marr1, *marr2;
+ int i;
+ unsigned int t;
#ifdef CONFIG_MGA
- mga_init();
- marr1 = &frame[3];
+ mga_init();
+ marr1 = &frame[3];
#else
- marr1 = &arr1[3];
+ marr1 = &arr1[0];
+#endif
+ marr2 = &arr2[0];
+
+ for (i = 0; i < ARR_SIZE - 16; i++)
+ marr1[i] = marr2[i] = i;
+
+#define testblock(func, name) \
+ t = GetTimer(); \
+ v1 = read_tsc(); \
+ for (i = 0; i < 100; i++) \
+ func(marr1, marr2, ARR_SIZE - 16); \
+ v2 = read_tsc(); \
+ t = GetTimer() - t; \
+ /* ARR_SIZE*100 / (1024*1024) / (t/1000000) = ARR_SIZE*95.36743 / t */ \
+ printf(name "CPU clocks=%llu = %dus (%5.3ffps) %5.1fMB/s\n", v2-v1, t, \
+ 100000000.0f / (float)t, (float)ARR_SIZE*95.36743f / (float)t);
+
+ testblock(memcpy, "libc: ");
+
+#if HAVE_MMX
+ testblock(fast_memcpy_MMX, "MMX: ");
#endif
- marr2 = &arr2[9];
-
- for(i=0; i<ARR_SIZE-16; i++) marr1[i] = marr2[i] = i;
-
- t=GetTimer();
- v1 = read_tsc();
- for(i=0;i<100;i++) memcpy(marr1,marr2,ARR_SIZE-16);
- v2 = read_tsc();
- t=GetTimer()-t;
- // ARR_SIZE*100/(1024*1024)/(t/1000000) = ARR_SIZE*95.36743/t
- printf(NAME": cpu clocks=%llu = %dus (%5.3ffps) %5.1fMB/s\n",v2-v1,t,100000000.0f/(float)t,(float)ARR_SIZE*95.36743f/(float)t);
- return 0;
+
+#if HAVE_AMD3DNOW
+ testblock(fast_memcpy_3DNow, "3DNow!: ");
+#endif
+
+#if HAVE_MMX2
+ testblock(fast_memcpy_MMX2, "MMX2: ");
+#endif
+
+#if HAVE_SSE
+ testblock(fast_memcpy_SSE, "SSE: ");
+#endif
+
+ return 0;
}
diff --git a/configure b/configure
index e035652..37f242c 100755
--- a/configure
+++ b/configure
@@ -61,13 +61,13 @@ compile_check() {
echo >> "$TMPLOG"
cat "$1" >> "$TMPLOG"
echo >> "$TMPLOG"
- echo "$_cc $CFLAGS $_inc_extra $_ld_static $_ld_extra $_libs_mplayer $_libs_mencoder -o $TMPEXE $@" >> "$TMPLOG"
+ echo "$_cc $CFLAGS $extra_cflags $_ld_static $extra_ldflags $libs_mplayer $libs_mencoder -o $TMPEXE $@" >> "$TMPLOG"
rm -f "$TMPEXE"
- $_cc $CFLAGS $_inc_extra $_ld_static $_ld_extra $_libs_mplayer $_libs_mencoder -o "$TMPEXE" "$@" >> "$TMPLOG" 2>&1
- TMP="$?"
+ $_cc $CFLAGS $extra_cflags $_ld_static $extra_ldflags $libs_mplayer $libs_mencoder -o "$TMPEXE" "$@" >> "$TMPLOG" 2>&1
+ TMPRES="$?"
echo >> "$TMPLOG"
echo >> "$TMPLOG"
- return "$TMP"
+ return "$TMPRES"
}
cc_check() {
@@ -85,10 +85,10 @@ yasm_check() {
echo "$_yasm $YASMFLAGS -o $TMPEXE $TMPS $@" >> "$TMPLOG"
rm -f "$TMPEXE"
$_yasm $YASMFLAGS -o "$TMPEXE" "$TMPS" "$@" >> "$TMPLOG" 2>&1
- TMP="$?"
+ TMPRES="$?"
echo >> "$TMPLOG"
echo >> "$TMPLOG"
- return "$TMP"
+ return "$TMPRES"
}
tmp_run() {
@@ -366,6 +366,7 @@ Video output:
--enable-vesa enable VESA video output [autodetect]
--enable-svga enable SVGAlib video output [autodetect]
--enable-sdl enable SDL video output [autodetect]
+ --enable-kva enable KVA video output [autodetect]
--enable-aa enable AAlib video output [autodetect]
--enable-caca enable CACA video output [autodetect]
--enable-ggi enable GGI video output [autodetect]
@@ -463,13 +464,12 @@ Advanced options:
--enable-crash-debug enable automatic gdb attach on crash [disable]
--enable-dynamic-plugins enable dynamic A/V plugins [disable]
-Use these options if autodetection fails (Options marked with (*) accept
-multiple paths separated by ':'):
+Use these options if autodetection fails:
+ --extra-cflags=FLAGS extra CFLAGS
+ --extra-ldflags=FLAGS extra LDFLAGS
--extra-libs=FLAGS extra linker flags
--extra-libs-mplayer=FLAGS extra linker flags for MPlayer
--extra-libs-mencoder=FLAGS extra linker flags for MEncoder
- --with-extraincdir=DIR extra header search paths in DIR (*)
- --with-extralibdir=DIR extra linker search paths in DIR (*)
--with-xvmclib=NAME adapter-specific library name (e.g. XvMCNVIDIA)
--with-freetype-config=PATH path to freetype-config
@@ -556,6 +556,7 @@ _xv=auto
_xvmc=no #auto when complete
_vdpau=auto
_sdl=auto
+_kva=auto
_direct3d=auto
_directx=auto
_win32waveout=auto
@@ -763,12 +764,6 @@ for ac_option do
--realcodecsdir=*)
_realcodecsdir=`echo $ac_option | cut -d '=' -f 2`
;;
- --with-extraincdir=*)
- _inc_extra=-I`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -I,g'`
- ;;
- --with-extralibdir=*)
- _ld_extra=-L`echo $ac_option | cut -d '=' -f 2 | sed 's,:, -L,g'`
- ;;
--with-install=*)
_install=`echo $ac_option | cut -d '=' -f 2 `
@@ -799,14 +794,20 @@ for ac_option do
_dvdreadconfig=`echo $ac_option | cut -d '=' -f 2`
;;
+ --extra-cflags=*)
+ extra_cflags=`echo $ac_option | cut -d '=' -f 2-`
+ ;;
+ --extra-ldflags=*)
+ extra_ldflags=`echo $ac_option | cut -d '=' -f 2-`
+ ;;
--extra-libs=*)
- _extra_libs=`echo $ac_option | cut -d '=' -f 2`
+ extra_libs=`echo $ac_option | cut -d '=' -f 2`
;;
--extra-libs-mplayer=*)
- _libs_mplayer=`echo $ac_option | cut -d '=' -f 2`
+ libs_mplayer=`echo $ac_option | cut -d '=' -f 2`
;;
--extra-libs-mencoder=*)
- _libs_mencoder=`echo $ac_option | cut -d '=' -f 2`
+ libs_mencoder=`echo $ac_option | cut -d '=' -f 2`
;;
--target=*)
@@ -888,6 +889,8 @@ for ac_option do
--disable-vdpau) _vdpau=no ;;
--enable-sdl) _sdl=yes ;;
--disable-sdl) _sdl=no ;;
+ --enable-kva) _kva=yes ;;
+ --disable-kva) _kva=no ;;
--enable-direct3d) _direct3d=yes ;;
--disable-direct3d) _direct3d=no ;;
--enable-directx) _directx=yes ;;
@@ -1408,27 +1411,27 @@ if test "$_runtime_cpudetection" = yes && ! x86 && ! ppc; then
fi
-_inc_extra="-I. $_inc_extra"
+extra_cflags="-I. $extra_cflags"
_timer=timer-linux.c
_getch=getch2.c
if freebsd ; then
- _ld_extra="$_ld_extra -L/usr/local/lib"
- _inc_extra="$_inc_extra -I/usr/local/include"
+ extra_ldflags="$extra_ldflags -L/usr/local/lib"
+ extra_cflags="$extra_cflags -I/usr/local/include"
fi
if netbsd || dragonfly ; then
- _ld_extra="$_ld_extra -L/usr/pkg/lib"
- _inc_extra="$_inc_extra -I/usr/pkg/include"
+ extra_ldflags="$extra_ldflags -L/usr/pkg/lib"
+ extra_cflags="$extra_cflags -I/usr/pkg/include"
fi
if darwin; then
- _ld_extra="$_ld_extra -L/usr/local/lib"
- _inc_extra="$_inc_extra -I/usr/local/include"
+ extra_ldflags="$extra_ldflags -L/usr/local/lib"
+ extra_cflags="$extra_cflags -I/usr/local/include"
_timer=timer-darwin.c
fi
if aix ; then
- _ld_extra="$_ld_extra -lC"
+ extra_ldflags="$extra_ldflags -lC"
fi
if irix ; then
@@ -1440,7 +1443,7 @@ fi
if win32 ; then
_exesuf=".exe"
# -lwinmm is always needed for osdep/timer-win2.c
- _ld_extra="$_ld_extra -lwinmm"
+ extra_ldflags="$extra_ldflags -lwinmm"
_pe_executable=yes
_timer=timer-win2.c
_priority=yes
@@ -1461,7 +1464,7 @@ if amigaos ; then
fi
if qnx ; then
- _ld_extra="$_ld_extra -lph"
+ extra_ldflags="$extra_ldflags -lph"
fi
if os2 ; then
@@ -1519,7 +1522,7 @@ if test "`basename $_cc`" = "icc" || test "`basename $_cc`" = "ecc"; then
cc_version="v. ?.??, bad"
cc_fail=yes
;;
- 10.1|11.0)
+ 10.1|11.0|11.1)
cc_version="$cc_version, ok"
;;
*)
@@ -1703,6 +1706,7 @@ fi
def_fast_64bit='#define HAVE_FAST_64BIT 0'
+def_fast_unaligned='#define HAVE_FAST_UNALIGNED 0'
_arch_all='X86 X86_32 X86_64 IA64 SPARC ARM AVR32 SH4 PPC ALPHA SGI_MIPS PA_RISC S390 S390X VAX BFIN XTENSA GENERIC'
case "$host_arch" in
i[3-9]86|x86|x86pc|k5|k6|k6-2|k6-3|pentium*|athlon*|i586-i686)
@@ -2402,19 +2406,19 @@ elif test -z "$CFLAGS" ; then
CFLAGS="-O2 $_march $_mcpu $_pipe"
else
CFLAGS="-Wall -Wno-switch -Wpointer-arith -Wredundant-decls -O4 $_march $_mcpu $_pipe -ffast-math -fomit-frame-pointer"
- _ld_extra="$_ld_extra -ffast-math"
+ extra_ldflags="$extra_ldflags -ffast-math"
fi
else
_warn_CFLAGS=yes
fi
if test -n "$LDFLAGS" ; then
- _ld_extra="$_ld_extra $LDFLAGS"
+ extra_ldflags="$extra_ldflags $LDFLAGS"
_warn_CFLAGS=yes
elif test "$cc_vendor" = "intel" ; then
- _ld_extra="$_ld_extra -i-static"
+ extra_ldflags="$extra_ldflags -i-static"
fi
if test -n "$CPPFLAGS" ; then
- _inc_extra="$_inc_extra $CPPFLAGS"
+ extra_cflags="$extra_cflags $CPPFLAGS"
_warn_CFLAGS=yes
fi
@@ -2715,7 +2719,7 @@ cat > $TMPC <<EOF
int main(void) { return 0; }
EOF
if cc_check -lposix ; then
- _ld_extra="$_ld_extra -lposix"
+ extra_ldflags="$extra_ldflags -lposix"
echores "yes"
else
echores "no"
@@ -2855,7 +2859,7 @@ _kstat=no
cc_check -lkstat && _kstat=yes
if test "$_kstat" = yes ; then
def_kstat="#define HAVE_LIBKSTAT 1"
- _ld_extra="$_ld_extra -lkstat"
+ extra_ldflags="$extra_ldflags -lkstat"
else
def_kstat="#undef HAVE_LIBKSTAT"
fi
@@ -2871,7 +2875,7 @@ EOF
_posix4=no
cc_check -lposix4 && _posix4=yes
if test "$_posix4" = yes ; then
- _ld_extra="$_ld_extra -lposix4"
+ extra_ldflags="$extra_ldflags -lposix4"
fi
echores "$_posix4"
@@ -3042,7 +3046,7 @@ test $_winsock2_h = no && test $inet_pton = no &&
test $inet_aton = no && _network=no
if test "$_network" = yes ; then
def_network='#define CONFIG_NETWORK 1'
- _ld_extra="$_ld_extra $_ld_sock"
+ extra_ldflags="$extra_ldflags $_ld_sock"
_inputmodules="network $_inputmodules"
else
_noinputmodules="network $_noinputmodules"
@@ -3276,7 +3280,7 @@ fi
echores "$_dynamic_plugins"
-def_threads='#undef HAVE_THREADS'
+def_threads='#define HAVE_THREADS 0'
echocheck "pthread"
if test "$_pthreads" = auto ; then
@@ -3329,10 +3333,10 @@ echores "$_w32threads"
echocheck "rpath"
netbsd &&_rpath=yes
if test "$_rpath" = yes ; then
- for I in `echo $_ld_extra | sed 's/-L//g'` ; do
+ for I in `echo $extra_ldflags | sed 's/-L//g'` ; do
tmp="$tmp ` echo $I | sed 's/.*/ -L& -Wl,-R&/'`"
done
-_ld_extra=$tmp
+extra_ldflags=$tmp
fi
echores "$_rpath"
@@ -3372,7 +3376,7 @@ int main(void) {
EOF
_iconv=no
for _ld_tmp in "" "-liconv" "-liconv $_ld_dl" ; do
- cc_check $_ld_lm $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" && \
+ cc_check $_ld_lm $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" && \
_iconv=yes && break
done
fi
@@ -3533,7 +3537,7 @@ int main(void) { tgetent(NULL, NULL); return 0; }
EOF
_termcap=no
for _ld_tmp in "-lncurses" "-ltinfo" "-ltermcap"; do
- cc_check $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" \
+ cc_check $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" \
&& _termcap=yes && break
done
fi
@@ -3784,7 +3788,7 @@ if test "$_macosx" = yes ; then
int main(void) { return 0; }
EOF
if cc_check -framework CoreAudio; then
- _ld_extra="$_ld_extra -framework CoreAudio -framework AudioUnit -framework AudioToolbox"
+ extra_ldflags="$extra_ldflags -framework CoreAudio -framework AudioUnit -framework AudioToolbox"
_coreaudio=yes
def_coreaudio='#define CONFIG_COREAUDIO 1'
_aomodules="macosx $_aomodules"
@@ -3804,7 +3808,7 @@ int main(void) {
}
EOF
if cc_check -framework Carbon -framework QuickTime; then
- _ld_extra="$_ld_extra -framework Carbon -framework QuickTime"
+ extra_ldflags="$extra_ldflags -framework Carbon -framework QuickTime"
_quartz=yes
def_quartz='#define CONFIG_QUARTZ 1'
_vomodules="quartz $_vomodules"
@@ -3822,7 +3826,7 @@ int main(void) { return 0; }
EOF
if cc_check -framework Carbon -framework QuartzCore -framework OpenGL; then
_vomodules="macosx $_vomodules"
- _ld_extra="$_ld_extra -framework Cocoa -framework QuartzCore -framework OpenGL"
+ extra_ldflags="$extra_ldflags -framework Cocoa -framework QuartzCore -framework OpenGL"
def_corevideo='#define CONFIG_COREVIDEO 1'
_corevideo=yes
else
@@ -3889,7 +3893,7 @@ EOF
fi
if test "$_apple_remote" = yes ; then
def_apple_remote='#define CONFIG_APPLE_REMOTE 1'
- _ld_extra="$_ld_extra -framework IOKit"
+ extra_ldflags="$extra_ldflags -framework IOKit"
else
def_apple_remote='#undef CONFIG_APPLE_REMOTE'
fi
@@ -3936,7 +3940,7 @@ fi
echocheck "Samba support (libsmbclient)"
if test "$_smb" = yes; then
- _ld_extra="$_ld_extra -lsmbclient"
+ extra_ldflags="$extra_ldflags -lsmbclient"
fi
if test "$_smb" = auto; then
_smb=no
@@ -3945,7 +3949,7 @@ if test "$_smb" = auto; then
int main(void) { smbc_opendir("smb://"); return 0; }
EOF
for _ld_tmp in "-lsmbclient" "-lsmbclient $_ld_dl" "-lsmbclient $_ld_dl -lnsl" "-lsmbclient $_ld_dl -lssl -lnsl" ; do
- cc_check $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" && \
+ cc_check $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" && \
_smb=yes && break
done
fi
@@ -4085,7 +4089,7 @@ EOF
for _inc_tmp in "" -I/usr/local/include/directfb \
-I/usr/include/directfb -I/usr/local/include; do
cc_check $_inc_tmp -ldirectfb && _directfb=yes && \
- _inc_extra="$_inc_extra $_inc_tmp" && break
+ extra_cflags="$extra_cflags $_inc_tmp" && break
done
fi
@@ -4100,7 +4104,7 @@ int
dfb_ver = DIRECTFB_MAJOR_VERSION.DIRECTFB_MINOR_VERSION.DIRECTFB_MICRO_VERSION
;
EOF
- if $_cc -E $TMPC $_inc_extra > "$TMPEXE"; then
+ if $_cc -E $TMPC $extra_cflags > "$TMPEXE"; then
_directfb_version=`sed -n 's/^dfb_ver[^0-9]*\(.*\)/\1/p' "$TMPEXE" | tr -d '()'`
_dfb_major=`echo $_directfb_version | cut -d . -f 1`
_dfb_minor=`echo $_directfb_version | cut -d . -f 2`
@@ -4125,7 +4129,7 @@ echores "$_directfb"
if test "$_directfb" = yes ; then
def_directfb='#define CONFIG_DIRECTFB 1'
_vomodules="directfb $_vomodules"
- _libs_mplayer="$_libs_mplayer -ldirectfb"
+ libs_mplayer="$libs_mplayer -ldirectfb"
else
def_directfb='#undef CONFIG_DIRECTFB'
_novomodules="directfb $_novomodules"
@@ -4142,7 +4146,7 @@ fi
echocheck "X11 headers presence"
_x11_headers="no"
_res_comment="check if the dev(el) packages are installed"
- for I in `echo $_inc_extra | sed s/-I//g` /usr/include ; do
+ for I in `echo $extra_cflags | sed s/-I//g` /usr/include ; do
if test -f "$I/X11/Xlib.h" ; then
_x11_headers="yes"
_res_comment=""
@@ -4150,9 +4154,10 @@ echocheck "X11 headers presence"
fi
done
if test $_cross_compile = no; then
- for I in /usr/X11/include /usr/X11R6/include /usr/include/X11R6 /usr/openwin/include ; do
+ for I in /usr/X11/include /usr/X11R7/include /usr/X11R6/include \
+ /usr/include/X11R6 /usr/openwin/include ; do
if test -f "$I/X11/Xlib.h" ; then
- _inc_extra="$_inc_extra -I$I"
+ extra_cflags="$extra_cflags -I$I"
_x11_headers="yes"
_res_comment="using $I"
break
@@ -4169,14 +4174,15 @@ if test "$_x11" = auto && test "$_x11_headers" = yes ; then
#include <X11/Xutil.h>
int main(void) { (void) XCreateWindow(0,0,0,0,0,0,0,0,0,0,0,0); return 0; }
EOF
- for I in "" -L/usr/X11R6/lib -L/usr/lib/X11R6 -L/usr/X11/lib \
- -L/usr/lib32 -L/usr/openwin/lib -L/usr/X11R6/lib64 -L/usr/lib ; do
+ for I in "" -L/usr/X11R7/lib -L/usr/X11R6/lib -L/usr/lib/X11R6 \
+ -L/usr/X11/lib -L/usr/lib32 -L/usr/openwin/lib -L/usr/X11R6/lib64 \
+ -L/usr/lib ; do
if netbsd; then
_ld_tmp="$I -lXext -lX11 $_ld_pthread -Wl,-R`echo $I | sed s/^-L//`"
else
_ld_tmp="$I -lXext -lX11 $_ld_pthread"
fi
- cc_check $_ld_tmp && _libs_mplayer="$_libs_mplayer $_ld_tmp" \
+ cc_check $_ld_tmp && libs_mplayer="$libs_mplayer $_ld_tmp" \
&& _x11=yes && break
done
fi
@@ -4205,7 +4211,7 @@ EOF
fi
if test "$_xss" = yes ; then
def_xss='#define CONFIG_XSS 1'
- _libs_mplayer="$_libs_mplayer -lXss"
+ libs_mplayer="$libs_mplayer -lXss"
else
def_xss='#undef CONFIG_XSS'
fi
@@ -4237,7 +4243,7 @@ if test "$_xdpms4" = yes ; then
echores "yes"
elif test "$_xdpms3" = yes ; then
def_xdpms='#define CONFIG_XDPMS 1'
- _libs_mplayer="$_libs_mplayer -lXdpms"
+ libs_mplayer="$libs_mplayer -lXdpms"
_res_comment="using Xdpms 3"
echores "yes"
else
@@ -4262,7 +4268,7 @@ fi
if test "$_xv" = yes ; then
def_xv='#define CONFIG_XV 1'
- _libs_mplayer="$_libs_mplayer -lXv"
+ libs_mplayer="$libs_mplayer -lXv"
_vomodules="xv $_vomodules"
else
def_xv='#undef CONFIG_XV'
@@ -4289,7 +4295,7 @@ EOF
fi
if test "$_xvmc" = yes ; then
def_xvmc='#define CONFIG_XVMC 1'
- _libs_mplayer="$_libs_mplayer -lXvMC -l$_xvmclib"
+ libs_mplayer="$libs_mplayer -lXvMC -l$_xvmclib"
_vomodules="xvmc $_vomodules"
_res_comment="using $_xvmclib"
else
@@ -4306,7 +4312,7 @@ if test "$_vdpau" = auto ; then
if test "$_dl" = yes ; then
cat > $TMPC <<EOF
#include <vdpau/vdpau_x11.h>
-int main(void) {return 0;}
+int main(void) {return VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE;}
EOF
cc_check && _vdpau=yes
fi
@@ -4335,7 +4341,7 @@ fi
if test "$_xinerama" = yes ; then
def_xinerama='#define CONFIG_XINERAMA 1'
- _libs_mplayer="$_libs_mplayer -lXinerama"
+ libs_mplayer="$libs_mplayer -lXinerama"
else
def_xinerama='#undef CONFIG_XINERAMA'
fi
@@ -4359,7 +4365,7 @@ EOF
fi
if test "$_vm" = yes ; then
def_vm='#define CONFIG_XF86VM 1'
- _libs_mplayer="$_libs_mplayer -lXxf86vm"
+ libs_mplayer="$libs_mplayer -lXxf86vm"
else
def_vm='#undef CONFIG_XF86VM'
fi
@@ -4421,7 +4427,7 @@ elif test "$_dga2" = yes ; then
fi
if test "$_dga" = yes ; then
def_dga='#define CONFIG_DGA 1'
- _libs_mplayer="$_libs_mplayer -lXxf86dga"
+ libs_mplayer="$libs_mplayer -lXxf86dga"
_vomodules="dga $_vomodules"
else
_novomodules="dga $_novomodules"
@@ -4466,14 +4472,14 @@ EOF
_gl=no
if cc_check -lGL $_ld_lm ; then
_gl=yes
- _libs_mplayer="$_libs_mplayer -lGL $_ld_dl"
+ libs_mplayer="$libs_mplayer -lGL $_ld_dl"
elif cc_check -lGL $_ld_lm $_ld_pthread ; then
_gl=yes
- _libs_mplayer="$_libs_mplayer -lGL $_ld_pthread $_ld_dl"
+ libs_mplayer="$libs_mplayer -lGL $_ld_pthread $_ld_dl"
elif cc_check -DGL_WIN32 -lopengl32 ; then
_gl=yes
_gl_win32=yes
- _libs_mplayer="$_libs_mplayer -lopengl32 -lgdi32"
+ libs_mplayer="$libs_mplayer -lopengl32 -lgdi32"
fi
else
_gl=no
@@ -4572,7 +4578,7 @@ fi
if test "$_vidix" = yes && win32; then
winvidix=yes
_vomodules="winvidix $_vomodules"
- _libs_mplayer="$_libs_mplayer -lgdi32"
+ libs_mplayer="$libs_mplayer -lgdi32"
else
_novomodules="winvidix $_novomodules"
fi
@@ -4624,7 +4630,7 @@ EOF
fi
if test "$_ggi" = yes ; then
def_ggi='#define CONFIG_GGI 1'
- _libs_mplayer="$_libs_mplayer -lggi"
+ libs_mplayer="$libs_mplayer -lggi"
_vomodules="ggi $_vomodules"
else
def_ggi='#undef CONFIG_GGI'
@@ -4646,7 +4652,7 @@ fi
# like --disable-ggi --enable-ggiwmh
if test "$_ggi" = yes && test "$_ggiwmh" = yes ; then
def_ggiwmh='#define CONFIG_GGIWMH 1'
- _libs_mplayer="$_libs_mplayer -lggiwmh"
+ libs_mplayer="$libs_mplayer -lggiwmh"
else
_ggiwmh=no
def_ggiwmh='#undef CONFIG_GGIWMH'
@@ -4671,13 +4677,13 @@ return 0; }
EOF
_aa=no
for _ld_tmp in "-laa" ; do
- cc_check $_ld_tmp && _libs_mplayer="$_libs_mplayer $_ld_tmp" && _aa=yes && break
+ cc_check $_ld_tmp && libs_mplayer="$libs_mplayer $_ld_tmp" && _aa=yes && break
done
fi
if test "$_aa" = yes ; then
def_aa='#define CONFIG_AA 1'
if cygwin ; then
- _libs_mplayer="$_libs_mplayer `aalib-config --libs | cut -d " " -f 2,5,6`"
+ libs_mplayer="$libs_mplayer `aalib-config --libs | cut -d " " -f 2,5,6`"
fi
_vomodules="aa $_vomodules"
else
@@ -4703,8 +4709,8 @@ EOF
fi
if test "$_caca" = yes ; then
def_caca='#define CONFIG_CACA 1'
- _inc_extra="$_inc_extra `caca-config --cflags`"
- _libs_mplayer="$_libs_mplayer `caca-config --libs`"
+ extra_cflags="$extra_cflags `caca-config --cflags`"
+ libs_mplayer="$libs_mplayer `caca-config --libs`"
_vomodules="caca $_vomodules"
else
def_caca='#undef CONFIG_CACA'
@@ -4724,7 +4730,7 @@ EOF
fi
if test "$_svga" = yes ; then
def_svga='#define CONFIG_SVGALIB 1'
- _libs_mplayer="$_libs_mplayer -lvga"
+ libs_mplayer="$libs_mplayer -lvga"
_vomodules="svga $_vomodules"
else
def_svga='#undef CONFIG_SVGALIB'
@@ -4767,7 +4773,7 @@ int main(void) {return 0;}
EOF
for _inc_tmp in "" "-I/usr/src/DVB/ost/include" ; do
cc_check $_inc_tmp && _dvb=yes && \
- _inc_extra="$_inc_extra $_inc_tmp" && break
+ extra_cflags="$extra_cflags $_inc_tmp" && break
done
fi
echores "$_dvb"
@@ -4796,7 +4802,7 @@ int main(void) {return 0;}
EOF
for _inc_tmp in "" "-I/usr/src/DVB/include" ; do
cc_check $_inc_tmp && _dvbhead=yes && \
- _inc_extra="$_inc_extra $_inc_tmp" && break
+ extra_cflags="$extra_cflags $_inc_tmp" && break
done
fi
echores "$_dvbhead"
@@ -4856,7 +4862,7 @@ fi
echores "$_png"
if test "$_png" = yes ; then
def_png='#define CONFIG_PNG 1'
- _ld_extra="$_ld_extra -lpng -lz"
+ extra_ldflags="$extra_ldflags -lpng -lz"
_vomodules="png $_vomodules"
else
def_png='#undef CONFIG_PNG'
@@ -4880,7 +4886,7 @@ fi
echores "$_mng"
if test "$_mng" = yes ; then
def_mng='#define CONFIG_MNG 1'
- _ld_extra="$_ld_extra -lmng -lz"
+ extra_ldflags="$extra_ldflags -lmng -lz"
else
def_mng='#undef CONFIG_MNG'
fi
@@ -4907,7 +4913,7 @@ echores "$_jpeg"
if test "$_jpeg" = yes ; then
def_jpeg='#define CONFIG_JPEG 1'
_vomodules="jpeg $_vomodules"
- _ld_extra="$_ld_extra -ljpeg"
+ extra_ldflags="$extra_ldflags -ljpeg"
else
def_jpeg='#undef CONFIG_JPEG'
_novomodules="jpeg $_novomodules"
@@ -4967,7 +4973,7 @@ if test "$_gif" = yes ; then
_vomodules="gif89a $_vomodules"
_res_comment="old version, some encoding functions disabled"
def_gif_4='#undef CONFIG_GIF_4'
- _ld_extra="$_ld_extra $_ld_gif"
+ extra_ldflags="$extra_ldflags $_ld_gif"
cat > $TMPC << EOF
#include <signal.h>
@@ -5026,7 +5032,7 @@ EOF
fi
if test "$_vesa" = yes ; then
def_vesa='#define CONFIG_VESA 1'
- _libs_mplayer="$_libs_mplayer -lvbe -llrmi"
+ libs_mplayer="$libs_mplayer -lvbe -llrmi"
_vomodules="vesa $_vomodules"
else
def_vesa='#undef CONFIG_VESA'
@@ -5075,14 +5081,14 @@ fi
if test "$_sdl" = yes ; then
def_sdl='#define CONFIG_SDL 1'
if cygwin ; then
- _libs_mplayer="$_libs_mplayer `$_sdlconfig --libs | cut -d " " -f 1,4,6 | sed s/no-cygwin/cygwin/`"
- _inc_extra="$_inc_extra `$_sdlconfig --cflags | cut -d " " -f 1,5,6 | sed s/no-cygwin/cygwin/`"
+ libs_mplayer="$libs_mplayer `$_sdlconfig --libs | cut -d " " -f 1,4,6 | sed s/no-cygwin/cygwin/`"
+ extra_cflags="$extra_cflags `$_sdlconfig --cflags | cut -d " " -f 1,5,6 | sed s/no-cygwin/cygwin/`"
elif mingw32 ; then
- _libs_mplayer="$_libs_mplayer `$_sdlconfig --libs | sed -e s/-mwindows// -e s/-lmingw32//`"
- _inc_extra="$_inc_extra `$_sdlconfig --cflags | sed s/-Dmain=SDL_main//`"
+ libs_mplayer="$libs_mplayer `$_sdlconfig --libs | sed -e s/-mwindows// -e s/-lmingw32//`"
+ extra_cflags="$extra_cflags `$_sdlconfig --cflags | sed s/-Dmain=SDL_main//`"
else
- _libs_mplayer="$_libs_mplayer `$_sdlconfig --libs`"
- _inc_extra="$_inc_extra `$_sdlconfig --cflags | sed s/-D_GNU_SOURCE=1//`"
+ libs_mplayer="$libs_mplayer `$_sdlconfig --libs`"
+ extra_cflags="$extra_cflags `$_sdlconfig --cflags | sed s/-D_GNU_SOURCE=1//`"
fi
_vomodules="sdl $_vomodules"
_aomodules="sdl $_aomodules"
@@ -5095,6 +5101,29 @@ fi
echores "$_sdl"
+if os2 ; then
+echocheck "KVA (SNAP/WarpOverlay!/DIVE)"
+if test "$_kva" = auto; then
+ cat > $TMPC << EOF
+#include <os2.h>
+#include <kva.h>
+int main( void ) { return 0; }
+EOF
+ _kva=no;
+ cc_check -lkva && _kva=yes
+fi
+if test "$_kva" = yes ; then
+ def_kva='#define CONFIG_KVA 1'
+ libs_mplayer="$libs_mplayer -lkva"
+ _vomodules="kva $_vomodules"
+else
+ def_kva='#undef CONFIG_KVA'
+ _novomodules="kva $_novomodules"
+fi
+echores "$_kva"
+fi #if os2
+
+
if win32; then
echocheck "Windows waveout"
@@ -5109,7 +5138,7 @@ EOF
fi
if test "$_win32waveout" = yes ; then
def_win32waveout='#define CONFIG_WIN32WAVEOUT 1'
- _libs_mplayer="$_libs_mplayer -lwinmm"
+ libs_mplayer="$libs_mplayer -lwinmm"
_aomodules="win32 $_aomodules"
else
def_win32waveout='#undef CONFIG_WIN32WAVEOUT'
@@ -5129,7 +5158,7 @@ EOF
fi
if test "$_direct3d" = yes ; then
def_direct3d='#define CONFIG_DIRECT3D 1'
- _libs_mplayer="$_libs_mplayer -ld3d9"
+ libs_mplayer="$libs_mplayer -ld3d9"
_vomodules="direct3d $_vomodules"
else
def_direct3d='#undef CONFIG_DIRECT3D'
@@ -5150,7 +5179,7 @@ EOF
fi
if test "$_directx" = yes ; then
def_directx='#define CONFIG_DIRECTX 1'
- _libs_mplayer="$_libs_mplayer -lgdi32"
+ libs_mplayer="$libs_mplayer -lgdi32"
_vomodules="directx $_vomodules"
_aomodules="dsound $_aomodules"
else
@@ -5172,7 +5201,7 @@ int main(void) { return 0; }
EOF
for _inc_tmp in "" -I/usr/local/include/dxr2 -I/usr/include/dxr2; do
cc_check $_inc_tmp && _dxr2=yes && \
- _inc_extra="$_inc_extra $_inc_tmp" && break
+ extra_cflags="$extra_cflags $_inc_tmp" && break
done
fi
if test "$_dxr2" = yes; then
@@ -5307,7 +5336,7 @@ EOF
def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/dsp"'
elif netbsd || openbsd ; then
def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/sound"'
- _ld_extra="$_ld_extra -lossaudio"
+ extra_ldflags="$extra_ldflags -lossaudio"
else
def_ossaudio_devdsp='#define PATH_DEV_DSP "/dev/dsp"'
fi
@@ -5339,8 +5368,8 @@ fi
if test "$_arts" = yes ; then
def_arts='#define CONFIG_ARTS 1'
_aomodules="arts $_aomodules"
- _libs_mplayer="$_libs_mplayer `artsc-config --libs`"
- _inc_extra="$_inc_extra `artsc-config --cflags`"
+ libs_mplayer="$libs_mplayer `artsc-config --libs`"
+ extra_cflags="$extra_cflags `artsc-config --cflags`"
else
_noaomodules="arts $_noaomodules"
fi
@@ -5365,8 +5394,8 @@ echores "$_esd"
if test "$_esd" = yes ; then
def_esd='#define CONFIG_ESD 1'
_aomodules="esd $_aomodules"
- _libs_mplayer="$_libs_mplayer `esd-config --libs`"
- _inc_extra="$_inc_extra `esd-config --cflags`"
+ libs_mplayer="$libs_mplayer `esd-config --libs`"
+ extra_cflags="$extra_cflags `esd-config --cflags`"
echocheck "esd_get_latency()"
cat > $TMPC << EOF
@@ -5393,7 +5422,7 @@ EOF
fi
if test "$_nas" = yes ; then
def_nas='#define CONFIG_NAS 1'
- _libs_mplayer="$_libs_mplayer -laudio -lXt"
+ libs_mplayer="$libs_mplayer -laudio -lXt"
_aomodules="nas $_aomodules"
else
_noaomodules="nas $_noaomodules"
@@ -5420,8 +5449,8 @@ echores "$_pulse"
if test "$_pulse" = yes ; then
def_pulse='#define CONFIG_PULSE 1'
_aomodules="pulse $_aomodules"
- _libs_mplayer="$_libs_mplayer `$_pkg_config --libs libpulse`"
- _inc_extra="$_inc_extra `$_pkg_config --cflags libpulse`"
+ libs_mplayer="$libs_mplayer `$_pkg_config --libs libpulse`"
+ extra_cflags="$extra_cflags `$_pkg_config --cflags libpulse`"
else
def_pulse='#undef CONFIG_PULSE'
_noaomodules="pulse $_noaomodules"
@@ -5437,10 +5466,10 @@ cat > $TMPC << EOF
int main(void) { jack_client_open("test", JackUseExactName, NULL); return 0; }
EOF
if cc_check -ljack ; then
- _libs_mplayer="$_libs_mplayer -ljack"
+ libs_mplayer="$libs_mplayer -ljack"
elif cc_check `$_pkg_config --libs --cflags --silence-errors jack` ; then
- _libs_mplayer="$_libs_mplayer `$_pkg_config --libs jack`"
- _inc_extra="$_inc_extra "`$_pkg_config --cflags jack`""
+ libs_mplayer="$libs_mplayer `$_pkg_config --libs jack`"
+ extra_cflags="$extra_cflags "`$_pkg_config --cflags jack`""
else
_jack=no
fi
@@ -5473,7 +5502,7 @@ EOF
cc_check $I && _openal=yes && break
cc_check -DOPENAL_AL_H=1 $I && def_openal_h='#define OPENAL_AL_H 1' && _openal=yes && break
done
- test "$_openal" = yes && _libs_mplayer="$_libs_mplayer $I"
+ test "$_openal" = yes && libs_mplayer="$libs_mplayer $I"
fi
if test "$_openal" = yes ; then
def_openal='#define CONFIG_OPENAL 1'
@@ -5584,7 +5613,7 @@ if test "$_alsaver" ; then
_alsa=no
_res_comment="unknown version"
fi
- _ld_extra="$_ld_extra -lasound $_ld_dl $_ld_pthread"
+ extra_ldflags="$extra_ldflags -lasound $_ld_dl $_ld_pthread"
else
_noaomodules="alsa $_noaomodules"
fi
@@ -5639,7 +5668,7 @@ EOF
fi
if test "$_sgiaudio" = "yes" ; then
def_sgiaudio='#define CONFIG_SGI_AUDIO 1'
- _libs_mplayer="$_libs_mplayer -laudio"
+ libs_mplayer="$libs_mplayer -laudio"
_aomodules="sgi $_aomodules"
else
def_sgiaudio='#undef CONFIG_SGI_AUDIO'
@@ -5662,7 +5691,7 @@ EOF
fi
if test "$_dart" = yes ; then
def_dart='#define CONFIG_DART 1'
- _libs_mplayer="$_libs_mplayer -ldart"
+ libs_mplayer="$libs_mplayer -ldart"
_aomodules="dart $_aomodules"
else
def_dart='#undef CONFIG_DART'
@@ -5725,7 +5754,7 @@ if test "$_dvdread_internal" = auto ; then
|| darwin || win32 || os2; then
_dvdread_internal=yes
_dvdread=yes
- _inc_extra="$_inc_extra -Ilibdvdread4"
+ extra_cflags="$extra_cflags -Ilibdvdread4"
fi
elif test "$_dvdread" = auto ; then
_dvdread=no
@@ -5744,8 +5773,8 @@ EOF
if cc_check -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE \
$_dvdreadcflags $_dvdreadlibs $_ld_dl ; then
_dvdread=yes
- _inc_extra="$_inc_extra $_dvdreadcflags"
- _ld_extra="$_ld_extra $_dvdreadlibs"
+ extra_cflags="$extra_cflags $_dvdreadcflags"
+ extra_ldflags="$extra_ldflags $_dvdreadlibs"
_res_comment="external"
fi
fi
@@ -5758,7 +5787,7 @@ if test "$_dvdread_internal" = yes; then
elif test "$_dvdread" = yes; then
def_dvdread='#define CONFIG_DVDREAD 1'
_largefiles=yes
- _ld_extra="$_ld_extra -ldvdread"
+ extra_ldflags="$extra_ldflags -ldvdread"
_inputmodules="dvdread(external) $_inputmodules"
_res_comment="external"
else
@@ -5782,7 +5811,7 @@ if test "$_libdvdcss_internal" = yes ; then
def_dvd_bsd='#define HAVE_BSD_DVD_STRUCT 1'
elif darwin ; then
def_dvd_darwin='#define DARWIN_DVD_IOCTL'
- _ld_extra="$_ld_extra -framework IOKit"
+ extra_ldflags="$extra_ldflags -framework IOKit"
elif cygwin ; then
cflags_libdvdcss="-DSYS_CYGWIN -DWIN32"
elif beos ; then
@@ -5810,13 +5839,13 @@ EOF
_cdparanoia=no
for _inc_tmp in "" "-I/usr/include/cdda" "-I/usr/local/include/cdda" ; do
cc_check $_inc_tmp -lcdda_interface -lcdda_paranoia $_ld_lm && \
- _cdparanoia=yes && _inc_extra="$_inc_extra $_inc_tmp" && break
+ _cdparanoia=yes && extra_cflags="$extra_cflags $_inc_tmp" && break
done
fi
if test "$_cdparanoia" = yes ; then
_cdda='yes'
- _ld_extra="$_ld_extra -lcdda_interface -lcdda_paranoia"
- openbsd && _ld_extra="$_ld_extra -lutil"
+ extra_ldflags="$extra_ldflags -lcdda_interface -lcdda_paranoia"
+ openbsd && extra_ldflags="$extra_ldflags -lutil"
fi
echores "$_cdparanoia"
@@ -5838,13 +5867,13 @@ EOF
for _ld_tmp in "" "-lwinmm" ; do
_ld_tmp="-lcdio_cdda -lcdio -lcdio_paranoia $_ld_tmp"
cc_check $_ld_tmp $_ld_lm \
- && _libcdio=yes && _ld_extra="$_ld_extra $_ld_tmp" && break
+ && _libcdio=yes && extra_ldflags="$extra_ldflags $_ld_tmp" && break
done
if test "$_libcdio" = no && $_pkg_config --exists libcdio_paranoia ; then
_inc_tmp=`$_pkg_config --cflags libcdio_paranoia`
_ld_tmp=`$_pkg_config --libs libcdio_paranoia`
cc_check $_inc_tmp $_ld_tmp $_ld_lm && _libcdio=yes \
- && _ld_extra="$_ld_extra $_ld_tmp" && _inc_extra="$_inc_extra $_inc_tmp"
+ && extra_ldflags="$extra_ldflags $_ld_tmp" && extra_cflags="$extra_cflags $_inc_tmp"
fi
fi
if test "$_libcdio" = yes && test "$_cdparanoia" = no ; then
@@ -5931,8 +5960,8 @@ EOF
fi
if test "$_freetype" = yes ; then
def_freetype='#define CONFIG_FREETYPE'
- _inc_extra="$_inc_extra `$_freetypeconfig --cflags`"
- _ld_extra="$_ld_extra `$_freetypeconfig --libs`"
+ extra_cflags="$extra_cflags `$_freetypeconfig --cflags`"
+ extra_ldflags="$extra_ldflags `$_freetypeconfig --libs`"
else
def_freetype='#undef CONFIG_FREETYPE'
fi
@@ -5960,13 +5989,13 @@ EOF
_fontconfig=no
for _ld_tmp in "" "-lexpat -lfreetype" "-lexpat -lfreetype -lz" ; do
_ld_tmp="-lfontconfig $_ld_tmp"
- cc_check $_ld_tmp && _fontconfig=yes && _ld_extra="$_ld_extra $_ld_tmp" && break
+ cc_check $_ld_tmp && _fontconfig=yes && extra_ldflags="$extra_ldflags $_ld_tmp" && break
done
if test "$_fontconfig" = no && $_pkg_config --exists fontconfig ; then
_inc_tmp=`$_pkg_config --cflags fontconfig`
_ld_tmp=`$_pkg_config --libs fontconfig`
cc_check $_inc_tmp $_ld_tmp && _fontconfig=yes \
- && _ld_extra="$_ld_extra $_ld_tmp" && _inc_extra="$_inc_extra $_inc_tmp"
+ && extra_ldflags="$extra_ldflags $_ld_tmp" && extra_cflags="$extra_cflags $_inc_tmp"
fi
fi
if test "$_fontconfig" = yes ; then
@@ -6031,8 +6060,8 @@ EOF
fi
if test "$_fribidi" = yes ; then
def_fribidi='#define CONFIG_FRIBIDI'
- _inc_extra="$_inc_extra `$_fribidiconfig --cflags`"
- _ld_extra="$_ld_extra `$_fribidiconfig --libs`"
+ extra_cflags="$extra_cflags `$_fribidiconfig --cflags`"
+ extra_ldflags="$extra_ldflags `$_fribidiconfig --libs`"
else
def_fribidi='#undef CONFIG_FRIBIDI'
fi
@@ -6056,7 +6085,7 @@ EOF
fi
if test "$_enca" = yes ; then
def_enca='#define CONFIG_ENCA 1'
- _ld_extra="$_ld_extra -lenca"
+ extra_ldflags="$extra_ldflags -lenca"
else
def_enca='#undef CONFIG_ENCA'
fi
@@ -6072,7 +6101,7 @@ _zlib=no
cc_check -lz && _zlib=yes
if test "$_zlib" = yes ; then
def_zlib='#define CONFIG_ZLIB 1'
- _ld_extra="$_ld_extra -lz"
+ extra_ldflags="$extra_ldflags -lz"
else
def_zlib='#define CONFIG_ZLIB 0'
_libavdecoders=`echo $_libavdecoders | sed -e s/FLASHSV_DECODER// -e s/PNG_DECODER// -e s/ZMBV_DECODER// -e s/DXA_DECODER// -e s/TSCC_DECODER// `
@@ -6091,7 +6120,7 @@ EOF
cc_check -lbz2 && bzlib=yes
if test "$bzlib" = yes ; then
def_bzlib='#define CONFIG_BZLIB 1'
- _ld_extra="$_ld_extra -lbz2"
+ extra_ldflags="$extra_ldflags -lbz2"
fi
echores "$bzlib"
@@ -6131,7 +6160,7 @@ EOF
fi
if test "$_liblzo" = yes ; then
def_liblzo='#define CONFIG_LIBLZO 1'
- _ld_extra="$_ld_extra -llzo2"
+ extra_ldflags="$extra_ldflags -llzo2"
_codecmodules="liblzo $_codecmodules"
else
def_liblzo='#undef CONFIG_LIBLZO'
@@ -6151,7 +6180,7 @@ EOF
fi
if test "$_mad" = yes ; then
def_mad='#define CONFIG_LIBMAD 1'
- _ld_extra="$_ld_extra -lmad"
+ extra_ldflags="$extra_ldflags -lmad"
_codecmodules="libmad $_codecmodules"
else
def_mad='#undef CONFIG_LIBMAD'
@@ -6170,7 +6199,7 @@ EOF
fi
if test "$_twolame" = yes ; then
def_twolame='#define CONFIG_TWOLAME 1'
- _libs_mencoder="$_libs_mencoder -ltwolame"
+ libs_mencoder="$libs_mencoder -ltwolame"
_codecmodules="twolame $_codecmodules"
else
def_twolame='#undef CONFIG_TWOLAME'
@@ -6193,7 +6222,7 @@ fi
fi
if test "$_toolame" = yes ; then
def_toolame='#define CONFIG_TOOLAME 1'
- _libs_mencoder="$_libs_mencoder -ltoolame"
+ libs_mencoder="$libs_mencoder -ltoolame"
_codecmodules="toolame $_codecmodules"
else
def_toolame='#undef CONFIG_TOOLAME'
@@ -6239,13 +6268,13 @@ elif test "$_tremor" = yes ; then
def_tremor='#define CONFIG_TREMOR 1'
_codecmodules="tremor(external) $_codecmodules"
_res_comment="external Tremor"
- _ld_extra="$_ld_extra -logg -lvorbisidec"
+ extra_ldflags="$extra_ldflags -logg -lvorbisidec"
elif test "$_libvorbis" = yes ; then
_vorbis=yes
def_vorbis='#define CONFIG_OGGVORBIS 1'
_codecmodules="libvorbis $_codecmodules"
_res_comment="libvorbis"
- _ld_extra="$_ld_extra -lvorbis -logg"
+ extra_ldflags="$extra_ldflags -lvorbis -logg"
else
_vorbis=no
_nocodecmodules="libvorbis $_nocodecmodules"
@@ -6263,7 +6292,7 @@ EOF
fi
if test "$_speex" = yes ; then
def_speex='#define CONFIG_SPEEX 1'
- _ld_extra="$_ld_extra -lspeex"
+ extra_ldflags="$extra_ldflags -lspeex"
_codecmodules="speex $_codecmodules"
else
def_speex='#undef CONFIG_SPEEX'
@@ -6308,22 +6337,22 @@ int main(void) {
EOF
_ld_theora=$($_pkg_config --silence-errors --libs theora)
_inc_theora=$($_pkg_config --silence-errors --cflags theora)
- cc_check $_inc_theora $_ld_theora && _ld_extra="$_ld_extra $_ld_theora" &&
- _inc_extra="$_inc_extra $_inc_theora" && _theora=yes
+ cc_check $_inc_theora $_ld_theora && extra_ldflags="$extra_ldflags $_ld_theora" &&
+ extra_cflags="$extra_cflags $_inc_theora" && _theora=yes
if test _theora = no; then
_ld_theora="-ltheora -logg"
- cc_check $_ld_theora && _ld_extra="$_ld_extra $_ld_theora" && _theora=yes
+ cc_check $_ld_theora && extra_ldflags="$extra_ldflags $_ld_theora" && _theora=yes
fi
if test "$_theora" = no && test "$_tremor_internal" = yes; then
_ld_theora=$($_pkg_config --silence-errors --libs theora)
_inc_theora=$($_pkg_config --silence-errors --cflags theora)
cc_check tremor/bitwise.c $_inc_theora $_ld_theora &&
- _ld_extra="$_ld_extra $_ld_theora" &&
- _inc_extra="$_inc_extra $_inc_theora" && _theora=yes
+ extra_ldflags="$extra_ldflags $_ld_theora" &&
+ extra_cflags="$extra_cflags $_inc_theora" && _theora=yes
if test _theora = no; then
_ld_theora="-ltheora -logg"
cc_check tremor/bitwise.c $_ld_theora &&
- _ld_extra="$_ld_extra $_ld_theora" && _theora=yes
+ extra_ldflags="$extra_ldflags $_ld_theora" && _theora=yes
fi
fi
fi
@@ -6332,7 +6361,7 @@ if test "$_theora" = yes ; then
_codecmodules="libtheora $_codecmodules"
# when --enable-theora is forced, we'd better provide a probably sane
# $_ld_theora than nothing
- test -z "$_ld_theora" && _ld_extra="$_ld_extra -ltheora -logg"
+ test -z "$_ld_theora" && extra_ldflags="$extra_ldflags -ltheora -logg"
else
def_theora='#undef CONFIG_OGGTHEORA'
_nocodecmodules="libtheora $_nocodecmodules"
@@ -6369,7 +6398,7 @@ elif test "$_liba52_internal" = no && test "$_liba52" = auto ; then
#include <a52dec/a52.h>
int main(void) { a52_state_t *testHand; testHand=a52_init(0); return 0; }
EOF
- cc_check -la52 && _liba52=yes && _res_comment="external" && _ld_extra="$_ld_extra -la52"
+ cc_check -la52 && _liba52=yes && _res_comment="external" && extra_ldflags="$extra_ldflags -la52"
fi
if test "$_liba52" = yes ; then
def_liba52='#define CONFIG_LIBA52 1'
@@ -6409,7 +6438,7 @@ if test "$_libdca" = auto ; then
int main(void) { dts_init(0); return 0; }
EOF
for _ld_dca in -ldts -ldca ; do
- cc_check $_ld_dca $_ld_lm && _ld_extra="$_ld_extra $_ld_dca" \
+ cc_check $_ld_dca $_ld_lm && extra_ldflags="$extra_ldflags $_ld_dca" \
&& _libdca=yes && break
done
fi
@@ -6440,7 +6469,7 @@ EOF
fi
if test "$_musepack" = yes ; then
def_musepack='#define CONFIG_MUSEPACK 1'
- _ld_extra="$_ld_extra -lmpcdec"
+ extra_ldflags="$extra_ldflags -lmpcdec"
_codecmodules="musepack $_codecmodules"
else
def_musepack='#undef CONFIG_MUSEPACK'
@@ -6458,7 +6487,7 @@ int main(void) { unsigned long x, y; faacEncOpen(48000, 2, &x, &y); return 0; }
EOF
_faac=no
for _ld_faac in "-lfaac" "-lfaac -lmp4v2 -lstdc++" ; do
- cc_check -O4 $_ld_faac $_ld_lm && _libs_mencoder="$_libs_mencoder $_ld_faac" && _faac=yes && break
+ cc_check -O4 $_ld_faac $_ld_lm && libs_mencoder="$libs_mencoder $_ld_faac" && _faac=yes && break
done
fi
if test "$_faac" = yes ; then
@@ -6466,7 +6495,7 @@ if test "$_faac" = yes ; then
test "$_faac_lavc" = auto && _faac_lavc=yes
if test "$_faac_lavc" = yes ; then
def_faac_lavc="#define CONFIG_LIBFAAC 1"
- _libs_mplayer="$_libs_mplayer $_ld_faac"
+ libs_mplayer="$libs_mplayer $_ld_faac"
_libavencoders="$_libavencoders LIBFAAC_ENCODER"
fi
_codecmodules="faac $_codecmodules"
@@ -6522,7 +6551,7 @@ if test "$_faad_internal" = yes ; then
_res_comment="internal fixed-point"
fi
elif test "$_faad" = yes ; then
- _ld_extra="$_ld_extra -lfaad"
+ extra_ldflags="$extra_ldflags -lfaad"
fi
if test "$_faad" = yes ; then
@@ -6592,7 +6621,7 @@ if test "$_win32dll" = yes ; then
def_win32_loader='#define WIN32_LOADER 1'
_win32_emulation=yes
else
- _ld_extra="$_ld_extra -ladvapi32 -lole32"
+ extra_ldflags="$extra_ldflags -ladvapi32 -lole32"
_res_comment="using native windows"
fi
_codecmodules="win32 $_codecmodules"
@@ -6670,8 +6699,8 @@ echocheck "Nemesi Streaming Media libraries"
if test "$_nemesi" = auto && test "$_network" = yes ; then
_nemesi=no
if $_pkg_config libnemesi --atleast-version=0.6.3 ; then
- _inc_extra="$_inc_extra `$_pkg_config --cflags libnemesi`"
- _ld_extra="$_ld_extra `$_pkg_config --libs libnemesi`"
+ extra_cflags="$extra_cflags `$_pkg_config --cflags libnemesi`"
+ extra_ldflags="$extra_ldflags `$_pkg_config --libs libnemesi`"
_nemesi=yes
fi
fi
@@ -6698,15 +6727,15 @@ int main(void) { return 0; }
EOF
_live=no
- for I in $_inc_extra "-I$_libdir/live" "-I/usr/lib/live" "-I/usr/lib64/live" "-I/usr/local/live" "-I/usr/local/lib/live" ; do
+ for I in $extra_cflags "-I$_libdir/live" "-I/usr/lib/live" "-I/usr/lib64/live" "-I/usr/local/live" "-I/usr/local/lib/live" ; do
cxx_check $I/liveMedia/include $I/UsageEnvironment/include \
$I/groupsock/include && _livelibdir=`echo $I| sed s/-I//` && \
- _ld_extra="$_livelibdir/liveMedia/libliveMedia.a \
+ extra_ldflags="$_livelibdir/liveMedia/libliveMedia.a \
$_livelibdir/groupsock/libgroupsock.a \
$_livelibdir/UsageEnvironment/libUsageEnvironment.a \
$_livelibdir/BasicUsageEnvironment/libBasicUsageEnvironment.a \
- $_ld_extra -lstdc++" \
- _inc_extraxx="-I$_livelibdir/liveMedia/include \
+ $extra_ldflags -lstdc++" \
+ extra_cxxflags="-I$_livelibdir/liveMedia/include \
-I$_livelibdir/UsageEnvironment/include \
-I$_livelibdir/BasicUsageEnvironment/include \
-I$_livelibdir/groupsock/include" && \
@@ -6726,8 +6755,8 @@ elif test "$_live_dist" = yes && test "$_network" = yes; then
_res_comment="using distribution version"
_live="yes"
def_live='#define CONFIG_LIVE555 1'
- _ld_extra="$_ld_extra -lliveMedia -lgroupsock -lUsageEnvironment -lBasicUsageEnvironment -lstdc++"
- _inc_extraxx="-I/usr/include/liveMedia -I/usr/include/UsageEnvironment \
+ extra_ldflags="$extra_ldflags -lliveMedia -lgroupsock -lUsageEnvironment -lBasicUsageEnvironment -lstdc++"
+ extra_cxxflags="-I/usr/include/liveMedia -I/usr/include/UsageEnvironment \
-I/usr/include/BasicUsageEnvironment -I/usr/include/groupsock"
_inputmodules="live555 $_inputmodules"
else
@@ -6755,10 +6784,10 @@ EOF
if $_pkg_config --exists libavutil ; then
_inc_libavutil=`$_pkg_config --cflags libavutil`
_ld_tmp=`$_pkg_config --libs libavutil`
- cc_check $_inc_libavutil $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" \
+ cc_check $_inc_libavutil $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" \
&& _libavutil_so=yes
elif cc_check -lavutil $_ld_lm ; then
- _ld_extra="$_ld_extra -lavutil"
+ extra_ldflags="$extra_ldflags -lavutil"
_libavutil_so=yes
_res_comment="using libavutil.so, but static libavutil is recommended"
fi
@@ -6794,10 +6823,10 @@ EOF
if $_pkg_config --exists libavcodec ; then
_inc_libavcodec=`$_pkg_config --cflags libavcodec`
_ld_tmp=`$_pkg_config --libs libavcodec`
- cc_check $_inc_libavcodec $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" \
+ cc_check $_inc_libavcodec $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" \
&& _libavcodec_so=yes
elif cc_check -lavcodec $_ld_lm ; then
- _ld_extra="$_ld_extra -lavcodec"
+ extra_ldflags="$extra_ldflags -lavcodec"
_libavcodec_so=yes
_res_comment="using libavcodec.so, but static libavcodec is recommended"
fi
@@ -6838,10 +6867,10 @@ EOF
if $_pkg_config --exists libavformat ; then
_inc_libavformat=`$_pkg_config --cflags libavformat`
_ld_tmp=`$_pkg_config --libs libavformat`
- cc_check $_inc_libavformat $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" \
+ cc_check $_inc_libavformat $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" \
&& _libavformat_so=yes
elif cc_check $_ld_lm -lavformat ; then
- _ld_extra="$_ld_extra -lavformat"
+ extra_ldflags="$extra_ldflags -lavformat"
_libavformat_so=yes
_res_comment="using libavformat.so, but static libavformat is recommended"
fi
@@ -6872,7 +6901,7 @@ elif test "$_libpostproc_so" = auto ; then
int main(void) { pp_get_mode_by_name_and_quality("de", 0); return 0; }
EOF
if cc_check -lpostproc $_ld_lm ; then
- _ld_extra="$_ld_extra -lpostproc"
+ extra_ldflags="$extra_ldflags -lpostproc"
_libpostproc_so=yes
_res_comment="using libpostproc.so, but static libpostproc is recommended"
fi
@@ -6905,10 +6934,10 @@ EOF
if $_pkg_config --exists libswscale ; then
_inc_libswscale=`$_pkg_config --cflags libswscale`
_ld_tmp=`$_pkg_config --libs libswscale`
- cc_check $_inc_libswscale $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" \
+ cc_check $_inc_libswscale $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" \
&& _libswscale_so=yes
elif cc_check -lswscale ; then
- _ld_extra="$_ld_extra -lswscale"
+ extra_ldflags="$extra_ldflags -lswscale"
_libswscale_so=yes
fi
fi
@@ -6938,7 +6967,7 @@ EOF
fi
if test "$_libamr_nb" = yes ; then
_libamr=yes
- _ld_extra="$_ld_extra -lamrnb"
+ extra_ldflags="$extra_ldflags -lamrnb"
def_libamr='#define CONFIG_LIBAMR 1'
def_libamr_nb='#define CONFIG_LIBAMR_NB 1'
_libavdecoders="$_libavdecoders LIBAMR_NB_DECODER"
@@ -6966,7 +6995,7 @@ EOF
fi
if test "$_libamr_wb" = yes ; then
_libamr=yes
- _ld_extra="$_ld_extra -lamrwb"
+ extra_ldflags="$extra_ldflags -lamrwb"
def_libamr='#define CONFIG_LIBAMR 1'
def_libamr_wb='#define CONFIG_LIBAMR_WB 1'
_libavdecoders="$_libavdecoders LIBAMR_WB_DECODER"
@@ -6989,7 +7018,7 @@ EOF
fi
if test "$_libdv" = yes ; then
def_libdv='#define CONFIG_LIBDV095 1'
- _ld_extra="$_ld_extra -ldv"
+ extra_ldflags="$extra_ldflags -ldv"
_codecmodules="libdv $_codecmodules"
else
def_libdv='#undef CONFIG_LIBDV095'
@@ -7006,7 +7035,7 @@ if test "$_xvid" = auto ; then
int main(void) { xvid_global(0, 0, 0, 0); return 0; }
EOF
for _ld_tmp in "-lxvidcore $_ld_lm" "-lxvidcore $_ld_lm $_ld_pthread" ; do
- cc_check $_ld_tmp && _ld_extra="$_ld_extra $_ld_tmp" && _xvid=yes && break
+ cc_check $_ld_tmp && extra_ldflags="$extra_ldflags $_ld_tmp" && _xvid=yes && break
done
fi
@@ -7042,14 +7071,14 @@ if test "$_x264" = auto ; then
cat > $TMPC << EOF
#include <inttypes.h>
#include <x264.h>
-#if X264_BUILD < 59
+#if X264_BUILD < 65
#error We do not support old versions of x264. Get the latest from SVN.
#endif
int main(void) { x264_encoder_open((void*)0); return 0; }
EOF
_x264=no
for _ld_x264 in "-lx264 $_ld_pthread" "-lx264 $_ld_pthread $_ld_lm" ; do
- cc_check $_ld_x264 && _libs_mencoder="$_libs_mencoder $_ld_x264" && _x264=yes && break
+ cc_check $_ld_x264 && libs_mencoder="$libs_mencoder $_ld_x264" && _x264=yes && break
done
fi
@@ -7059,7 +7088,7 @@ if test "$_x264" = yes ; then
test "$_x264_lavc" = auto && _x264_lavc=yes
if test "$_x264_lavc" = yes ; then
def_x264_lavc='#define CONFIG_LIBX264 1'
- _libs_mplayer="$_libs_mplayer $_ld_x264"
+ libs_mplayer="$libs_mplayer $_ld_x264"
_libavencoders="$_libavencoders LIBX264_ENCODER"
fi
else
@@ -7097,8 +7126,8 @@ EOF
_ld_dirac=`$_pkg_config --silence-errors --libs dirac`
cc_check $_inc_dirac $_ld_dirac &&
_libdirac_lavc=yes &&
- _inc_extra="$_inc_extra $_inc_dirac" &&
- _ld_extra="$_ld_extra $_ld_dirac"
+ extra_cflags="$extra_cflags $_inc_dirac" &&
+ extra_ldflags="$extra_ldflags $_ld_dirac"
fi
fi
fi
@@ -7129,8 +7158,8 @@ EOF
_ld_schroedinger=`$_pkg_config --silence-errors --libs schroedinger-1.0`
cc_check $_inc_schroedinger $_ld_schroedinger &&
_libschroedinger_lavc=yes &&
- _inc_extra="$_inc_extra $_inc_schroedinger" &&
- _ld_extra="$_ld_extra $_ld_schroedinger"
+ extra_cflags="$extra_cflags $_inc_schroedinger" &&
+ extra_ldflags="$extra_ldflags $_ld_schroedinger"
fi
fi
fi
@@ -7160,7 +7189,7 @@ fi
if test "$_libnut" = yes ; then
def_libnut='#define CONFIG_LIBNUT 1'
- _ld_extra="$_ld_extra -lnut"
+ extra_ldflags="$extra_ldflags -lnut"
else
def_libnut='#undef CONFIG_LIBNUT'
fi
@@ -7211,7 +7240,7 @@ fi
if test "$_mp3lame" = yes ; then
def_mp3lame="#define CONFIG_MP3LAME"
_ld_mp3lame=-lmp3lame
- _libs_mencoder="$_libs_mencoder $_ld_mp3lame"
+ libs_mencoder="$libs_mencoder $_ld_mp3lame"
cat > $TMPC << EOF
#include <lame/lame.h>
int main(void) { lame_set_preset(NULL, STANDARD_FAST); return 0; }
@@ -7226,7 +7255,7 @@ EOF
if test "$_mp3lame_lavc" = yes ; then
def_mp3lame_lavc="#define CONFIG_LIBMP3LAME 1"
_libavencoders="$_libavencoders LIBMP3LAME_ENCODER"
- _libs_mplayer="$_libs_mplayer $_ld_mp3lame"
+ libs_mplayer="$libs_mplayer $_ld_mp3lame"
fi
else
_mp3lame_lavc=no
@@ -7376,7 +7405,7 @@ fi
if test "$_tv_dshow" = yes ; then
_inputmodules="tv-dshow $_inputmodules"
def_tv_dshow='#define CONFIG_TV_DSHOW 1'
- _ld_extra="$_ld_extra -lole32 -luuid"
+ extra_ldflags="$extra_ldflags -lole32 -luuid"
else
_noinputmodules="tv-dshow $_noinputmodules"
def_tv_dshow='#undef CONFIG_TV_DSHOW'
@@ -7590,7 +7619,7 @@ fi
if test "$_vstream" = yes ; then
def_vstream='#define CONFIG_VSTREAM 1'
_inputmodules="vstream $_inputmodules"
- _ld_extra="$_ld_extra -lvstream-client"
+ extra_ldflags="$extra_ldflags -lvstream-client"
else
_noinputmodules="vstream $_noinputmodules"
def_vstream='#undef CONFIG_VSTREAM'
@@ -7630,9 +7659,9 @@ if test "$_xmms" = yes ; then
def_xmms='#define CONFIG_XMMS 1'
if darwin ; then
- _ld_extra="$_ld_extra ${_xmmslibdir}/libxmms.dylib"
+ extra_ldflags="$extra_ldflags ${_xmmslibdir}/libxmms.dylib"
else
- _ld_extra="$_ld_extra ${_xmmslibdir}/libxmms.so.1 -export-dynamic"
+ extra_ldflags="$extra_ldflags ${_xmmslibdir}/libxmms.so.1 -export-dynamic"
fi
else
def_xmms='#undef CONFIG_XMMS'
@@ -7695,15 +7724,15 @@ if test "$_gtk1" = no ; then
if $_pkg_config gtk+-2.0 --exists ; then
_gtk=`$_pkg_config gtk+-2.0 --modversion 2>/dev/null`
- _inc_extra="$_inc_extra `$_pkg_config gtk+-2.0 --cflags 2>/dev/null`"
- _libs_mplayer="$_libs_mplayer `$_pkg_config gtk+-2.0 --libs 2>/dev/null`"
+ extra_cflags="$extra_cflags `$_pkg_config gtk+-2.0 --cflags 2>/dev/null`"
+ libs_mplayer="$libs_mplayer `$_pkg_config gtk+-2.0 --libs 2>/dev/null`"
echores "$_gtk"
# Check for GLIB2
if $_pkg_config glib-2.0 --exists ; then
echocheck "glib version"
_glib=`$_pkg_config glib-2.0 --modversion 2>/dev/null`
- _libs_mplayer="$_libs_mplayer `$_pkg_config glib-2.0 --libs 2>/dev/null`"
+ libs_mplayer="$libs_mplayer `$_pkg_config glib-2.0 --libs 2>/dev/null`"
echores "$_glib"
def_gui='#define CONFIG_GUI 1'
@@ -7731,8 +7760,8 @@ if test "$_gtk1" = yes ; then
fi
fi
_gtk=`$_gtkconfig --version 2>&1`
- _inc_extra="$_inc_extra `$_gtkconfig --cflags 2>&1`"
- _libs_mplayer="$_libs_mplayer `$_gtkconfig --libs 2>&1`"
+ extra_cflags="$extra_cflags `$_gtkconfig --cflags 2>&1`"
+ libs_mplayer="$libs_mplayer `$_gtkconfig --libs 2>&1`"
echores "$_gtk (using $_gtkconfig)"
# Check for GLIB
@@ -7747,7 +7776,7 @@ if test "$_gtk1" = yes ; then
fi
fi
_glib=`$_glibconfig --version 2>&1`
- _libs_mplayer="$_libs_mplayer `$_glibconfig --libs 2>&1`"
+ libs_mplayer="$libs_mplayer `$_glibconfig --libs 2>&1`"
echores "$_glib (using $_glibconfig)"
def_gui='#define CONFIG_GUI 1'
@@ -7756,7 +7785,7 @@ fi
else #if ! win32
_gui_win32=yes
- _libs_mplayer="$_libs_mplayer -lcomdlg32 -lcomctl32 -lshell32 -lkernel32"
+ libs_mplayer="$libs_mplayer -lcomdlg32 -lcomctl32 -lshell32 -lkernel32"
def_gui='#define CONFIG_GUI 1'
def_gtk2='#undef CONFIG_GTK2'
fi #if ! win32
@@ -7768,13 +7797,11 @@ fi #if test "$_gui"
# --------------- GUI specific tests end -------------------
-if test "$_charset" = "noconv" ; then
- _charset=""
-fi
-if test "$_charset" ; then
+if test "$_charset" != "noconv" ; then
def_charset="#define MSG_CHARSET \"$_charset\""
else
def_charset="#undef MSG_CHARSET"
+ _charset="UTF-8"
fi
if test -n "$_charset" && test "$_charset" != "UTF-8" ; then
@@ -7808,7 +7835,7 @@ cat > $TMPC <<EOF
int main(void) { return 0; }
EOF
if cc_check -Wl,-z,noexecstack ; then
- _ld_extra="-Wl,-z,noexecstack $_ld_extra"
+ extra_ldflags="-Wl,-z,noexecstack $extra_ldflags"
echores "yes"
else
echores "no"
@@ -7823,9 +7850,9 @@ if test "$_real" = yes || test "$_xanim" = yes && ! win32 && ! qnx && ! darwin &
_ld_dl_dynamic='-rdynamic'
fi
-_ld_extra="$_ld_extra $_ld_pthread $_ld_dl $_ld_dl_dynamic"
-bsdos && _ld_extra="$_ld_extra -ldvd"
-(netbsd || openbsd) && x86_32 && _ld_extra="$_ld_extra -li386"
+extra_ldflags="$extra_ldflags $_ld_pthread $_ld_dl $_ld_dl_dynamic"
+bsdos && extra_ldflags="$extra_ldflags -ldvd"
+(netbsd || openbsd) && x86_32 && extra_ldflags="$extra_ldflags -li386"
def_debug='#undef MP_DEBUG'
test "$_debug" != "" && def_debug='#define MP_DEBUG 1'
@@ -7855,7 +7882,7 @@ EOF
fi
if test "$_lirc" = yes ; then
def_lirc='#define CONFIG_LIRC 1'
- _ld_extra="$_ld_extra -llirc_client"
+ extra_ldflags="$extra_ldflags -llirc_client"
else
def_lirc='#undef CONFIG_LIRC'
fi
@@ -7872,7 +7899,7 @@ EOF
fi
if test "$_lircc" = yes ; then
def_lircc='#define CONFIG_LIRCC 1'
- _ld_extra="$_ld_extra -llircc"
+ extra_ldflags="$extra_ldflags -llircc"
else
def_lircc='#undef CONFIG_LIRCC'
fi
@@ -7892,8 +7919,8 @@ EOF
fi
if test "$_maemo" = yes ; then
def_maemo='#define CONFIG_MAEMO 1'
- _inc_extra="$_inc_extra `$_pkg_config --cflags libosso`"
- _ld_extra="$_ld_extra `$_pkg_config --libs libosso` -lXsp"
+ extra_cflags="$extra_cflags `$_pkg_config --cflags libosso`"
+ extra_ldflags="$extra_ldflags `$_pkg_config --libs libosso` -lXsp"
else
def_maemo='#undef CONFIG_MAEMO'
fi
@@ -7906,20 +7933,20 @@ fi
# the OMF format needs to come after the 'extern symbol prefix' check, which
# uses nm.
if os2 ; then
- _ld_extra="$_ld_extra -Zomf -Zstack 16384 -Zbin-files -Zargs-wild"
+ extra_ldflags="$extra_ldflags -Zomf -Zstack 16384 -Zbin-files -Zargs-wild"
fi
# linker paths should be the same for mencoder and mplayer
_ld_tmp=""
-for I in $_libs_mplayer ; do
+for I in $libs_mplayer ; do
_tmp=`echo $I | sed -e 's/^-L.*$//'`
if test -z "$_tmp" ; then
- _ld_extra="$_ld_extra $I"
+ extra_ldflags="$extra_ldflags $I"
else
_ld_tmp="$_ld_tmp $I"
fi
done
-_libs_mplayer=$_ld_tmp
+libs_mplayer=$_ld_tmp
#############################################################################
@@ -7996,11 +8023,11 @@ if test "$_dvdnav" = yes ; then
_largefiles=yes
def_dvdnav='#define CONFIG_DVDNAV 1'
if test "$dvdnav_internal" = yes ; then
- _inc_extra="$_inc_extra -Ilibdvdnav"
+ cflags_libdvdnav="-Ilibdvdnav"
_inputmodules="dvdnav(internal) $_inputmodules"
else
- _inc_extra="$_inc_extra `$_dvdnavconfig --cflags`"
- _ld_extra="$_ld_extra `$_dvdnavconfig --minilibs`"
+ extra_cflags="$extra_cflags `$_dvdnavconfig --cflags`"
+ extra_ldflags="$extra_ldflags `$_dvdnavconfig --minilibs`"
_inputmodules="dvdnav $_inputmodules"
fi
else
@@ -8045,25 +8072,24 @@ INSTALLSTRIP = $_install_strip
RANLIB = $_ranlib
WINDRES = $_windres
-EXTRA_INC = $_inc_extra
-EXTRAXX_INC = $_inc_extra $_inc_extraxx
-CFLAGS = $CFLAGS \$(EXTRA_INC)
-OPTFLAGS = $CFLAGS \$(EXTRA_INC)
-CXXFLAGS = $CXXFLAGS \$(EXTRAXX_INC)
+CFLAGS = $CFLAGS $extra_cflags
+OPTFLAGS = $CFLAGS $extra_cflags
+CXXFLAGS = $CXXFLAGS $extra_cflags $extra_cxxflags
CFLAGS_DHAHELPER = $cflags_dhahelper
CFLAGS_FAAD_FIXED = $cflags_faad_fixed
CFLAGS_LIBDVDCSS = $cflags_libdvdcss
CFLAGS_LIBDVDCSS_DVDREAD = $cflags_libdvdcss_dvdread
+CFLAGS_LIBDVDNAV = $cflags_libdvdnav
CFLAGS_NO_OMIT_LEAF_FRAME_POINTER = $cflags_no_omit_leaf_frame_pointer
CFLAGS_STACKREALIGN = $cflags_stackrealign
CFLAGS_SVGALIB_HELPER = $cflags_svgalib_helper
CFLAGS_TREMOR_LOW = $cflags_tremor_low
YASMFLAGS = $YASMFLAGS
-EXTRALIBS = $_extra_libs
-EXTRA_LIB = $_ld_extra $_ld_static $_ld_lm
-EXTRALIBS_MPLAYER = $_libs_mplayer
-EXTRALIBS_MENCODER = $_libs_mencoder
+EXTRALIBS = $extra_libs
+EXTRA_LIB = $extra_ldflags $_ld_static $_ld_lm
+EXTRALIBS_MPLAYER = $libs_mplayer
+EXTRALIBS_MENCODER = $libs_mencoder
DEPEND_CMD = \$(CC) -MM \$(CFLAGS) \$(filter-out %.h,\$^) | sed "s,[0-9a-z._-]*: \(\$(SRC_DIR)/\)*\([a-z0-9]*/\)[^/]* ,\\2&,"
@@ -8144,6 +8170,7 @@ IVTV = $_ivtv
JACK = $_jack
JOYSTICK = $_joystick
JPEG = $_jpeg
+KVA = $_kva
LADSPA = $_ladspa
LIBA52 = $_liba52
LIBA52_INTERNAL = $_liba52_internal
@@ -8646,6 +8673,7 @@ $def_gl
$def_gl_win32
$def_ivtv
$def_jpeg
+$def_kva
$def_md5sum
$def_mga
$def_mng
@@ -8741,11 +8769,13 @@ $def_yasm
#define CONFIG_POWERPC_PERF 0
#define CONFIG_SMALL 0
#define CONFIG_SWSCALE 1
+#define CONFIG_SWSCALE_ALPHA 1
#define HAVE_GETHRTIME 0
#define HAVE_INLINE_ASM 0
#define HAVE_POLL_H 1
#define HAVE_PPC4XX 0
+#define HAVE_VIRTUALALLOC 0
/* Some FFmpeg codecs depend on these. Enable them unconditionally for now. */
#define CONFIG_AANDCT 1
diff --git a/cpudetect.c b/cpudetect.c
index 5da169d..62afe58 100644
--- a/cpudetect.c
+++ b/cpudetect.c
@@ -44,20 +44,15 @@ static void check_os_katmai_support( void );
// return TRUE if cpuid supported
static int has_cpuid(void)
{
- long a, c;
-
// code from libavcodec:
#if ARCH_X86_64
-#define PUSHF "pushfq\n\t"
-#define POPF "popfq\n\t"
+ return 1;
#else
-#define PUSHF "pushfl\n\t"
-#define POPF "popfl\n\t"
-#endif
+ long a, c;
__asm__ volatile (
/* See if CPUID instruction is supported ... */
/* ... Get copies of EFLAGS into eax and ecx */
- PUSHF
+ "pushfl\n\t"
"pop %0\n\t"
"mov %0, %1\n\t"
@@ -65,19 +60,18 @@ static int has_cpuid(void)
/* to the EFLAGS reg */
"xor $0x200000, %0\n\t"
"push %0\n\t"
- POPF
+ "popfl\n\t"
/* ... Get the (hopefully modified) EFLAGS */
- PUSHF
+ "pushfl\n\t"
"pop %0\n\t"
: "=a" (a), "=c" (c)
:
: "cc"
);
-#undef PUSHF
-#undef POPF
return a != c;
+#endif
}
static void
@@ -143,6 +137,7 @@ void GetCpuCaps( CpuCaps *caps)
caps->hasMMX = (regs2[3] & (1 << 23 )) >> 23; // 0x0800000
caps->hasSSE = (regs2[3] & (1 << 25 )) >> 25; // 0x2000000
caps->hasSSE2 = (regs2[3] & (1 << 26 )) >> 26; // 0x4000000
+ caps->hasSSE3 = (regs2[2] & 1); // 0x0000001
caps->hasSSSE3 = (regs2[2] & (1 << 9 )) >> 9; // 0x0000200
caps->hasMMX2 = caps->hasSSE; // SSE cpus supports mmxext too
cl_size = ((regs2[1] >> 8) & 0xFF)*8;
@@ -276,7 +271,7 @@ static void sigill_handler_sse( int signal, struct sigcontext sc )
}
#endif /* __linux__ && _POSIX_SOURCE */
-#if defined(__MINGW32__) || defined(__CYGWIN__)
+#if (defined(__MINGW32__) || defined(__CYGWIN__)) && !ARCH_X86_64
LONG CALLBACK win32_sig_handler_sse(EXCEPTION_POINTERS* ep)
{
if(ep->ExceptionRecord->ExceptionCode==EXCEPTION_ILLEGAL_INSTRUCTION){
@@ -458,6 +453,7 @@ void GetCpuCaps( CpuCaps *caps)
caps->has3DNowExt=0;
caps->hasSSE=0;
caps->hasSSE2=0;
+ caps->hasSSE3=0;
caps->hasSSSE3=0;
caps->hasSSE4a=0;
caps->isX86=0;
diff --git a/cpudetect.h b/cpudetect.h
index 2cc99d4..f31bf07 100644
--- a/cpudetect.h
+++ b/cpudetect.h
@@ -46,6 +46,7 @@ typedef struct cpucaps_s {
int has3DNowExt;
int hasSSE;
int hasSSE2;
+ int hasSSE3;
int hasSSSE3;
int hasSSE4a;
int isX86;
diff --git a/cpuinfo.c b/cpuinfo.c
index ac49cd7..78f5d5b 100644
--- a/cpuinfo.c
+++ b/cpuinfo.c
@@ -290,11 +290,11 @@ main(void)
have to check the family, model and stepping instead. */
if (strstr(idstr, "AMD") &&
family == 5 &&
- (model >= 9 || model == 8 && stepping >= 8))
+ (model >= 9 || (model == 8 && stepping >= 8)))
printf(" %s", "k6_mtrr");
/* similar for cyrix_arr. */
if (strstr(idstr, "Cyrix") &&
- (family == 5 && model < 4 || family == 6))
+ (family == 5 && (model < 4 || family == 6)))
printf(" %s", "cyrix_arr");
/* as well as centaur_mcr. */
if (strstr(idstr, "Centaur") &&
diff --git a/etc/codecs.conf b/etc/codecs.conf
index 11d0a01..ef879ab 100644
--- a/etc/codecs.conf
+++ b/etc/codecs.conf
@@ -3,7 +3,7 @@
; Before editing this file, please read DOCS/tech/codecs.conf.txt !
;=============================================================================
-release 20070930
+release 20090308
;=============================================================================
; VIDEO CODECS
@@ -319,14 +319,6 @@ videocodec ffnuv
dll nuv
out I420
-videocodec nuv
- info "NuppelVideo"
- status working
- fourcc NUV1 ; NUV1 is an internal MPlayer FOURCC
- fourcc RJPG
- driver nuv
- out I420,IYUV
-
videocodec ffbmp
info "FFmpeg BMP"
status working
@@ -533,6 +525,15 @@ videocodec theora
;WIN32:
+videocodec smartsight
+ info "Verint Video Manager"
+ status working
+ fourcc SN40
+ fourcc SN41,SJPG ; untested
+ driver vfw
+ dll "SN4Codec.dll"
+ out BGR24 flip
+
videocodec msuscls
info "MSU Screen Capture Lossless Codec"
status working
@@ -891,7 +892,7 @@ videocodec ffodivx
fourcc FFDS
fourcc DCOD,MVXM,EM4A,PM4V
fourcc M4T3,DMK2,DIGI,INMC
- fourcc EPHV
+ fourcc EPHV,SN40
driver ffmpeg
dll mpeg4 ;opendivx
out YV12,I420,IYUV
@@ -942,7 +943,7 @@ videocodec xvid
fourcc FFDS
fourcc DCOD,MVXM,EM4A,PM4V
fourcc M4T3,DMK2,DIGI,INMC
- fourcc EPHV
+ fourcc EPHV,SN40
format 0x10000004 ; mpeg 4 es
driver xvid
out YV12
@@ -1519,20 +1520,6 @@ videocodec indeo3xa
; DV: qdv is more stable... libdv is slow, mcdv is unstable
-videocodec qdv
- info "Sony Digital Video (DV)"
- status working
- fourcc dvsl,dvsd,dvhd ; ????
- fourcc DVSD dvsd ; pal .avi
- fourcc "dvcp" dvsd ; pal .mov
- fourcc "dvc " dvsd ; ntsc .mov
- driver dshow
- dll "qdv.dll"
- guid 0xB1B77C00, 0xC3E4, 0x11CF, 0xAF, 0x79, 0x00, 0xAA, 0x00, 0xB6, 0x7A, 0x42
- out YUY2
- out UYVY
- out BGR24,BGR16,BGR15 ; BGR32 is buggy, at least with one sample
-
videocodec ffdv
info "FFmpeg DV"
status working
@@ -1553,6 +1540,20 @@ videocodec ffdv
dll dvvideo
out 411P,422P,YV12
+videocodec qdv
+ info "Sony Digital Video (DV)"
+ status working
+ fourcc dvsl,dvsd,dvhd ; ????
+ fourcc DVSD dvsd ; pal .avi
+ fourcc "dvcp" dvsd ; pal .mov
+ fourcc "dvc " dvsd ; ntsc .mov
+ driver dshow
+ dll "qdv.dll"
+ guid 0xB1B77C00, 0xC3E4, 0x11CF, 0xAF, 0x79, 0x00, 0xAA, 0x00, 0xB6, 0x7A, 0x42
+ out YUY2
+ out UYVY
+ out BGR24,BGR16,BGR15 ; BGR32 is buggy, at least with one sample
+
videocodec libdv
info "Raw DV (libdv)"
status working
@@ -3035,6 +3036,7 @@ audiocodec ffqclp
info "FFmpeg QCLP audio"
status buggy
format 0x706C6351 ; "Qclp"
+ format 0x70637173 ; "sqcp"
driver ffmpeg
dll "qcelp"
diff --git a/help/help_mp-bg.h b/help/help_mp-bg.h
index cd989fe..0ac8450 100644
--- a/help/help_mp-bg.h
+++ b/help/help_mp-bg.h
@@ -6,7 +6,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"УпоÑÑеба: mplayer [опÑии] [url|пÑÑ/]име_на_Ñайл\n"
"\n"
"ÐÑновни опÑии: (пÑлниÑÑ ÑпиÑÑк е в ÑÑководÑÑвоÑо - 'man mplayer')\n"
diff --git a/help/help_mp-cs.h b/help/help_mp-cs.h
index 35898fd..a9f0db0 100644
--- a/help/help_mp-cs.h
+++ b/help/help_mp-cs.h
@@ -7,7 +7,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"PoužitÃ: mplayer [volby] [url|cesta/]jméno_souboru\n"
"\n"
"Základnà volby: (úplný seznam najdete v manuálové stránce)\n"
diff --git a/help/help_mp-de.h b/help/help_mp-de.h
index 58a21f0..db7f5ca 100644
--- a/help/help_mp-de.h
+++ b/help/help_mp-de.h
@@ -12,7 +12,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Verwendung: mplayer [Optionen] [URL|Verzeichnis/]Dateiname\n"
"\n"
"Basisoptionen: (siehe Manpage für eine vollständige Liste aller Optionen!)\n"
diff --git a/help/help_mp-dk.h b/help/help_mp-dk.h
index 3b633a5..d1c149e 100644
--- a/help/help_mp-dk.h
+++ b/help/help_mp-dk.h
@@ -7,7 +7,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Benyt: mplayer [indstillinger] [URL|sti/]filnavn\n"
"\n"
"Basale indstillinger (se manualen for en komplet liste):\n"
diff --git a/help/help_mp-el.h b/help/help_mp-el.h
index e01ef40..bc9e6f4 100644
--- a/help/help_mp-el.h
+++ b/help/help_mp-el.h
@@ -5,7 +5,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Usage: mplayer [εÏιλογÎÏ] [url|διαδÏομή/]Ïνομα_αÏÏείοÏ
\n"
"\n"
"ÎαÏικÎÏ ÎµÏιλογÎÏ: (ÎναÏÏÎξÏε ÏÏη Ïελίδα εγÏειÏιδίοÏ
για ολοκληÏÏμÎνη λίÏÏα με εÏιλογÎÏ)\n"
diff --git a/help/help_mp-en.h b/help/help_mp-en.h
index 75d3254..cea08e9 100644
--- a/help/help_mp-en.h
+++ b/help/help_mp-en.h
@@ -1,4 +1,4 @@
-// $Revision: 28122 $
+// $Revision: 28860 $
// MASTER FILE. Use this file as base for translations.
// Translated files should be sent to the mplayer-DOCS mailing list or
// to the help messages maintainer, see DOCS/tech/MAINTAINERS.
@@ -13,7 +13,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Usage: mplayer [options] [url|path/]filename\n"
"\n"
"Basic options: (complete list in the man page)\n"
diff --git a/help/help_mp-es.h b/help/help_mp-es.h
index f25d18e..3de10bb 100644
--- a/help/help_mp-es.h
+++ b/help/help_mp-es.h
@@ -17,7 +17,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Uso: mplayer [opciones] [url o ruta del archivo]\n"
"\n"
"Opciones básicas: ('man mplayer' para una lista completa)\n"
diff --git a/help/help_mp-fr.h b/help/help_mp-fr.h
index 339674d..9a8cbf2 100644
--- a/help/help_mp-fr.h
+++ b/help/help_mp-fr.h
@@ -8,7 +8,7 @@
// ========================= Aide MPlayer ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Utilisation : mplayer [options] [url|répertoire/]fichier\n"
"\n"
"Options de base : (liste complète dans la page de man)\n"
diff --git a/help/help_mp-hu.h b/help/help_mp-hu.h
index bcea3f2..770c552 100644
--- a/help/help_mp-hu.h
+++ b/help/help_mp-hu.h
@@ -3,13 +3,13 @@
//... Okay enough of the hw, now send the other two!
//
// Updated by: Gabrov <gabrov at freemail.hu>
-// Sync'ed with help_mp-en.h r28122 (2008. 12. 17.)
+// Sync'ed with help_mp-en.h r28860 (2009. 03. 09.)
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"IndÃtás: mplayer [opciók] [url|útvonal/]fájlnév\n"
"\n"
"AlapvetŠopciók: (az összes opció listájához lásd a man lapot)\n"
diff --git a/help/help_mp-it.h b/help/help_mp-it.h
index 5e7459d..c747ae3 100644
--- a/help/help_mp-it.h
+++ b/help/help_mp-it.h
@@ -8,7 +8,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Uso: mplayer [opzioni] [url|percorso/]nome_file\n"
"\n"
"Opzioni di base: (vedi la pagina man per la lista completa)\n"
diff --git a/help/help_mp-ja.h b/help/help_mp-ja.h
index 7fd1c0b..61aa98a 100644
--- a/help/help_mp-ja.h
+++ b/help/help_mp-ja.h
@@ -6,7 +6,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"ä½¿ãæ¹: mplayer [ãªãã·ã§ã³] [url|ãã¹/]ãã¡ã¤ã«å\n"
"\n"
"åºæ¬çãªãªãã·ã§ã³: (man page ã«å
¨ã¦ç¶²ç¾
ããã¦ãã¾ã)\n"
diff --git a/help/help_mp-ko.h b/help/help_mp-ko.h
index 6a9a130..7d883a3 100644
--- a/help/help_mp-ko.h
+++ b/help/help_mp-ko.h
@@ -4,7 +4,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"ì¬ì©ë²: mplayer [ì íì¬í] [url|ê²½ë¡/]íì¼ëª
\n"
"\n"
"기본 ì íì¬í: (ì ì²´ 목ë¡ì man íì´ì§ 참조)\n"
diff --git a/help/help_mp-mk.h b/help/help_mp-mk.h
index fb0c6fc..a65ea9d 100644
--- a/help/help_mp-mk.h
+++ b/help/help_mp-mk.h
@@ -5,7 +5,7 @@
// ========================= MPlayer ÐÐ¾Ð¼Ð¾Ñ ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"УпоÑÑеба: mplayer [опÑии] [url|паÑека/]ÐмеÐаÐаÑоÑекаÑа\n"
"\n"
"ÐÑновни ÐпÑии: (комплеÑна лиÑÑа на man ÑÑÑаниÑаÑа)\n"
diff --git a/help/help_mp-nb.h b/help/help_mp-nb.h
index 9e6c860..c420728 100644
--- a/help/help_mp-nb.h
+++ b/help/help_mp-nb.h
@@ -4,7 +4,7 @@
// ========================= MPlayer hjelp ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Bruk: mplayer [valg] [sti/]filnavn\n"
"\n"
"Valg:\n"
diff --git a/help/help_mp-nl.h b/help/help_mp-nl.h
index dabb187..9171a03 100644
--- a/help/help_mp-nl.h
+++ b/help/help_mp-nl.h
@@ -3,7 +3,7 @@
//synced with help_mp-en.h revision 1.152
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Gebruik: mplayer [opties] [url|pad/]bestandsnaam\n"
"\n"
"Basis-opties: (volledige lijst in de man-pagina's)\n"
diff --git a/help/help_mp-pl.h b/help/help_mp-pl.h
index 7d09950..14191d1 100644
--- a/help/help_mp-pl.h
+++ b/help/help_mp-pl.h
@@ -6,7 +6,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Użycie: mplayer [opcje] [url|Åcieżka/]plik\n"
"\n"
"Podstawowe opcje: (peÅna lista dostÄpna na stronie man)\n"
diff --git a/help/help_mp-pt_BR.h b/help/help_mp-pt_BR.h
index 8cc56a1..bcb6eef 100644
--- a/help/help_mp-pt_BR.h
+++ b/help/help_mp-pt_BR.h
@@ -6,7 +6,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Uso: mplayer [opções] [url|caminho/]nome-do-arquivo\n"
"\n"
"Opções básicas: (lista completa na página do manual)\n"
diff --git a/help/help_mp-ro.h b/help/help_mp-ro.h
index ff71201..26f675e 100644
--- a/help/help_mp-ro.h
+++ b/help/help_mp-ro.h
@@ -1,5 +1,5 @@
// FIXME: This needs to be redone properly.
-// Partially sync'ed with help_mp-en.h $Revision: 27402 $
+// Partially sync'ed with help_mp-en.h $Revision: 28860 $
// This is a retranslation of the file by Bogdan Butnaru <bogdanb at fastmail.fm>,
// based on the previous translation by Codre Adrian
// <codreadrian at softhome.net> (address bounces).
@@ -9,7 +9,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Folosire: mplayer [opþiuni] [url|cale/]numefiºier\n"
"\n"
"Opþiuni principale: (lista completã în pagina man)\n"
diff --git a/help/help_mp-ru.h b/help/help_mp-ru.h
index d9906b1..d997bf1 100644
--- a/help/help_mp-ru.h
+++ b/help/help_mp-ru.h
@@ -2,13 +2,13 @@
// Dmitry Baryshkov <mitya at school.ioffe.ru>
// Reworked by: Andrew Savchenko aka Bircoph <Bircoph[at]list[dot]ru>
-// Synced with help_mp-en.h: r28122
+// Synced with help_mp-en.h: r28860
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"ÐÑполÑзование: mplayer [опÑии] [URL|пÑÑÑ/]имÑ_Ñайла\n"
"\n"
"ÐазовÑе опÑии: (полнÑй ÑпиÑок Ñм. на man-ÑÑÑаниÑе)\n"
diff --git a/help/help_mp-sk.h b/help/help_mp-sk.h
index ed54ec2..875aded 100644
--- a/help/help_mp-sk.h
+++ b/help/help_mp-sk.h
@@ -7,7 +7,7 @@
#ifdef HELP_MP_DEFINE_STATIC
// Preklad do slovenÄiny
-static char help_text[]=
+static const char help_text[]=
"Použitie: mplayer [prepÃnaÄe] [url|cesta/]menosúboru\n"
"\n"
"Základné prepÃnaÄe: (Kompletný zoznam nájdete v man stránke)\n"
diff --git a/help/help_mp-sv.h b/help/help_mp-sv.h
index 6ce5f43..79e624b 100644
--- a/help/help_mp-sv.h
+++ b/help/help_mp-sv.h
@@ -4,7 +4,7 @@
// ========================= MPlayer hjälp ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Användning: mplayer [argument] [url|sökväg/]filnamn\n"
"\n"
"Grundläggande argument: (komplett lista återfinns i `man mplayer`)\n"
diff --git a/help/help_mp-tr.h b/help/help_mp-tr.h
index 23b34a8..ae7b57c 100644
--- a/help/help_mp-tr.h
+++ b/help/help_mp-tr.h
@@ -7,7 +7,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"Kullanım: mplayer [seçenekler] [adres|yol/]dosya adı\n"
"\n"
"Genel seçenekler: (Tüm seçenekler için man sayfalarına bakınız)\n"
diff --git a/help/help_mp-uk.h b/help/help_mp-uk.h
index 6b8a9ac..bebc874 100644
--- a/help/help_mp-uk.h
+++ b/help/help_mp-uk.h
@@ -7,7 +7,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"ÐапÑÑк: mplayer [опÑÑÑ] [path/]filename\n"
"\n"
"ÐпÑÑÑ:\n"
@@ -947,6 +947,128 @@ static char help_text[]=
#define MSGTR_LIBVO_MGA_ResolutionTooHigh "[MGA] РозÑиÑÐµÐ½Ð½Ñ Ð´Ð¶ÐµÑела, Ñ ÐºÑайнÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð² Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð²Ð¸Ð¼ÑÑÑ, бÑлÑÑе нÑж 1023x1023.\n[MGA] ÐеÑемаÑÑÑабÑйÑе пÑогÑамно або викоÑÑÑайÑе -lavdopts lowres=1.\n"
#define MSGTR_LIBVO_MGA_mgavidVersionMismatch "[MGA] веÑÑÑÑ Ð´ÑайвеÑÑ mga_vid ÑдÑа (%u) Ñа MPlayer (%u) не ÑпÑвпадаÑÑÑ\n"
+// vo_null.c
+#define MSGTR_LIBVO_NULL_UnknownSubdevice "[VO_NULL] ÐевÑдомий пÑдпÑиÑÑÑÑй: %s.\n"
+
+// vo_png.c
+#define MSGTR_LIBVO_PNG_Warning1 "[VO_PNG] ÐопеÑедженнÑ: ÑÑÐ²ÐµÐ½Ñ ÑÑиÑÐ½ÐµÐ½Ð½Ñ Ð²ÑÑановлено 0, ÑÑиÑÐ½ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾!\n"
+#define MSGTR_LIBVO_PNG_Warning2 "[VO_PNG] ÐнÑо: ÐикоÑиÑÑайÑе -vo png:z=<n> Ñоб вÑÑановиÑи ÑÑÐ²ÐµÐ½Ñ ÑÑиÑÐ½ÐµÐ½Ð½Ñ Ð· 0 до 9.\n"
+#define MSGTR_LIBVO_PNG_Warning3 "[VO_PNG] ÐнÑо: (0 = без ÑÑиÑненнÑ, 1 = найÑвидÑа, найповÑлÑнÑÑа - 9 але найкÑаÑе ÑÑиÑненнÑ)\n"
+#define MSGTR_LIBVO_PNG_ErrorOpeningForWriting "\n[VO_PNG] Ðомилка пÑи вÑдкÑиÑÑÑ '%s' Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ!\n"
+#define MSGTR_LIBVO_PNG_ErrorInCreatePng "[VO_PNG] Ðомилка пÑи ÑÑвоÑÐµÐ½Ð½Ñ png.\n"
+
+// vo_pnm.c
+#define MSGTR_VO_PNM_ASCIIMode "Режим ASCII ÑвÑмкнено."
+#define MSGTR_VO_PNM_RawMode "Режим Raw ÑвÑмкнено."
+#define MSGTR_VO_PNM_PPMType "ÐапиÑе Ñайли PPM."
+#define MSGTR_VO_PNM_PGMType "ÐапиÑе Ñайли PGM."
+#define MSGTR_VO_PNM_PGMYUVType "ÐапиÑе Ñайли PGMYUV."
+
+// vo_sdl.c
+#define MSGTR_LIBVO_SDL_CouldntGetAnyAcceptableSDLModeForOutput "[VO_SDL] Ðе Ð¼Ð¾Ð¶Ñ Ð²Ð¸Ð²ÐµÑÑи пÑийнÑÑний SDL Mode.\n"
+#define MSGTR_LIBVO_SDL_SetVideoModeFailed "[VO_SDL] set_video_mode: ÐбÑй SDL_SetVideoMode: %s.\n"
+#define MSGTR_LIBVO_SDL_SetVideoModeFailedFull "[VO_SDL] Set_fullmode: ÐбÑй SDL_SetVideoMode: %s.\n"
+#define MSGTR_LIBVO_SDL_MappingI420ToIYUV "[VO_SDL] ÐоказÑÑ I420 Ñ IYUV.\n"
+#define MSGTR_LIBVO_SDL_UnsupportedImageFormat "[VO_SDL] ФоÑÐ¼Ð°Ñ ÐºÐ°ÑÑинки не пÑдÑÑимÑÑÑÑÑÑ (0x%X).\n"
+#define MSGTR_LIBVO_SDL_InfoPleaseUseVmOrZoom "[VO_SDL] ÐнÑо - ÑпÑобÑйÑе -vm Ñи -zoom Ñоб пеÑейÑи до найкÑаÑÐ¾Ñ ÑоздÑлÑÐ½Ð¾Ñ Ð·Ð´Ð°ÑноÑÑÑ.\n"
+#define MSGTR_LIBVO_SDL_FailedToSetVideoMode "[VO_SDL] Ðе вдалоÑÑ Ð²ÑÑановиÑи вÑдео Ñежим: %s.\n"
+#define MSGTR_LIBVO_SDL_CouldntCreateAYUVOverlay "[VO_SDL] Ðе вдалоÑÑ ÑÑвоÑиÑи овеÑлей YUV: %s.\n"
+#define MSGTR_LIBVO_SDL_CouldntCreateARGBSurface "[VO_SDL] Ðе вдалоÑÑ ÑÑвоÑиÑи повеÑÑ
Ð½Ñ RGB: %s.\n"
+#define MSGTR_LIBVO_SDL_UsingDepthColorspaceConversion "[VO_SDL] ÐикоÑиÑÑовÑÑ Ð¿ÐµÑеÑвоÑÐµÐ½Ð½Ñ Ð³Ð»Ð¸Ð±Ð¸Ð½Ð¸/колÑоÑового пÑоÑÑоÑÑ, Ñе ÑповÑлÑниÑÑ Ð¿ÑоÑÑÐºÐ°Ð½Ð½Ñ Ð¿ÑоÑеÑÑ (%ibpp -> %ibpp).\n"
+#define MSGTR_LIBVO_SDL_UnsupportedImageFormatInDrawslice "[VO_SDL] ФоÑÐ¼Ð°Ñ ÐºÐ°ÑÑинки не пÑдÑÑимÑÑÑÑÑÑ Ñ draw_slice, повÑдомÑе ÑозÑобникÑв MPlayer!\n"
+#define MSGTR_LIBVO_SDL_BlitFailed "[VO_SDL] ÐбÑй Blit: %s.\n"
+#define MSGTR_LIBVO_SDL_InitializationFailed "[VO_SDL] ÐнÑÑÑÑлÑзаÑÑÑ SDL не вдалаÑÑ: %s.\n"
+#define MSGTR_LIBVO_SDL_UsingDriver "[VO_SDL] ÐикоÑиÑÑовÑÑ Ð´ÑайвеÑ: %s.\n"
+
+// vo_svga.c
+#define MSGTR_LIBVO_SVGA_ForcedVidmodeNotAvailable "[VO_SVGA] ФоÑÑований vid_mode %d (%s) не доÑÑÑпний.\n"
+#define MSGTR_LIBVO_SVGA_ForcedVidmodeTooSmall "[VO_SVGA] ФоÑÑований vid_mode %d (%s) замалий.\n"
+#define MSGTR_LIBVO_SVGA_Vidmode "[VO_SVGA] Vid_mode: %d, %dx%d %dbpp.\n"
+#define MSGTR_LIBVO_SVGA_VgasetmodeFailed "[VO_SVGA] ÐбÑй Vga_setmode(%d).\n"
+#define MSGTR_LIBVO_SVGA_VideoModeIsLinearAndMemcpyCouldBeUsed "[VO_SVGA] Режим ÐÑдео лÑнÑйний Ñа Ð´Ð»Ñ Ð¿ÐµÑедаÑÑ Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи\nвикоÑиÑÑаний memcpy.\n"
+#define MSGTR_LIBVO_SVGA_VideoModeHasHardwareAcceleration "[VO_SVGA] Режим ÐÑдео Ð¼Ð°Ñ Ð°Ð¿Ð°ÑаÑне пÑиÑкоÑÐµÐ½Ð½Ñ ÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶Ðµ бÑÑи кокоÑиÑÑаний put_image.\n"
+#define MSGTR_LIBVO_SVGA_IfItWorksForYouIWouldLikeToKnow "[VO_SVGA] ЯкÑо Ñе пÑаÑÑÑ Ñ Ð²Ð°Ñ, дайÑе Ð¼ÐµÐ½Ñ Ð·Ð½Ð°Ñи.\n[VO_SVGA] (надÑÑлÑÑÑ Ð»Ð¾Ò Ð· `mplayer test.avi -v -v -v -v &> svga.log`). ÐÑкÑÑ!\n"
+#define MSGTR_LIBVO_SVGA_VideoModeHas "[VO_SVGA] Режим ÐÑдео Ð¼Ð°Ñ %d ÑÑоÑÑнкÑ(ок/ки).\n"
+#define MSGTR_LIBVO_SVGA_CenteringImageStartAt "[VO_SVGA] Centering image. Starting at (%d,%d)\n"
+#define MSGTR_LIBVO_SVGA_UsingVidix "[VO_SVGA] ÐикоÑиÑÑовÑÑ VIDIX. w=%i h=%i mw=%i mh=%i\n"
+
+// vo_tdfx_vid.c
+#define MSGTR_LIBVO_TDFXVID_Move "[VO_TDXVID] ÐеÑемÑÑÑÑ %d(%d) x %d => %d.\n"
+#define MSGTR_LIBVO_TDFXVID_AGPMoveFailedToClearTheScreen "[VO_TDFXVID] ÐеÑемÑÑÐµÐ½Ð½Ñ AGP не вдалоÑÑ Ð¾ÑиÑÑиÑи екÑан.\n"
+#define MSGTR_LIBVO_TDFXVID_BlitFailed "[VO_TDFXVID] ÐбÑй Blit.\n"
+#define MSGTR_LIBVO_TDFXVID_NonNativeOverlayFormatNeedConversion "[VO_TDFXVID] ÐеÑÑандаÑÑний ÑоÑÐ¼Ð°Ñ Ð¾Ð²ÐµÑÐ»ÐµÑ Ð¿Ð¾ÑÑебÑÑ Ð¿ÐµÑеÑвоÑеннÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_UnsupportedInputFormat "[VO_TDFXVID] ФоÑÐ¼Ð°Ñ Ð²Ð²Ð¾Ð´Ñ 0x%x не пÑдÑÑимÑÑÑÑÑÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_OverlaySetupFailed "[VO_TDFXVID] ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð²ÐµÑÐ»ÐµÑ Ð½Ðµ вдалоÑÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_OverlayOnFailed "[VO_TDFXVID] Ðомилка овеÑлеÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_OverlayReady "[VO_TDFXVID] ÐвеÑлей гоÑовий: %d(%d) x %d @ %d => %d(%d) x %d @ %d.\n"
+#define MSGTR_LIBVO_TDFXVID_TextureBlitReady "[VO_TDFXVID] Blit ÑекÑÑÑÑ Ð³Ð¾Ñовий: %d(%d) x %d @ %d => %d(%d) x %d @ %d.\n"
+#define MSGTR_LIBVO_TDFXVID_OverlayOffFailed "[VO_TDFXVID] ÐÐ²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¾Ð²ÐµÑÐ»ÐµÑ Ð½Ðµ вдолоÑÑ\n"
+#define MSGTR_LIBVO_TDFXVID_CantOpen "[VO_TDFXVID] Ðе Ð¼Ð¾Ð¶Ñ Ð²ÑдкÑиÑи %s: %s.\n"
+#define MSGTR_LIBVO_TDFXVID_CantGetCurrentCfg "[VO_TDFXVID] Ðе Ð¼Ð¾Ð¶Ñ Ð¾ÑÑимаÑи поÑоÑÐ½Ñ ÐºÐ¾Ð½ÑÑгÑÑаÑÑÑ: %s.\n"
+#define MSGTR_LIBVO_TDFXVID_MemmapFailed "[VO_TDFXVID] ÐбÑй memmap !!!!!\n"
+#define MSGTR_LIBVO_TDFXVID_GetImageTodo "ТÑеба доÑобиÑи каÑÑинкÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_AgpMoveFailed "[VO_TDFXVID] ÐеÑемÑÑÐµÐ½Ð½Ñ AGP не вдалоÑÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_SetYuvFailed "[VO_TDFXVID] ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ YUV не вдалоÑÑ.\n"
+#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnYPlane "[VO_TDFXVID] ÐеÑемÑÑÐµÐ½Ð½Ñ AGP не вдалоÑÑ Ð½Ð° пÑоÑкÑÑÑ Y.\n"
+#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnUPlane "[VO_TDFXVID] ÐеÑемÑÑÐµÐ½Ð½Ñ AGP не вдалоÑÑ Ð½Ð° пÑоÑкÑÑÑ U.\n"
+#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnVPlane "[VO_TDFXVID] ÐеÑемÑÑÐµÐ½Ð½Ñ AGP не вдалоÑÑ Ð½Ð° пÑоÑкÑÑÑ V.\n"
+#define MSGTR_LIBVO_TDFXVID_UnknownFormat "[VO_TDFXVID] невÑдомий ÑоÑмаÑ: 0x%x.\n"
+
+// vo_tdfxfb.c
+#define MSGTR_LIBVO_TDFXFB_CantOpen "[VO_TDFXFB] Ðе Ð¼Ð¾Ð¶Ñ Ð²ÑдкÑиÑи %s: %s.\n"
+#define MSGTR_LIBVO_TDFXFB_ProblemWithFbitgetFscreenInfo "[VO_TDFXFB] ÐÑоблема з FBITGET_FSCREENINFO ioctl: %s.\n"
+#define MSGTR_LIBVO_TDFXFB_ProblemWithFbitgetVscreenInfo "[VO_TDFXFB] ÐÑоблема з FBITGET_VSCREENINFO ioctl: %s.\n"
+#define MSGTR_LIBVO_TDFXFB_ThisDriverOnlySupports "[VO_TDFXFB] Це дÑÐ°Ð¹Ð²ÐµÑ Ð¿ÑдÑÑимÑÑ ÑÑлÑки 3Dfx Banshee, Voodoo3 Ñа Voodoo 5.\n"
+#define MSGTR_LIBVO_TDFXFB_OutputIsNotSupported "[VO_TDFXFB] %d вивÑд bpp не пÑдÑÑимÑÑÑÑÑÑ.\n"
+#define MSGTR_LIBVO_TDFXFB_CouldntMapMemoryAreas "[VO_TDFXFB] Ðе Ð¼Ð¾Ð¶Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñи ÑаÑÑини пам'ÑÑÑ: %s.\n"
+#define MSGTR_LIBVO_TDFXFB_BppOutputIsNotSupported "[VO_TDFXFB] %d вивÑд bpp не пÑдÑÑимÑÑÑÑÑÑ (ЦÑого зовÑÑм не повинно ÑÑаплÑÑиÑÑ).\n"
+#define MSGTR_LIBVO_TDFXFB_SomethingIsWrongWithControl "[VO_TDFXFB] Ðй! ЩоÑÑ ÑÑалоÑÑ Ð· control().\n"
+#define MSGTR_LIBVO_TDFXFB_NotEnoughVideoMemoryToPlay "[VO_TDFXFB] Ðе доÑÑаÑнÑо пам'ÑÑÑ Ñоб пÑогÑаÑи Ñе вÑдео. СпÑобÑйÑе менÑÑ ÑоздÑлÑÐ½Ñ Ð·Ð´Ð°ÑнÑÑÑÑ.\n"
+#define MSGTR_LIBVO_TDFXFB_ScreenIs "[VO_TDFXFB] ÐкÑан %dx%d на %d bpp, Ñ %dx%d на %d bpp, Ñежим %dx%d.\n"
+
+// vo_tga.c
+#define MSGTR_LIBVO_TGA_UnknownSubdevice "[VO_TGA] ÐевÑдомий пÑдпÑиÑÑÑÑй: %s.\n"
+
+// vo_vesa.c
+#define MSGTR_LIBVO_VESA_FatalErrorOccurred "[VO_VESA] Ðиникла ÑаÑалÑно помилка! Ðе Ð¼Ð¾Ð¶Ñ Ð¿ÑодовжиÑи.\n"
+#define MSGTR_LIBVO_VESA_UnknownSubdevice "[VO_VESA] невÑдомий пÑдпÑиÑÑÑÑй: '%s'.\n"
+#define MSGTR_LIBVO_VESA_YouHaveTooLittleVideoMemory "[VO_VESA] Ðамало вÑдео пам'ÑÑÑ Ð´Ð»Ñ ÑÑого ÑежимÑ:\n[VO_VESA] ÐоÑÑебÑÑ: %08lX Ñ: %08lX.\n"
+#define MSGTR_LIBVO_VESA_YouHaveToSpecifyTheCapabilitiesOfTheMonitor "[VO_VESA] Ðи маÑÑе вказаÑи можливоÑÑÑ Ð¼Ð¾Ð½ÑÑоÑа. Ðе змÑнÑÑ ÑаÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ.\n"
+#define MSGTR_LIBVO_VESA_UnableToFitTheMode "[VO_VESA] Режим не вÑдповÑÐ´Ð°Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñм монÑÑоÑа. Ðе змÑнÑÑ ÑаÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ.\n"
+#define MSGTR_LIBVO_VESA_DetectedInternalFatalError "[VO_VESA] ÐиÑвлена ÑаÑалÑна внÑÑÑÑÑÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: init викликаний пеÑед preinit.\n"
+#define MSGTR_LIBVO_VESA_SwitchFlipIsNotSupported "[VO_VESA] ÐпÑÑÑ -flip не пÑдÑÑимÑÑÑÑÑÑ.\n"
+#define MSGTR_LIBVO_VESA_PossibleReasonNoVbe2BiosFound "[VO_VESA] Ðожлива пÑиÑина: Ðе знайдено VBE2 BIOS.\n"
+#define MSGTR_LIBVO_VESA_FoundVesaVbeBiosVersion "[VO_VESA] Ðнайдено VESA VBE BIOS, веÑÑÑÑ %x.%x ÑевÑзÑÑ: %x.\n"
+#define MSGTR_LIBVO_VESA_VideoMemory "[VO_VESA] ÐÑдео пам'ÑÑÑ: %u Ðб.\n"
+#define MSGTR_LIBVO_VESA_Capabilites "[VO_VESA] ÐожливоÑÑÑ VESA: %s %s %s %s %s.\n"
+#define MSGTR_LIBVO_VESA_BelowWillBePrintedOemInfo "[VO_VESA] !!! OEM ÑнÑоÑмаÑÑÑ Ð±Ñде виведена ниÑе !!!\n"
+#define MSGTR_LIBVO_VESA_YouShouldSee5OemRelatedLines "[VO_VESA] Ðи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð±Ð°ÑиÑи 5 ÑÑдкÑв ÑнÑо пÑо OEM ниÑе; ЯкÑо нÑ, Ñ Ð²Ð°Ñ Ð¿Ð¾Ð»Ð°Ð¼Ð°Ð½Ð° vm86.\n"
+#define MSGTR_LIBVO_VESA_OemInfo "[VO_VESA] OEM ÑнÑо: %s.\n"
+#define MSGTR_LIBVO_VESA_OemRevision "[VO_VESA] OEM ÑевÑзÑÑ: %x.\n"
+#define MSGTR_LIBVO_VESA_OemVendor "[VO_VESA] OEM поÑÑаÑалÑник: %s.\n"
+#define MSGTR_LIBVO_VESA_OemProductName "[VO_VESA] Ðазва пÑодÑкÑÑ OEM: %s.\n"
+#define MSGTR_LIBVO_VESA_OemProductRev "[VO_VESA] РевÑзÑÑ Ð¿ÑодÑкÑÑ OEM: %s.\n"
+#define MSGTR_LIBVO_VESA_Hint "[VO_VESA] ÐÑдказка: ÐÐ»Ñ ÑобоÑи ТÐ-виÑ
Ð¾Ð´Ñ Ð²Ð°Ð¼ необÑ
Ñдно пÑдклÑÑиÑи ТРÑоз'Ñм\n"\
+"[VO_VESA] пеÑед заванÑаженнÑм Ñк VESA BIOS ÑнÑÑÑÑлÑзÑÑ Ñебе пÑоÑÑгом POST.\n"
+#define MSGTR_LIBVO_VESA_UsingVesaMode "[VO_VESA] ÐикоÑиÑÑовÑÑ Ñежим VESA (%u) = %x [%ux%u@%u]\n"
+#define MSGTR_LIBVO_VESA_CantInitializeSwscaler "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ ÑнÑÑÑÑлÑзÑваÑи пÑогÑамне маÑÑÑабÑваннÑ.\n"
+#define MSGTR_LIBVO_VESA_CantUseDga "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи DGA. ФоÑÑÑÑ Ñежим комÑÑаÑÑÑ ÑегменÑÑв. :(\n"
+#define MSGTR_LIBVO_VESA_UsingDga "[VO_VESA] ÐикоÑиÑÑовÑÑ DGA (ÑÑзиÑÐ½Ñ ÑеÑÑÑÑи: %08lXh, %08lXh)"
+#define MSGTR_LIBVO_VESA_CantUseDoubleBuffering "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑаÑи подвÑÐ¹Ð½Ñ Ð±ÑÑеÑизаÑÑÑ: не доÑÑаÑнÑо вÑдео пам'ÑÑÑ.\n"
+#define MSGTR_LIBVO_VESA_CantFindNeitherDga "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð½Ð°Ð¹Ñи Ð½Ñ DGA Ð½Ñ Ð¿ÐµÑемÑÑÑваного ÑÑÐµÐ¹Ð¼Ñ Ð²Ñкна.\n"
+#define MSGTR_LIBVO_VESA_YouveForcedDga "[VO_VESA] Ðи ÑоÑÑÑвали DGA. ÐиÑ
оджÑ\n"
+#define MSGTR_LIBVO_VESA_CantFindValidWindowAddress "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð½Ð°Ð¹Ñи пÑавилÑÐ½Ñ Ð°Ð´ÑеÑÑ Ð²Ñкна.\n"
+#define MSGTR_LIBVO_VESA_UsingBankSwitchingMode "[VO_VESA] ÐикоÑиÑÑовÑÑ Ñежим комÑÑаÑÑÑ ÑегменÑÑв (ÑÑзиÑÐ½Ñ ÑеÑÑÑÑи: %08lXh, %08lXh).\n"
+#define MSGTR_LIBVO_VESA_CantAllocateTemporaryBuffer "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ Ð²Ð¸Ð´ÑлиÑи ÑимÑаÑовий бÑÑеÑ.\n"
+#define MSGTR_LIBVO_VESA_SorryUnsupportedMode "[VO_VESA] ÐибаÑÑе, Ñежим не пÑдÑÑимÑÑÑÑÑÑ -- ÑпÑобÑйÑе -x 640 -zoom.\n"
+#define MSGTR_LIBVO_VESA_OhYouReallyHavePictureOnTv "[VO_VESA] Ð, ви ÑпÑÐ°Ð²Ð´Ñ Ð¼Ð°ÑÑе каÑÑÐ¸Ð½ÐºÑ Ð½Ð° ТÐ!\n"
+#define MSGTR_LIBVO_VESA_CantInitialozeLinuxVideoOverlay "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ ÑнÑÑÑÑлÑзÑваÑи ÐÑдео овеÑлей Linux.\n"
+#define MSGTR_LIBVO_VESA_UsingVideoOverlay "[VO_VESA] ÐикоÑиÑÑовÑÑ Ð²Ñдео овеÑлей: %s.\n"
+#define MSGTR_LIBVO_VESA_CantInitializeVidixDriver "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ ÑнÑÑÑÑлÑзÑваÑи дÑÐ°Ð¹Ð²ÐµÑ VIDIX.\n"
+#define MSGTR_LIBVO_VESA_UsingVidix "[VO_VESA] ÐикоÑиÑÑовÑÑ VIDIX.\n"
+#define MSGTR_LIBVO_VESA_CantFindModeFor "[VO_VESA] Ðе Ð¼Ð¾Ð¶Ñ Ð·Ð½Ð°Ð¹Ñи Ñежим длÑ: %ux%u@%u.\n"
+#define MSGTR_LIBVO_VESA_InitializationComplete "[VO_VESA] ÐнÑÑÑÑлÑзаÑÑÑ VESA завеÑÑена.\n"
+
// open.c, stream.c:
#define MSGTR_CdDevNotfound "ÐомпакÑовÑд \"%s\" не знайдений!\n"
#define MSGTR_ErrTrackSelect "Ðомилка вибоÑÑ ÑÑÐµÐºÑ Ð½Ð° VCD!"
diff --git a/help/help_mp-zh_CN.h b/help/help_mp-zh_CN.h
index d5ce571..26df21c 100644
--- a/help/help_mp-zh_CN.h
+++ b/help/help_mp-zh_CN.h
@@ -17,7 +17,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"ç¨æ³ï¼ mplayer [é项] [URL|è·¯å¾/]æä»¶å\n"
"\n"
"åºæ¬éé¡¹ï¼ ï¼å®æ´å表åè§æå页ï¼\n"
diff --git a/help/help_mp-zh_TW.h b/help/help_mp-zh_TW.h
index 0d8770e..928d35a 100644
--- a/help/help_mp-zh_TW.h
+++ b/help/help_mp-zh_TW.h
@@ -9,7 +9,7 @@
// ========================= MPlayer help ===========================
#ifdef HELP_MP_DEFINE_STATIC
-static char help_text[]=
+static const char help_text[]=
"ç¨æ³: mplayer [é¸é
] [URL|è·¯å¾/]æä»¶å\n"
"\n"
"åºæ¬é¸é
: (宿´å表åè¦æåé )\n"
diff --git a/input/input.c b/input/input.c
index dcbeb2b..ee5342f 100644
--- a/input/input.c
+++ b/input/input.c
@@ -583,6 +583,7 @@ static mp_cmd_t* ar_cmd = NULL;
static unsigned int ar_delay = 100, ar_rate = 8, last_ar = 0;
static int use_joystick = 1, use_lirc = 1, use_lircc = 1;
+static int default_bindings = 1;
static char* config_file = "input.conf";
/* Apple Remote */
@@ -611,6 +612,8 @@ static m_option_t input_conf[] = {
{ "cmdlist", mp_input_print_cmd_list, CONF_TYPE_FUNC, CONF_GLOBAL, 0, 0, NULL },
{ "js-dev", &js_dev, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL },
{ "file", &in_file, CONF_TYPE_STRING, CONF_GLOBAL, 0, 0, NULL },
+ { "default-bindings", &default_bindings, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL },
+ { "nodefault-bindings", &default_bindings, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL },
{ NULL, NULL, 0, 0, 0, 0, NULL}
};
@@ -767,7 +770,7 @@ int mp_input_parse_and_queue_cmds(const char *str) {
mp_cmd_t*
mp_input_parse_cmd(char* str) {
int i,l;
- int pausing = 0;
+ int pausing = -1;
char *ptr,*e;
mp_cmd_t *cmd;
const mp_cmd_t *cmd_def;
@@ -817,6 +820,15 @@ mp_input_parse_cmd(char* str) {
cmd = calloc(1, sizeof(mp_cmd_t));
cmd->id = cmd_def->id;
cmd->name = strdup(cmd_def->name);
+ if (pausing == -1) {
+ switch (cmd->id) {
+ case MP_CMD_KEYDOWN_EVENTS:
+ case MP_CMD_SET_MOUSE_POS:
+ pausing = 4; break;
+ default:
+ pausing = 0; break;
+ }
+ }
cmd->pausing = pausing;
ptr = str;
@@ -1069,7 +1081,7 @@ mp_input_get_cmd_from_keys(int n,int* keys, int paused) {
cmd = mp_input_find_bind_for_key(cmd_binds,n,keys);
if(cmd_binds_default && cmd == NULL)
cmd = mp_input_find_bind_for_key(cmd_binds_default,n,keys);
- if(cmd == NULL)
+ if(default_bindings && cmd == NULL)
cmd = mp_input_find_bind_for_key(def_cmd_binds,n,keys);
if(cmd == NULL) {
diff --git a/liba52/a52.h b/liba52/a52.h
index fab88f5..293eb18 100644
--- a/liba52/a52.h
+++ b/liba52/a52.h
@@ -8,7 +8,7 @@
*
* Modified for use with MPlayer, changes contained in liba52_changes.diff.
* detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/
- * $Id: a52.h 18786 2006-06-22 13:34:00Z diego $
+ * $Id: a52.h 28832 2009-03-06 00:41:09Z diego $
*
* a52dec is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,6 +28,9 @@
#ifndef A52_H
#define A52_H
+#include <stdint.h>
+#include "mm_accel.h"
+
#ifndef LIBA52_DOUBLE
typedef float sample_t;
#else
diff --git a/liba52/liba52_changes.diff b/liba52/liba52_changes.diff
index 0e9e71c..206e84c 100644
--- a/liba52/liba52_changes.diff
+++ b/liba52/liba52_changes.diff
@@ -1,6 +1,6 @@
--- include/a52.h 2006-06-12 15:04:57.000000000 +0200
+++ liba52/a52.h 2006-06-05 02:23:02.000000000 +0200
-@@ -63,4 +63,9 @@
+@@ -59,4 +66,9 @@
int a52_block (a52_state_t * state);
void a52_free (a52_state_t * state);
@@ -12,11 +12,11 @@
#endif /* A52_H */
--- liba52/a52_internal.h 2006-06-12 15:05:07.000000000 +0200
+++ liba52/a52_internal.h 2006-06-05 02:23:02.000000000 +0200
-@@ -107,18 +107,34 @@
+@@ -103,18 +107,34 @@
#define DELTA_BIT_NONE (2)
#define DELTA_BIT_RESERVED (3)
-+#ifdef ARCH_X86_64
++#if ARCH_X86_64
+# define REG_a "rax"
+# define REG_d "rdx"
+# define REG_S "rsi"
@@ -52,7 +52,7 @@
+void imdct_do_512 (sample_t * data, sample_t * delay, sample_t bias);
--- liba52/bitstream.c 2006-06-12 15:05:07.000000000 +0200
+++ liba52/bitstream.c 2006-06-05 02:23:02.000000000 +0200
-@@ -35,6 +35,10 @@
+@@ -31,6 +35,10 @@
#define BUFFER_SIZE 4096
@@ -63,7 +63,7 @@
void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf)
{
int align;
-@@ -42,6 +46,9 @@
+@@ -38,6 +46,9 @@
align = (long)buf & 3;
state->buffer_start = (uint32_t *) (buf - align);
state->bits_left = 0;
@@ -75,7 +75,7 @@
--- liba52/bitstream.h 2006-06-12 15:05:07.000000000 +0200
+++ liba52/bitstream.h 2006-06-05 02:23:02.000000000 +0200
-@@ -25,6 +25,42 @@
+@@ -21,6 +25,42 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
@@ -91,7 +91,7 @@
+#define ALT_BITSTREAM_READER
+
+/* used to avoid misaligned exceptions on some archs (alpha, ...) */
-+#if defined (ARCH_X86) || defined(HAVE_ARMV6)
++#if ARCH_X86 || HAVE_ARMV6
+# define unaligned32(a) (*(uint32_t*)(a))
+#else
+# ifdef __GNUC__
@@ -118,7 +118,7 @@
/* (stolen from the kernel) */
#ifdef WORDS_BIGENDIAN
-@@ -32,7 +74,7 @@
+@@ -28,7 +68,7 @@
#else
@@ -127,7 +127,7 @@
# define swab32(x) __i386_swab32(x)
static inline const uint32_t __i386_swab32(uint32_t x)
-@@ -43,19 +85,34 @@
+@@ -39,19 +79,34 @@
# else
@@ -166,7 +166,7 @@
uint32_t result;
if (num_bits < state->bits_left) {
-@@ -65,10 +122,29 @@
+@@ -61,10 +116,29 @@
}
return a52_bitstream_get_bh (state, num_bits);
@@ -196,7 +196,7 @@
int32_t result;
if (num_bits < state->bits_left) {
-@@ -78,4 +154,5 @@
+@@ -74,4 +148,5 @@
}
return a52_bitstream_get_bh_2 (state, num_bits);
@@ -204,7 +204,7 @@
}
--- liba52/downmix.c 2006-06-12 15:17:53.000000000 +0200
+++ liba52/downmix.c 2006-06-05 02:23:02.000000000 +0200
-@@ -23,18 +23,46 @@
+@@ -19,18 +23,46 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -241,7 +241,7 @@
+{
+ a52_upmix= upmix_C;
+ a52_downmix= downmix_C;
-+#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+ if(mm_accel & MM_ACCEL_X86_MMX) a52_upmix= upmix_MMX;
+ if(mm_accel & MM_ACCEL_X86_SSE) a52_downmix= downmix_SSE;
+ if(mm_accel & MM_ACCEL_X86_3DNOW) a52_downmix= downmix_3dnow;
@@ -251,7 +251,7 @@
int a52_downmix_init (int input, int flags, sample_t * level,
sample_t clev, sample_t slev)
{
-@@ -451,7 +479,7 @@
+@@ -447,7 +479,7 @@
samples[i] = 0;
}
@@ -260,7 +260,7 @@
sample_t clev, sample_t slev)
{
switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
-@@ -563,7 +591,7 @@
+@@ -559,7 +591,7 @@
break;
case CONVERT (A52_3F2R, A52_2F1R):
@@ -269,7 +269,7 @@
move2to1 (samples + 768, samples + 512, bias);
break;
-@@ -587,12 +615,12 @@
+@@ -583,12 +615,12 @@
break;
case CONVERT (A52_3F1R, A52_3F2R):
@@ -284,12 +284,12 @@
{
switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
-@@ -657,3 +685,1104 @@
+@@ -653,3 +685,1104 @@
goto mix_31to21;
}
}
+
-+#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+static void mix2to1_SSE (sample_t * dest, sample_t * src, sample_t bias)
+{
+ __asm__ volatile(
@@ -1391,7 +1391,7 @@
+#endif // ARCH_X86 || ARCH_X86_64
--- liba52/imdct.c 2008-02-19 00:18:33.000000000 +0100
+++ liba52/imdct.c 2008-02-19 00:16:40.000000000 +0100
-@@ -26,6 +26,11 @@
+@@ -22,6 +26,11 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -1403,7 +1403,7 @@
*/
#include "config.h"
-@@ -43,12 +48,49 @@
+@@ -39,12 +48,50 @@
#include "a52.h"
#include "a52_internal.h"
#include "mm_accel.h"
@@ -1413,6 +1413,7 @@
+
+#ifdef RUNTIME_CPUDETECT
+#undef HAVE_AMD3DNOWEXT
++#define HAVE_AMD3DNOWEXT 0
+#endif
typedef struct complex_s {
@@ -1453,7 +1454,7 @@
static uint8_t fftorder[] = {
0,128, 64,192, 32,160,224, 96, 16,144, 80,208,240,112, 48,176,
8,136, 72,200, 40,168,232,104,248,120, 56,184, 24,152,216, 88,
-@@ -60,6 +102,40 @@
+@@ -56,6 +103,40 @@
6,134, 70,198, 38,166,230,102,246,118, 54,182, 22,150,214, 86
};
@@ -1473,7 +1474,7 @@
+static sample_t __attribute__((aligned(16))) xcos1[128];
+static sample_t __attribute__((aligned(16))) xsin1[128];
+
-+#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+// NOTE: SSE needs 16byte alignment or it will segfault
+//
+static float __attribute__((aligned(16))) sseSinCos1c[256];
@@ -1494,7 +1495,7 @@
/* Root values for IFFT */
static sample_t roots16[3];
static sample_t roots32[7];
-@@ -245,7 +321,7 @@
+@@ -241,7 +322,7 @@
ifft_pass (buf, roots128 - 32, 32);
}
@@ -1503,11 +1504,11 @@
{
int i, k;
sample_t t_r, t_i, a_r, a_i, b_r, b_i, w_1, w_2;
-@@ -289,6 +365,701 @@
+@@ -285,6 +366,702 @@
}
}
-+#ifdef HAVE_ALTIVEC
++#if HAVE_ALTIVEC
+
+#ifdef HAVE_ALTIVEC_H
+#include <altivec.h>
@@ -1852,10 +1853,9 @@
+
+// Stuff below this line is borrowed from libac3
+#include "srfftp.h"
-+#if defined(ARCH_X86) || defined(ARCH_X86_64)
-+#ifndef HAVE_AMD3DNOW
++#if ARCH_X86 || ARCH_X86_64
++#undef HAVE_AMD3DNOW
+#define HAVE_AMD3DNOW 1
-+#endif
+#include "srfftp_3dnow.h"
+
+const i_cmplx_t x_plus_minus_3dnow __attribute__ ((aligned (8))) = {{ 0x00000000UL, 0x80000000UL }};
@@ -1863,8 +1863,10 @@
+const complex_t HSQRT2_3DNOW __attribute__ ((aligned (8))) = { 0.707106781188, 0.707106781188 };
+
+#undef HAVE_AMD3DNOWEXT
++#define HAVE_AMD3DNOWEXT 0
+#include "imdct_3dnow.h"
-+#define HAVE_AMD3DNOWEXT
++#undef HAVE_AMD3DNOWEXT
++#define HAVE_AMD3DNOWEXT 1
+#include "imdct_3dnow.h"
+
+void
@@ -2205,7 +2207,7 @@
void a52_imdct_256(sample_t * data, sample_t * delay, sample_t bias)
{
int i, k;
-@@ -368,7 +1145,7 @@
+@@ -364,7 +1141,7 @@
void a52_imdct_init (uint32_t mm_accel)
{
@@ -2214,7 +2216,7 @@
double sum;
/* compute imdct window - kaiser-bessel derived window, alpha = 5.0 */
-@@ -420,6 +1197,99 @@
+@@ -416,6 +1193,99 @@
post2[i].real = cos ((M_PI / 128) * (i + 0.5));
post2[i].imag = sin ((M_PI / 128) * (i + 0.5));
}
@@ -2229,7 +2231,7 @@
+ w[i][k].imag = sin (-M_PI * k / j);
+ }
+ }
-+#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+ for (i = 0; i < 128; i++) {
+ sseSinCos1c[2*i+0]= xcos1[i];
+ sseSinCos1c[2*i+1]= -xcos1[i];
@@ -2283,7 +2285,7 @@
+ ifft128 = ifft128_c;
+ ifft64 = ifft64_c;
+
-+#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+ if(mm_accel & MM_ACCEL_X86_SSE)
+ {
+ fprintf (stderr, "Using SSE optimized IMDCT transform\n");
@@ -2303,7 +2305,7 @@
+ }
+ else
+#endif // ARCH_X86 || ARCH_X86_64
-+#ifdef HAVE_ALTIVEC
++#if HAVE_ALTIVEC
+ if (mm_accel & MM_ACCEL_PPC_ALTIVEC)
+ {
+ fprintf(stderr, "Using AltiVec optimized IMDCT transform\n");
@@ -2314,7 +2316,7 @@
#ifdef LIBA52_DJBFFT
if (mm_accel & MM_ACCEL_DJBFFT) {
-@@ -430,7 +1300,5 @@
+@@ -426,7 +1296,5 @@
#endif
{
fprintf (stderr, "No accelerated IMDCT transform found\n");
@@ -2324,7 +2326,7 @@
}
--- include/mm_accel.h 2006-06-12 15:05:00.000000000 +0200
+++ liba52/mm_accel.h 2006-06-05 02:23:04.000000000 +0200
-@@ -34,7 +34,12 @@
+@@ -30,7 +34,12 @@
/* x86 accelerations */
#define MM_ACCEL_X86_MMX 0x80000000
#define MM_ACCEL_X86_3DNOW 0x40000000
@@ -2339,7 +2341,7 @@
--- liba52/parse.c 2006-12-05 08:08:01.000000000 +0100
+++ liba52/parse.c 2006-12-05 08:08:44.000000000 +0100
-@@ -28,6 +28,7 @@
+@@ -24,6 +28,7 @@
#include "config.h"
#include <stdlib.h>
@@ -2347,7 +2349,7 @@
#include <string.h>
#include <inttypes.h>
-@@ -35,13 +36,12 @@
+@@ -31,13 +36,12 @@
#include "a52_internal.h"
#include "bitstream.h"
#include "tables.h"
@@ -2364,7 +2366,7 @@
#endif
typedef struct {
-@@ -64,7 +64,16 @@
+@@ -60,7 +64,16 @@
if (state == NULL)
return NULL;
@@ -2381,7 +2383,7 @@
if (state->samples == NULL) {
free (state);
return NULL;
-@@ -78,6 +87,7 @@
+@@ -74,6 +87,7 @@
state->lfsr_state = 1;
a52_imdct_init (mm_accel);
@@ -2389,7 +2391,7 @@
return state;
}
-@@ -145,7 +155,7 @@
+@@ -141,7 +155,7 @@
state->acmod = acmod = buf[6] >> 5;
a52_bitstream_set_ptr (state, buf + 6);
@@ -2398,7 +2400,7 @@
if ((acmod == 2) && (bitstream_get (state, 2) == 2)) /* dsurmod */
acmod = A52_DOLBY;
-@@ -176,28 +186,28 @@
+@@ -172,28 +186,28 @@
chaninfo = !acmod;
do {
@@ -2435,7 +2437,7 @@
} while (addbsil--);
}
-@@ -684,7 +694,7 @@
+@@ -680,7 +694,7 @@
state->fbw_expbap[i].exp[0],
state->fbw_expbap[i].exp + 1))
return 1;
@@ -2444,7 +2446,7 @@
}
if (lfeexpstr != EXP_REUSE) {
do_bit_alloc |= 32;
-@@ -759,7 +769,7 @@
+@@ -755,7 +769,7 @@
if (bitstream_get (state, 1)) { /* skiple */
i = bitstream_get (state, 9); /* skipl */
while (i--)
@@ -2453,7 +2455,7 @@
}
samples = state->samples;
-@@ -900,6 +910,10 @@
+@@ -896,6 +910,10 @@
void a52_free (a52_state_t * state)
{
diff --git a/libaf/af_ladspa.c b/libaf/af_ladspa.c
index 97b8982..414cd34 100644
--- a/libaf/af_ladspa.c
+++ b/libaf/af_ladspa.c
@@ -1,5 +1,5 @@
/*
- * af_ladspa.c, LADSPA plugin loader
+ * LADSPA plugin loader
*
* Written by Ivo van Poorten <ivop at euronet.nl>
* Copyright (C) 2004, 2005
diff --git a/libaf/af_resample.c b/libaf/af_resample.c
index 2536c07..2844940 100644
--- a/libaf/af_resample.c
+++ b/libaf/af_resample.c
@@ -33,7 +33,7 @@
Valid definitions are L8 and L16, where the number denotes the
length of the filter. This definition affects the computational
complexity (see play()), the performance (see filter.h) and the
- memory usage. The filterlength is choosen to 8 if the machine is
+ memory usage. The filter length is chosen to 8 if the machine is
slow and to 16 if the machine is fast and has MMX.
*/
@@ -174,16 +174,14 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
{
switch(cmd){
case AF_CONTROL_REINIT:{
- af_resample_t* s = (af_resample_t*)af->setup;
- af_data_t* n = (af_data_t*)arg; // New configureation
+ af_resample_t* s = af->setup;
+ af_data_t* n = arg; // New configuration
int i,d = 0;
int rv = AF_OK;
- // Free space for circular bufers
+ // Free space for circular buffers
if(s->xq){
- for(i=1;i<af->data->nch;i++)
- if(s->xq[i])
- free(s->xq[i]);
+ free(s->xq[0]);
free(s->xq);
s->xq = NULL;
}
@@ -216,13 +214,14 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
d*=m;
}
- // Create space for circular bufers
+ // Create space for circular buffers
s->xq = malloc(n->nch*sizeof(void*));
- for(i=0;i<n->nch;i++)
- s->xq[i] = malloc(2*L*af->data->bps);
+ s->xq[0] = calloc(n->nch, 2*L*af->data->bps);
+ for(i=1;i<n->nch;i++)
+ s->xq[i] = (uint8_t *)s->xq[i-1] + 2*L*af->data->bps;
s->xi = 0;
- // Check if the the design needs to be redone
+ // Check if the design needs to be redone
if(s->up != af->data->rate/d || s->dn != n->rate/d){
float* w;
float* wt;
@@ -233,9 +232,9 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
s->wi = 0;
s->i = 0;
- // Calculate cuttof frequency for filter
+ // Calculate cutoff frequency for filter
fc = 1/(float)(max(s->up,s->dn));
- // Allocate space for polyphase filter bank and protptype filter
+ // Allocate space for polyphase filter bank and prototype filter
w = malloc(sizeof(float) * s->up *L);
if(NULL != s->w)
free(s->w);
@@ -271,7 +270,7 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
return rv;
}
case AF_CONTROL_COMMAND_LINE:{
- af_resample_t* s = (af_resample_t*)af->setup;
+ af_resample_t* s = af->setup;
int rate=0;
int type=RSMP_INT;
int sloppy=1;
@@ -306,6 +305,13 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
// Deallocate memory
static void uninit(struct af_instance_s* af)
{
+ af_resample_t *s = af->setup;
+ if (s) {
+ if (s->xq) free(s->xq[0]);
+ free(s->xq);
+ free(s->w);
+ free(s);
+ }
if(af->data)
free(af->data->audio);
free(af->data);
@@ -317,7 +323,7 @@ static af_data_t* play(struct af_instance_s* af, af_data_t* data)
int len = 0; // Length of output data
af_data_t* c = data; // Current working data
af_data_t* l = af->data; // Local data
- af_resample_t* s = (af_resample_t*)af->setup;
+ af_resample_t* s = af->setup;
if(AF_OK != RESIZE_LOCAL_BUFFER(af,data))
return NULL;
diff --git a/libao2/ao_alsa.c b/libao2/ao_alsa.c
index 6d2e1f9..032d1d1 100644
--- a/libao2/ao_alsa.c
+++ b/libao2/ao_alsa.c
@@ -57,7 +57,7 @@
#include "audio_out_internal.h"
#include "libaf/af_format.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"ALSA-0.9.x-1.x audio output",
"alsa",
diff --git a/libao2/ao_alsa5.c b/libao2/ao_alsa5.c
index abf2eff..007a5f1 100644
--- a/libao2/ao_alsa5.c
+++ b/libao2/ao_alsa5.c
@@ -32,7 +32,7 @@
#include "mp_msg.h"
#include "help_mp.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"ALSA-0.5.x audio output",
"alsa5",
diff --git a/libao2/ao_arts.c b/libao2/ao_arts.c
index 30db48f..df44db4 100644
--- a/libao2/ao_arts.c
+++ b/libao2/ao_arts.c
@@ -38,7 +38,7 @@
static arts_stream_t stream;
-static ao_info_t info =
+static const ao_info_t info =
{
"aRts audio output",
"arts",
diff --git a/libao2/ao_dart.c b/libao2/ao_dart.c
index 95efa04..e9bff8d 100644
--- a/libao2/ao_dart.c
+++ b/libao2/ao_dart.c
@@ -39,7 +39,7 @@
#include "libvo/fastmemcpy.h"
#include "subopt-helper.h"
-static ao_info_t info = {
+static const ao_info_t info = {
"DART audio output",
"dart",
"KO Myung-Hun <komh at chollian.net>",
diff --git a/libao2/ao_dsound.c b/libao2/ao_dsound.c
index acd5998..729084b 100644
--- a/libao2/ao_dsound.c
+++ b/libao2/ao_dsound.c
@@ -42,7 +42,7 @@
#include "subopt-helper.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"Windows DirectSound audio output",
"dsound",
@@ -431,7 +431,7 @@ static int init(int rate, int channels, int format, int flags)
case AF_FORMAT_AC3:
case AF_FORMAT_S24_LE:
case AF_FORMAT_S16_LE:
- case AF_FORMAT_S8:
+ case AF_FORMAT_U8:
break;
default:
mp_msg(MSGT_AO, MSGL_V,"ao_dsound: format %s not supported defaulting to Signed 16-bit Little-Endian\n",af_fmt2str_short(format));
diff --git a/libao2/ao_dxr2.c b/libao2/ao_dxr2.c
index cd92ea3..7f9594f 100644
--- a/libao2/ao_dxr2.c
+++ b/libao2/ao_dxr2.c
@@ -36,7 +36,7 @@
#include "libmpdemux/mpeg_packetizer.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"DXR2 audio output",
"dxr2",
diff --git a/libao2/ao_esd.c b/libao2/ao_esd.c
index a5602ff..d54f843 100644
--- a/libao2/ao_esd.c
+++ b/libao2/ao_esd.c
@@ -67,7 +67,7 @@
#define ESD_CLIENT_NAME "MPlayer"
#define ESD_MAX_DELAY (1.0f) /* max amount of data buffered in esd (#sec) */
-static ao_info_t info =
+static const ao_info_t info =
{
"EsounD audio output",
"esd",
diff --git a/libao2/ao_ivtv.c b/libao2/ao_ivtv.c
index 96ea563..c2b367a 100644
--- a/libao2/ao_ivtv.c
+++ b/libao2/ao_ivtv.c
@@ -41,7 +41,7 @@
static int freq = 0;
-static ao_info_t info =
+static const ao_info_t info =
{
"IVTV MPEG Audio Decoder output",
"ivtv",
diff --git a/libao2/ao_jack.c b/libao2/ao_jack.c
index d7f2092..e861d08 100644
--- a/libao2/ao_jack.c
+++ b/libao2/ao_jack.c
@@ -40,7 +40,7 @@
#include <jack/jack.h>
-static ao_info_t info =
+static const ao_info_t info =
{
"JACK audio output",
"jack",
diff --git a/libao2/ao_macosx.c b/libao2/ao_macosx.c
index fcbda6f..fb5883b 100644
--- a/libao2/ao_macosx.c
+++ b/libao2/ao_macosx.c
@@ -53,7 +53,7 @@
#include "libaf/af_format.h"
#include "osdep/timer.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"Darwin/Mac OS X native audio output",
"macosx",
diff --git a/libao2/ao_mpegpes.c b/libao2/ao_mpegpes.c
index 38f30b1..3746d24 100644
--- a/libao2/ao_mpegpes.c
+++ b/libao2/ao_mpegpes.c
@@ -63,7 +63,7 @@ int vo_mpegpes_fd2 = -1;
#include <errno.h>
-static ao_info_t info =
+static const ao_info_t info =
{
#ifdef CONFIG_DVB
"DVB audio output",
diff --git a/libao2/ao_nas.c b/libao2/ao_nas.c
index 9394649..e5e675b 100644
--- a/libao2/ao_nas.c
+++ b/libao2/ao_nas.c
@@ -119,7 +119,7 @@ static const char* nas_state(unsigned int state) {
return nas_states[state];
}
-static ao_info_t info =
+static const ao_info_t info =
{
"NAS audio output",
"nas",
diff --git a/libao2/ao_null.c b/libao2/ao_null.c
index 2e28b8f..20b715f 100644
--- a/libao2/ao_null.c
+++ b/libao2/ao_null.c
@@ -27,7 +27,7 @@
#include "audio_out.h"
#include "audio_out_internal.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"Null audio output",
"null",
diff --git a/libao2/ao_openal.c b/libao2/ao_openal.c
index c91694d..c80c49b 100644
--- a/libao2/ao_openal.c
+++ b/libao2/ao_openal.c
@@ -42,7 +42,7 @@
#include "osdep/timer.h"
#include "subopt-helper.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"OpenAL audio output",
"openal",
diff --git a/libao2/ao_oss.c b/libao2/ao_oss.c
index a98d5d1..e4688d1 100644
--- a/libao2/ao_oss.c
+++ b/libao2/ao_oss.c
@@ -48,7 +48,7 @@
#include "audio_out.h"
#include "audio_out_internal.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"OSS/ioctl audio output",
"oss",
diff --git a/libao2/ao_pcm.c b/libao2/ao_pcm.c
index bd66ed0..b64118f 100644
--- a/libao2/ao_pcm.c
+++ b/libao2/ao_pcm.c
@@ -35,12 +35,12 @@
#include "help_mp.h"
-static ao_info_t info =
+static const ao_info_t info =
{
- "RAW PCM/WAVE file writer audio output",
- "pcm",
- "Atmosfear",
- ""
+ "RAW PCM/WAVE file writer audio output",
+ "pcm",
+ "Atmosfear",
+ ""
};
LIBAO_EXTERN(pcm)
@@ -60,23 +60,24 @@ static int fast = 0;
struct WaveHeader
{
- uint32_t riff;
- uint32_t file_length;
- uint32_t wave;
- uint32_t fmt;
- uint32_t fmt_length;
- uint16_t fmt_tag;
- uint16_t channels;
- uint32_t sample_rate;
- uint32_t bytes_per_second;
- uint16_t block_align;
- uint16_t bits;
- uint32_t data;
- uint32_t data_length;
+ uint32_t riff;
+ uint32_t file_length;
+ uint32_t wave;
+ uint32_t fmt;
+ uint32_t fmt_length;
+ uint16_t fmt_tag;
+ uint16_t channels;
+ uint32_t sample_rate;
+ uint32_t bytes_per_second;
+ uint16_t block_align;
+ uint16_t bits;
+ uint32_t data;
+ uint32_t data_length;
};
/* init with default values */
static struct WaveHeader wavhdr;
+static uint64_t data_length;
static FILE *fp = NULL;
@@ -88,102 +89,107 @@ static int control(int cmd,void *arg){
// open & setup audio device
// return: 1=success 0=fail
static int init(int rate,int channels,int format,int flags){
- int bits;
- opt_t subopts[] = {
- {"waveheader", OPT_ARG_BOOL, &ao_pcm_waveheader, NULL},
- {"file", OPT_ARG_MSTRZ, &ao_outputfilename, NULL},
- {"fast", OPT_ARG_BOOL, &fast, NULL},
- {NULL}
- };
- // set defaults
- ao_pcm_waveheader = 1;
-
- if (subopt_parse(ao_subdevice, subopts) != 0) {
- return 0;
- }
- if (!ao_outputfilename){
- ao_outputfilename =
- strdup(ao_pcm_waveheader?"audiodump.wav":"audiodump.pcm");
- }
-
- bits=8;
- switch(format){
- case AF_FORMAT_S32_BE:
- format=AF_FORMAT_S32_LE;
- case AF_FORMAT_S32_LE:
- bits=32;
- break;
- case AF_FORMAT_FLOAT_BE:
- format=AF_FORMAT_FLOAT_LE;
- case AF_FORMAT_FLOAT_LE:
- bits=32;
- break;
- case AF_FORMAT_S8:
- format=AF_FORMAT_U8;
- case AF_FORMAT_U8:
- break;
- case AF_FORMAT_AC3:
- bits=16;
- break;
- default:
- format=AF_FORMAT_S16_LE;
- bits=16;
- break;
- }
-
- ao_data.outburst = 65536;
- ao_data.buffersize= 2*65536;
- ao_data.channels=channels;
- ao_data.samplerate=rate;
- ao_data.format=format;
- ao_data.bps=channels*rate*(bits/8);
-
- wavhdr.riff = le2me_32(WAV_ID_RIFF);
- wavhdr.wave = le2me_32(WAV_ID_WAVE);
- wavhdr.fmt = le2me_32(WAV_ID_FMT);
- wavhdr.fmt_length = le2me_32(16);
- wavhdr.fmt_tag = le2me_16(format == AF_FORMAT_FLOAT_LE ? WAV_ID_FLOAT_PCM : WAV_ID_PCM);
- wavhdr.channels = le2me_16(ao_data.channels);
- wavhdr.sample_rate = le2me_32(ao_data.samplerate);
- wavhdr.bytes_per_second = le2me_32(ao_data.bps);
- wavhdr.bits = le2me_16(bits);
- wavhdr.block_align = le2me_16(ao_data.channels * (bits / 8));
-
- wavhdr.data = le2me_32(WAV_ID_DATA);
- wavhdr.data_length=le2me_32(0x7ffff000);
- wavhdr.file_length = wavhdr.data_length + sizeof(wavhdr) - 8;
-
- mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_PCM_FileInfo, ao_outputfilename,
- (ao_pcm_waveheader?"WAVE":"RAW PCM"), rate,
- (channels > 1) ? "Stereo" : "Mono", af_fmt2str_short(format));
- mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_PCM_HintInfo);
-
- fp = fopen(ao_outputfilename, "wb");
- if(fp) {
- if(ao_pcm_waveheader){ /* Reserve space for wave header */
- fwrite(&wavhdr,sizeof(wavhdr),1,fp);
- wavhdr.file_length=wavhdr.data_length=0;
- }
- return 1;
- }
- mp_msg(MSGT_AO, MSGL_ERR, MSGTR_AO_PCM_CantOpenOutputFile,
+ int bits;
+ opt_t subopts[] = {
+ {"waveheader", OPT_ARG_BOOL, &ao_pcm_waveheader, NULL},
+ {"file", OPT_ARG_MSTRZ, &ao_outputfilename, NULL},
+ {"fast", OPT_ARG_BOOL, &fast, NULL},
+ {NULL}
+ };
+ // set defaults
+ ao_pcm_waveheader = 1;
+
+ if (subopt_parse(ao_subdevice, subopts) != 0) {
+ return 0;
+ }
+ if (!ao_outputfilename){
+ ao_outputfilename =
+ strdup(ao_pcm_waveheader?"audiodump.wav":"audiodump.pcm");
+ }
+
+ bits=8;
+ switch(format){
+ case AF_FORMAT_S32_BE:
+ format=AF_FORMAT_S32_LE;
+ case AF_FORMAT_S32_LE:
+ bits=32;
+ break;
+ case AF_FORMAT_FLOAT_BE:
+ format=AF_FORMAT_FLOAT_LE;
+ case AF_FORMAT_FLOAT_LE:
+ bits=32;
+ break;
+ case AF_FORMAT_S8:
+ format=AF_FORMAT_U8;
+ case AF_FORMAT_U8:
+ break;
+ case AF_FORMAT_AC3:
+ bits=16;
+ break;
+ default:
+ format=AF_FORMAT_S16_LE;
+ bits=16;
+ break;
+ }
+
+ ao_data.outburst = 65536;
+ ao_data.buffersize= 2*65536;
+ ao_data.channels=channels;
+ ao_data.samplerate=rate;
+ ao_data.format=format;
+ ao_data.bps=channels*rate*(bits/8);
+
+ wavhdr.riff = le2me_32(WAV_ID_RIFF);
+ wavhdr.wave = le2me_32(WAV_ID_WAVE);
+ wavhdr.fmt = le2me_32(WAV_ID_FMT);
+ wavhdr.fmt_length = le2me_32(16);
+ wavhdr.fmt_tag = le2me_16(format == AF_FORMAT_FLOAT_LE ? WAV_ID_FLOAT_PCM : WAV_ID_PCM);
+ wavhdr.channels = le2me_16(ao_data.channels);
+ wavhdr.sample_rate = le2me_32(ao_data.samplerate);
+ wavhdr.bytes_per_second = le2me_32(ao_data.bps);
+ wavhdr.bits = le2me_16(bits);
+ wavhdr.block_align = le2me_16(ao_data.channels * (bits / 8));
+
+ wavhdr.data = le2me_32(WAV_ID_DATA);
+ wavhdr.data_length=le2me_32(0x7ffff000);
+ wavhdr.file_length = wavhdr.data_length + sizeof(wavhdr) - 8;
+
+ mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_PCM_FileInfo, ao_outputfilename,
+ (ao_pcm_waveheader?"WAVE":"RAW PCM"), rate,
+ (channels > 1) ? "Stereo" : "Mono", af_fmt2str_short(format));
+ mp_msg(MSGT_AO, MSGL_INFO, MSGTR_AO_PCM_HintInfo);
+
+ fp = fopen(ao_outputfilename, "wb");
+ if(fp) {
+ if(ao_pcm_waveheader){ /* Reserve space for wave header */
+ fwrite(&wavhdr,sizeof(wavhdr),1,fp);
+ }
+ return 1;
+ }
+ mp_msg(MSGT_AO, MSGL_ERR, MSGTR_AO_PCM_CantOpenOutputFile,
ao_outputfilename);
- return 0;
+ return 0;
}
// close audio device
static void uninit(int immed){
-
- if(ao_pcm_waveheader && fseek(fp, 0, SEEK_SET) == 0){ /* Write wave header */
- wavhdr.file_length = wavhdr.data_length + sizeof(wavhdr) - 8;
- wavhdr.file_length = le2me_32(wavhdr.file_length);
- wavhdr.data_length = le2me_32(wavhdr.data_length);
- fwrite(&wavhdr,sizeof(wavhdr),1,fp);
- }
- fclose(fp);
- if (ao_outputfilename)
- free(ao_outputfilename);
- ao_outputfilename = NULL;
+
+ if(ao_pcm_waveheader){ /* Rewrite wave header */
+ if (fseek(fp, 0, SEEK_SET) != 0)
+ mp_msg(MSGT_AO, MSGL_ERR, "Could not seek to start, WAV size headers not updated!\n");
+ else if (data_length > 0x7ffff000)
+ mp_msg(MSGT_AO, MSGL_ERR, "File larger than allowed for WAV files, may play truncated!\n");
+ else {
+ wavhdr.file_length = data_length + sizeof(wavhdr) - 8;
+ wavhdr.file_length = le2me_32(wavhdr.file_length);
+ wavhdr.data_length = le2me_32(data_length);
+ fwrite(&wavhdr,sizeof(wavhdr),1,fp);
+ }
+ }
+ fclose(fp);
+ if (ao_outputfilename)
+ free(ao_outputfilename);
+ ao_outputfilename = NULL;
}
// stop playing and empty buffers (for seeking/pause)
@@ -207,7 +213,7 @@ static void audio_resume(void)
static int get_space(void){
if(vo_pts)
- return ao_data.pts < vo_pts + fast * 30000 ? ao_data.outburst : 0;
+ return ao_data.pts < vo_pts + fast * 30000 ? ao_data.outburst : 0;
return ao_data.outburst;
}
@@ -219,31 +225,31 @@ static int play(void* data,int len,int flags){
// let libaf to do the conversion...
#if 0
//#ifdef WORDS_BIGENDIAN
- if (ao_data.format == AFMT_S16_LE) {
- unsigned short *buffer = (unsigned short *) data;
- register int i;
- for(i = 0; i < len/2; ++i) {
- buffer[i] = le2me_16(buffer[i]);
- }
- }
+ if (ao_data.format == AFMT_S16_LE) {
+ unsigned short *buffer = (unsigned short *) data;
+ register int i;
+ for(i = 0; i < len/2; ++i) {
+ buffer[i] = le2me_16(buffer[i]);
+ }
+ }
#endif
- if (ao_data.channels == 6 || ao_data.channels == 5) {
- int frame_size = le2me_16(wavhdr.bits) / 8;
- len -= len % (frame_size * ao_data.channels);
- reorder_channel_nch(data, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
- AF_CHANNEL_LAYOUT_WAVEEX_DEFAULT,
- ao_data.channels,
- len / frame_size, frame_size);
- }
-
- //printf("PCM: Writing chunk!\n");
- fwrite(data,len,1,fp);
-
- if(ao_pcm_waveheader)
- wavhdr.data_length += len;
-
- return len;
+ if (ao_data.channels == 6 || ao_data.channels == 5) {
+ int frame_size = le2me_16(wavhdr.bits) / 8;
+ len -= len % (frame_size * ao_data.channels);
+ reorder_channel_nch(data, AF_CHANNEL_LAYOUT_MPLAYER_DEFAULT,
+ AF_CHANNEL_LAYOUT_WAVEEX_DEFAULT,
+ ao_data.channels,
+ len / frame_size, frame_size);
+ }
+
+ //printf("PCM: Writing chunk!\n");
+ fwrite(data,len,1,fp);
+
+ if(ao_pcm_waveheader)
+ data_length += len;
+
+ return len;
}
// return: delay in seconds between first and last sample in buffer
diff --git a/libao2/ao_pulse.c b/libao2/ao_pulse.c
index d6974f8..2d27c85 100644
--- a/libao2/ao_pulse.c
+++ b/libao2/ao_pulse.c
@@ -33,7 +33,7 @@
#define PULSE_CLIENT_NAME "MPlayer"
/** General driver info */
-static ao_info_t info = {
+static const ao_info_t info = {
"PulseAudio audio output",
"pulse",
"Lennart Poettering",
diff --git a/libao2/ao_sdl.c b/libao2/ao_sdl.c
index 97a70d4..6cbd607 100644
--- a/libao2/ao_sdl.c
+++ b/libao2/ao_sdl.c
@@ -38,7 +38,7 @@
#include "libvo/fastmemcpy.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"SDLlib audio output",
"sdl",
diff --git a/libao2/ao_sgi.c b/libao2/ao_sgi.c
index db7c486..46b79c1 100644
--- a/libao2/ao_sgi.c
+++ b/libao2/ao_sgi.c
@@ -32,7 +32,7 @@
#include "help_mp.h"
#include "libaf/af_format.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"sgi audio output",
"sgi",
diff --git a/libao2/ao_sun.c b/libao2/ao_sun.c
index cae2287..725a49e 100644
--- a/libao2/ao_sun.c
+++ b/libao2/ao_sun.c
@@ -49,7 +49,7 @@
#include "mp_msg.h"
#include "help_mp.h"
-static ao_info_t info =
+static const ao_info_t info =
{
"Sun audio output",
"sun",
diff --git a/libao2/ao_v4l2.c b/libao2/ao_v4l2.c
index b1b510e..412899c 100644
--- a/libao2/ao_v4l2.c
+++ b/libao2/ao_v4l2.c
@@ -38,7 +38,7 @@
static int freq = 0;
-static ao_info_t info =
+static const ao_info_t info =
{
"V4L2 MPEG Audio Decoder output",
"v4l2",
diff --git a/libao2/ao_win32.c b/libao2/ao_win32.c
index 40830eb..b2ba0fc 100644
--- a/libao2/ao_win32.c
+++ b/libao2/ao_win32.c
@@ -87,12 +87,10 @@ static const int channel_mask[] = {
static WAVEHDR* waveBlocks; //pointer to our ringbuffer memory
static HWAVEOUT hWaveOut; //handle to the waveout device
static unsigned int buf_write=0;
-static unsigned int buf_write_pos=0;
-static int full_buffers=0;
-static int buffered_bytes=0;
+static volatile int buf_read=0;
-static ao_info_t info =
+static const ao_info_t info =
{
"Windows waveOut audio output",
"win32",
@@ -102,17 +100,12 @@ static ao_info_t info =
LIBAO_EXTERN(win32)
-static void CALLBACK waveOutProc(HWAVEOUT hWaveOut,UINT uMsg,DWORD dwInstance,
+static void CALLBACK waveOutProc(HWAVEOUT hWaveOut,UINT uMsg,DWORD dwInstance,
DWORD dwParam1,DWORD dwParam2)
{
if(uMsg != WOM_DONE)
return;
- if (full_buffers) {
- buffered_bytes-=BUFFER_SIZE;
- --full_buffers;
- } else {
- buffered_bytes=0;
- }
+ buf_read = (buf_read + 1) % BUFFER_COUNT;
}
// to set/get/query special features/parameters
@@ -145,34 +138,34 @@ static int control(int cmd,void *arg)
// return: 1=success 0=fail
static int init(int rate,int channels,int format,int flags)
{
- WAVEFORMATEXTENSIBLE wformat;
- DWORD totalBufferSize = (BUFFER_SIZE + sizeof(WAVEHDR)) * BUFFER_COUNT;
+ WAVEFORMATEXTENSIBLE wformat;
MMRESULT result;
unsigned char* buffer;
int i;
-
+
switch(format){
case AF_FORMAT_AC3:
case AF_FORMAT_S24_LE:
case AF_FORMAT_S16_LE:
- case AF_FORMAT_S8:
+ case AF_FORMAT_U8:
break;
default:
mp_msg(MSGT_AO, MSGL_V,"ao_win32: format %s not supported defaulting to Signed 16-bit Little-Endian\n",af_fmt2str_short(format));
format=AF_FORMAT_S16_LE;
- }
+ }
// FIXME multichannel mode is buggy
if(channels > 2)
channels = 2;
-
- //fill global ao_data
+
+ //fill global ao_data
ao_data.channels=channels;
ao_data.samplerate=rate;
ao_data.format=format;
ao_data.bps=channels*rate;
if(format != AF_FORMAT_U8 && format != AF_FORMAT_S8)
ao_data.bps*=2;
+ ao_data.outburst = BUFFER_SIZE;
if(ao_data.buffersize==-1)
{
ao_data.buffersize=af_fmt2bits(format)/8;
@@ -181,22 +174,22 @@ static int init(int rate,int channels,int format,int flags)
}
mp_msg(MSGT_AO, MSGL_V,"ao_win32: Samplerate:%iHz Channels:%i Format:%s\n",rate, channels, af_fmt2str_short(format));
mp_msg(MSGT_AO, MSGL_V,"ao_win32: Buffersize:%d\n",ao_data.buffersize);
-
+
//fill waveformatex
ZeroMemory( &wformat, sizeof(WAVEFORMATEXTENSIBLE));
wformat.Format.cbSize = (channels>2)?sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX):0;
- wformat.Format.nChannels = channels;
- wformat.Format.nSamplesPerSec = rate;
+ wformat.Format.nChannels = channels;
+ wformat.Format.nSamplesPerSec = rate;
if(format == AF_FORMAT_AC3)
{
wformat.Format.wFormatTag = WAVE_FORMAT_DOLBY_AC3_SPDIF;
wformat.Format.wBitsPerSample = 16;
wformat.Format.nBlockAlign = 4;
}
- else
+ else
{
wformat.Format.wFormatTag = (channels>2)?WAVE_FORMAT_EXTENSIBLE:WAVE_FORMAT_PCM;
- wformat.Format.wBitsPerSample = af_fmt2bits(format);
+ wformat.Format.wBitsPerSample = af_fmt2bits(format);
wformat.Format.nBlockAlign = wformat.Format.nChannels * (wformat.Format.wBitsPerSample >> 3);
}
if(channels>2)
@@ -205,9 +198,9 @@ static int init(int rate,int channels,int format,int flags)
wformat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
wformat.Samples.wValidBitsPerSample=af_fmt2bits(format);
}
-
+
wformat.Format.nAvgBytesPerSec = wformat.Format.nSamplesPerSec * wformat.Format.nBlockAlign;
-
+
//open sound device
//WAVE_MAPPER always points to the default wave device on the system
result = waveOutOpen(&hWaveOut,WAVE_MAPPER,(WAVEFORMATEX*)&wformat,(DWORD_PTR)waveOutProc,0,CALLBACK_FUNCTION);
@@ -231,9 +224,8 @@ static int init(int rate,int channels,int format,int flags)
return 0;
}
//allocate buffer memory as one big block
- buffer = malloc(totalBufferSize);
- memset(buffer,0x0,totalBufferSize);
- //and setup pointers to each buffer
+ buffer = calloc(BUFFER_COUNT, BUFFER_SIZE + sizeof(WAVEHDR));
+ //and setup pointers to each buffer
waveBlocks = (WAVEHDR*)buffer;
buffer += sizeof(WAVEHDR) * BUFFER_COUNT;
for(i = 0; i < BUFFER_COUNT; i++) {
@@ -241,9 +233,7 @@ static int init(int rate,int channels,int format,int flags)
buffer += BUFFER_SIZE;
}
buf_write=0;
- buf_write_pos=0;
- full_buffers=0;
- buffered_bytes=0;
+ buf_read=0;
return 1;
}
@@ -251,10 +241,11 @@ static int init(int rate,int channels,int format,int flags)
// close audio device
static void uninit(int immed)
{
- if(!immed)while(buffered_bytes > 0)usec_sleep(50000);
- else buffered_bytes=0;
+ if(!immed)
+ usec_sleep(get_delay() * 1000 * 1000);
+ else
waveOutReset(hWaveOut);
- waveOutClose(hWaveOut);
+ while (waveOutClose(hWaveOut) == WAVERR_STILLPLAYING) usec_sleep(0);
mp_msg(MSGT_AO, MSGL_V,"waveOut device closed\n");
free(waveBlocks);
mp_msg(MSGT_AO, MSGL_V,"buffer memory freed\n");
@@ -265,9 +256,7 @@ static void reset(void)
{
waveOutReset(hWaveOut);
buf_write=0;
- buf_write_pos=0;
- full_buffers=0;
- buffered_bytes=0;
+ buf_read=0;
}
// stop playing, keep buffers (for pause)
@@ -285,7 +274,9 @@ static void audio_resume(void)
// return: how many bytes can be played without blocking
static int get_space(void)
{
- return BUFFER_COUNT*BUFFER_SIZE - buffered_bytes;
+ int free = buf_read - buf_write - 1;
+ if (free < 0) free += BUFFER_COUNT;
+ return free * BUFFER_SIZE;
}
//writes data into buffer, based on ringbuffer code in ao_sdl.c
@@ -293,28 +284,23 @@ static int write_waveOutBuffer(unsigned char* data,int len){
WAVEHDR* current;
int len2=0;
int x;
- while(len>0){
+ while(len>0){
+ int buf_next = (buf_write + 1) % BUFFER_COUNT;
current = &waveBlocks[buf_write];
- if(buffered_bytes==BUFFER_COUNT*BUFFER_SIZE) break;
+ if(buf_next == buf_read) break;
//unprepare the header if it is prepared
- if(current->dwFlags & WHDR_PREPARED)
+ if(current->dwFlags & WHDR_PREPARED)
waveOutUnprepareHeader(hWaveOut, current, sizeof(WAVEHDR));
- x=BUFFER_SIZE-buf_write_pos;
- if(x>len) x=len;
- fast_memcpy(current->lpData+buf_write_pos,data+len2,x);
- if(buf_write_pos==0)full_buffers++;
- len2+=x; len-=x;
- buffered_bytes+=x; buf_write_pos+=x;
+ x=BUFFER_SIZE;
+ if(x>len) x=len;
+ fast_memcpy(current->lpData,data+len2,x);
+ len2+=x; len-=x;
//prepare header and write data to device
- current->dwBufferLength = buf_write_pos;
+ current->dwBufferLength = x;
waveOutPrepareHeader(hWaveOut, current, sizeof(WAVEHDR));
waveOutWrite(hWaveOut, current, sizeof(WAVEHDR));
-
- if(buf_write_pos>=BUFFER_SIZE){ //buffer is full find next
- // block is full, find next!
- buf_write=(buf_write+1)%BUFFER_COUNT;
- buf_write_pos=0;
- }
+
+ buf_write = buf_next;
}
return len2;
}
@@ -332,5 +318,7 @@ static int play(void* data,int len,int flags)
// return: delay in seconds between first and last sample in buffer
static float get_delay(void)
{
- return (float)(buffered_bytes + ao_data.buffersize)/(float)ao_data.bps;
+ int used = buf_write - buf_read;
+ if (used < 0) used += BUFFER_COUNT;
+ return (float)(used * BUFFER_SIZE + ao_data.buffersize)/(float)ao_data.bps;
}
diff --git a/libao2/audio_out.c b/libao2/audio_out.c
index 222349c..0e26e76 100644
--- a/libao2/audio_out.c
+++ b/libao2/audio_out.c
@@ -31,29 +31,29 @@
ao_data_t ao_data={0,0,0,0,OUTBURST,-1,0};
char *ao_subdevice = NULL;
-extern ao_functions_t audio_out_oss;
-extern ao_functions_t audio_out_macosx;
-extern ao_functions_t audio_out_arts;
-extern ao_functions_t audio_out_esd;
-extern ao_functions_t audio_out_pulse;
-extern ao_functions_t audio_out_jack;
-extern ao_functions_t audio_out_openal;
-extern ao_functions_t audio_out_null;
-extern ao_functions_t audio_out_alsa5;
-extern ao_functions_t audio_out_alsa;
-extern ao_functions_t audio_out_nas;
-extern ao_functions_t audio_out_sdl;
-extern ao_functions_t audio_out_sun;
-extern ao_functions_t audio_out_sgi;
-extern ao_functions_t audio_out_win32;
-extern ao_functions_t audio_out_dsound;
-extern ao_functions_t audio_out_dart;
-extern ao_functions_t audio_out_dxr2;
-extern ao_functions_t audio_out_ivtv;
-extern ao_functions_t audio_out_v4l2;
-extern ao_functions_t audio_out_mpegpes;
-extern ao_functions_t audio_out_pcm;
-extern ao_functions_t audio_out_pss;
+extern const ao_functions_t audio_out_oss;
+extern const ao_functions_t audio_out_macosx;
+extern const ao_functions_t audio_out_arts;
+extern const ao_functions_t audio_out_esd;
+extern const ao_functions_t audio_out_pulse;
+extern const ao_functions_t audio_out_jack;
+extern const ao_functions_t audio_out_openal;
+extern const ao_functions_t audio_out_null;
+extern const ao_functions_t audio_out_alsa5;
+extern const ao_functions_t audio_out_alsa;
+extern const ao_functions_t audio_out_nas;
+extern const ao_functions_t audio_out_sdl;
+extern const ao_functions_t audio_out_sun;
+extern const ao_functions_t audio_out_sgi;
+extern const ao_functions_t audio_out_win32;
+extern const ao_functions_t audio_out_dsound;
+extern const ao_functions_t audio_out_dart;
+extern const ao_functions_t audio_out_dxr2;
+extern const ao_functions_t audio_out_ivtv;
+extern const ao_functions_t audio_out_v4l2;
+extern const ao_functions_t audio_out_mpegpes;
+extern const ao_functions_t audio_out_pcm;
+extern const ao_functions_t audio_out_pss;
const ao_functions_t* const audio_out_drivers[] =
{
diff --git a/libao2/audio_out.h b/libao2/audio_out.h
index 3312ab0..e1d36e7 100644
--- a/libao2/audio_out.h
+++ b/libao2/audio_out.h
@@ -34,7 +34,7 @@ typedef struct ao_info_s
/* interface towards mplayer and */
typedef struct ao_functions_s
{
- ao_info_t *info;
+ const ao_info_t *info;
int (*control)(int cmd,void *arg);
int (*init)(int rate,int channels,int format,int flags);
void (*uninit)(int immed);
diff --git a/libao2/audio_out_internal.h b/libao2/audio_out_internal.h
index e702430..504923b 100644
--- a/libao2/audio_out_internal.h
+++ b/libao2/audio_out_internal.h
@@ -31,7 +31,7 @@ static float get_delay(void);
static void audio_pause(void);
static void audio_resume(void);
-#define LIBAO_EXTERN(x) ao_functions_t audio_out_##x =\
+#define LIBAO_EXTERN(x) const ao_functions_t audio_out_##x =\
{\
&info,\
control,\
diff --git a/libass/ass.c b/libass/ass.c
index 8022dfc..b0c38c2 100644
--- a/libass/ass.c
+++ b/libass/ass.c
@@ -347,6 +347,8 @@ void process_force_style(ass_track_t* track) {
track->Timer = atof(token);
else if(!strcasecmp(*fs, "WrapStyle"))
track->WrapStyle = atoi(token);
+ else if(!strcasecmp(*fs, "ScaledBorderAndShadow"))
+ track->ScaledBorderAndShadow = parse_bool(token);
dt = strrchr(*fs, '.');
if (dt) {
@@ -520,6 +522,8 @@ static int process_info_line(ass_track_t* track, char *str)
track->Timer = atof(str + 6);
} else if (!strncmp(str,"WrapStyle:", 10)) {
track->WrapStyle = atoi(str + 10);
+ } else if (!strncmp(str, "ScaledBorderAndShadow:", 22)) {
+ track->ScaledBorderAndShadow = parse_bool(str + 22);
}
return 0;
}
@@ -1124,6 +1128,7 @@ long long ass_step_sub(ass_track_t* track, long long now, int movement) {
ass_track_t* ass_new_track(ass_library_t* library) {
ass_track_t* track = calloc(1, sizeof(ass_track_t));
track->library = library;
+ track->ScaledBorderAndShadow = 1;
track->parser_priv = calloc(1, sizeof(parser_priv_t));
return track;
}
diff --git a/libass/ass_bitmap.c b/libass/ass_bitmap.c
index e6d5e8d..61457f1 100644
--- a/libass/ass_bitmap.c
+++ b/libass/ass_bitmap.c
@@ -243,7 +243,7 @@ static bitmap_t* fix_outline_and_shadow(bitmap_t* bm_g, bitmap_t* bm_o)
unsigned char c_g, c_o;
c_g = g[x];
c_o = o[x];
- o[x] = (c_o > c_g) ? c_o : 0;
+ o[x] = (c_o > c_g) ? c_o - (c_g/2) : 0;
s[x] = (c_o < 0xFF - c_g) ? c_o + c_g : 0xFF;
}
g += bm_g->w;
@@ -255,11 +255,38 @@ static bitmap_t* fix_outline_and_shadow(bitmap_t* bm_g, bitmap_t* bm_o)
return bm_s;
}
-int glyph_to_bitmap(ass_synth_priv_t* priv, ass_synth_priv_t* priv_blur,
+/**
+ * \brief Blur with [[1,2,1]. [2,4,2], [1,2,1]] kernel
+ * This blur is the same as the one employed by vsfilter.
+ */
+static void be_blur(unsigned char *buf, int w, int h) {
+ unsigned int x, y;
+ unsigned int old_sum, new_sum;
+
+ for (y=0; y<h; y++) {
+ old_sum = 2 * buf[y*w];
+ for (x=0; x<w-1; x++) {
+ new_sum = buf[y*w+x] + buf[y*w+x+1];
+ buf[y*w+x] = (old_sum + new_sum) >> 2;
+ old_sum = new_sum;
+ }
+ }
+
+ for (x=0; x<w; x++) {
+ old_sum = 2 * buf[x];
+ for (y=0; y<h-1; y++) {
+ new_sum = buf[y*w+x] + buf[(y+1)*w+x];
+ buf[y*w+x] = (old_sum + new_sum) >> 2;
+ old_sum = new_sum;
+ }
+ }
+}
+
+int glyph_to_bitmap(ass_synth_priv_t* priv_blur,
FT_Glyph glyph, FT_Glyph outline_glyph, bitmap_t** bm_g,
bitmap_t** bm_o, bitmap_t** bm_s, int be, double blur_radius)
{
- int bord = be ? (be+1) : 0;
+ int bord = be ? (be/4+1) : 0;
blur_radius *= 2;
bord = (blur_radius > 0.0) ? blur_radius : bord;
@@ -279,19 +306,16 @@ int glyph_to_bitmap(ass_synth_priv_t* priv, ass_synth_priv_t* priv_blur,
return 1;
}
}
- if (*bm_o) {
- resize_tmp(priv, (*bm_o)->w, (*bm_o)->h);
+ if (*bm_o)
resize_tmp(priv_blur, (*bm_o)->w, (*bm_o)->h);
- }
- resize_tmp(priv, (*bm_g)->w, (*bm_g)->h);
resize_tmp(priv_blur, (*bm_g)->w, (*bm_g)->h);
if (be) {
while (be--) {
if (*bm_o)
- blur((*bm_o)->buffer, priv->tmp, (*bm_o)->w, (*bm_o)->h, (*bm_o)->w, (int*)priv->gt2, priv->g_r, priv->g_w);
+ be_blur((*bm_o)->buffer, (*bm_o)->w, (*bm_o)->h);
else
- blur((*bm_g)->buffer, priv->tmp, (*bm_g)->w, (*bm_g)->h, (*bm_g)->w, (int*)priv->gt2, priv->g_r, priv->g_w);
+ be_blur((*bm_g)->buffer, (*bm_g)->w, (*bm_g)->h);
}
} else {
if (blur_radius > 0.0) {
diff --git a/libass/ass_bitmap.h b/libass/ass_bitmap.h
index 5f45aae..c0b4ad2 100644
--- a/libass/ass_bitmap.h
+++ b/libass/ass_bitmap.h
@@ -46,7 +46,7 @@ typedef struct bitmap_s {
* \param bm_g out: pointer to the bitmap of glyph shadow is returned here
* \param be 1 = produces blurred bitmaps, 0 = normal bitmaps
*/
-int glyph_to_bitmap(ass_synth_priv_t* priv, ass_synth_priv_t* priv_blur, FT_Glyph glyph, FT_Glyph outline_glyph, bitmap_t** bm_g, bitmap_t** bm_o, bitmap_t** bm_s, int be, double blur_radius);
+int glyph_to_bitmap(ass_synth_priv_t* priv_blur, FT_Glyph glyph, FT_Glyph outline_glyph, bitmap_t** bm_g, bitmap_t** bm_o, bitmap_t** bm_s, int be, double blur_radius);
void ass_free_bitmap(bitmap_t* bm);
diff --git a/libass/ass_cache.c b/libass/ass_cache.c
index 41645c4..3b90e66 100644
--- a/libass/ass_cache.c
+++ b/libass/ass_cache.c
@@ -192,6 +192,8 @@ static int font_compare(void* key1, void* key2, size_t key_size) {
return 0;
if (a->italic != b->italic)
return 0;
+ if (a->treat_family_as_pattern != b->treat_family_as_pattern)
+ return 0;
return 1;
}
@@ -324,3 +326,53 @@ void ass_glyph_cache_reset(void)
ass_glyph_cache_done();
ass_glyph_cache_init();
}
+
+
+//---------------------------------
+// composite cache
+
+hashmap_t* composite_cache;
+
+static void composite_hash_dtor(void* key, size_t key_size, void* value, size_t value_size)
+{
+ composite_hash_val_t* v = value;
+ free(v->a);
+ free(v->b);
+ free(key);
+ free(value);
+}
+
+void* cache_add_composite(composite_hash_key_t* key, composite_hash_val_t* val)
+{
+ return hashmap_insert(composite_cache, key, val);
+}
+
+/**
+ * \brief Get a composite bitmap from composite cache.
+ * \param key hash key
+ * \return requested hash val or 0 if not found
+*/
+composite_hash_val_t* cache_find_composite(composite_hash_key_t* key)
+{
+ return hashmap_find(composite_cache, key);
+}
+
+void ass_composite_cache_init(void)
+{
+ composite_cache = hashmap_init(sizeof(composite_hash_key_t),
+ sizeof(composite_hash_val_t),
+ 0xFFFF + 13,
+ composite_hash_dtor, NULL, NULL);
+}
+
+void ass_composite_cache_done(void)
+{
+ hashmap_done(composite_cache);
+}
+
+void ass_composite_cache_reset(void)
+{
+ ass_composite_cache_done();
+ ass_composite_cache_init();
+}
+
diff --git a/libass/ass_cache.h b/libass/ass_cache.h
index fdb8a64..f7042be 100644
--- a/libass/ass_cache.h
+++ b/libass/ass_cache.h
@@ -65,6 +65,27 @@ bitmap_hash_val_t* cache_find_bitmap(bitmap_hash_key_t* key);
void ass_bitmap_cache_reset(void);
void ass_bitmap_cache_done(void);
+
+// Cache for composited bitmaps
+typedef struct composite_hash_key_s {
+ int aw, ah, bw, bh;
+ int ax, ay, bx, by;
+ bitmap_hash_key_t a;
+ bitmap_hash_key_t b;
+} composite_hash_key_t;
+
+typedef struct composite_hash_val_s {
+ unsigned char* a;
+ unsigned char* b;
+} composite_hash_val_t;
+
+void ass_composite_cache_init(void);
+void* cache_add_composite(composite_hash_key_t* key, composite_hash_val_t* val);
+composite_hash_val_t* cache_find_composite(composite_hash_key_t* key);
+void ass_composite_cache_reset(void);
+void ass_composite_cache_done(void);
+
+
// describes an outline glyph
typedef struct glyph_hash_key_s {
ass_font_t* font;
diff --git a/libass/ass_font.c b/libass/ass_font.c
index f2214a3..579e658 100644
--- a/libass/ass_font.c
+++ b/libass/ass_font.c
@@ -125,7 +125,7 @@ static int add_face(void* fc_priv, ass_font_t* font, uint32_t ch)
if (font->n_faces == ASS_FONT_MAX_FACES)
return -1;
- path = fontconfig_select(fc_priv, font->desc.family, font->desc.bold,
+ path = fontconfig_select(fc_priv, font->desc.family, font->desc.treat_family_as_pattern, font->desc.bold,
font->desc.italic, &index, ch);
mem_idx = find_font(font->library, path);
@@ -169,6 +169,7 @@ ass_font_t* ass_font_new(ass_library_t* library, FT_Library ftlibrary, void* fc_
font.ftlibrary = ftlibrary;
font.n_faces = 0;
font.desc.family = strdup(desc->family);
+ font.desc.treat_family_as_pattern = desc->treat_family_as_pattern;
font.desc.bold = desc->bold;
font.desc.italic = desc->italic;
diff --git a/libass/ass_font.h b/libass/ass_font.h
index 03396a6..5204318 100644
--- a/libass/ass_font.h
+++ b/libass/ass_font.h
@@ -33,6 +33,7 @@ typedef struct ass_font_desc_s {
char* family;
unsigned bold;
unsigned italic;
+ int treat_family_as_pattern;
} ass_font_desc_t;
#define ASS_FONT_MAX_FACES 10
diff --git a/libass/ass_fontconfig.c b/libass/ass_fontconfig.c
index 9a7bdde..a54bc8c 100644
--- a/libass/ass_fontconfig.c
+++ b/libass/ass_fontconfig.c
@@ -66,14 +66,15 @@ struct fc_instance_s {
* \brief Low-level font selection.
* \param priv private data
* \param family font family
+ * \param treat_family_as_pattern treat family as fontconfig pattern
* \param bold font weight value
* \param italic font slant value
* \param index out: font index inside a file
* \param code: the character that should be present in the font, can be 0
* \return font file path
*/
-static char* _select_font(fc_instance_t* priv, const char* family, unsigned bold, unsigned italic, int* index,
- uint32_t code)
+static char* _select_font(fc_instance_t* priv, const char* family, int treat_family_as_pattern,
+ unsigned bold, unsigned italic, int* index, uint32_t code)
{
FcBool rc;
FcResult result;
@@ -89,34 +90,40 @@ static char* _select_font(fc_instance_t* priv, const char* family, unsigned bold
*index = 0;
- pat = FcPatternCreate();
+ if (treat_family_as_pattern)
+ pat = FcNameParse((const FcChar8*)family);
+ else
+ pat = FcPatternCreate();
+
if (!pat)
goto error;
- FcPatternAddString(pat, FC_FAMILY, (const FcChar8*)family);
-
- // In SSA/ASS fonts are sometimes referenced by their "full name",
- // which is usually a concatenation of family name and font
- // style (ex. Ottawa Bold). Full name is available from
- // FontConfig pattern element FC_FULLNAME, but it is never
- // used for font matching.
- // Therefore, I'm removing words from the end of the name one
- // by one, and adding shortened names to the pattern. It seems
- // that the first value (full name in this case) has
- // precedence in matching.
- // An alternative approach could be to reimplement FcFontSort
- // using FC_FULLNAME instead of FC_FAMILY.
- family_cnt = 1;
- {
- char* s = strdup(family);
- char* p = s + strlen(s);
- while (--p > s)
- if (*p == ' ' || *p == '-') {
- *p = '\0';
- FcPatternAddString(pat, FC_FAMILY, (const FcChar8*)s);
- ++ family_cnt;
- }
- free(s);
+ if (!treat_family_as_pattern) {
+ FcPatternAddString(pat, FC_FAMILY, (const FcChar8*)family);
+
+ // In SSA/ASS fonts are sometimes referenced by their "full name",
+ // which is usually a concatenation of family name and font
+ // style (ex. Ottawa Bold). Full name is available from
+ // FontConfig pattern element FC_FULLNAME, but it is never
+ // used for font matching.
+ // Therefore, I'm removing words from the end of the name one
+ // by one, and adding shortened names to the pattern. It seems
+ // that the first value (full name in this case) has
+ // precedence in matching.
+ // An alternative approach could be to reimplement FcFontSort
+ // using FC_FULLNAME instead of FC_FAMILY.
+ family_cnt = 1;
+ {
+ char* s = strdup(family);
+ char* p = s + strlen(s);
+ while (--p > s)
+ if (*p == ' ' || *p == '-') {
+ *p = '\0';
+ FcPatternAddString(pat, FC_FAMILY, (const FcChar8*)s);
+ ++ family_cnt;
+ }
+ free(s);
+ }
}
FcPatternAddBool(pat, FC_OUTLINE, FcTrue);
FcPatternAddInteger(pat, FC_SLANT, italic);
@@ -153,11 +160,13 @@ static char* _select_font(fc_instance_t* priv, const char* family, unsigned bold
goto error;
#if (FC_VERSION >= 20297)
- // Remove all extra family names from original pattern.
- // After this, FcFontRenderPrepare will select the most relevant family
- // name in case there are more than one of them.
- for (; family_cnt > 1; --family_cnt)
- FcPatternRemove(pat, FC_FAMILY, family_cnt - 1);
+ if (!treat_family_as_pattern) {
+ // Remove all extra family names from original pattern.
+ // After this, FcFontRenderPrepare will select the most relevant family
+ // name in case there are more than one of them.
+ for (; family_cnt > 1; --family_cnt)
+ FcPatternRemove(pat, FC_FAMILY, family_cnt - 1);
+ }
#endif
rpat = FcFontRenderPrepare(priv->config, pat, fset->fonts[curf]);
@@ -182,7 +191,8 @@ static char* _select_font(fc_instance_t* priv, const char* family, unsigned bold
if (result != FcResultMatch)
r_fullname = NULL;
- if (!(r_family && strcasecmp((const char*)r_family, family) == 0) &&
+ if (!treat_family_as_pattern &&
+ !(r_family && strcasecmp((const char*)r_family, family) == 0) &&
!(r_fullname && strcasecmp((const char*)r_fullname, family) == 0))
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_SelectedFontFamilyIsNotTheRequestedOne,
(const char*)(r_fullname ? r_fullname : r_family), family);
@@ -219,14 +229,15 @@ static char* _select_font(fc_instance_t* priv, const char* family, unsigned bold
* \brief Find a font. Use default family or path if necessary.
* \param priv_ private data
* \param family font family
+ * \param treat_family_as_pattern treat family as fontconfig pattern
* \param bold font weight value
* \param italic font slant value
* \param index out: font index inside a file
* \param code: the character that should be present in the font, can be 0
* \return font file path
*/
-char* fontconfig_select(fc_instance_t* priv, const char* family, unsigned bold, unsigned italic, int* index,
- uint32_t code)
+char* fontconfig_select(fc_instance_t* priv, const char* family, int treat_family_as_pattern,
+ unsigned bold, unsigned italic, int* index, uint32_t code)
{
char* res = 0;
if (!priv->config) {
@@ -234,9 +245,9 @@ char* fontconfig_select(fc_instance_t* priv, const char* family, unsigned bold,
return priv->path_default;
}
if (family && *family)
- res = _select_font(priv, family, bold, italic, index, code);
+ res = _select_font(priv, family, treat_family_as_pattern, bold, italic, index, code);
if (!res && priv->family_default) {
- res = _select_font(priv, priv->family_default, bold, italic, index, code);
+ res = _select_font(priv, priv->family_default, 0, bold, italic, index, code);
if (res)
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_UsingDefaultFontFamily,
family, bold, italic, res, *index);
@@ -248,7 +259,7 @@ char* fontconfig_select(fc_instance_t* priv, const char* family, unsigned bold,
family, bold, italic, res, *index);
}
if (!res) {
- res = _select_font(priv, "Arial", bold, italic, index, code);
+ res = _select_font(priv, "Arial", 0, bold, italic, index, code);
if (res)
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_UsingArialFontFamily,
family, bold, italic, res, *index);
@@ -474,8 +485,8 @@ exit:
#else /* CONFIG_FONTCONFIG */
-char* fontconfig_select(fc_instance_t* priv, const char* family, unsigned bold, unsigned italic, int* index,
- uint32_t code)
+char* fontconfig_select(fc_instance_t* priv, const char* family, int treat_family_as_pattern,
+ unsigned bold, unsigned italic, int* index, uint32_t code)
{
*index = priv->index_default;
return priv->path_default;
diff --git a/libass/ass_fontconfig.h b/libass/ass_fontconfig.h
index e9a1ce1..7780690 100644
--- a/libass/ass_fontconfig.h
+++ b/libass/ass_fontconfig.h
@@ -35,7 +35,7 @@
typedef struct fc_instance_s fc_instance_t;
fc_instance_t* fontconfig_init(ass_library_t* library, FT_Library ftlibrary, const char* family, const char* path, int fc);
-char* fontconfig_select(fc_instance_t* priv, const char* family, unsigned bold, unsigned italic, int* index, uint32_t code);
+char* fontconfig_select(fc_instance_t* priv, const char* family, int treat_family_as_pattern, unsigned bold, unsigned italic, int* index, uint32_t code);
void fontconfig_done(fc_instance_t* priv);
#endif /* LIBASS_FONTCONFIG_H */
diff --git a/libass/ass_mp.c b/libass/ass_mp.c
index 40da63c..7e25b8e 100644
--- a/libass/ass_mp.c
+++ b/libass/ass_mp.c
@@ -94,6 +94,7 @@ ass_track_t* ass_default_track(ass_library_t* library) {
style = track->styles + sid;
style->Name = strdup("Default");
style->FontName = (font_fontconfig >= 0 && sub_font_name) ? strdup(sub_font_name) : (font_fontconfig >= 0 && font_name) ? strdup(font_name) : strdup("Sans");
+ style->treat_fontname_as_pattern = 1;
fs = track->PlayResY * text_font_scale_factor / 100.;
// approximate autoscale coefficients
diff --git a/libass/ass_render.c b/libass/ass_render.c
index a40adec..b561b2a 100644
--- a/libass/ass_render.c
+++ b/libass/ass_render.c
@@ -43,8 +43,10 @@
#define MAX_GLYPHS 3000
#define MAX_LINES 300
-#define BE_RADIUS 1.5
#define BLUR_MAX_RADIUS 50.0
+#define MAX_BE 100
+#define ROUND(x) ((int) ((x) + .5))
+#define SUBPIXEL_MASK 56 // d6 bitmask for subpixel accuracy adjustment
static int last_render_id = 0;
@@ -82,7 +84,6 @@ struct ass_renderer_s {
ass_settings_t settings;
int render_id;
ass_synth_priv_t* synth_priv;
- ass_synth_priv_t* synth_priv_blur;
ass_image_t* images_root; // rendering result is stored here
ass_image_t* prev_images_root;
@@ -116,7 +117,7 @@ typedef struct glyph_info_s {
// int height;
int be; // blur edges
double blur; // gaussian blur
- int shadow;
+ double shadow;
double frx, fry, frz; // rotation
bitmap_hash_key_t hash_key;
@@ -165,7 +166,7 @@ typedef struct render_context_s {
uint32_t fade; // alpha from \fad
char be; // blur edges
double blur; // gaussian blur
- int shadow;
+ double shadow;
int drawing_mode; // not implemented; when != 0 text is discarded, except for style override tags
effect_t effect_type;
@@ -183,6 +184,7 @@ typedef struct render_context_s {
char* family;
unsigned bold;
unsigned italic;
+ int treat_family_as_pattern;
} render_context_t;
@@ -224,9 +226,15 @@ static void ass_lazy_track_init(void)
} else {
double orig_aspect = (global_settings->aspect * frame_context.height * frame_context.orig_width) /
frame_context.orig_height / frame_context.width;
- if (!track->PlayResY) {
+ if (!track->PlayResY && track->PlayResX == 1280) {
+ track->PlayResY = 1024;
+ mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_PlayResYUndefinedSettingY, track->PlayResY);
+ } else if (!track->PlayResY) {
track->PlayResY = track->PlayResX / orig_aspect + .5;
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_PlayResYUndefinedSettingY, track->PlayResY);
+ } else if (!track->PlayResX && track->PlayResY == 1024) {
+ track->PlayResX = 1280;
+ mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_PlayResXUndefinedSettingX, track->PlayResX);
} else if (!track->PlayResX) {
track->PlayResX = track->PlayResY * orig_aspect + .5;
mp_msg(MSGT_ASS, MSGL_WARN, MSGTR_LIBASS_PlayResXUndefinedSettingX, track->PlayResX);
@@ -263,8 +271,7 @@ ass_renderer_t* ass_renderer_init(ass_library_t* library)
goto ass_init_exit;
}
- priv->synth_priv = ass_synth_init(BE_RADIUS);
- priv->synth_priv_blur = ass_synth_init(BLUR_MAX_RADIUS);
+ priv->synth_priv = ass_synth_init(BLUR_MAX_RADIUS);
priv->library = library;
priv->ftlibrary = ft;
@@ -272,6 +279,7 @@ ass_renderer_t* ass_renderer_init(ass_library_t* library)
ass_font_cache_init();
ass_bitmap_cache_init();
+ ass_composite_cache_init();
ass_glyph_cache_init();
text_info.glyphs = calloc(MAX_GLYPHS, sizeof(glyph_info_t));
@@ -287,6 +295,7 @@ void ass_renderer_done(ass_renderer_t* priv)
{
ass_font_cache_done();
ass_bitmap_cache_done();
+ ass_composite_cache_done();
ass_glyph_cache_done();
if (render_context.stroker) {
FT_Stroker_Done(render_context.stroker);
@@ -399,6 +408,98 @@ static ass_image_t** render_glyph(bitmap_t* bm, int dst_x, int dst_y, uint32_t c
}
/**
+ * \brief Calculate overlapping area of two consecutive bitmaps and in case they
+ * overlap, composite them together
+ * Mainly useful for translucent glyphs and especially borders, to avoid the
+ * luminance adding up where they overlap (which looks ugly)
+ */
+static void render_overlap(ass_image_t** last_tail, ass_image_t** tail, bitmap_hash_key_t *last_hash, bitmap_hash_key_t* hash) {
+ int left, top, bottom, right;
+ int old_left, old_top, w, h, cur_left, cur_top;
+ int x, y, opos, cpos;
+ char m;
+ composite_hash_key_t hk;
+ composite_hash_val_t *hv;
+ composite_hash_key_t *nhk;
+ int ax = (*last_tail)->dst_x;
+ int ay = (*last_tail)->dst_y;
+ int aw = (*last_tail)->w;
+ int as = (*last_tail)->stride;
+ int ah = (*last_tail)->h;
+ int bx = (*tail)->dst_x;
+ int by = (*tail)->dst_y;
+ int bw = (*tail)->w;
+ int bs = (*tail)->stride;
+ int bh = (*tail)->h;
+ unsigned char* a;
+ unsigned char* b;
+
+ if ((*last_tail)->bitmap == (*tail)->bitmap)
+ return;
+
+ if ((*last_tail)->color != (*tail)->color)
+ return;
+
+ // Calculate overlap coordinates
+ left = (ax > bx) ? ax : bx;
+ top = (ay > by) ? ay : by;
+ right = ((ax+aw) < (bx+bw)) ? (ax+aw) : (bx+bw);
+ bottom = ((ay+ah) < (by+bh)) ? (ay+ah) : (by+bh);
+ if ((right <= left) || (bottom <= top))
+ return;
+ old_left = left-ax;
+ old_top = top-ay;
+ w = right-left;
+ h = bottom-top;
+ cur_left = left-bx;
+ cur_top = top-by;
+
+ // Query cache
+ memcpy(&hk.a, last_hash, sizeof(*last_hash));
+ memcpy(&hk.b, hash, sizeof(*hash));
+ hk.aw = aw;
+ hk.ah = ah;
+ hk.bw = bw;
+ hk.bh = bh;
+ hk.ax = ax;
+ hk.ay = ay;
+ hk.bx = bx;
+ hk.by = by;
+ hv = cache_find_composite(&hk);
+ if (hv) {
+ (*last_tail)->bitmap = hv->a;
+ (*tail)->bitmap = hv->b;
+ return;
+ }
+
+ // Allocate new bitmaps and copy over data
+ a = (*last_tail)->bitmap;
+ b = (*tail)->bitmap;
+ (*last_tail)->bitmap = malloc(as*ah);
+ (*tail)->bitmap = malloc(bs*bh);
+ memcpy((*last_tail)->bitmap, a, as*ah);
+ memcpy((*tail)->bitmap, b, bs*bh);
+
+ // Composite overlapping area
+ for (y=0; y<h; y++)
+ for (x=0; x<w; x++) {
+ opos = (old_top+y)*(as) + (old_left+x);
+ cpos = (cur_top+y)*(bs) + (cur_left+x);
+ m = (a[opos] > b[cpos]) ? a[opos] : b[cpos];
+ (*last_tail)->bitmap[opos] = 0;
+ (*tail)->bitmap[cpos] = m;
+ }
+
+ // Insert bitmaps into the cache
+ nhk = calloc(1, sizeof(*nhk));
+ memcpy(nhk, &hk, sizeof(*nhk));
+ hv = calloc(1, sizeof(*hv));
+ hv->a = (*last_tail)->bitmap;
+ hv->b = (*tail)->bitmap;
+ cache_add_composite(nhk, hv);
+}
+
+/**
* \brief Convert text_info_t struct to ass_image_t list
* Splits glyphs in halves when needed (for \kf karaoke).
*/
@@ -409,19 +510,28 @@ static ass_image_t* render_text(text_info_t* text_info, int dst_x, int dst_y)
bitmap_t* bm;
ass_image_t* head;
ass_image_t** tail = &head;
+ ass_image_t** last_tail = 0;
+ ass_image_t** here_tail = 0;
+ bitmap_hash_key_t* last_hash = 0;
for (i = 0; i < text_info->length; ++i) {
glyph_info_t* info = text_info->glyphs + i;
if ((info->symbol == 0) || (info->symbol == '\n') || !info->bm_s || (info->shadow == 0))
continue;
- pen_x = dst_x + info->pos.x + info->shadow;
- pen_y = dst_y + info->pos.y + info->shadow;
+ pen_x = dst_x + info->pos.x + ROUND(info->shadow * frame_context.border_scale);
+ pen_y = dst_y + info->pos.y + ROUND(info->shadow * frame_context.border_scale);
bm = info->bm_s;
+ here_tail = tail;
tail = render_glyph(bm, pen_x, pen_y, info->c[3], 0, 1000000, tail);
+ if (last_tail && tail != here_tail && ((info->c[3] & 0xff) > 0))
+ render_overlap(last_tail, here_tail, last_hash, &info->hash_key);
+ last_tail = here_tail;
+ last_hash = &info->hash_key;
}
+ last_tail = 0;
for (i = 0; i < text_info->length; ++i) {
glyph_info_t* info = text_info->glyphs + i;
if ((info->symbol == 0) || (info->symbol == '\n') || !info->bm_o)
@@ -433,8 +543,14 @@ static ass_image_t* render_text(text_info_t* text_info, int dst_x, int dst_y)
if ((info->effect_type == EF_KARAOKE_KO) && (info->effect_timing <= info->bbox.xMax)) {
// do nothing
- } else
+ } else {
+ here_tail = tail;
tail = render_glyph(bm, pen_x, pen_y, info->c[2], 0, 1000000, tail);
+ if (last_tail && tail != here_tail && ((info->c[2] & 0xff) > 0))
+ render_overlap(last_tail, here_tail, last_hash, &info->hash_key);
+ last_tail = here_tail;
+ last_hash = &info->hash_key;
+ }
}
for (i = 0; i < text_info->length; ++i) {
glyph_info_t* info = text_info->glyphs + i;
@@ -467,17 +583,22 @@ static int x2scr(double x) {
return x*frame_context.orig_width_nocrop / frame_context.track->PlayResX +
FFMAX(global_settings->left_margin, 0);
}
-static int x2scr_pos(double x) {
+static double x2scr_pos(double x) {
return x*frame_context.orig_width / frame_context.track->PlayResX +
global_settings->left_margin;
}
/**
* \brief Mapping between script and screen coordinates
*/
-static int y2scr(double y) {
+static double y2scr(double y) {
return y * frame_context.orig_height_nocrop / frame_context.track->PlayResY +
FFMAX(global_settings->top_margin, 0);
}
+static double y2scr_pos(double y) {
+ return y * frame_context.orig_height / frame_context.track->PlayResY +
+ global_settings->top_margin;
+}
+
// the same for toptitles
static int y2scr_top(double y) {
if (global_settings->use_margins)
@@ -556,6 +677,7 @@ static void update_font(void)
ass_renderer_t* priv = frame_context.ass_priv;
ass_font_desc_t desc;
desc.family = strdup(render_context.family);
+ desc.treat_family_as_pattern = render_context.treat_family_as_pattern;
val = render_context.bold;
// 0 = normal, 1 = bold, >1 = exact weight
@@ -780,29 +902,29 @@ static char* parse_tag(char* p, double pwr) {
val = -1.; // reset to default
change_border(val);
} else if (mystrcmp(&p, "move")) {
- int x1, x2, y1, y2;
+ double x1, x2, y1, y2;
long long t1, t2, delta_t, t;
double x, y;
double k;
skip('(');
- mystrtoi(&p, &x1);
+ mystrtod(&p, &x1);
skip(',');
- mystrtoi(&p, &y1);
+ mystrtod(&p, &y1);
skip(',');
- mystrtoi(&p, &x2);
+ mystrtod(&p, &x2);
skip(',');
- mystrtoi(&p, &y2);
+ mystrtod(&p, &y2);
if (*p == ',') {
skip(',');
mystrtoll(&p, &t1);
skip(',');
mystrtoll(&p, &t2);
- mp_msg(MSGT_ASS, MSGL_DBG2, "movement6: (%d, %d) -> (%d, %d), (%" PRId64 " .. %" PRId64 ")\n",
+ mp_msg(MSGT_ASS, MSGL_DBG2, "movement6: (%f, %f) -> (%f, %f), (%" PRId64 " .. %" PRId64 ")\n",
x1, y1, x2, y2, (int64_t)t1, (int64_t)t2);
} else {
t1 = 0;
t2 = render_context.event->Duration;
- mp_msg(MSGT_ASS, MSGL_DBG2, "movement: (%d, %d) -> (%d, %d)\n", x1, y1, x2, y2);
+ mp_msg(MSGT_ASS, MSGL_DBG2, "movement: (%f, %f) -> (%f, %f)\n", x1, y1, x2, y2);
}
skip(')');
delta_t = t2 - t1;
@@ -888,13 +1010,13 @@ static char* parse_tag(char* p, double pwr) {
else
render_context.alignment = render_context.style->Alignment;
} else if (mystrcmp(&p, "pos")) {
- int v1, v2;
+ double v1, v2;
skip('(');
- mystrtoi(&p, &v1);
+ mystrtod(&p, &v1);
skip(',');
- mystrtoi(&p, &v2);
+ mystrtod(&p, &v2);
skip(')');
- mp_msg(MSGT_ASS, MSGL_DBG2, "pos(%d, %d)\n", v1, v2);
+ mp_msg(MSGT_ASS, MSGL_DBG2, "pos(%f, %f)\n", v1, v2);
if (render_context.evt_type != EVENT_POSITIONED) {
render_context.evt_type = EVENT_POSITIONED;
render_context.detect_collisions = 0;
@@ -944,10 +1066,12 @@ static char* parse_tag(char* p, double pwr) {
skip(')');
mp_msg(MSGT_ASS, MSGL_DBG2, "org(%d, %d)\n", v1, v2);
// render_context.evt_type = EVENT_POSITIONED;
- render_context.org_x = v1;
- render_context.org_y = v2;
- render_context.have_origin = 1;
- render_context.detect_collisions = 0;
+ if (!render_context.have_origin) {
+ render_context.org_x = v1;
+ render_context.org_y = v2;
+ render_context.have_origin = 1;
+ render_context.detect_collisions = 0;
+ }
} else if (mystrcmp(&p, "t")) {
double v[3];
int v1, v2;
@@ -1044,9 +1168,9 @@ static char* parse_tag(char* p, double pwr) {
} else if (mystrcmp(&p, "be")) {
int val;
if (mystrtoi(&p, &val)) {
- // Clamp to 10, since high values need excessive CPU
+ // Clamp to a safe upper limit, since high values need excessive CPU
val = (val < 0) ? 0 : val;
- val = (val > 10) ? 10 : val;
+ val = (val > MAX_BE) ? MAX_BE : val;
render_context.be = val;
} else
render_context.be = 0;
@@ -1237,6 +1361,7 @@ static void reset_render_context(void)
if (render_context.family)
free(render_context.family);
render_context.family = strdup(render_context.style->FontName);
+ render_context.treat_family_as_pattern = render_context.style->treat_fontname_as_pattern;
render_context.bold = render_context.style->Bold;
render_context.italic = render_context.style->Italic;
update_font();
@@ -1387,10 +1512,9 @@ static void get_bitmap_glyph(glyph_info_t* info)
// render glyph
error = glyph_to_bitmap(ass_renderer->synth_priv,
- ass_renderer->synth_priv_blur,
info->glyph, info->outline_glyph,
&info->bm, &info->bm_o,
- &info->bm_s, info->be, info->blur);
+ &info->bm_s, info->be, info->blur * frame_context.border_scale);
if (error)
info->symbol = 0;
@@ -1680,75 +1804,46 @@ static void get_base_point(FT_BBox bbox, int alignment, int* bx, int* by)
}
/**
- * \brief Multiply 4-vector by 4-matrix
- * \param a 4-vector
- * \param m 4-matrix]
- * \param b out: 4-vector
- * Calculates a * m and stores result in b
+ * \brief Apply transformation to outline points of a glyph
+ * Applies rotations given by frx, fry and frz and projects the points back
+ * onto the screen plane.
*/
-static inline void transform_point_3d(double *a, double *m, double *b)
-{
- b[0] = a[0] * m[0] + a[1] * m[4] + a[2] * m[8] + a[3] * m[12];
- b[1] = a[0] * m[1] + a[1] * m[5] + a[2] * m[9] + a[3] * m[13];
- b[2] = a[0] * m[2] + a[1] * m[6] + a[2] * m[10] + a[3] * m[14];
- b[3] = a[0] * m[3] + a[1] * m[7] + a[2] * m[11] + a[3] * m[15];
-}
-
-/**
- * \brief Apply 3d transformation to a vector
- * \param v FreeType vector (2d)
- * \param m 4-matrix
- * Transforms v by m, projects the result back to the screen plane
- * Result is returned in v.
- */
-static inline void transform_vector_3d(FT_Vector* v, double *m) {
- const double camera = 2500 * frame_context.border_scale; // camera distance
- const double cutoff_z = 10.;
- double a[4], b[4];
- a[0] = d6_to_double(v->x);
- a[1] = d6_to_double(v->y);
- a[2] = 0.;
- a[3] = 1.;
- transform_point_3d(a, m, b);
- /* Apply perspective projection with the following matrix:
- 2500 0 0 0
- 0 2500 0 0
- 0 0 0 0
- 0 0 8 2500
- where 2500 is camera distance, 8 - z-axis scale.
- Camera is always located in (org_x, org_y, -2500). This means
- that different subtitle events can be displayed at the same time
- using different cameras. */
- b[0] *= camera;
- b[1] *= camera;
- b[3] = 8 * b[2] + camera;
- if (b[3] < cutoff_z)
- b[3] = cutoff_z;
- v->x = double_to_d6(b[0] / b[3]);
- v->y = double_to_d6(b[1] / b[3]);
-}
-
-/**
- * \brief Apply 3d transformation to a glyph
- * \param glyph FreeType glyph
- * \param m 4-matrix
- * Transforms glyph by m, projects the result back to the screen plane
- * Result is returned in glyph.
- */
-static inline void transform_glyph_3d(FT_Glyph glyph, double *m, FT_Vector shift) {
- int i;
- FT_Outline* outline = &((FT_OutlineGlyph)glyph)->outline;
+static void transform_3d_points(FT_Vector shift, FT_Glyph glyph, double frx, double fry, double frz) {
+ double sx = sin(frx);
+ double sy = sin(fry);
+ double sz = sin(frz);
+ double cx = cos(frx);
+ double cy = cos(fry);
+ double cz = cos(frz);
+ FT_Outline *outline = &((FT_OutlineGlyph) glyph)->outline;
FT_Vector* p = outline->points;
+ double x, y, z, xx, yy, zz;
+ int i;
for (i=0; i<outline->n_points; i++) {
- p[i].x += shift.x;
- p[i].y += shift.y;
- transform_vector_3d(p + i, m);
- p[i].x -= shift.x;
- p[i].y -= shift.y;
- }
+ x = p[i].x + shift.x;
+ y = p[i].y + shift.y;
+ z = 0.;
+
+ xx = x*cz + y*sz;
+ yy = -(x*sz - y*cz);
+ zz = z;
+
+ x = xx;
+ y = yy*cx + zz*sx;
+ z = yy*sx - zz*cx;
- //transform_vector_3d(&glyph->advance, m);
+ xx = x*cy + z*sy;
+ yy = y;
+ zz = x*sy - z*cy;
+
+ zz = FFMAX(zz, -19000);
+
+ x = (xx * 20000) / (zz + 20000);
+ y = (yy * 20000) / (zz + 20000);
+ p[i].x = x - shift.x + 0.5;
+ p[i].y = y - shift.y + 0.5;
+ }
}
/**
@@ -1763,28 +1858,18 @@ static inline void transform_glyph_3d(FT_Glyph glyph, double *m, FT_Vector shift
*/
static void transform_3d(FT_Vector shift, FT_Glyph* glyph, FT_Glyph* glyph2, double frx, double fry, double frz)
{
- fry = - fry; // FreeType's y axis goes in the opposite direction
+ frx = - frx;
+ frz = - frz;
if (frx != 0. || fry != 0. || frz != 0.) {
- double m[16];
- double sx = sin(frx);
- double sy = sin(fry);
- double sz = sin(frz);
- double cx = cos(frx);
- double cy = cos(fry);
- double cz = cos(frz);
- m[0] = cy * cz; m[1] = cy*sz; m[2] = -sy; m[3] = 0.0;
- m[4] = -cx*sz + sx*sy*cz; m[5] = cx*cz + sx*sy*sz; m[6] = sx*cy; m[7] = 0.0;
- m[8] = sx*sz + cx*sy*cz; m[9] = -sx*cz + cx*sy*sz; m[10] = cx*cy; m[11] = 0.0;
- m[12] = 0.0; m[13] = 0.0; m[14] = 0.0; m[15] = 1.0;
-
if (glyph && *glyph)
- transform_glyph_3d(*glyph, m, shift);
+ transform_3d_points(shift, *glyph, frx, fry, frz);
if (glyph2 && *glyph2)
- transform_glyph_3d(*glyph2, m, shift);
+ transform_3d_points(shift, *glyph2, frx, fry, frz);
}
}
+
/**
* \brief Main ass rendering function, glues everything together
* \param event event to render
@@ -1852,8 +1937,13 @@ static int ass_render_event(ass_event_t* event, event_images_t* event_images)
pen.y += delta.y * render_context.scale_y;
}
- shift.x = pen.x & 63;
- shift.y = pen.y & 63;
+ shift.x = pen.x & SUBPIXEL_MASK;
+ shift.y = pen.y & SUBPIXEL_MASK;
+
+ if (render_context.evt_type == EVENT_POSITIONED) {
+ shift.x += double_to_d6(x2scr_pos(render_context.pos_x)) & SUBPIXEL_MASK;
+ shift.y -= double_to_d6(y2scr_pos(render_context.pos_y)) & SUBPIXEL_MASK;
+ }
ass_font_set_transform(render_context.font,
render_context.scale_x * frame_context.font_scale_x,
@@ -2019,15 +2109,15 @@ static int ass_render_event(ass_event_t* event, event_images_t* event_images)
mp_msg(MSGT_ASS, MSGL_DBG2, "positioned event at %f, %f\n", render_context.pos_x, render_context.pos_y);
get_base_point(bbox, alignment, &base_x, &base_y);
device_x = x2scr_pos(render_context.pos_x) - base_x;
- device_y = y2scr(render_context.pos_y) - base_y;
+ device_y = y2scr_pos(render_context.pos_y) - base_y;
}
// fix clip coordinates (they depend on alignment)
- render_context.clip_x0 = x2scr(render_context.clip_x0);
- render_context.clip_x1 = x2scr(render_context.clip_x1);
if (render_context.evt_type == EVENT_NORMAL ||
render_context.evt_type == EVENT_HSCROLL ||
render_context.evt_type == EVENT_VSCROLL) {
+ render_context.clip_x0 = x2scr(render_context.clip_x0);
+ render_context.clip_x1 = x2scr(render_context.clip_x1);
if (valign == VALIGN_TOP) {
render_context.clip_y0 = y2scr_top(render_context.clip_y0);
render_context.clip_y1 = y2scr_top(render_context.clip_y1);
@@ -2039,8 +2129,10 @@ static int ass_render_event(ass_event_t* event, event_images_t* event_images)
render_context.clip_y1 = y2scr_sub(render_context.clip_y1);
}
} else if (render_context.evt_type == EVENT_POSITIONED) {
- render_context.clip_y0 = y2scr(render_context.clip_y0);
- render_context.clip_y1 = y2scr(render_context.clip_y1);
+ render_context.clip_x0 = x2scr_pos(render_context.clip_x0);
+ render_context.clip_x1 = x2scr_pos(render_context.clip_x1);
+ render_context.clip_y0 = y2scr_pos(render_context.clip_y0);
+ render_context.clip_y1 = y2scr_pos(render_context.clip_y1);
}
// calculate rotation parameters
@@ -2104,6 +2196,7 @@ static void ass_reconfigure(ass_renderer_t* priv)
priv->render_id = ++last_render_id;
ass_glyph_cache_reset();
ass_bitmap_cache_reset();
+ ass_composite_cache_reset();
ass_free_images(priv->prev_images_root);
priv->prev_images_root = 0;
}
@@ -2226,12 +2319,12 @@ static int ass_start_frame(ass_renderer_t *priv, ass_track_t* track, long long n
frame_context.font_scale = global_settings->font_size_coeff *
frame_context.orig_height / frame_context.track->PlayResY;
- frame_context.border_scale = ((double)frame_context.orig_height) / frame_context.track->PlayResY;
-
- if (frame_context.orig_width * track->PlayResY == frame_context.orig_height * track->PlayResX)
- frame_context.font_scale_x = 1.;
+ if (frame_context.track->ScaledBorderAndShadow)
+ frame_context.border_scale = ((double)frame_context.orig_height) / frame_context.track->PlayResY;
else
- frame_context.font_scale_x = ((double)(frame_context.orig_width * track->PlayResY)) / (frame_context.orig_height * track->PlayResX);
+ frame_context.border_scale = 1.;
+
+ frame_context.font_scale_x = 1.;
priv->prev_images_root = priv->images_root;
priv->images_root = 0;
diff --git a/libass/ass_types.h b/libass/ass_types.h
index 870fab4..01c36c5 100644
--- a/libass/ass_types.h
+++ b/libass/ass_types.h
@@ -58,6 +58,7 @@ typedef struct ass_style_s {
int MarginV;
// int AlphaLevel;
int Encoding;
+ int treat_fontname_as_pattern;
} ass_style_t;
typedef struct render_priv_s render_priv_t;
@@ -105,6 +106,7 @@ typedef struct ass_track_s {
int PlayResY;
double Timer;
int WrapStyle;
+ char ScaledBorderAndShadow;
int default_style; // index of default style
diff --git a/libass/ass_utils.c b/libass/ass_utils.c
index 25e4d4f..7f728f1 100644
--- a/libass/ass_utils.c
+++ b/libass/ass_utils.c
@@ -96,6 +96,17 @@ int strtocolor(char** q, uint32_t* res)
return result;
}
+// Return a boolean value for a string
+char parse_bool(char* str) {
+ while (*str == ' ' || *str == '\t')
+ str++;
+ if (!strncasecmp(str, "yes", 3))
+ return 1;
+ else if (strtol(str, NULL, 10) > 0)
+ return 1;
+ return 0;
+}
+
#if 0
static void sprint_tag(uint32_t tag, char* dst)
{
diff --git a/libass/ass_utils.h b/libass/ass_utils.h
index f37bc0e..8c5f3e8 100644
--- a/libass/ass_utils.h
+++ b/libass/ass_utils.h
@@ -30,6 +30,7 @@ int mystrtoll(char** p, long long* res);
int mystrtou32(char** p, int base, uint32_t* res);
int mystrtod(char** p, double* res);
int strtocolor(char** q, uint32_t* res);
+char parse_bool(char* str);
static inline int d6_to_int(int x) {
return (x + 32) >> 6;
diff --git a/libavcodec/.svnrevision b/libavcodec/.svnrevision
index f8ba6ba..5883118 100644
--- a/libavcodec/.svnrevision
+++ b/libavcodec/.svnrevision
@@ -1 +1 @@
-17737
+18693
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index afa5fac..5067354 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -533,5 +533,4 @@ DIRS = alpha arm bfin mlib ppc ps2 sh4 sparc x86
include $(SUBDIR)../subdir.mak
-$(SUBDIR)dct-test$(EXESUF): $(SUBDIR)fdctref.o $(SUBDIR)aandcttab.o
-$(SUBDIR)fft-test$(EXESUF): $(SUBDIR)fdctref.o
+$(SUBDIR)dct-test$(EXESUF): $(SUBDIR)dctref.o $(SUBDIR)aandcttab.o
diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h
index 0b336f7..e1ec934 100644
--- a/libavcodec/bitstream.h
+++ b/libavcodec/bitstream.h
@@ -713,7 +713,9 @@ static inline unsigned int show_bits_long(GetBitContext *s, int n){
if(n<=17) return show_bits(s, n);
else{
GetBitContext gb= *s;
- return get_bits_long(&gb, n);
+ int ret= get_bits_long(s, n);
+ *s= gb;
+ return ret;
}
}
diff --git a/libavcodec/dct-test.c b/libavcodec/dct-test.c
index fef142f..48e7c5a 100644
--- a/libavcodec/dct-test.c
+++ b/libavcodec/dct-test.c
@@ -46,9 +46,9 @@
void *fast_memcpy(void *a, const void *b, size_t c){return memcpy(a,b,c);};
/* reference fdct/idct */
-void fdct(DCTELEM *block);
-void idct(DCTELEM *block);
-void init_fdct(void);
+void ff_ref_fdct(DCTELEM *block);
+void ff_ref_idct(DCTELEM *block);
+void ff_ref_dct_init(void);
void ff_mmx_idct(DCTELEM *data);
void ff_mmxext_idct(DCTELEM *data);
@@ -90,57 +90,57 @@ struct algo {
static int cpu_flags;
struct algo algos[] = {
- {"REF-DBL", 0, fdct, fdct, NO_PERM},
- {"FAAN", 0, ff_faandct, fdct, FAAN_SCALE},
- {"FAANI", 1, ff_faanidct, idct, NO_PERM},
- {"IJG-AAN-INT", 0, fdct_ifast, fdct, SCALE_PERM},
- {"IJG-LLM-INT", 0, ff_jpeg_fdct_islow, fdct, NO_PERM},
- {"REF-DBL", 1, idct, idct, NO_PERM},
- {"INT", 1, j_rev_dct, idct, MMX_PERM},
- {"SIMPLE-C", 1, ff_simple_idct, idct, NO_PERM},
+ {"REF-DBL", 0, ff_ref_fdct, ff_ref_fdct, NO_PERM},
+ {"FAAN", 0, ff_faandct, ff_ref_fdct, FAAN_SCALE},
+ {"FAANI", 1, ff_faanidct, ff_ref_idct, NO_PERM},
+ {"IJG-AAN-INT", 0, fdct_ifast, ff_ref_fdct, SCALE_PERM},
+ {"IJG-LLM-INT", 0, ff_jpeg_fdct_islow, ff_ref_fdct, NO_PERM},
+ {"REF-DBL", 1, ff_ref_idct, ff_ref_idct, NO_PERM},
+ {"INT", 1, j_rev_dct, ff_ref_idct, MMX_PERM},
+ {"SIMPLE-C", 1, ff_simple_idct, ff_ref_idct, NO_PERM},
#if HAVE_MMX
- {"MMX", 0, ff_fdct_mmx, fdct, NO_PERM, FF_MM_MMX},
+ {"MMX", 0, ff_fdct_mmx, ff_ref_fdct, NO_PERM, FF_MM_MMX},
#if HAVE_MMX2
- {"MMX2", 0, ff_fdct_mmx2, fdct, NO_PERM, FF_MM_MMXEXT},
- {"SSE2", 0, ff_fdct_sse2, fdct, NO_PERM, FF_MM_SSE2},
+ {"MMX2", 0, ff_fdct_mmx2, ff_ref_fdct, NO_PERM, FF_MM_MMXEXT},
+ {"SSE2", 0, ff_fdct_sse2, ff_ref_fdct, NO_PERM, FF_MM_SSE2},
#endif
#if CONFIG_GPL
- {"LIBMPEG2-MMX", 1, ff_mmx_idct, idct, MMX_PERM, FF_MM_MMX},
- {"LIBMPEG2-MMXEXT", 1, ff_mmxext_idct, idct, MMX_PERM, FF_MM_MMXEXT},
+ {"LIBMPEG2-MMX", 1, ff_mmx_idct, ff_ref_idct, MMX_PERM, FF_MM_MMX},
+ {"LIBMPEG2-MMXEXT", 1, ff_mmxext_idct, ff_ref_idct, MMX_PERM, FF_MM_MMXEXT},
#endif
- {"SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, MMX_SIMPLE_PERM, FF_MM_MMX},
- {"XVID-MMX", 1, ff_idct_xvid_mmx, idct, NO_PERM, FF_MM_MMX},
- {"XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, NO_PERM, FF_MM_MMXEXT},
- {"XVID-SSE2", 1, ff_idct_xvid_sse2, idct, SSE2_PERM, FF_MM_SSE2},
+ {"SIMPLE-MMX", 1, ff_simple_idct_mmx, ff_ref_idct, MMX_SIMPLE_PERM, FF_MM_MMX},
+ {"XVID-MMX", 1, ff_idct_xvid_mmx, ff_ref_idct, NO_PERM, FF_MM_MMX},
+ {"XVID-MMX2", 1, ff_idct_xvid_mmx2, ff_ref_idct, NO_PERM, FF_MM_MMXEXT},
+ {"XVID-SSE2", 1, ff_idct_xvid_sse2, ff_ref_idct, SSE2_PERM, FF_MM_SSE2},
#endif
#if HAVE_ALTIVEC
- {"altivecfdct", 0, fdct_altivec, fdct, NO_PERM, FF_MM_ALTIVEC},
+ {"altivecfdct", 0, fdct_altivec, ff_ref_fdct, NO_PERM, FF_MM_ALTIVEC},
#endif
#if ARCH_BFIN
- {"BFINfdct", 0, ff_bfin_fdct, fdct, NO_PERM},
- {"BFINidct", 1, ff_bfin_idct, idct, NO_PERM},
+ {"BFINfdct", 0, ff_bfin_fdct, ff_ref_fdct, NO_PERM},
+ {"BFINidct", 1, ff_bfin_idct, ff_ref_idct, NO_PERM},
#endif
#if ARCH_ARM
- {"SIMPLE-ARM", 1, simple_idct_ARM, idct, NO_PERM },
- {"INT-ARM", 1, j_rev_dct_ARM, idct, MMX_PERM },
+ {"SIMPLE-ARM", 1, simple_idct_ARM, ff_ref_idct, NO_PERM },
+ {"INT-ARM", 1, j_rev_dct_ARM, ff_ref_idct, MMX_PERM },
#if HAVE_ARMV5TE
- {"SIMPLE-ARMV5TE", 1, simple_idct_armv5te, idct, NO_PERM },
+ {"SIMPLE-ARMV5TE", 1, simple_idct_armv5te, ff_ref_idct, NO_PERM },
#endif
#if HAVE_ARMV6
- {"SIMPLE-ARMV6", 1, ff_simple_idct_armv6, idct, MMX_PERM },
+ {"SIMPLE-ARMV6", 1, ff_simple_idct_armv6, ff_ref_idct, MMX_PERM },
#endif
#if HAVE_NEON
- {"SIMPLE-NEON", 1, ff_simple_idct_neon, idct, PARTTRANS_PERM },
+ {"SIMPLE-NEON", 1, ff_simple_idct_neon, ff_ref_idct, PARTTRANS_PERM },
#endif
#endif /* ARCH_ARM */
#if ARCH_ALPHA
- {"SIMPLE-ALPHA", 1, ff_simple_idct_axp, idct, NO_PERM },
+ {"SIMPLE-ALPHA", 1, ff_simple_idct_axp, ff_ref_idct, NO_PERM },
#endif
{ 0 }
@@ -222,7 +222,7 @@ void dct_error(const char *name, int is_idct,
for(i=0;i<64;i++)
block1[i] = (random() % 512) -256;
if (is_idct){
- fdct(block1);
+ ff_ref_fdct(block1);
for(i=0;i<64;i++)
block1[i]>>=3;
@@ -336,7 +336,7 @@ void dct_error(const char *name, int is_idct,
for(i=0;i<64;i++)
block1[i] = (random() % 512) -256;
if (is_idct){
- fdct(block1);
+ ff_ref_fdct(block1);
for(i=0;i<64;i++)
block1[i]>>=3;
@@ -559,7 +559,7 @@ int main(int argc, char **argv)
int test=1;
cpu_flags = mm_support();
- init_fdct();
+ ff_ref_dct_init();
idct_mmx_init();
for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
diff --git a/libavcodec/dctref.c b/libavcodec/dctref.c
new file mode 100644
index 0000000..faad057
--- /dev/null
+++ b/libavcodec/dctref.c
@@ -0,0 +1,121 @@
+/*
+ * reference discrete cosine transform (double precision)
+ * Copyright (C) 2009 Dylan Yudaken
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg 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.
+ *
+ * FFmpeg 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 FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file libavcodec/dctref.c
+ * reference discrete cosine transform (double precision)
+ *
+ * @author Dylan Yudaken (dyudaken at gmail)
+ *
+ * @note This file could be optimized a lot, but is for
+ * reference and so readability is better.
+ */
+
+#include "libavutil/mathematics.h"
+static double coefficients[8 * 8];
+
+/**
+ * Initialize the double precision discrete cosine transform
+ * functions fdct & idct.
+ */
+av_cold void ff_ref_dct_init(void)
+{
+ unsigned int i, j;
+
+ for (j = 0; j < 8; ++j) {
+ coefficients[j] = sqrt(0.125);
+ for (i = 8; i < 64; i += 8) {
+ coefficients[i + j] = 0.5 * cos(i * (j + 0.5) * M_PI / 64.0);
+ }
+ }
+}
+
+/**
+ * Transform 8x8 block of data with a double precision forward DCT <br>
+ * This is a reference implementation.
+ *
+ * @param block pointer to 8x8 block of data to transform
+ */
+void ff_ref_fdct(short *block)
+{
+ /* implement the equation: block = coefficients * block * coefficients' */
+
+ unsigned int i, j, k;
+ double out[8 * 8];
+
+ /* out = coefficients * block */
+ for (i = 0; i < 64; i += 8) {
+ for (j = 0; j < 8; ++j) {
+ double tmp = 0;
+ for (k = 0; k < 8; ++k) {
+ tmp += coefficients[i + k] * block[k * 8 + j];
+ }
+ out[i + j] = tmp * 8;
+ }
+ }
+
+ /* block = out * (coefficients') */
+ for (j = 0; j < 8; ++j) {
+ for (i = 0; i < 64; i += 8) {
+ double tmp = 0;
+ for (k = 0; k < 8; ++k) {
+ tmp += out[i + k] * coefficients[j * 8 + k];
+ }
+ block[i + j] = floor(tmp + 0.499999999999);
+ }
+ }
+}
+
+/**
+ * Transform 8x8 block of data with a double precision inverse DCT <br>
+ * This is a reference implementation.
+ *
+ * @param block pointer to 8x8 block of data to transform
+ */
+void ff_ref_idct(short *block)
+{
+ /* implement the equation: block = (coefficients') * block * coefficients */
+
+ unsigned int i, j, k;
+ double out[8 * 8];
+
+ /* out = block * coefficients */
+ for (i = 0; i < 64; i += 8) {
+ for (j = 0; j < 8; ++j) {
+ double tmp = 0;
+ for (k = 0; k < 8; ++k) {
+ tmp += block[i + k] * coefficients[k * 8 + j];
+ }
+ out[i + j] = tmp;
+ }
+ }
+
+ /* block = (coefficients') * out */
+ for (i = 0; i < 8; ++i) {
+ for (j = 0; j < 8; ++j) {
+ double tmp = 0;
+ for (k = 0; k < 64; k += 8) {
+ tmp += coefficients[k + i] * out[k + j];
+ }
+ block[i * 8 + j] = floor(tmp + 0.5);
+ }
+ }
+}
diff --git a/libavcodec/fdctref.c b/libavcodec/fdctref.c
deleted file mode 100644
index 164883d..0000000
--- a/libavcodec/fdctref.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
- * @file libavcodec/fdctref.c
- * forward discrete cosine transform, double precision.
- */
-
-/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */
-
-/*
- * Disclaimer of Warranty
- *
- * These software programs are available to the user without any license fee or
- * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims
- * any and all warranties, whether express, implied, or statuary, including any
- * implied warranties or merchantability or of fitness for a particular
- * purpose. In no event shall the copyright-holder be liable for any
- * incidental, punitive, or consequential damages of any kind whatsoever
- * arising from the use of these programs.
- *
- * This disclaimer of warranty extends to the user of these programs and user's
- * customers, employees, agents, transferees, successors, and assigns.
- *
- * The MPEG Software Simulation Group does not represent or warrant that the
- * programs furnished hereunder are free of infringement of any third-party
- * patents.
- *
- * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
- * are subject to royalty fees to patent holders. Many of these patents are
- * general enough such that they are unavoidable regardless of implementation
- * design.
- */
-
-#include <math.h>
-
-#ifndef PI
-# ifdef M_PI
-# define PI M_PI
-# else
-# define PI 3.14159265358979323846
-# endif
-#endif
-
-/* global declarations */
-void init_fdct (void);
-void fdct (short *block);
-
-/* private data */
-static double c[8][8]; /* transform coefficients */
-
-void init_fdct(void)
-{
- int i, j;
- double s;
-
- for (i=0; i<8; i++)
- {
- s = (i==0) ? sqrt(0.125) : 0.5;
-
- for (j=0; j<8; j++)
- c[i][j] = s * cos((PI/8.0)*i*(j+0.5));
- }
-}
-
-void fdct(block)
-short *block;
-{
- register int i, j;
- double s;
- double tmp[64];
-
- for(i = 0; i < 8; i++)
- for(j = 0; j < 8; j++)
- {
- s = 0.0;
-
-/*
- * for(k = 0; k < 8; k++)
- * s += c[j][k] * block[8 * i + k];
- */
- s += c[j][0] * block[8 * i + 0];
- s += c[j][1] * block[8 * i + 1];
- s += c[j][2] * block[8 * i + 2];
- s += c[j][3] * block[8 * i + 3];
- s += c[j][4] * block[8 * i + 4];
- s += c[j][5] * block[8 * i + 5];
- s += c[j][6] * block[8 * i + 6];
- s += c[j][7] * block[8 * i + 7];
-
- tmp[8 * i + j] = s;
- }
-
- for(j = 0; j < 8; j++)
- for(i = 0; i < 8; i++)
- {
- s = 0.0;
-
-/*
- * for(k = 0; k < 8; k++)
- * s += c[i][k] * tmp[8 * k + j];
- */
- s += c[i][0] * tmp[8 * 0 + j];
- s += c[i][1] * tmp[8 * 1 + j];
- s += c[i][2] * tmp[8 * 2 + j];
- s += c[i][3] * tmp[8 * 3 + j];
- s += c[i][4] * tmp[8 * 4 + j];
- s += c[i][5] * tmp[8 * 5 + j];
- s += c[i][6] * tmp[8 * 6 + j];
- s += c[i][7] * tmp[8 * 7 + j];
- s*=8.0;
-
- block[8 * i + j] = (short)floor(s + 0.499999);
-/*
- * reason for adding 0.499999 instead of 0.5:
- * s is quite often x.5 (at least for i and/or j = 0 or 4)
- * and setting the rounding threshold exactly to 0.5 leads to an
- * extremely high arithmetic implementation dependency of the result;
- * s being between x.5 and x.500001 (which is now incorrectly rounded
- * downwards instead of upwards) is assumed to occur less often
- * (if at all)
- */
- }
-}
-
-/* perform IDCT matrix multiply for 8x8 coefficient block */
-
-void idct(block)
-short *block;
-{
- int i, j, k, v;
- double partial_product;
- double tmp[64];
-
- for (i=0; i<8; i++)
- for (j=0; j<8; j++)
- {
- partial_product = 0.0;
-
- for (k=0; k<8; k++)
- partial_product+= c[k][j]*block[8*i+k];
-
- tmp[8*i+j] = partial_product;
- }
-
- /* Transpose operation is integrated into address mapping by switching
- loop order of i and j */
-
- for (j=0; j<8; j++)
- for (i=0; i<8; i++)
- {
- partial_product = 0.0;
-
- for (k=0; k<8; k++)
- partial_product+= c[k][i]*tmp[8*k+j];
-
- v = (int) floor(partial_product+0.5);
- block[8*i+j] = v;
- }
-}
diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c
index 5350d02..b3592f4 100644
--- a/libavcodec/flacdec.c
+++ b/libavcodec/flacdec.c
@@ -206,10 +206,10 @@ void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
avctx->sample_fmt = SAMPLE_FMT_S16;
s->samples = get_bits_long(&gb, 32) << 4;
- s->samples |= get_bits(&gb, 4);
+ s->samples |= get_bits_long(&gb, 4);
- skip_bits_long(&gb, 64); /* md5 sum */
- skip_bits_long(&gb, 64); /* md5 sum */
+ skip_bits(&gb, 64); /* md5 sum */
+ skip_bits(&gb, 64); /* md5 sum */
dump_headers(avctx, s);
}
@@ -227,7 +227,7 @@ static int metadata_parse(FLACContext *s)
int initial_pos= get_bits_count(&s->gb);
if (show_bits_long(&s->gb, 32) == MKBETAG('f','L','a','C')) {
- skip_bits_long(&s->gb, 32);
+ skip_bits(&s->gb, 32);
do {
metadata_last = get_bits1(&s->gb);
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index f4b1360..2a25cda 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -4005,6 +4005,18 @@ int ff_h263_decode_mb(MpegEncContext *s,
mot_val[1] = my;
}
}
+
+ /* decode each block */
+ for (i = 0; i < 6; i++) {
+ if (h263_decode_block(s, block[i], i, cbp&32) < 0)
+ return -1;
+ cbp+=cbp;
+ }
+
+ if(s->obmc){
+ if(s->pict_type == FF_P_TYPE && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
+ preview_obmc(s);
+ }
} else if(s->pict_type==FF_B_TYPE) {
int mb_type;
const int stride= s->b8_stride;
@@ -4093,6 +4105,13 @@ int ff_h263_decode_mb(MpegEncContext *s,
}
s->current_picture.mb_type[xy]= mb_type;
+
+ /* decode each block */
+ for (i = 0; i < 6; i++) {
+ if (h263_decode_block(s, block[i], i, cbp&32) < 0)
+ return -1;
+ cbp+=cbp;
+ }
} else { /* I-Frame */
do{
cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
@@ -4127,18 +4146,13 @@ intra:
if (dquant) {
h263_decode_dquant(s);
}
- }
- /* decode each block */
- for (i = 0; i < 6; i++) {
- if (h263_decode_block(s, block[i], i, cbp&32) < 0)
- return -1;
- cbp+=cbp;
- }
-
- if(s->obmc && !s->mb_intra){
- if(s->pict_type == FF_P_TYPE && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
- preview_obmc(s);
+ /* decode each block */
+ for (i = 0; i < 6; i++) {
+ if (h263_decode_block(s, block[i], i, cbp&32) < 0)
+ return -1;
+ cbp+=cbp;
+ }
}
end:
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index b353b88..9e67ee5 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -2196,7 +2196,7 @@ static void mpeg_decode_gop(AVCodecContext *avctx,
* Finds the end of the current frame in the bitstream.
* @return the position of the first byte of the next frame, or -1
*/
-int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s)
+int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size)
{
int i;
uint32_t state= pc->state;
@@ -2244,9 +2244,6 @@ int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size,
return i-3;
}
}
- if(s && state == PICTURE_START_CODE){
- ff_fetch_timestamp(s, i-4, 1);
- }
}
}
pc->state= state;
@@ -2279,7 +2276,7 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
}
if(s2->flags&CODEC_FLAG_TRUNCATED){
- int next= ff_mpeg1_find_frame_end(&s2->parse_context, buf, buf_size, NULL);
+ int next= ff_mpeg1_find_frame_end(&s2->parse_context, buf, buf_size);
if( ff_combine_frame(&s2->parse_context, next, (const uint8_t **)&buf, &buf_size) < 0 )
return buf_size;
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 8dc3488..2af239b 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -1096,7 +1096,8 @@ static void draw_arrow(uint8_t *buf, int sx, int sy, int ex, int ey, int w, int
*/
void ff_print_debug_info(MpegEncContext *s, AVFrame *pict){
- if(s->avctx->hwaccel || !pict || !pict->mb_type) return;
+ if(s->avctx->hwaccel) return;
+ if(!pict || !pict->mb_type) return;
if(s->avctx->debug&(FF_DEBUG_SKIP | FF_DEBUG_QP | FF_DEBUG_MB_TYPE)){
int x,y;
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index ef40083..5620f1e 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -769,7 +769,7 @@ void mpeg1_encode_mb(MpegEncContext *s,
void ff_mpeg1_encode_init(MpegEncContext *s);
void ff_mpeg1_encode_slice_header(MpegEncContext *s);
void ff_mpeg1_clean_buffers(MpegEncContext *s);
-int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s);
+int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size);
extern const uint8_t ff_mpeg4_y_dc_scale_table[32];
extern const uint8_t ff_mpeg4_c_dc_scale_table[32];
diff --git a/libavcodec/mpegvideo_parser.c b/libavcodec/mpegvideo_parser.c
index 215c86c..2ccb9ff 100644
--- a/libavcodec/mpegvideo_parser.c
+++ b/libavcodec/mpegvideo_parser.c
@@ -29,6 +29,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
{
ParseContext1 *pc = s->priv_data;
const uint8_t *buf_end;
+ const uint8_t *buf_start= buf;
uint32_t start_code;
int frame_rate_index, ext_type, bytes_left;
int frame_rate_ext_n, frame_rate_ext_d;
@@ -43,6 +44,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
bytes_left = buf_end - buf;
switch(start_code) {
case PICTURE_START_CODE:
+ ff_fetch_timestamp(s, buf-buf_start-4, 1);
+
if (bytes_left >= 2) {
s->pict_type = (buf[1] >> 3) & 7;
}
@@ -134,7 +137,7 @@ static int mpegvideo_parse(AVCodecParserContext *s,
if(s->flags & PARSER_FLAG_COMPLETE_FRAMES){
next= buf_size;
}else{
- next= ff_mpeg1_find_frame_end(pc, buf, buf_size, s);
+ next= ff_mpeg1_find_frame_end(pc, buf, buf_size);
if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
*poutbuf = NULL;
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index 0d1126d..d738a62 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -87,7 +87,7 @@ void ff_fetch_timestamp(AVCodecParserContext *s, int off, int remove){
s->dts= s->pts= AV_NOPTS_VALUE;
s->offset= 0;
for(i = 0; i < AV_PARSER_PTS_NB; i++) {
- if ( s->cur_offset + off >= s->cur_frame_offset[i]
+ if ( s->next_frame_offset + off >= s->cur_frame_offset[i]
&&(s-> frame_offset < s->cur_frame_offset[i] || !s->frame_offset)
//check is disabled becausue mpeg-ts doesnt send complete PES packets
&& /*s->next_frame_offset + off <*/ s->cur_frame_end[i]){
@@ -96,8 +96,6 @@ void ff_fetch_timestamp(AVCodecParserContext *s, int off, int remove){
s->offset = s->next_frame_offset - s->cur_frame_offset[i];
if(remove)
s->cur_frame_offset[i]= INT64_MAX;
- if(s->cur_offset + off < s->cur_frame_end[i])
- break;
}
}
}
@@ -141,12 +139,14 @@ int av_parser_parse(AVCodecParserContext *s,
buf = dummy_buf;
} else {
/* add a new packet descriptor */
+ if(pts != AV_NOPTS_VALUE || dts != AV_NOPTS_VALUE){
i = (s->cur_frame_start_index + 1) & (AV_PARSER_PTS_NB - 1);
s->cur_frame_start_index = i;
s->cur_frame_offset[i] = s->cur_offset;
s->cur_frame_end[i] = s->cur_offset + buf_size;
s->cur_frame_pts[i] = pts;
s->cur_frame_dts[i] = dts;
+ }
}
if (s->fetch_timestamp){
diff --git a/libavformat/.svnrevision b/libavformat/.svnrevision
index f8ba6ba..5883118 100644
--- a/libavformat/.svnrevision
+++ b/libavformat/.svnrevision
@@ -1 +1 @@
-17737
+18693
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index c925e54..9bc2517 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -313,6 +313,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
int64_t dts, pts = AV_NOPTS_VALUE;
AVStream *st = NULL;
+ retry:
for(;;){
pos = url_ftell(s->pb);
url_fskip(s->pb, 4); /* size of previous packet */
@@ -348,7 +349,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
av_log(s, AV_LOG_ERROR, "skipping flv packet: type %d, size %d, flags %d\n", type, size, flags);
skip:
url_fseek(s->pb, next, SEEK_SET);
- return AVERROR(EAGAIN);
+ continue;
}
/* skip empty data packets */
@@ -372,7 +373,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|| st->discard >= AVDISCARD_ALL
){
url_fseek(s->pb, next, SEEK_SET);
- return AVERROR(EAGAIN);
+ continue;
}
if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY)
av_add_index_entry(st, pos, dts, size, 0, AVINDEX_KEYFRAME);
@@ -435,7 +436,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
st->codec->channels, st->codec->sample_rate);
}
- return AVERROR(EAGAIN);
+ goto retry;
}
}
diff --git a/libavformat/rtp_h264.c b/libavformat/rtp_h264.c
index f3ae699..85133be 100644
--- a/libavformat/rtp_h264.c
+++ b/libavformat/rtp_h264.c
@@ -78,7 +78,7 @@ static void sdp_parse_fmtp_config_h264(AVStream * stream,
assert(h264_data != NULL);
if (!strcmp(attr, "packetization-mode")) {
- av_log(codec, AV_LOG_DEBUG, "RTP Packetization Mode: %d\n", atoi(value));
+ av_log(NULL, AV_LOG_DEBUG, "H.264/RTP Packetization Mode: %d\n", atoi(value));
h264_data->packetization_mode = atoi(value);
/*
Packetization Mode:
@@ -87,8 +87,8 @@ static void sdp_parse_fmtp_config_h264(AVStream * stream,
2: Interleaved Mode: 25 (STAP-B), 26 (MTAP16), 27 (MTAP24), 28 (FU-A), and 29 (FU-B) are allowed.
*/
if (h264_data->packetization_mode > 1)
- av_log(codec, AV_LOG_ERROR,
- "Interleaved RTP mode is not supported yet.");
+ av_log(stream, AV_LOG_ERROR,
+ "H.264/RTP Interleaved RTP mode is not supported yet.");
} else if (!strcmp(attr, "profile-level-id")) {
if (strlen(value) == 6) {
char buffer[3];
@@ -105,8 +105,8 @@ static void sdp_parse_fmtp_config_h264(AVStream * stream,
level_idc = strtol(buffer, NULL, 16);
// set the parameters...
- av_log(codec, AV_LOG_DEBUG,
- "RTP Profile IDC: %x Profile IOP: %x Level: %x\n",
+ av_log(NULL, AV_LOG_DEBUG,
+ "H.264/RTP Profile IDC: %x Profile IOP: %x Level: %x\n",
profile_idc, profile_iop, level_idc);
h264_data->profile_idc = profile_idc;
h264_data->profile_iop = profile_iop;
@@ -150,11 +150,11 @@ static void sdp_parse_fmtp_config_h264(AVStream * stream,
codec->extradata= dest;
codec->extradata_size+= sizeof(start_sequence)+packet_size;
} else {
- av_log(codec, AV_LOG_ERROR, "Unable to allocate memory for extradata!");
+ av_log(NULL, AV_LOG_ERROR, "H.264/RTP Unable to allocate memory for extradata!");
}
}
}
- av_log(codec, AV_LOG_DEBUG, "Extradata set to %p (size: %d)!", codec->extradata, codec->extradata_size);
+ av_log(NULL, AV_LOG_DEBUG, "H.264/RTP Extradata set to %p (size: %d)!", codec->extradata, codec->extradata_size);
}
}
@@ -231,7 +231,7 @@ static int h264_handle_packet(AVFormatContext *ctx,
dst+= nal_size;
}
} else {
- av_log(ctx, AV_LOG_ERROR,
+ av_log(NULL, AV_LOG_ERROR,
"nal size exceeds length: %d %d\n", nal_size, src_len);
}
@@ -240,7 +240,7 @@ static int h264_handle_packet(AVFormatContext *ctx,
src_len -= nal_size;
if (src_len < 0)
- av_log(ctx, AV_LOG_ERROR,
+ av_log(NULL, AV_LOG_ERROR,
"Consumed more bytes than we got! (%d)\n", src_len);
} while (src_len > 2); // because there could be rtp padding..
@@ -259,7 +259,7 @@ static int h264_handle_packet(AVFormatContext *ctx,
case 26: // MTAP-16
case 27: // MTAP-24
case 29: // FU-B
- av_log(ctx, AV_LOG_ERROR,
+ av_log(NULL, AV_LOG_ERROR,
"Unhandled type (%d) (See RFC for implementation details\n",
type);
result= -1;
@@ -305,7 +305,7 @@ static int h264_handle_packet(AVFormatContext *ctx,
case 30: // undefined
case 31: // undefined
default:
- av_log(ctx, AV_LOG_ERROR, "Undefined type (%d)", type);
+ av_log(NULL, AV_LOG_ERROR, "Undefined type (%d)", type);
result= -1;
break;
}
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 900bd20..0ffe96a 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -1515,10 +1515,7 @@ static int av_seek_frame_generic(AVFormatContext *s,
return ret;
}
for(i=0;; i++) {
- int ret;
- do{
- ret = av_read_frame(s, &pkt);
- }while(ret == AVERROR(EAGAIN));
+ int ret = av_read_frame(s, &pkt);
if(ret<0)
break;
av_free_packet(&pkt);
@@ -1741,9 +1738,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset
if (i == ic->nb_streams)
break;
- do{
- ret = av_read_packet(ic, pkt);
- }while(ret == AVERROR(EAGAIN));
+ ret = av_read_packet(ic, pkt);
if (ret != 0)
break;
read_size += pkt->size;
@@ -1768,9 +1763,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset
if (read_size >= DURATION_MAX_READ_SIZE)
break;
- do{
- ret = av_read_packet(ic, pkt);
- }while(ret == AVERROR(EAGAIN));
+ ret = av_read_packet(ic, pkt);
if (ret != 0)
break;
read_size += pkt->size;
@@ -2079,8 +2072,6 @@ int av_find_stream_info(AVFormatContext *ic)
/* NOTE: a new stream can be added there if no header in file
(AVFMTCTX_NOHEADER) */
ret = av_read_frame_internal(ic, &pkt1);
- if(ret == AVERROR(EAGAIN))
- continue;
if (ret < 0) {
/* EOF or error */
ret = -1; /* we could not have all the codec parameters before EOF */
diff --git a/libavutil/.svnrevision b/libavutil/.svnrevision
index f8ba6ba..5883118 100644
--- a/libavutil/.svnrevision
+++ b/libavutil/.svnrevision
@@ -1 +1 @@
-17737
+18693
diff --git a/libdvdnav/.svnrevision b/libdvdnav/.svnrevision
index ddbefde..98a603e 100644
--- a/libdvdnav/.svnrevision
+++ b/libdvdnav/.svnrevision
@@ -1 +1 @@
-1168
+1170
diff --git a/libdvdnav/searching.c b/libdvdnav/searching.c
index 4d354f3..aead0c3 100644
--- a/libdvdnav/searching.c
+++ b/libdvdnav/searching.c
@@ -551,7 +551,7 @@ uint32_t dvdnav_describe_title_chapters(dvdnav_t *this, int32_t title, uint64_t
uint16_t parts, i;
title_info_t *ptitle = NULL;
ptt_info_t *ptt = NULL;
- ifo_handle_t *ifo;
+ ifo_handle_t *ifo = NULL;
pgc_t *pgc;
cell_playback_t *cell;
uint64_t length, *tmp=NULL;
@@ -571,6 +571,7 @@ uint32_t dvdnav_describe_title_chapters(dvdnav_t *this, int32_t title, uint64_t
ifo = vm_get_title_ifo(this->vm, title);
if(!ifo || !ifo->vts_pgcit) {
printerr("Couldn't open IFO for chosen title, exit.");
+ retval = 0;
goto fail;
}
@@ -611,11 +612,14 @@ uint32_t dvdnav_describe_title_chapters(dvdnav_t *this, int32_t title, uint64_t
}
*duration = length;
vm_ifo_close(ifo);
+ ifo = NULL;
retval = parts;
*times = tmp;
fail:
pthread_mutex_unlock(&this->vm_lock);
+ if(!retval && ifo)
+ vm_ifo_close(ifo);
if(!retval && tmp)
free(tmp);
return retval;
diff --git a/libdvdread4/.svnrevision b/libdvdread4/.svnrevision
index ddbefde..98a603e 100644
--- a/libdvdread4/.svnrevision
+++ b/libdvdread4/.svnrevision
@@ -1 +1 @@
-1168
+1170
diff --git a/libdvdread4/dvd_reader.c b/libdvdread4/dvd_reader.c
index f4f3328..05adb17 100644
--- a/libdvdread4/dvd_reader.c
+++ b/libdvdread4/dvd_reader.c
@@ -53,7 +53,7 @@ static inline int _private_gettimeofday( struct timeval *tv, void *tz )
#define lseek64 _lseeki64
#endif
-#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__) || defined(__DARWIN__)
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__bsdi__) || defined(__APPLE__)
#define SYS_BSD 1
#endif
diff --git a/libmpcodecs/ad.c b/libmpcodecs/ad.c
index 11d6f35..01b9b26 100644
--- a/libmpcodecs/ad.c
+++ b/libmpcodecs/ad.c
@@ -1,6 +1,4 @@
-/*
- ad.c - audio decoder interface
-*/
+/* audio decoder interface */
#include <stdio.h>
#include <stdlib.h>
diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c
index c0a638d..32a9fc2 100644
--- a/libmpcodecs/ad_ffmpeg.c
+++ b/libmpcodecs/ad_ffmpeg.c
@@ -112,6 +112,15 @@ static int init(sh_audio_t *sh_audio)
sh_audio->channels=lavc_context->channels;
sh_audio->samplerate=lavc_context->sample_rate;
sh_audio->i_bps=lavc_context->bit_rate/8;
+ switch (lavc_context->sample_fmt) {
+ case SAMPLE_FMT_U8: sh_audio->sample_format = AF_FORMAT_U8; break;
+ case SAMPLE_FMT_S16: sh_audio->sample_format = AF_FORMAT_S16_NE; break;
+ case SAMPLE_FMT_S32: sh_audio->sample_format = AF_FORMAT_S32_NE; break;
+ case SAMPLE_FMT_FLT: sh_audio->sample_format = AF_FORMAT_FLOAT_NE; break;
+ default:
+ mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Unsupported sample format\n");
+ return 0;
+ }
if(sh_audio->wf){
// If the decoder uses the wrong number of channels all is lost anyway.
// sh_audio->channels=sh_audio->wf->nChannels;
@@ -120,7 +129,7 @@ static int init(sh_audio_t *sh_audio)
if (sh_audio->wf->nAvgBytesPerSec)
sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec;
}
- sh_audio->samplesize=2;
+ sh_audio->samplesize=af_fmt2bits(sh_audio->sample_format)/ 8;
return 1;
}
diff --git a/libmpcodecs/ae_lavc.c b/libmpcodecs/ae_lavc.c
index 3b07d6a..4bc82ab 100644
--- a/libmpcodecs/ae_lavc.c
+++ b/libmpcodecs/ae_lavc.c
@@ -248,6 +248,7 @@ int mpae_init_lavc(audio_encoder_t *encoder)
}
encoder->decode_buffer_size = lavc_actx->frame_size * 2 * encoder->params.channels;
+ while (encoder->decode_buffer_size < 1024) encoder->decode_buffer_size *= 2;
encoder->bind = bind_lavc;
encoder->get_frame_size = get_frame_size;
encoder->encode = encode_lavc;
diff --git a/libmpcodecs/dec_video.c b/libmpcodecs/dec_video.c
index f158d7e..4186bd5 100644
--- a/libmpcodecs/dec_video.c
+++ b/libmpcodecs/dec_video.c
@@ -415,10 +415,13 @@ int filter_video(sh_video_t *sh_video, void *frame, double pts)
// apply video filters and call the leaf vo/ve
int ret = vf->put_image(vf, mpi, pts);
if (ret > 0) {
- vf->control(vf, VFCTRL_DRAW_OSD, NULL);
+ // draw EOSD first so it ends up below the OSD.
+ // Note that changing this is will not work right with vf_ass and the
+ // vos currently always draw the EOSD first in paused mode.
#ifdef CONFIG_ASS
vf->control(vf, VFCTRL_DRAW_EOSD, NULL);
#endif
+ vf->control(vf, VFCTRL_DRAW_OSD, NULL);
}
t2 = GetTimer()-t2;
diff --git a/libmpcodecs/mp_image.h b/libmpcodecs/mp_image.h
index 7d82707..ddf52c7 100644
--- a/libmpcodecs/mp_image.h
+++ b/libmpcodecs/mp_image.h
@@ -54,8 +54,6 @@
// buffer type was printed (do NOT set this flag - it's for INTERNAL USE!!!)
#define MP_IMGFLAG_TYPE_DISPLAYED 0x8000
-// set if it can not be reused yet (for MP_IMGTYPE_NUMBERED)
-#define MP_IMGFLAG_IN_USE 0x10000
// codec doesn't support any form of direct rendering - it has own buffer
// allocation. so we just export its buffer pointers:
@@ -101,6 +99,7 @@ typedef struct mp_image_s {
int chroma_height;
int chroma_x_shift; // horizontal
int chroma_y_shift; // vertical
+ int usage_count;
/* for private use by filter or vo driver (to store buffer id or dmpi) */
void* priv;
} mp_image_t;
diff --git a/libmpcodecs/native/nuppelvideo.c b/libmpcodecs/native/nuppelvideo.c
deleted file mode 100644
index 8128f85..0000000
--- a/libmpcodecs/native/nuppelvideo.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * NuppelVideo 0.05 file parser
- * for MPlayer
- * by Panagiotis Issaris <takis at lumumba.luc.ac.be>
- *
- * Reworked by alex
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "mpbswap.h"
-
-#include "libvo/fastmemcpy.h"
-
-#include "libmpdemux/nuppelvideo.h"
-#include "rtjpegn.h"
-#include "libavutil/lzo.h"
-
-#define KEEP_BUFFER
-
-void decode_nuv( unsigned char *encoded, int encoded_size,
- unsigned char *decoded, int width, int height)
-{
- int r;
- unsigned int out_len = width * height + ( width * height ) / 2;
- struct rtframeheader *encodedh = ( struct rtframeheader* ) encoded;
- static unsigned char *buffer = 0; /* for RTJpeg with LZO decompress */
-#ifdef KEEP_BUFFER
- static unsigned char *previous_buffer = 0; /* to support Last-frame-copy */
-#endif
-
-// printf("frametype: %c, comtype: %c, encoded_size: %d, width: %d, height: %d\n",
-// encodedh->frametype, encodedh->comptype, encoded_size, width, height);
-
- le2me_rtframeheader(encodedh);
- switch(encodedh->frametype)
- {
- case 'D': /* additional data for compressors */
- {
- /* tables are in encoded */
- if (encodedh->comptype == 'R')
- {
- RTjpeg_init_decompress ( (unsigned long *)(encoded+12), width, height );
- mp_msg(MSGT_DECVIDEO, MSGL_V, "Found RTjpeg tables (size: %d, width: %d, height: %d)\n",
- encoded_size-12, width, height);
- }
- break;
- }
- case 'V':
- {
- int in_len = encodedh->packetlength;
-#ifdef KEEP_BUFFER
- if (!previous_buffer)
- previous_buffer = ( unsigned char * ) malloc ( out_len + AV_LZO_OUTPUT_PADDING );
-#endif
-
- switch(encodedh->comptype)
- {
- case '0': /* raw YUV420 */
- fast_memcpy(decoded, encoded + 12, out_len);
- break;
- case '1': /* RTJpeg */
- RTjpeg_decompressYUV420 ( ( __s8 * ) encoded + 12, decoded );
- break;
- case '2': /* RTJpeg with LZO */
- if (!buffer)
- buffer = ( unsigned char * ) malloc ( out_len + AV_LZO_OUTPUT_PADDING );
- if (!buffer)
- {
- mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Nuppelvideo: error decompressing\n");
- break;
- }
- r = av_lzo1x_decode ( buffer, &out_len, encoded + 12, &in_len );
- if ( r )
- {
- mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Nuppelvideo: error decompressing\n");
- break;
- }
- RTjpeg_decompressYUV420 ( ( __s8 * ) buffer, decoded );
- break;
- case '3': /* raw YUV420 with LZO */
- r = av_lzo1x_decode ( decoded, &out_len, encoded + 12, &in_len );
- if ( r )
- {
- mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Nuppelvideo: error decompressing\n");
- break;
- }
- break;
- case 'N': /* black frame */
- memset ( decoded, 0, width * height );
- memset ( decoded + width * height, 127, width * height / 2);
- break;
- case 'L': /* copy last frame */
-#ifdef KEEP_BUFFER
- fast_memcpy ( decoded, previous_buffer, width*height*3/2);
-#endif
- break;
- }
-
-#ifdef KEEP_BUFFER
- fast_memcpy(previous_buffer, decoded, width*height*3/2);
-#endif
- break;
- }
- default:
- mp_msg(MSGT_DECVIDEO, MSGL_V, "Nuppelvideo: unknwon frametype: %c\n",
- encodedh->frametype);
- }
-}
diff --git a/libmpcodecs/native/rtjpegn.c b/libmpcodecs/native/rtjpegn.c
index 538bff6..0eea073 100644
--- a/libmpcodecs/native/rtjpegn.c
+++ b/libmpcodecs/native/rtjpegn.c
@@ -68,7 +68,7 @@ static const __u64 RTjpeg_aan_tab[64]={
#if !HAVE_MMX
static __s32 RTjpeg_ws[64+31];
#endif
-__u8 RTjpeg_alldata[2*64+4*64+4*64+4*64+4*64+32];
+static __u8 RTjpeg_alldata[2*64+4*64+4*64+4*64+4*64+32];
static __s16 *block; // rh
static __s16 *RTjpeg_block;
@@ -86,13 +86,12 @@ static int RTjpeg_Ysize, RTjpeg_Csize;
static __s16 *RTjpeg_old=NULL;
#if HAVE_MMX
-mmx_t RTjpeg_lmask;
-mmx_t RTjpeg_cmask;
+static mmx_t RTjpeg_lmask;
+static mmx_t RTjpeg_cmask;
#else
-__u16 RTjpeg_lmask;
-__u16 RTjpeg_cmask;
+static __u16 RTjpeg_lmask;
+static __u16 RTjpeg_cmask;
#endif
-int RTjpeg_mtest=0;
static const unsigned char RTjpeg_lum_quant_tbl[64] = {
16, 11, 10, 16, 24, 40, 51, 61,
@@ -133,7 +132,7 @@ static const unsigned char RTjpeg_chrom_quant_tbl[64] = {
/* Block to Stream (encoding) */
/* */
-int RTjpeg_b2s(__s16 *data, __s8 *strm, __u8 bt8)
+static int RTjpeg_b2s(__s16 *data, __s8 *strm, __u8 bt8)
{
register int ci, co=1;
register __s16 ZZvalue;
@@ -150,11 +149,6 @@ int RTjpeg_b2s(__s16 *data, __s8 *strm, __u8 bt8)
#endif
-// *strm++ = 0x10;
-// *strm = 0x00;
-//
-// return 2;
-
// first byte allways written
((__u8*)strm)[0]=
(__u8)(data[RTjpeg_ZZ[0]]>254) ? 254:((data[RTjpeg_ZZ[0]]<0)?0:data[RTjpeg_ZZ[0]]);
@@ -299,155 +293,9 @@ fprintf(stdout, "\n\n");
return (int)co;
}
-/* +++++++++++++++++++++++++++++++++++++++++++++++++++*/
-/* Stream to Block (decoding) */
-/* */
-
-int RTjpeg_s2b(__s16 *data, __s8 *strm, __u8 bt8, __u32 *qtbl)
-{
- int ci;
- register int co;
- register int i;
- register unsigned char bitten;
- register unsigned char bitoff;
-
- /* first byte always read */
- i=RTjpeg_ZZ[0];
- data[i]=((__u8)strm[0])*qtbl[i];
-
- /* we start at the behind */
-
- bitten = ((unsigned char)strm[1]) >> 2;
- co = 63;
- for(; co > bitten; co--) {
-
- data[RTjpeg_ZZ[co]] = 0;
-
- }
-
- if (co==0) {
- ci = 2;
- goto AUTOBAHN;
- }
-
- /* we have to read the last 2 bits of the second byte */
- ci=1;
- bitoff = 0;
-
- for(; co>0; co--) {
-
- bitten = ((unsigned char)strm[ci]) >> bitoff;
- bitten &= 0x03;
-
- i=RTjpeg_ZZ[co];
-
- switch( bitten ) {
- case 0x03:
- data[i]= -qtbl[i];
- break;
- case 0x02:
- goto FUSSWEG;
- break;
- case 0x01:
- data[i]= qtbl[i];
- break;
- case 0x00:
- data[i]= 0;
- break;
- default:
- break;
- }
-
- if( bitoff == 0 ) {
- bitoff = 8;
- ci++;
- }
- bitoff -= 2;
- }
- /* co is 0 now */
- /* data is written properly */
-
- /* if bitoff!=6 then ci is the index, but should be the byte count, so we increment by 1 */
- if (bitoff!=6) ci++;
-
- goto AUTOBAHN;
-
-
-FUSSWEG:
-/* correct bitoff to nibble */
- switch(bitoff){
- case 4:
- case 6:
- bitoff = 0;
- break;
- case 2:
- case 0:
- /* we have to read from the next byte */
- ci++;
- bitoff = 4;
- break;
- default:
- break;
- }
-
- for(; co>0; co--) {
-
- bitten = ((unsigned char)strm[ci]) >> bitoff;
- bitten &= 0x0f;
-
- i=RTjpeg_ZZ[co];
-
- if( bitten == 0x08 ) {
- goto STRASSE;
- }
-
- /* the compiler cannot do sign extension for signed nibbles */
- if( bitten & 0x08 ) {
- bitten |= 0xf0;
- }
- /* the unsigned char bitten now is a valid signed char */
-
- data[i]=((signed char)bitten)*qtbl[i];
-
- if( bitoff == 0 ) {
- bitoff = 8;
- ci++;
- }
- bitoff -= 4;
- }
- /* co is 0 */
-
- /* if bitoff!=4 then ci is the index, but should be the byte count, so we increment by 1 */
- if (bitoff!=4) ci++;
-
- goto AUTOBAHN;
-
-STRASSE:
- ci++;
-
- for(; co>0; co--) {
- i=RTjpeg_ZZ[co];
- data[i]=strm[ci++]*qtbl[i];
- }
-
- /* ci now is the count, because it points to next element => no incrementing */
-
-AUTOBAHN:
-
-#ifdef SHOWBLOCK
-fprintf(stdout, "\nci = '%d'\n", ci);
- for (i=0; i < 64; i++) {
- fprintf(stdout, "%d ", data[RTjpeg_ZZ[i]]);
- }
-fprintf(stdout, "\n\n");
-#endif
-
- return ci;
-}
-
#else
-int RTjpeg_b2s(__s16 *data, __s8 *strm, __u8 bt8)
+static int RTjpeg_b2s(__s16 *data, __s8 *strm, __u8 bt8)
{
register int ci, co=1, tmp;
register __s16 ZZvalue;
@@ -506,7 +354,7 @@ int RTjpeg_b2s(__s16 *data, __s8 *strm, __u8 bt8)
return (int)co;
}
-int RTjpeg_s2b(__s16 *data, __s8 *strm, __u8 bt8, __u32 *qtbl)
+static int RTjpeg_s2b(__s16 *data, __s8 *strm, __u8 bt8, __u32 *qtbl)
{
int ci=1, co=1, tmp;
register int i;
@@ -539,7 +387,7 @@ int RTjpeg_s2b(__s16 *data, __s8 *strm, __u8 bt8, __u32 *qtbl)
#endif
#if HAVE_MMX
-void RTjpeg_quant_init(void)
+static void RTjpeg_quant_init(void)
{
int i;
__s16 *qtbl;
@@ -554,7 +402,7 @@ void RTjpeg_quant_init(void)
static mmx_t RTjpeg_ones={0x0001000100010001LL};
static mmx_t RTjpeg_half={0x7fff7fff7fff7fffLL};
-void RTjpeg_quant(__s16 *block, __s32 *qtbl)
+static void RTjpeg_quant(__s16 *block, __s32 *qtbl)
{
int i;
mmx_t *bl, *ql;
@@ -591,11 +439,11 @@ void RTjpeg_quant(__s16 *block, __s32 *qtbl)
}
}
#else
-void RTjpeg_quant_init(void)
+static void RTjpeg_quant_init(void)
{
}
-void RTjpeg_quant(__s16 *block, __s32 *qtbl)
+static void RTjpeg_quant(__s16 *block, __s32 *qtbl)
{
int i;
@@ -626,7 +474,7 @@ static mmx_t RTjpeg_zero ={0x0000000000000000LL};
#define D_MULTIPLY(var,const) ((__s32) ((var) * (const)))
#endif
-void RTjpeg_dct_init(void)
+static void RTjpeg_dct_init(void)
{
int i;
@@ -637,7 +485,7 @@ void RTjpeg_dct_init(void)
}
}
-void RTjpeg_dctY(__u8 *idata, __s16 *odata, int rskip)
+static void RTjpeg_dctY(__u8 *idata, __s16 *odata, int rskip)
{
#if !HAVE_MMX
__s32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
@@ -1542,1148 +1390,6 @@ void RTjpeg_dctY(__u8 *idata, __s16 *odata, int rskip)
#endif
}
-#define FIX_1_082392200 ((__s32) 277) /* FIX(1.082392200) */
-#define FIX_1_414213562 ((__s32) 362) /* FIX(1.414213562) */
-#define FIX_1_847759065 ((__s32) 473) /* FIX(1.847759065) */
-#define FIX_2_613125930 ((__s32) 669) /* FIX(2.613125930) */
-
-#define DESCALE(x) (__s16)( ((x)+4) >> 3)
-
-/* clip yuv to 16..235 (should be 16..240 for cr/cb but ... */
-
-#define RL(x) ((x)>235) ? 235 : (((x)<16) ? 16 : (x))
-#define MULTIPLY(var,const) (((__s32) ((var) * (const)) + 128)>>8)
-
-void RTjpeg_idct_init(void)
-{
- int i;
-
- for(i=0; i<64; i++)
- {
- RTjpeg_liqt[i]=((__u64)RTjpeg_liqt[i]*RTjpeg_aan_tab[i])>>32;
- RTjpeg_ciqt[i]=((__u64)RTjpeg_ciqt[i]*RTjpeg_aan_tab[i])>>32;
- }
-}
-
-void RTjpeg_idct(__u8 *odata, __s16 *data, int rskip)
-{
-#if HAVE_MMX
-
-static mmx_t fix_141 = {0x5a825a825a825a82LL};
-static mmx_t fix_184n261 = {0xcf04cf04cf04cf04LL};
-static mmx_t fix_184 = {0x7641764176417641LL};
-static mmx_t fix_n184 = {0x896f896f896f896fLL};
-static mmx_t fix_108n184 = {0xcf04cf04cf04cf04LL};
-
- mmx_t workspace[64];
- mmx_t *wsptr = workspace;
- register mmx_t *dataptr = (mmx_t *)odata;
- mmx_t *idata = (mmx_t *)data;
-
- rskip = rskip>>3;
-/*
- * Perform inverse DCT on one block of coefficients.
- */
-
- /* Odd part */
-
- movq_m2r(*(idata+10), mm1); // load idata[DCTSIZE*5]
-
- movq_m2r(*(idata+6), mm0); // load idata[DCTSIZE*3]
-
- movq_m2r(*(idata+2), mm3); // load idata[DCTSIZE*1]
-
- movq_r2r(mm1, mm2); // copy tmp6 /* phase 6 */
-
- movq_m2r(*(idata+14), mm4); // load idata[DCTSIZE*7]
-
- paddw_r2r(mm0, mm1); // z13 = tmp6 + tmp5;
-
- psubw_r2r(mm0, mm2); // z10 = tmp6 - tmp5
-
- psllw_i2r(2, mm2); // shift z10
- movq_r2r(mm2, mm0); // copy z10
-
- pmulhw_m2r(fix_184n261, mm2); // MULTIPLY( z12, FIX_1_847759065); /* 2*c2 */
- movq_r2r(mm3, mm5); // copy tmp4
-
- pmulhw_m2r(fix_n184, mm0); // MULTIPLY(z10, -FIX_1_847759065); /* 2*c2 */
- paddw_r2r(mm4, mm3); // z11 = tmp4 + tmp7;
-
- movq_r2r(mm3, mm6); // copy z11 /* phase 5 */
- psubw_r2r(mm4, mm5); // z12 = tmp4 - tmp7;
-
- psubw_r2r(mm1, mm6); // z11-z13
- psllw_i2r(2, mm5); // shift z12
-
- movq_m2r(*(idata+12), mm4); // load idata[DCTSIZE*6], even part
- movq_r2r(mm5, mm7); // copy z12
-
- pmulhw_m2r(fix_108n184, mm5); // MULT(z12, (FIX_1_08-FIX_1_84)) //- z5; /* 2*(c2-c6) */ even part
- paddw_r2r(mm1, mm3); // tmp7 = z11 + z13;
-
- //ok
-
- /* Even part */
- pmulhw_m2r(fix_184, mm7); // MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) //+ z5; /* -2*(c2+c6) */
- psllw_i2r(2, mm6);
-
- movq_m2r(*(idata+4), mm1); // load idata[DCTSIZE*2]
-
- paddw_r2r(mm5, mm0); // tmp10
-
- paddw_r2r(mm7, mm2); // tmp12
-
- pmulhw_m2r(fix_141, mm6); // tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
- psubw_r2r(mm3, mm2); // tmp6 = tmp12 - tmp7
-
- movq_r2r(mm1, mm5); // copy tmp1
- paddw_r2r(mm4, mm1); // tmp13= tmp1 + tmp3; /* phases 5-3 */
-
- psubw_r2r(mm4, mm5); // tmp1-tmp3
- psubw_r2r(mm2, mm6); // tmp5 = tmp11 - tmp6;
-
- movq_r2m(mm1, *(wsptr)); // save tmp13 in workspace
- psllw_i2r(2, mm5); // shift tmp1-tmp3
-
- movq_m2r(*(idata), mm7); // load idata[DCTSIZE*0]
-
- pmulhw_m2r(fix_141, mm5); // MULTIPLY(tmp1 - tmp3, FIX_1_414213562)
- paddw_r2r(mm6, mm0); // tmp4 = tmp10 + tmp5;
-
- movq_m2r(*(idata+8), mm4); // load idata[DCTSIZE*4]
-
- psubw_r2r(mm1, mm5); // tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */
-
- movq_r2m(mm0, *(wsptr+4)); // save tmp4 in workspace
- movq_r2r(mm7, mm1); // copy tmp0 /* phase 3 */
-
- movq_r2m(mm5, *(wsptr+2)); // save tmp12 in workspace
- psubw_r2r(mm4, mm1); // tmp11 = tmp0 - tmp2;
-
- paddw_r2r(mm4, mm7); // tmp10 = tmp0 + tmp2;
- movq_r2r(mm1, mm5); // copy tmp11
-
- paddw_m2r(*(wsptr+2), mm1); // tmp1 = tmp11 + tmp12;
- movq_r2r(mm7, mm4); // copy tmp10 /* phase 2 */
-
- paddw_m2r(*(wsptr), mm7); // tmp0 = tmp10 + tmp13;
-
- psubw_m2r(*(wsptr), mm4); // tmp3 = tmp10 - tmp13;
- movq_r2r(mm7, mm0); // copy tmp0
-
- psubw_m2r(*(wsptr+2), mm5); // tmp2 = tmp11 - tmp12;
- paddw_r2r(mm3, mm7); // wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7);
-
- psubw_r2r(mm3, mm0); // wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7);
-
- movq_r2m(mm7, *(wsptr)); // wsptr[DCTSIZE*0]
- movq_r2r(mm1, mm3); // copy tmp1
-
- movq_r2m(mm0, *(wsptr+14)); // wsptr[DCTSIZE*7]
- paddw_r2r(mm2, mm1); // wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6);
-
- psubw_r2r(mm2, mm3); // wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6);
-
- movq_r2m(mm1, *(wsptr+2)); // wsptr[DCTSIZE*1]
- movq_r2r(mm4, mm1); // copy tmp3
-
- movq_r2m(mm3, *(wsptr+12)); // wsptr[DCTSIZE*6]
-
- paddw_m2r(*(wsptr+4), mm4); // wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4);
-
- psubw_m2r(*(wsptr+4), mm1); // wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4);
-
- movq_r2m(mm4, *(wsptr+8));
- movq_r2r(mm5, mm7); // copy tmp2
-
- paddw_r2r(mm6, mm5); // wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5)
-
- movq_r2m(mm1, *(wsptr+6));
- psubw_r2r(mm6, mm7); // wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5);
-
- movq_r2m(mm5, *(wsptr+4));
-
- movq_r2m(mm7, *(wsptr+10));
-
- //ok
-
-
-/*****************************************************************/
-
- idata++;
- wsptr++;
-
-/*****************************************************************/
-
- movq_m2r(*(idata+10), mm1); // load idata[DCTSIZE*5]
-
- movq_m2r(*(idata+6), mm0); // load idata[DCTSIZE*3]
-
- movq_m2r(*(idata+2), mm3); // load idata[DCTSIZE*1]
- movq_r2r(mm1, mm2); // copy tmp6 /* phase 6 */
-
- movq_m2r(*(idata+14), mm4); // load idata[DCTSIZE*7]
- paddw_r2r(mm0, mm1); // z13 = tmp6 + tmp5;
-
- psubw_r2r(mm0, mm2); // z10 = tmp6 - tmp5
-
- psllw_i2r(2, mm2); // shift z10
- movq_r2r(mm2, mm0); // copy z10
-
- pmulhw_m2r(fix_184n261, mm2); // MULTIPLY( z12, FIX_1_847759065); /* 2*c2 */
- movq_r2r(mm3, mm5); // copy tmp4
-
- pmulhw_m2r(fix_n184, mm0); // MULTIPLY(z10, -FIX_1_847759065); /* 2*c2 */
- paddw_r2r(mm4, mm3); // z11 = tmp4 + tmp7;
-
- movq_r2r(mm3, mm6); // copy z11 /* phase 5 */
- psubw_r2r(mm4, mm5); // z12 = tmp4 - tmp7;
-
- psubw_r2r(mm1, mm6); // z11-z13
- psllw_i2r(2, mm5); // shift z12
-
- movq_m2r(*(idata+12), mm4); // load idata[DCTSIZE*6], even part
- movq_r2r(mm5, mm7); // copy z12
-
- pmulhw_m2r(fix_108n184, mm5); // MULT(z12, (FIX_1_08-FIX_1_84)) //- z5; /* 2*(c2-c6) */ even part
- paddw_r2r(mm1, mm3); // tmp7 = z11 + z13;
-
- //ok
-
- /* Even part */
- pmulhw_m2r(fix_184, mm7); // MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) //+ z5; /* -2*(c2+c6) */
- psllw_i2r(2, mm6);
-
- movq_m2r(*(idata+4), mm1); // load idata[DCTSIZE*2]
-
- paddw_r2r(mm5, mm0); // tmp10
-
- paddw_r2r(mm7, mm2); // tmp12
-
- pmulhw_m2r(fix_141, mm6); // tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
- psubw_r2r(mm3, mm2); // tmp6 = tmp12 - tmp7
-
- movq_r2r(mm1, mm5); // copy tmp1
- paddw_r2r(mm4, mm1); // tmp13= tmp1 + tmp3; /* phases 5-3 */
-
- psubw_r2r(mm4, mm5); // tmp1-tmp3
- psubw_r2r(mm2, mm6); // tmp5 = tmp11 - tmp6;
-
- movq_r2m(mm1, *(wsptr)); // save tmp13 in workspace
- psllw_i2r(2, mm5); // shift tmp1-tmp3
-
- movq_m2r(*(idata), mm7); // load idata[DCTSIZE*0]
- paddw_r2r(mm6, mm0); // tmp4 = tmp10 + tmp5;
-
- pmulhw_m2r(fix_141, mm5); // MULTIPLY(tmp1 - tmp3, FIX_1_414213562)
-
- movq_m2r(*(idata+8), mm4); // load idata[DCTSIZE*4]
-
- psubw_r2r(mm1, mm5); // tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */
-
- movq_r2m(mm0, *(wsptr+4)); // save tmp4 in workspace
- movq_r2r(mm7, mm1); // copy tmp0 /* phase 3 */
-
- movq_r2m(mm5, *(wsptr+2)); // save tmp12 in workspace
- psubw_r2r(mm4, mm1); // tmp11 = tmp0 - tmp2;
-
- paddw_r2r(mm4, mm7); // tmp10 = tmp0 + tmp2;
- movq_r2r(mm1, mm5); // copy tmp11
-
- paddw_m2r(*(wsptr+2), mm1); // tmp1 = tmp11 + tmp12;
- movq_r2r(mm7, mm4); // copy tmp10 /* phase 2 */
-
- paddw_m2r(*(wsptr), mm7); // tmp0 = tmp10 + tmp13;
-
- psubw_m2r(*(wsptr), mm4); // tmp3 = tmp10 - tmp13;
- movq_r2r(mm7, mm0); // copy tmp0
-
- psubw_m2r(*(wsptr+2), mm5); // tmp2 = tmp11 - tmp12;
- paddw_r2r(mm3, mm7); // wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7);
-
- psubw_r2r(mm3, mm0); // wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7);
-
- movq_r2m(mm7, *(wsptr)); // wsptr[DCTSIZE*0]
- movq_r2r(mm1, mm3); // copy tmp1
-
- movq_r2m(mm0, *(wsptr+14)); // wsptr[DCTSIZE*7]
- paddw_r2r(mm2, mm1); // wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6);
-
- psubw_r2r(mm2, mm3); // wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6);
-
- movq_r2m(mm1, *(wsptr+2)); // wsptr[DCTSIZE*1]
- movq_r2r(mm4, mm1); // copy tmp3
-
- movq_r2m(mm3, *(wsptr+12)); // wsptr[DCTSIZE*6]
-
- paddw_m2r(*(wsptr+4), mm4); // wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4);
-
- psubw_m2r(*(wsptr+4), mm1); // wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4);
-
- movq_r2m(mm4, *(wsptr+8));
- movq_r2r(mm5, mm7); // copy tmp2
-
- paddw_r2r(mm6, mm5); // wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5)
-
- movq_r2m(mm1, *(wsptr+6));
- psubw_r2r(mm6, mm7); // wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5);
-
- movq_r2m(mm5, *(wsptr+4));
-
- movq_r2m(mm7, *(wsptr+10));
-
-/*****************************************************************/
-
- /* Pass 2: process rows from work array, store into output array. */
- /* Note that we must descale the results by a factor of 8 == 2**3, */
- /* and also undo the PASS1_BITS scaling. */
-
-/*****************************************************************/
- /* Even part */
-
- wsptr--;
-
-// tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]);
-// tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]);
-// tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]);
-// tmp14 = ((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6]);
- movq_m2r(*(wsptr), mm0); // wsptr[0,0],[0,1],[0,2],[0,3]
-
- movq_m2r(*(wsptr+1), mm1); // wsptr[0,4],[0,5],[0,6],[0,7]
- movq_r2r(mm0, mm2);
-
- movq_m2r(*(wsptr+2), mm3); // wsptr[1,0],[1,1],[1,2],[1,3]
- paddw_r2r(mm1, mm0); // wsptr[0,tmp10],[xxx],[0,tmp13],[xxx]
-
- movq_m2r(*(wsptr+3), mm4); // wsptr[1,4],[1,5],[1,6],[1,7]
- psubw_r2r(mm1, mm2); // wsptr[0,tmp11],[xxx],[0,tmp14],[xxx]
-
- movq_r2r(mm0, mm6);
- movq_r2r(mm3, mm5);
-
- paddw_r2r(mm4, mm3); // wsptr[1,tmp10],[xxx],[1,tmp13],[xxx]
- movq_r2r(mm2, mm1);
-
- psubw_r2r(mm4, mm5); // wsptr[1,tmp11],[xxx],[1,tmp14],[xxx]
- punpcklwd_r2r(mm3, mm0); // wsptr[0,tmp10],[1,tmp10],[xxx],[xxx]
-
- movq_m2r(*(wsptr+7), mm7); // wsptr[3,4],[3,5],[3,6],[3,7]
- punpckhwd_r2r(mm3, mm6); // wsptr[0,tmp13],[1,tmp13],[xxx],[xxx]
-
- movq_m2r(*(wsptr+4), mm3); // wsptr[2,0],[2,1],[2,2],[2,3]
- punpckldq_r2r(mm6, mm0); // wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13]
-
- punpcklwd_r2r(mm5, mm1); // wsptr[0,tmp11],[1,tmp11],[xxx],[xxx]
- movq_r2r(mm3, mm4);
-
- movq_m2r(*(wsptr+6), mm6); // wsptr[3,0],[3,1],[3,2],[3,3]
- punpckhwd_r2r(mm5, mm2); // wsptr[0,tmp14],[1,tmp14],[xxx],[xxx]
-
- movq_m2r(*(wsptr+5), mm5); // wsptr[2,4],[2,5],[2,6],[2,7]
- punpckldq_r2r(mm2, mm1); // wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14]
-
-
- paddw_r2r(mm5, mm3); // wsptr[2,tmp10],[xxx],[2,tmp13],[xxx]
- movq_r2r(mm6, mm2);
-
- psubw_r2r(mm5, mm4); // wsptr[2,tmp11],[xxx],[2,tmp14],[xxx]
- paddw_r2r(mm7, mm6); // wsptr[3,tmp10],[xxx],[3,tmp13],[xxx]
-
- movq_r2r(mm3, mm5);
- punpcklwd_r2r(mm6, mm3); // wsptr[2,tmp10],[3,tmp10],[xxx],[xxx]
-
- psubw_r2r(mm7, mm2); // wsptr[3,tmp11],[xxx],[3,tmp14],[xxx]
- punpckhwd_r2r(mm6, mm5); // wsptr[2,tmp13],[3,tmp13],[xxx],[xxx]
-
- movq_r2r(mm4, mm7);
- punpckldq_r2r(mm5, mm3); // wsptr[2,tmp10],[3,tmp10],[2,tmp13],[3,tmp13]
-
- punpcklwd_r2r(mm2, mm4); // wsptr[2,tmp11],[3,tmp11],[xxx],[xxx]
-
- punpckhwd_r2r(mm2, mm7); // wsptr[2,tmp14],[3,tmp14],[xxx],[xxx]
-
- punpckldq_r2r(mm7, mm4); // wsptr[2,tmp11],[3,tmp11],[2,tmp14],[3,tmp14]
- movq_r2r(mm1, mm6);
-
- //ok
-
-// mm0 = ;wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13]
-// mm1 = ;wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14]
-
-
- movq_r2r(mm0, mm2);
- punpckhdq_r2r(mm4, mm6); // wsptr[0,tmp14],[1,tmp14],[2,tmp14],[3,tmp14]
-
- punpckldq_r2r(mm4, mm1); // wsptr[0,tmp11],[1,tmp11],[2,tmp11],[3,tmp11]
- psllw_i2r(2, mm6);
-
- pmulhw_m2r(fix_141, mm6);
- punpckldq_r2r(mm3, mm0); // wsptr[0,tmp10],[1,tmp10],[2,tmp10],[3,tmp10]
-
- punpckhdq_r2r(mm3, mm2); // wsptr[0,tmp13],[1,tmp13],[2,tmp13],[3,tmp13]
- movq_r2r(mm0, mm7);
-
-// tmp0 = tmp10 + tmp13;
-// tmp3 = tmp10 - tmp13;
- paddw_r2r(mm2, mm0); // [0,tmp0],[1,tmp0],[2,tmp0],[3,tmp0]
- psubw_r2r(mm2, mm7); // [0,tmp3],[1,tmp3],[2,tmp3],[3,tmp3]
-
-// tmp12 = MULTIPLY(tmp14, FIX_1_414213562) - tmp13;
- psubw_r2r(mm2, mm6); // wsptr[0,tmp12],[1,tmp12],[2,tmp12],[3,tmp12]
-// tmp1 = tmp11 + tmp12;
-// tmp2 = tmp11 - tmp12;
- movq_r2r(mm1, mm5);
-
- //OK
-
- /* Odd part */
-
-// z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3];
-// z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3];
-// z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7];
-// z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7];
- movq_m2r(*(wsptr), mm3); // wsptr[0,0],[0,1],[0,2],[0,3]
- paddw_r2r(mm6, mm1); // [0,tmp1],[1,tmp1],[2,tmp1],[3,tmp1]
-
- movq_m2r(*(wsptr+1), mm4); // wsptr[0,4],[0,5],[0,6],[0,7]
- psubw_r2r(mm6, mm5); // [0,tmp2],[1,tmp2],[2,tmp2],[3,tmp2]
-
- movq_r2r(mm3, mm6);
- punpckldq_r2r(mm4, mm3); // wsptr[0,0],[0,1],[0,4],[0,5]
-
- punpckhdq_r2r(mm6, mm4); // wsptr[0,6],[0,7],[0,2],[0,3]
- movq_r2r(mm3, mm2);
-
-//Save tmp0 and tmp1 in wsptr
- movq_r2m(mm0, *(wsptr)); // save tmp0
- paddw_r2r(mm4, mm2); // wsptr[xxx],[0,z11],[xxx],[0,z13]
-
-
-//Continue with z10 --- z13
- movq_m2r(*(wsptr+2), mm6); // wsptr[1,0],[1,1],[1,2],[1,3]
- psubw_r2r(mm4, mm3); // wsptr[xxx],[0,z12],[xxx],[0,z10]
-
- movq_m2r(*(wsptr+3), mm0); // wsptr[1,4],[1,5],[1,6],[1,7]
- movq_r2r(mm6, mm4);
-
- movq_r2m(mm1, *(wsptr+1)); // save tmp1
- punpckldq_r2r(mm0, mm6); // wsptr[1,0],[1,1],[1,4],[1,5]
-
- punpckhdq_r2r(mm4, mm0); // wsptr[1,6],[1,7],[1,2],[1,3]
- movq_r2r(mm6, mm1);
-
-//Save tmp2 and tmp3 in wsptr
- paddw_r2r(mm0, mm6); // wsptr[xxx],[1,z11],[xxx],[1,z13]
- movq_r2r(mm2, mm4);
-
-//Continue with z10 --- z13
- movq_r2m(mm5, *(wsptr+2)); // save tmp2
- punpcklwd_r2r(mm6, mm2); // wsptr[xxx],[xxx],[0,z11],[1,z11]
-
- psubw_r2r(mm0, mm1); // wsptr[xxx],[1,z12],[xxx],[1,z10]
- punpckhwd_r2r(mm6, mm4); // wsptr[xxx],[xxx],[0,z13],[1,z13]
-
- movq_r2r(mm3, mm0);
- punpcklwd_r2r(mm1, mm3); // wsptr[xxx],[xxx],[0,z12],[1,z12]
-
- movq_r2m(mm7, *(wsptr+3)); // save tmp3
- punpckhwd_r2r(mm1, mm0); // wsptr[xxx],[xxx],[0,z10],[1,z10]
-
- movq_m2r(*(wsptr+4), mm6); // wsptr[2,0],[2,1],[2,2],[2,3]
- punpckhdq_r2r(mm2, mm0); // wsptr[0,z10],[1,z10],[0,z11],[1,z11]
-
- movq_m2r(*(wsptr+5), mm7); // wsptr[2,4],[2,5],[2,6],[2,7]
- punpckhdq_r2r(mm4, mm3); // wsptr[0,z12],[1,z12],[0,z13],[1,z13]
-
- movq_m2r(*(wsptr+6), mm1); // wsptr[3,0],[3,1],[3,2],[3,3]
- movq_r2r(mm6, mm4);
-
- punpckldq_r2r(mm7, mm6); // wsptr[2,0],[2,1],[2,4],[2,5]
- movq_r2r(mm1, mm5);
-
- punpckhdq_r2r(mm4, mm7); // wsptr[2,6],[2,7],[2,2],[2,3]
- movq_r2r(mm6, mm2);
-
- movq_m2r(*(wsptr+7), mm4); // wsptr[3,4],[3,5],[3,6],[3,7]
- paddw_r2r(mm7, mm6); // wsptr[xxx],[2,z11],[xxx],[2,z13]
-
- psubw_r2r(mm7, mm2); // wsptr[xxx],[2,z12],[xxx],[2,z10]
- punpckldq_r2r(mm4, mm1); // wsptr[3,0],[3,1],[3,4],[3,5]
-
- punpckhdq_r2r(mm5, mm4); // wsptr[3,6],[3,7],[3,2],[3,3]
- movq_r2r(mm1, mm7);
-
- paddw_r2r(mm4, mm1); // wsptr[xxx],[3,z11],[xxx],[3,z13]
- psubw_r2r(mm4, mm7); // wsptr[xxx],[3,z12],[xxx],[3,z10]
-
- movq_r2r(mm6, mm5);
- punpcklwd_r2r(mm1, mm6); // wsptr[xxx],[xxx],[2,z11],[3,z11]
-
- punpckhwd_r2r(mm1, mm5); // wsptr[xxx],[xxx],[2,z13],[3,z13]
- movq_r2r(mm2, mm4);
-
- punpcklwd_r2r(mm7, mm2); // wsptr[xxx],[xxx],[2,z12],[3,z12]
-
- punpckhwd_r2r(mm7, mm4); // wsptr[xxx],[xxx],[2,z10],[3,z10]
-
- punpckhdq_r2r(mm6, mm4); /// wsptr[2,z10],[3,z10],[2,z11],[3,z11]
-
- punpckhdq_r2r(mm5, mm2); // wsptr[2,z12],[3,z12],[2,z13],[3,z13]
- movq_r2r(mm0, mm5);
-
- punpckldq_r2r(mm4, mm0); // wsptr[0,z10],[1,z10],[2,z10],[3,z10]
-
- punpckhdq_r2r(mm4, mm5); // wsptr[0,z11],[1,z11],[2,z11],[3,z11]
- movq_r2r(mm3, mm4);
-
- punpckhdq_r2r(mm2, mm4); // wsptr[0,z13],[1,z13],[2,z13],[3,z13]
- movq_r2r(mm5, mm1);
-
- punpckldq_r2r(mm2, mm3); // wsptr[0,z12],[1,z12],[2,z12],[3,z12]
-// tmp7 = z11 + z13; /* phase 5 */
-// tmp8 = z11 - z13; /* phase 5 */
- psubw_r2r(mm4, mm1); // tmp8
-
- paddw_r2r(mm4, mm5); // tmp7
-// tmp21 = MULTIPLY(tmp8, FIX_1_414213562); /* 2*c4 */
- psllw_i2r(2, mm1);
-
- psllw_i2r(2, mm0);
-
- pmulhw_m2r(fix_141, mm1); // tmp21
-// tmp20 = MULTIPLY(z12, (FIX_1_082392200- FIX_1_847759065)) /* 2*(c2-c6) */
-// + MULTIPLY(z10, - FIX_1_847759065); /* 2*c2 */
- psllw_i2r(2, mm3);
- movq_r2r(mm0, mm7);
-
- pmulhw_m2r(fix_n184, mm7);
- movq_r2r(mm3, mm6);
-
- movq_m2r(*(wsptr), mm2); // tmp0,final1
-
- pmulhw_m2r(fix_108n184, mm6);
-// tmp22 = MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) /* -2*(c2+c6) */
-// + MULTIPLY(z12, FIX_1_847759065); /* 2*c2 */
- movq_r2r(mm2, mm4); // final1
-
- pmulhw_m2r(fix_184n261, mm0);
- paddw_r2r(mm5, mm2); // tmp0+tmp7,final1
-
- pmulhw_m2r(fix_184, mm3);
- psubw_r2r(mm5, mm4); // tmp0-tmp7,final1
-
-// tmp6 = tmp22 - tmp7; /* phase 2 */
- psraw_i2r(3, mm2); // outptr[0,0],[1,0],[2,0],[3,0],final1
-
- paddw_r2r(mm6, mm7); // tmp20
- psraw_i2r(3, mm4); // outptr[0,7],[1,7],[2,7],[3,7],final1
-
- paddw_r2r(mm0, mm3); // tmp22
-
-// tmp5 = tmp21 - tmp6;
- psubw_r2r(mm5, mm3); // tmp6
-
-// tmp4 = tmp20 + tmp5;
- movq_m2r(*(wsptr+1), mm0); // tmp1,final2
- psubw_r2r(mm3, mm1); // tmp5
-
- movq_r2r(mm0, mm6); // final2
- paddw_r2r(mm3, mm0); // tmp1+tmp6,final2
-
- /* Final output stage: scale down by a factor of 8 and range-limit */
-
-
-// outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3)
-// & RANGE_MASK]; final1
-
-
-// outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3)
-// & RANGE_MASK]; final2
- psubw_r2r(mm3, mm6); // tmp1-tmp6,final2
- psraw_i2r(3, mm0); // outptr[0,1],[1,1],[2,1],[3,1]
-
- psraw_i2r(3, mm6); // outptr[0,6],[1,6],[2,6],[3,6]
-
- packuswb_r2r(mm4, mm0); // out[0,1],[1,1],[2,1],[3,1],[0,7],[1,7],[2,7],[3,7]
-
- movq_m2r(*(wsptr+2), mm5); // tmp2,final3
- packuswb_r2r(mm6, mm2); // out[0,0],[1,0],[2,0],[3,0],[0,6],[1,6],[2,6],[3,6]
-
-// outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3)
-// & RANGE_MASK]; final3
- paddw_r2r(mm1, mm7); // tmp4
- movq_r2r(mm5, mm3);
-
- paddw_r2r(mm1, mm5); // tmp2+tmp5
- psubw_r2r(mm1, mm3); // tmp2-tmp5
-
- psraw_i2r(3, mm5); // outptr[0,2],[1,2],[2,2],[3,2]
-
- movq_m2r(*(wsptr+3), mm4); // tmp3,final4
- psraw_i2r(3, mm3); // outptr[0,5],[1,5],[2,5],[3,5]
-
-
-
-// outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3)
-// & RANGE_MASK]; final4
- movq_r2r(mm4, mm6);
- paddw_r2r(mm7, mm4); // tmp3+tmp4
-
- psubw_r2r(mm7, mm6); // tmp3-tmp4
- psraw_i2r(3, mm4); // outptr[0,4],[1,4],[2,4],[3,4]
-
- // mov ecx, [dataptr]
-
- psraw_i2r(3, mm6); // outptr[0,3],[1,3],[2,3],[3,3]
-
- packuswb_r2r(mm4, mm5); // out[0,2],[1,2],[2,2],[3,2],[0,4],[1,4],[2,4],[3,4]
-
- packuswb_r2r(mm3, mm6); // out[0,3],[1,3],[2,3],[3,3],[0,5],[1,5],[2,5],[3,5]
- movq_r2r(mm2, mm4);
-
- movq_r2r(mm5, mm7);
- punpcklbw_r2r(mm0, mm2); // out[0,0],[0,1],[1,0],[1,1],[2,0],[2,1],[3,0],[3,1]
-
- punpckhbw_r2r(mm0, mm4); // out[0,6],[0,7],[1,6],[1,7],[2,6],[2,7],[3,6],[3,7]
- movq_r2r(mm2, mm1);
-
- punpcklbw_r2r(mm6, mm5); // out[0,2],[0,3],[1,2],[1,3],[2,2],[2,3],[3,2],[3,3]
-
- // add dataptr, 4
-
- punpckhbw_r2r(mm6, mm7); // out[0,4],[0,5],[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]
-
- punpcklwd_r2r(mm5, mm2); // out[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3]
-
- // add ecx, output_col
-
- movq_r2r(mm7, mm6);
- punpckhwd_r2r(mm5, mm1); // out[2,0],[2,1],[2,2],[2,3],[3,0],[3,1],[3,2],[3,3]
-
- movq_r2r(mm2, mm0);
- punpcklwd_r2r(mm4, mm6); // out[0,4],[0,5],[0,6],[0,7],[1,4],[1,5],[1,6],[1,7]
-
- // mov idata, [dataptr]
-
- punpckldq_r2r(mm6, mm2); // out[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7]
-
- // add dataptr, 4
-
- movq_r2r(mm1, mm3);
-
- // add idata, output_col
-
- punpckhwd_r2r(mm4, mm7); // out[2,4],[2,5],[2,6],[2,7],[3,4],[3,5],[3,6],[3,7]
-
- movq_r2m(mm2, *(dataptr));
-
- punpckhdq_r2r(mm6, mm0); // out[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7]
-
- dataptr += rskip;
- movq_r2m(mm0, *(dataptr));
-
- punpckldq_r2r(mm7, mm1); // out[2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7]
- punpckhdq_r2r(mm7, mm3); // out[3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7]
-
- dataptr += rskip;
- movq_r2m(mm1, *(dataptr));
-
- dataptr += rskip;
- movq_r2m(mm3, *(dataptr));
-
-/*******************************************************************/
-
- wsptr += 8;
-
-/*******************************************************************/
-
-// tmp10 = ((DCTELEM) wsptr[0] + (DCTELEM) wsptr[4]);
-// tmp13 = ((DCTELEM) wsptr[2] + (DCTELEM) wsptr[6]);
-// tmp11 = ((DCTELEM) wsptr[0] - (DCTELEM) wsptr[4]);
-// tmp14 = ((DCTELEM) wsptr[2] - (DCTELEM) wsptr[6]);
- movq_m2r(*(wsptr), mm0); // wsptr[0,0],[0,1],[0,2],[0,3]
-
- movq_m2r(*(wsptr+1), mm1); // wsptr[0,4],[0,5],[0,6],[0,7]
- movq_r2r(mm0, mm2);
-
- movq_m2r(*(wsptr+2), mm3); // wsptr[1,0],[1,1],[1,2],[1,3]
- paddw_r2r(mm1, mm0); // wsptr[0,tmp10],[xxx],[0,tmp13],[xxx]
-
- movq_m2r(*(wsptr+3), mm4); // wsptr[1,4],[1,5],[1,6],[1,7]
- psubw_r2r(mm1, mm2); // wsptr[0,tmp11],[xxx],[0,tmp14],[xxx]
-
- movq_r2r(mm0, mm6);
- movq_r2r(mm3, mm5);
-
- paddw_r2r(mm4, mm3); // wsptr[1,tmp10],[xxx],[1,tmp13],[xxx]
- movq_r2r(mm2, mm1);
-
- psubw_r2r(mm4, mm5); // wsptr[1,tmp11],[xxx],[1,tmp14],[xxx]
- punpcklwd_r2r(mm3, mm0); // wsptr[0,tmp10],[1,tmp10],[xxx],[xxx]
-
- movq_m2r(*(wsptr+7), mm7); // wsptr[3,4],[3,5],[3,6],[3,7]
- punpckhwd_r2r(mm3, mm6); // wsptr[0,tmp13],[1,tmp13],[xxx],[xxx]
-
- movq_m2r(*(wsptr+4), mm3); // wsptr[2,0],[2,1],[2,2],[2,3]
- punpckldq_r2r(mm6, mm0); // wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13]
-
- punpcklwd_r2r(mm5, mm1); // wsptr[0,tmp11],[1,tmp11],[xxx],[xxx]
- movq_r2r(mm3, mm4);
-
- movq_m2r(*(wsptr+6), mm6); // wsptr[3,0],[3,1],[3,2],[3,3]
- punpckhwd_r2r(mm5, mm2); // wsptr[0,tmp14],[1,tmp14],[xxx],[xxx]
-
- movq_m2r(*(wsptr+5), mm5); // wsptr[2,4],[2,5],[2,6],[2,7]
- punpckldq_r2r(mm2, mm1); // wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14]
-
- paddw_r2r(mm5, mm3); // wsptr[2,tmp10],[xxx],[2,tmp13],[xxx]
- movq_r2r(mm6, mm2);
-
- psubw_r2r(mm5, mm4); // wsptr[2,tmp11],[xxx],[2,tmp14],[xxx]
- paddw_r2r(mm7, mm6); // wsptr[3,tmp10],[xxx],[3,tmp13],[xxx]
-
- movq_r2r(mm3, mm5);
- punpcklwd_r2r(mm6, mm3); // wsptr[2,tmp10],[3,tmp10],[xxx],[xxx]
-
- psubw_r2r(mm7, mm2); // wsptr[3,tmp11],[xxx],[3,tmp14],[xxx]
- punpckhwd_r2r(mm6, mm5); // wsptr[2,tmp13],[3,tmp13],[xxx],[xxx]
-
- movq_r2r(mm4, mm7);
- punpckldq_r2r(mm5, mm3); // wsptr[2,tmp10],[3,tmp10],[2,tmp13],[3,tmp13]
-
- punpcklwd_r2r(mm2, mm4); // wsptr[2,tmp11],[3,tmp11],[xxx],[xxx]
-
- punpckhwd_r2r(mm2, mm7); // wsptr[2,tmp14],[3,tmp14],[xxx],[xxx]
-
- punpckldq_r2r(mm7, mm4); // wsptr[2,tmp11],[3,tmp11],[2,tmp14],[3,tmp14]
- movq_r2r(mm1, mm6);
-
- //OK
-
-// mm0 = ;wsptr[0,tmp10],[1,tmp10],[0,tmp13],[1,tmp13]
-// mm1 = ;wsptr[0,tmp11],[1,tmp11],[0,tmp14],[1,tmp14]
-
- movq_r2r(mm0, mm2);
- punpckhdq_r2r(mm4, mm6); // wsptr[0,tmp14],[1,tmp14],[2,tmp14],[3,tmp14]
-
- punpckldq_r2r(mm4, mm1); // wsptr[0,tmp11],[1,tmp11],[2,tmp11],[3,tmp11]
- psllw_i2r(2, mm6);
-
- pmulhw_m2r(fix_141, mm6);
- punpckldq_r2r(mm3, mm0); // wsptr[0,tmp10],[1,tmp10],[2,tmp10],[3,tmp10]
-
- punpckhdq_r2r(mm3, mm2); // wsptr[0,tmp13],[1,tmp13],[2,tmp13],[3,tmp13]
- movq_r2r(mm0, mm7);
-
-// tmp0 = tmp10 + tmp13;
-// tmp3 = tmp10 - tmp13;
- paddw_r2r(mm2, mm0); // [0,tmp0],[1,tmp0],[2,tmp0],[3,tmp0]
- psubw_r2r(mm2, mm7); // [0,tmp3],[1,tmp3],[2,tmp3],[3,tmp3]
-
-// tmp12 = MULTIPLY(tmp14, FIX_1_414213562) - tmp13;
- psubw_r2r(mm2, mm6); // wsptr[0,tmp12],[1,tmp12],[2,tmp12],[3,tmp12]
-// tmp1 = tmp11 + tmp12;
-// tmp2 = tmp11 - tmp12;
- movq_r2r(mm1, mm5);
-
- //OK
-
-
- /* Odd part */
-
-// z13 = (DCTELEM) wsptr[5] + (DCTELEM) wsptr[3];
-// z10 = (DCTELEM) wsptr[5] - (DCTELEM) wsptr[3];
-// z11 = (DCTELEM) wsptr[1] + (DCTELEM) wsptr[7];
-// z12 = (DCTELEM) wsptr[1] - (DCTELEM) wsptr[7];
- movq_m2r(*(wsptr), mm3); // wsptr[0,0],[0,1],[0,2],[0,3]
- paddw_r2r(mm6, mm1); // [0,tmp1],[1,tmp1],[2,tmp1],[3,tmp1]
-
- movq_m2r(*(wsptr+1), mm4); // wsptr[0,4],[0,5],[0,6],[0,7]
- psubw_r2r(mm6, mm5); // [0,tmp2],[1,tmp2],[2,tmp2],[3,tmp2]
-
- movq_r2r(mm3, mm6);
- punpckldq_r2r(mm4, mm3); // wsptr[0,0],[0,1],[0,4],[0,5]
-
- punpckhdq_r2r(mm6, mm4); // wsptr[0,6],[0,7],[0,2],[0,3]
- movq_r2r(mm3, mm2);
-
-//Save tmp0 and tmp1 in wsptr
- movq_r2m(mm0, *(wsptr)); // save tmp0
- paddw_r2r(mm4, mm2); // wsptr[xxx],[0,z11],[xxx],[0,z13]
-
-
-//Continue with z10 --- z13
- movq_m2r(*(wsptr+2), mm6); // wsptr[1,0],[1,1],[1,2],[1,3]
- psubw_r2r(mm4, mm3); // wsptr[xxx],[0,z12],[xxx],[0,z10]
-
- movq_m2r(*(wsptr+3), mm0); // wsptr[1,4],[1,5],[1,6],[1,7]
- movq_r2r(mm6, mm4);
-
- movq_r2m(mm1, *(wsptr+1)); // save tmp1
- punpckldq_r2r(mm0, mm6); // wsptr[1,0],[1,1],[1,4],[1,5]
-
- punpckhdq_r2r(mm4, mm0); // wsptr[1,6],[1,7],[1,2],[1,3]
- movq_r2r(mm6, mm1);
-
-//Save tmp2 and tmp3 in wsptr
- paddw_r2r(mm0, mm6); // wsptr[xxx],[1,z11],[xxx],[1,z13]
- movq_r2r(mm2, mm4);
-
-//Continue with z10 --- z13
- movq_r2m(mm5, *(wsptr+2)); // save tmp2
- punpcklwd_r2r(mm6, mm2); // wsptr[xxx],[xxx],[0,z11],[1,z11]
-
- psubw_r2r(mm0, mm1); // wsptr[xxx],[1,z12],[xxx],[1,z10]
- punpckhwd_r2r(mm6, mm4); // wsptr[xxx],[xxx],[0,z13],[1,z13]
-
- movq_r2r(mm3, mm0);
- punpcklwd_r2r(mm1, mm3); // wsptr[xxx],[xxx],[0,z12],[1,z12]
-
- movq_r2m(mm7, *(wsptr+3)); // save tmp3
- punpckhwd_r2r(mm1, mm0); // wsptr[xxx],[xxx],[0,z10],[1,z10]
-
- movq_m2r(*(wsptr+4), mm6); // wsptr[2,0],[2,1],[2,2],[2,3]
- punpckhdq_r2r(mm2, mm0); // wsptr[0,z10],[1,z10],[0,z11],[1,z11]
-
- movq_m2r(*(wsptr+5), mm7); // wsptr[2,4],[2,5],[2,6],[2,7]
- punpckhdq_r2r(mm4, mm3); // wsptr[0,z12],[1,z12],[0,z13],[1,z13]
-
- movq_m2r(*(wsptr+6), mm1); // wsptr[3,0],[3,1],[3,2],[3,3]
- movq_r2r(mm6, mm4);
-
- punpckldq_r2r(mm7, mm6); // wsptr[2,0],[2,1],[2,4],[2,5]
- movq_r2r(mm1, mm5);
-
- punpckhdq_r2r(mm4, mm7); // wsptr[2,6],[2,7],[2,2],[2,3]
- movq_r2r(mm6, mm2);
-
- movq_m2r(*(wsptr+7), mm4); // wsptr[3,4],[3,5],[3,6],[3,7]
- paddw_r2r(mm7, mm6); // wsptr[xxx],[2,z11],[xxx],[2,z13]
-
- psubw_r2r(mm7, mm2); // wsptr[xxx],[2,z12],[xxx],[2,z10]
- punpckldq_r2r(mm4, mm1); // wsptr[3,0],[3,1],[3,4],[3,5]
-
- punpckhdq_r2r(mm5, mm4); // wsptr[3,6],[3,7],[3,2],[3,3]
- movq_r2r(mm1, mm7);
-
- paddw_r2r(mm4, mm1); // wsptr[xxx],[3,z11],[xxx],[3,z13]
- psubw_r2r(mm4, mm7); // wsptr[xxx],[3,z12],[xxx],[3,z10]
-
- movq_r2r(mm6, mm5);
- punpcklwd_r2r(mm1, mm6); // wsptr[xxx],[xxx],[2,z11],[3,z11]
-
- punpckhwd_r2r(mm1, mm5); // wsptr[xxx],[xxx],[2,z13],[3,z13]
- movq_r2r(mm2, mm4);
-
- punpcklwd_r2r(mm7, mm2); // wsptr[xxx],[xxx],[2,z12],[3,z12]
-
- punpckhwd_r2r(mm7, mm4); // wsptr[xxx],[xxx],[2,z10],[3,z10]
-
- punpckhdq_r2r(mm6, mm4); // wsptr[2,z10],[3,z10],[2,z11],[3,z11]
-
- punpckhdq_r2r(mm5, mm2); // wsptr[2,z12],[3,z12],[2,z13],[3,z13]
- movq_r2r(mm0, mm5);
-
- punpckldq_r2r(mm4, mm0); // wsptr[0,z10],[1,z10],[2,z10],[3,z10]
-
- punpckhdq_r2r(mm4, mm5); // wsptr[0,z11],[1,z11],[2,z11],[3,z11]
- movq_r2r(mm3, mm4);
-
- punpckhdq_r2r(mm2, mm4); // wsptr[0,z13],[1,z13],[2,z13],[3,z13]
- movq_r2r(mm5, mm1);
-
- punpckldq_r2r(mm2, mm3); // wsptr[0,z12],[1,z12],[2,z12],[3,z12]
-// tmp7 = z11 + z13; /* phase 5 */
-// tmp8 = z11 - z13; /* phase 5 */
- psubw_r2r(mm4, mm1); // tmp8
-
- paddw_r2r(mm4, mm5); // tmp7
-// tmp21 = MULTIPLY(tmp8, FIX_1_414213562); /* 2*c4 */
- psllw_i2r(2, mm1);
-
- psllw_i2r(2, mm0);
-
- pmulhw_m2r(fix_141, mm1); // tmp21
-// tmp20 = MULTIPLY(z12, (FIX_1_082392200- FIX_1_847759065)) /* 2*(c2-c6) */
-// + MULTIPLY(z10, - FIX_1_847759065); /* 2*c2 */
- psllw_i2r(2, mm3);
- movq_r2r(mm0, mm7);
-
- pmulhw_m2r(fix_n184, mm7);
- movq_r2r(mm3, mm6);
-
- movq_m2r(*(wsptr), mm2); // tmp0,final1
-
- pmulhw_m2r(fix_108n184, mm6);
-// tmp22 = MULTIPLY(z10,(FIX_1_847759065 - FIX_2_613125930)) /* -2*(c2+c6) */
-// + MULTIPLY(z12, FIX_1_847759065); /* 2*c2 */
- movq_r2r(mm2, mm4); // final1
-
- pmulhw_m2r(fix_184n261, mm0);
- paddw_r2r(mm5, mm2); // tmp0+tmp7,final1
-
- pmulhw_m2r(fix_184, mm3);
- psubw_r2r(mm5, mm4); // tmp0-tmp7,final1
-
-// tmp6 = tmp22 - tmp7; /* phase 2 */
- psraw_i2r(3, mm2); // outptr[0,0],[1,0],[2,0],[3,0],final1
-
- paddw_r2r(mm6, mm7); // tmp20
- psraw_i2r(3, mm4); // outptr[0,7],[1,7],[2,7],[3,7],final1
-
- paddw_r2r(mm0, mm3); // tmp22
-
-// tmp5 = tmp21 - tmp6;
- psubw_r2r(mm5, mm3); // tmp6
-
-// tmp4 = tmp20 + tmp5;
- movq_m2r(*(wsptr+1), mm0); // tmp1,final2
- psubw_r2r(mm3, mm1); // tmp5
-
- movq_r2r(mm0, mm6); // final2
- paddw_r2r(mm3, mm0); // tmp1+tmp6,final2
-
- /* Final output stage: scale down by a factor of 8 and range-limit */
-
-// outptr[0] = range_limit[IDESCALE(tmp0 + tmp7, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[7] = range_limit[IDESCALE(tmp0 - tmp7, PASS1_BITS+3)
-// & RANGE_MASK]; final1
-
-
-// outptr[1] = range_limit[IDESCALE(tmp1 + tmp6, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[6] = range_limit[IDESCALE(tmp1 - tmp6, PASS1_BITS+3)
-// & RANGE_MASK]; final2
- psubw_r2r(mm3, mm6); // tmp1-tmp6,final2
- psraw_i2r(3, mm0); // outptr[0,1],[1,1],[2,1],[3,1]
-
- psraw_i2r(3, mm6); // outptr[0,6],[1,6],[2,6],[3,6]
-
- packuswb_r2r(mm4, mm0); // out[0,1],[1,1],[2,1],[3,1],[0,7],[1,7],[2,7],[3,7]
-
- movq_m2r(*(wsptr+2), mm5); // tmp2,final3
- packuswb_r2r(mm6, mm2); // out[0,0],[1,0],[2,0],[3,0],[0,6],[1,6],[2,6],[3,6]
-
-// outptr[2] = range_limit[IDESCALE(tmp2 + tmp5, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[5] = range_limit[IDESCALE(tmp2 - tmp5, PASS1_BITS+3)
-// & RANGE_MASK]; final3
- paddw_r2r(mm1, mm7); // tmp4
- movq_r2r(mm5, mm3);
-
- paddw_r2r(mm1, mm5); // tmp2+tmp5
- psubw_r2r(mm1, mm3); // tmp2-tmp5
-
- psraw_i2r(3, mm5); // outptr[0,2],[1,2],[2,2],[3,2]
-
- movq_m2r(*(wsptr+3), mm4); // tmp3,final4
- psraw_i2r(3, mm3); // outptr[0,5],[1,5],[2,5],[3,5]
-
-
-
-// outptr[4] = range_limit[IDESCALE(tmp3 + tmp4, PASS1_BITS+3)
-// & RANGE_MASK];
-// outptr[3] = range_limit[IDESCALE(tmp3 - tmp4, PASS1_BITS+3)
-// & RANGE_MASK]; final4
- movq_r2r(mm4, mm6);
- paddw_r2r(mm7, mm4); // tmp3+tmp4
-
- psubw_r2r(mm7, mm6); // tmp3-tmp4
- psraw_i2r(3, mm4); // outptr[0,4],[1,4],[2,4],[3,4]
-
- psraw_i2r(3, mm6); // outptr[0,3],[1,3],[2,3],[3,3]
-
- /*
- movq_r2m(mm4, *dummy);
- fprintf(stderr, "3-4 %016llx\n", dummy);
- movq_r2m(mm4, *dummy);
- fprintf(stderr, "3+4 %016llx\n", dummy);
- */
-
-
- packuswb_r2r(mm4, mm5); // out[0,2],[1,2],[2,2],[3,2],[0,4],[1,4],[2,4],[3,4]
-
- packuswb_r2r(mm3, mm6); // out[0,3],[1,3],[2,3],[3,3],[0,5],[1,5],[2,5],[3,5]
- movq_r2r(mm2, mm4);
-
- movq_r2r(mm5, mm7);
- punpcklbw_r2r(mm0, mm2); // out[0,0],[0,1],[1,0],[1,1],[2,0],[2,1],[3,0],[3,1]
-
- punpckhbw_r2r(mm0, mm4); // out[0,6],[0,7],[1,6],[1,7],[2,6],[2,7],[3,6],[3,7]
- movq_r2r(mm2, mm1);
-
- punpcklbw_r2r(mm6, mm5); // out[0,2],[0,3],[1,2],[1,3],[2,2],[2,3],[3,2],[3,3]
-
- punpckhbw_r2r(mm6, mm7); // out[0,4],[0,5],[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]
-
- punpcklwd_r2r(mm5, mm2); // out[0,0],[0,1],[0,2],[0,3],[1,0],[1,1],[1,2],[1,3]
-
- movq_r2r(mm7, mm6);
- punpckhwd_r2r(mm5, mm1); // out[2,0],[2,1],[2,2],[2,3],[3,0],[3,1],[3,2],[3,3]
-
- movq_r2r(mm2, mm0);
- punpcklwd_r2r(mm4, mm6); // out[0,4],[0,5],[0,6],[0,7],[1,4],[1,5],[1,6],[1,7]
-
- punpckldq_r2r(mm6, mm2); // out[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7]
-
- movq_r2r(mm1, mm3);
-
- punpckhwd_r2r(mm4, mm7); // out[2,4],[2,5],[2,6],[2,7],[3,4],[3,5],[3,6],[3,7]
-
- dataptr += rskip;
- movq_r2m(mm2, *(dataptr));
-
- punpckhdq_r2r(mm6, mm0); // out[1,0],[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7]
-
- dataptr += rskip;
- movq_r2m(mm0, *(dataptr));
-
- punpckldq_r2r(mm7, mm1); // out[2,0],[2,1],[2,2],[2,3],[2,4],[2,5],[2,6],[2,7]
-
- punpckhdq_r2r(mm7, mm3); // out[3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7]
-
- dataptr += rskip;
- movq_r2m(mm1, *(dataptr));
-
- dataptr += rskip;
- movq_r2m(mm3, *(dataptr));
-
-#else
- __s32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
- __s32 tmp10, tmp11, tmp12, tmp13;
- __s32 z5, z10, z11, z12, z13;
- __s16 *inptr;
- __s32 *wsptr;
- __u8 *outptr;
- int ctr;
- __s32 dcval;
- __s32 workspace[64];
-
- inptr = data;
- wsptr = workspace;
- for (ctr = 8; ctr > 0; ctr--) {
-
- if ((inptr[8] | inptr[16] | inptr[24] |
- inptr[32] | inptr[40] | inptr[48] | inptr[56]) == 0) {
- dcval = inptr[0];
- wsptr[0] = dcval;
- wsptr[8] = dcval;
- wsptr[16] = dcval;
- wsptr[24] = dcval;
- wsptr[32] = dcval;
- wsptr[40] = dcval;
- wsptr[48] = dcval;
- wsptr[56] = dcval;
-
- inptr++;
- wsptr++;
- continue;
- }
-
- tmp0 = inptr[0];
- tmp1 = inptr[16];
- tmp2 = inptr[32];
- tmp3 = inptr[48];
-
- tmp10 = tmp0 + tmp2;
- tmp11 = tmp0 - tmp2;
-
- tmp13 = tmp1 + tmp3;
- tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13;
-
- tmp0 = tmp10 + tmp13;
- tmp3 = tmp10 - tmp13;
- tmp1 = tmp11 + tmp12;
- tmp2 = tmp11 - tmp12;
-
- tmp4 = inptr[8];
- tmp5 = inptr[24];
- tmp6 = inptr[40];
- tmp7 = inptr[56];
-
- z13 = tmp6 + tmp5;
- z10 = tmp6 - tmp5;
- z11 = tmp4 + tmp7;
- z12 = tmp4 - tmp7;
-
- tmp7 = z11 + z13;
- tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562);
-
- z5 = MULTIPLY(z10 + z12, FIX_1_847759065);
- tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5;
- tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5;
-
- tmp6 = tmp12 - tmp7;
- tmp5 = tmp11 - tmp6;
- tmp4 = tmp10 + tmp5;
-
- wsptr[0] = (__s32) (tmp0 + tmp7);
- wsptr[56] = (__s32) (tmp0 - tmp7);
- wsptr[8] = (__s32) (tmp1 + tmp6);
- wsptr[48] = (__s32) (tmp1 - tmp6);
- wsptr[16] = (__s32) (tmp2 + tmp5);
- wsptr[40] = (__s32) (tmp2 - tmp5);
- wsptr[32] = (__s32) (tmp3 + tmp4);
- wsptr[24] = (__s32) (tmp3 - tmp4);
-
- inptr++;
- wsptr++;
- }
-
- wsptr = workspace;
- for (ctr = 0; ctr < 8; ctr++) {
- outptr = &(odata[ctr*rskip]);
-
- tmp10 = wsptr[0] + wsptr[4];
- tmp11 = wsptr[0] - wsptr[4];
-
- tmp13 = wsptr[2] + wsptr[6];
- tmp12 = MULTIPLY(wsptr[2] - wsptr[6], FIX_1_414213562) - tmp13;
-
- tmp0 = tmp10 + tmp13;
- tmp3 = tmp10 - tmp13;
- tmp1 = tmp11 + tmp12;
- tmp2 = tmp11 - tmp12;
-
- z13 = wsptr[5] + wsptr[3];
- z10 = wsptr[5] - wsptr[3];
- z11 = wsptr[1] + wsptr[7];
- z12 = wsptr[1] - wsptr[7];
-
- tmp7 = z11 + z13;
- tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562);
-
- z5 = MULTIPLY(z10 + z12, FIX_1_847759065);
- tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5;
- tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5;
-
- tmp6 = tmp12 - tmp7;
- tmp5 = tmp11 - tmp6;
- tmp4 = tmp10 + tmp5;
-
- outptr[0] = RL(DESCALE(tmp0 + tmp7));
- outptr[7] = RL(DESCALE(tmp0 - tmp7));
- outptr[1] = RL(DESCALE(tmp1 + tmp6));
- outptr[6] = RL(DESCALE(tmp1 - tmp6));
- outptr[2] = RL(DESCALE(tmp2 + tmp5));
- outptr[5] = RL(DESCALE(tmp2 - tmp5));
- outptr[4] = RL(DESCALE(tmp3 + tmp4));
- outptr[3] = RL(DESCALE(tmp3 - tmp4));
-
- wsptr += 8;
- }
-#endif
-}
/*
Main Routines
@@ -2702,7 +1408,7 @@ Initialise all the cache-aliged data blocks
*/
-void RTjpeg_init_data(void)
+static void RTjpeg_init_data(void)
{
unsigned long dptr;
@@ -2733,7 +1439,7 @@ Input: buf -> pointer to 128 ints for quant values store to pass back to
Q -> quality factor (192=best, 32=worst)
*/
-void RTjpeg_init_Q(__u8 Q)
+static void RTjpeg_init_Q(__u8 Q)
{
int i;
__u64 qual;
@@ -2760,7 +1466,6 @@ void RTjpeg_init_Q(__u8 Q)
RTjpeg_cb8--;
RTjpeg_dct_init();
- RTjpeg_idct_init();
RTjpeg_quant_init();
}
@@ -2822,37 +1527,6 @@ void RTjpeg_init_compress(__u32 *buf, int width, int height, __u8 Q)
buf[64+i]=le2me_32(RTjpeg_ciqt[i]);
}
-void RTjpeg_init_decompress(__u32 *buf, int width, int height)
-{
- int i;
-
- RTjpeg_init_data();
-
- RTjpeg_width=width;
- RTjpeg_height=height;
- RTjpeg_Ywidth = RTjpeg_width>>3;
- RTjpeg_Ysize=width * height;
- RTjpeg_Cwidth = RTjpeg_width>>4;
- RTjpeg_Csize= (width>>1) * height;
-
- for(i=0; i<64; i++)
- {
- RTjpeg_liqt[i]=le2me_32(buf[i]);
- RTjpeg_ciqt[i]=le2me_32(buf[i+64]);
- }
-
- RTjpeg_lb8=0;
- while(RTjpeg_liqt[RTjpeg_ZZ[++RTjpeg_lb8]]<=8);
- RTjpeg_lb8--;
- RTjpeg_cb8=0;
- while(RTjpeg_ciqt[RTjpeg_ZZ[++RTjpeg_cb8]]<=8);
- RTjpeg_cb8--;
-
- RTjpeg_idct_init();
-
-// RTjpeg_color_init();
-}
-
int RTjpeg_compressYUV420(__s8 *sp, unsigned char *bp)
{
__s8 * sb;
@@ -2907,210 +1581,6 @@ int RTjpeg_compressYUV420(__s8 *sp, unsigned char *bp)
return (sp-sb);
}
-int RTjpeg_compressYUV422(__s8 *sp, unsigned char *bp)
-{
- __s8 * sb;
- register __s8 * bp2 = bp + RTjpeg_Ysize;
- register __s8 * bp3 = bp2 + RTjpeg_Csize;
- register int i, j, k;
-
-#if HAVE_MMX
- emms();
-#endif
- sb=sp;
-/* Y */
- for(i=RTjpeg_height; i; i-=8)
- {
- for(j=0, k=0; j<RTjpeg_width; j+=16, k+=8)
- {
- RTjpeg_dctY(bp+j, RTjpeg_block, RTjpeg_Ywidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_lqt);
- sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_lb8);
-
- RTjpeg_dctY(bp+j+8, RTjpeg_block, RTjpeg_Ywidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_lqt);
- sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_lb8);
-
- RTjpeg_dctY(bp2+k, RTjpeg_block, RTjpeg_Cwidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_cqt);
- sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_cb8);
-
- RTjpeg_dctY(bp3+k, RTjpeg_block, RTjpeg_Cwidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_cqt);
- sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_cb8);
-
- }
- bp+=RTjpeg_width<<3;
- bp2+=RTjpeg_width<<2;
- bp3+=RTjpeg_width<<2;
-
- }
-#if HAVE_MMX
- emms();
-#endif
- return (sp-sb);
-}
-
-int RTjpeg_compress8(__s8 *sp, unsigned char *bp)
-{
- __s8 * sb;
- int i, j;
-
-#if HAVE_MMX
- emms();
-#endif
-
- sb=sp;
-/* Y */
- for(i=0; i<RTjpeg_height; i+=8)
- {
- for(j=0; j<RTjpeg_width; j+=8)
- {
- RTjpeg_dctY(bp+j, RTjpeg_block, RTjpeg_width);
- RTjpeg_quant(RTjpeg_block, RTjpeg_lqt);
- sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_lb8);
- }
- bp+=RTjpeg_width;
- }
-
-#if HAVE_MMX
- emms();
-#endif
- return (sp-sb);
-}
-
-void RTjpeg_decompressYUV422(__s8 *sp, __u8 *bp)
-{
- register __s8 * bp2 = bp + RTjpeg_Ysize;
- register __s8 * bp3 = bp2 + (RTjpeg_Csize);
- int i, j,k;
-
-#if HAVE_MMX
- emms();
-#endif
-
-/* Y */
- for(i=RTjpeg_height; i; i-=8)
- {
- for(k=0, j=0; j<RTjpeg_width; j+=16, k+=8) {
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp+j, RTjpeg_block, RTjpeg_width);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp+j+8, RTjpeg_block, RTjpeg_width);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
- RTjpeg_idct(bp2+k, RTjpeg_block, RTjpeg_width>>1);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
- RTjpeg_idct(bp3+k, RTjpeg_block, RTjpeg_width>>1);
- }
- }
- bp+=RTjpeg_width<<3;
- bp2+=RTjpeg_width<<2;
- bp3+=RTjpeg_width<<2;
- }
-#if HAVE_MMX
- emms();
-#endif
-}
-
-void RTjpeg_decompressYUV420(__s8 *sp, __u8 *bp)
-{
- register __s8 * bp1 = bp + (RTjpeg_width<<3);
- register __s8 * bp2 = bp + RTjpeg_Ysize;
- register __s8 * bp3 = bp2 + (RTjpeg_Csize>>1);
- int i, j,k;
-
-#if HAVE_MMX
- emms();
-#endif
-
-/* Y */
- for(i=RTjpeg_height>>1; i; i-=8)
- {
- for(k=0, j=0; j<RTjpeg_width; j+=16, k+=8) {
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp+j, RTjpeg_block, RTjpeg_width);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp+j+8, RTjpeg_block, RTjpeg_width);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp1+j, RTjpeg_block, RTjpeg_width);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp1+j+8, RTjpeg_block, RTjpeg_width);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
- RTjpeg_idct(bp2+k, RTjpeg_block, RTjpeg_width>>1);
- }
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_cb8, RTjpeg_ciqt);
- RTjpeg_idct(bp3+k, RTjpeg_block, RTjpeg_width>>1);
- }
- }
- bp+=RTjpeg_width<<4;
- bp1+=RTjpeg_width<<4;
- bp2+=RTjpeg_width<<2;
- bp3+=RTjpeg_width<<2;
- }
-#if HAVE_MMX
- emms();
-#endif
-}
-
-void RTjpeg_decompress8(__s8 *sp, __u8 *bp)
-{
- int i, j;
-
-#if HAVE_MMX
- emms();
-#endif
-
-/* Y */
- for(i=0; i<RTjpeg_height; i+=8)
- {
- for(j=0; j<RTjpeg_width; j+=8)
- if(*sp==-1)sp++;
- else
- {
- sp+=RTjpeg_s2b(RTjpeg_block, sp, RTjpeg_lb8, RTjpeg_liqt);
- RTjpeg_idct(bp+j, RTjpeg_block, RTjpeg_width);
- }
- bp+=RTjpeg_width<<3;
- }
-}
-
/*
External Function
@@ -3140,7 +1610,7 @@ void RTjpeg_init_mcompress(void)
#if HAVE_MMX
-int RTjpeg_bcomp(__s16 *old, mmx_t *mask)
+static int RTjpeg_bcomp(__s16 *old, mmx_t *mask)
{
int i;
mmx_t *mold=(mmx_t *)old;
@@ -3177,23 +1647,19 @@ int RTjpeg_bcomp(__s16 *old, mmx_t *mask)
if(result.q)
{
-// if(!RTjpeg_mtest)
-// for(i=0; i<16; i++)((__u64 *)old)[i]=((__u64 *)RTjpeg_block)[i];
return 0;
}
-// printf(".");
return 1;
}
#else
-int RTjpeg_bcomp(__s16 *old, __u16 *mask)
+static int RTjpeg_bcomp(__s16 *old, __u16 *mask)
{
int i;
for(i=0; i<64; i++)
if(abs(old[i]-RTjpeg_block[i])>*mask)
{
- if(!RTjpeg_mtest)
for(i=0; i<16; i++)((__u64 *)old)[i]=((__u64 *)RTjpeg_block)[i];
return 0;
}
@@ -3201,15 +1667,9 @@ int RTjpeg_bcomp(__s16 *old, __u16 *mask)
}
#endif
-void RTjpeg_set_test(int i)
-{
- RTjpeg_mtest=i;
-}
-
int RTjpeg_mcompressYUV420(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask)
{
__s8 * sb;
-//rh __s16 *block;
register __s8 * bp1 = bp + (RTjpeg_width<<3);
register __s8 * bp2 = bp + RTjpeg_Ysize;
register __s8 * bp3 = bp2 + (RTjpeg_Csize>>1);
@@ -3296,502 +1756,3 @@ int RTjpeg_mcompressYUV420(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask
#endif
return (sp-sb);
}
-
-
-int RTjpeg_mcompressYUV422(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask)
-{
- __s8 * sb;
- __s16 *block;
- register __s8 * bp2;
- register __s8 * bp3;
- register int i, j, k;
-
-#if HAVE_MMX
- emms();
- RTjpeg_lmask.uq=((__u64)lmask<<48)|((__u64)lmask<<32)|((__u64)lmask<<16)|lmask;
- RTjpeg_cmask.uq=((__u64)cmask<<48)|((__u64)cmask<<32)|((__u64)cmask<<16)|cmask;
-#else
- RTjpeg_lmask=lmask;
- RTjpeg_cmask=cmask;
-#endif
-
- bp = bp - RTjpeg_width*0;
- bp2 = bp + RTjpeg_Ysize-RTjpeg_width*0;
- bp3 = bp2 + RTjpeg_Csize;
-
- sb=sp;
- block=RTjpeg_old;
-/* Y */
- for(i=RTjpeg_height; i; i-=8)
- {
- for(j=0, k=0; j<RTjpeg_width; j+=16, k+=8)
- {
- RTjpeg_dctY(bp+j, RTjpeg_block, RTjpeg_Ywidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_lqt);
- if(RTjpeg_bcomp(block, &RTjpeg_lmask))
- {
- *((__u8 *)sp++)=255;
- }
- else sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_lb8);
- block+=64;
-
- RTjpeg_dctY(bp+j+8, RTjpeg_block, RTjpeg_Ywidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_lqt);
- if(RTjpeg_bcomp(block, &RTjpeg_lmask))
- {
- *((__u8 *)sp++)=255;
- }
- else sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_lb8);
- block+=64;
-
- RTjpeg_dctY(bp2+k, RTjpeg_block, RTjpeg_Cwidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_cqt);
- if(RTjpeg_bcomp(block, &RTjpeg_cmask))
- {
- *((__u8 *)sp++)=255;
- }
- else sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_cb8);
- block+=64;
-
- RTjpeg_dctY(bp3+k, RTjpeg_block, RTjpeg_Cwidth);
- RTjpeg_quant(RTjpeg_block, RTjpeg_cqt);
- if(RTjpeg_bcomp(block, &RTjpeg_cmask))
- {
- *((__u8 *)sp++)=255;
- }
- else sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_cb8);
- block+=64;
-
- }
- bp+=RTjpeg_width<<3;
- bp2+=RTjpeg_width<<2;
- bp3+=RTjpeg_width<<2;
- }
- printf ("%d\n", block - RTjpeg_old);
-#if HAVE_MMX
- emms();
-#endif
- return (sp-sb);
-}
-
-int RTjpeg_mcompress8(__s8 *sp, unsigned char *bp, __u16 lmask)
-{
- __s8 * sb;
- __s16 *block;
- int i, j;
-
-#if HAVE_MMX
- emms();
- RTjpeg_lmask.uq=((__u64)lmask<<48)|((__u64)lmask<<32)|((__u64)lmask<<16)|lmask;
-#else
- RTjpeg_lmask=lmask;
-#endif
-
-
- sb=sp;
- block=RTjpeg_old;
-/* Y */
- for(i=0; i<RTjpeg_height; i+=8)
- {
- for(j=0; j<RTjpeg_width; j+=8)
- {
- RTjpeg_dctY(bp+j, RTjpeg_block, RTjpeg_width);
- RTjpeg_quant(RTjpeg_block, RTjpeg_lqt);
- if(RTjpeg_bcomp(block, &RTjpeg_lmask))
- {
- *((__u8 *)sp++)=255;
-// printf("* %d ", sp[-1]);
- } else sp+=RTjpeg_b2s(RTjpeg_block, sp, RTjpeg_lb8);
- block+=64;
- }
- bp+=RTjpeg_width<<3;
- }
-#if HAVE_MMX
- emms();
-#endif
- return (sp-sb);
-}
-
-void RTjpeg_color_init(void)
-{
-}
-
-#define KcrR 76284
-#define KcrG 53281
-#define KcbG 25625
-#define KcbB 132252
-#define Ky 76284
-
-void RTjpeg_yuv422rgb(__u8 *buf, __u8 *rgb, int stride)
-{
- int tmp;
- int i, j;
- __s32 y, crR, crG, cbG, cbB;
- __u8 *bufcr, *bufcb, *bufy, *bufoute;
- int yskip;
-
- yskip=RTjpeg_width;
-
- bufcb=&buf[RTjpeg_width*RTjpeg_height];
- bufcr=&buf[RTjpeg_width*RTjpeg_height+(RTjpeg_width*RTjpeg_height)/2];
- bufy=&buf[0];
- bufoute=rgb;
-
- for(i=0; i<(RTjpeg_height); i++)
- {
- for(j=0; j<RTjpeg_width; j+=2)
- {
- crR=(*bufcr-128)*KcrR;
- crG=(*(bufcr++)-128)*KcrG;
- cbG=(*bufcb-128)*KcbG;
- cbB=(*(bufcb++)-128)*KcbB;
-
- y=(bufy[j]-16)*Ky;
-
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+1]-16)*Ky;
-
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- }
- bufy+=yskip;
- }
-}
-
-
-void RTjpeg_yuv420rgb(__u8 *buf, __u8 *rgb, int stride)
-{
- int tmp;
- int i, j;
- __s32 y, crR, crG, cbG, cbB;
- __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
- int oskip, yskip;
-
- if(stride==0)
- oskip=RTjpeg_width*3;
- else
- oskip=2*stride-RTjpeg_width*3;
-
- yskip=RTjpeg_width;
-
- bufcb=&buf[RTjpeg_width*RTjpeg_height];
- bufcr=&buf[RTjpeg_width*RTjpeg_height+(RTjpeg_width*RTjpeg_height)/4];
- bufy=&buf[0];
- bufoute=rgb;
- bufouto=rgb+RTjpeg_width*3;
-
- for(i=0; i<(RTjpeg_height>>1); i++)
- {
- for(j=0; j<RTjpeg_width; j+=2)
- {
- crR=(*bufcr-128)*KcrR;
- crG=(*(bufcr++)-128)*KcrG;
- cbG=(*bufcb-128)*KcbG;
- cbB=(*(bufcb++)-128)*KcbB;
-
- y=(bufy[j]-16)*Ky;
-
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+1]-16)*Ky;
-
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+yskip]-16)*Ky;
-
- tmp=(y+crR)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+cbB)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+1+yskip]-16)*Ky;
-
- tmp=(y+crR)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+cbB)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- }
- bufoute+=oskip;
- bufouto+=oskip;
- bufy+=yskip<<1;
- }
-}
-
-
-void RTjpeg_yuvrgb32(__u8 *buf, __u8 *rgb, int stride)
-{
- int tmp;
- int i, j;
- __s32 y, crR, crG, cbG, cbB;
- __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
- int oskip, yskip;
-
- if(stride==0)
- oskip=RTjpeg_width*4;
- else
- oskip = 2*stride-RTjpeg_width*4;
- yskip=RTjpeg_width;
-
- bufcb=&buf[RTjpeg_width*RTjpeg_height];
- bufcr=&buf[RTjpeg_width*RTjpeg_height+(RTjpeg_width*RTjpeg_height)/2];
- bufy=&buf[0];
- bufoute=rgb;
- bufouto=rgb+RTjpeg_width*4;
-
- for(i=0; i<(RTjpeg_height>>1); i++)
- {
- for(j=0; j<RTjpeg_width; j+=2)
- {
- crR=(*bufcr-128)*KcrR;
- crG=(*(bufcr++)-128)*KcrG;
- cbG=(*bufcb-128)*KcbG;
- cbB=(*(bufcb++)-128)*KcbB;
-
- y=(bufy[j]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- bufoute++;
-
- y=(bufy[j+1]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- bufoute++;
-
- y=(bufy[j+yskip]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- bufouto++;
-
- y=(bufy[j+1+yskip]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- bufouto++;
-
- }
- bufoute+=oskip;
- bufouto+=oskip;
- bufy+=yskip<<1;
- }
-}
-
-void RTjpeg_yuvrgb24(__u8 *buf, __u8 *rgb, int stride)
-{
- int tmp;
- int i, j;
- __s32 y, crR, crG, cbG, cbB;
- __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
- int oskip, yskip;
-
- if(stride==0)
- oskip=RTjpeg_width*3;
- else
- oskip=2*stride - RTjpeg_width*3;
-
- yskip=RTjpeg_width;
-
- bufcb=&buf[RTjpeg_width*RTjpeg_height];
- bufcr=&buf[RTjpeg_width*RTjpeg_height+(RTjpeg_width*RTjpeg_height)/4];
- bufy=&buf[0];
- bufoute=rgb;
- bufouto=rgb+RTjpeg_width*3;
-
- for(i=0; i<(RTjpeg_height>>1); i++)
- {
- for(j=0; j<RTjpeg_width; j+=2)
- {
- crR=(*bufcr-128)*KcrR;
- crG=(*(bufcr++)-128)*KcrG;
- cbG=(*bufcb-128)*KcbG;
- cbB=(*(bufcb++)-128)*KcbB;
-
- y=(bufy[j]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+1]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufoute++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+yskip]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- y=(bufy[j+1+yskip]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- *(bufouto++)=(tmp>255)?255:((tmp<0)?0:tmp);
-
- }
- bufoute+=oskip;
- bufouto+=oskip;
- bufy+=yskip<<1;
- }
-}
-
-void RTjpeg_yuvrgb16(__u8 *buf, __u8 *rgb, int stride)
-{
- int tmp;
- int i, j;
- __s32 y, crR, crG, cbG, cbB;
- __u8 *bufcr, *bufcb, *bufy, *bufoute, *bufouto;
- int oskip, yskip;
- unsigned char r, g, b;
-
- if(stride==0)
- oskip=RTjpeg_width*2;
- else
- oskip=2*stride-RTjpeg_width*2;
-
- yskip=RTjpeg_width;
-
- bufcb=&buf[RTjpeg_width*RTjpeg_height];
- bufcr=&buf[RTjpeg_width*RTjpeg_height+(RTjpeg_width*RTjpeg_height)/4];
- bufy=&buf[0];
- bufoute=rgb;
- bufouto=rgb+RTjpeg_width*2;
-
- for(i=0; i<(RTjpeg_height>>1); i++)
- {
- for(j=0; j<RTjpeg_width; j+=2)
- {
- crR=(*bufcr-128)*KcrR;
- crG=(*(bufcr++)-128)*KcrG;
- cbG=(*bufcb-128)*KcbG;
- cbB=(*(bufcb++)-128)*KcbB;
-
- y=(bufy[j]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- b=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- g=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- r=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(int)((int)b >> 3);
- tmp|=(int)(((int)g >> 2) << 5);
- tmp|=(int)(((int)r >> 3) << 11);
- *(bufoute++)=tmp&0xff;
- *(bufoute++)=tmp>>8;
-
-
- y=(bufy[j+1]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- b=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- g=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- r=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(int)((int)b >> 3);
- tmp|=(int)(((int)g >> 2) << 5);
- tmp|=(int)(((int)r >> 3) << 11);
- *(bufoute++)=tmp&0xff;
- *(bufoute++)=tmp>>8;
-
- y=(bufy[j+yskip]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- b=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- g=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- r=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(int)((int)b >> 3);
- tmp|=(int)(((int)g >> 2) << 5);
- tmp|=(int)(((int)r >> 3) << 11);
- *(bufouto++)=tmp&0xff;
- *(bufouto++)=tmp>>8;
-
- y=(bufy[j+1+yskip]-16)*Ky;
-
- tmp=(y+cbB)>>16;
- b=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y-crG-cbG)>>16;
- g=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(y+crR)>>16;
- r=(tmp>255)?255:((tmp<0)?0:tmp);
- tmp=(int)((int)b >> 3);
- tmp|=(int)(((int)g >> 2) << 5);
- tmp|=(int)(((int)r >> 3) << 11);
- *(bufouto++)=tmp&0xff;
- *(bufouto++)=tmp>>8;
-
- }
- bufoute+=oskip;
- bufouto+=oskip;
- bufy+=yskip<<1;
- }
-}
-
-/* fix stride */
-
-void RTjpeg_yuvrgb8(__u8 *buf, __u8 *rgb, int stride)
-{
- memcpy(rgb, buf, RTjpeg_width*RTjpeg_height);
-}
-
diff --git a/libmpcodecs/native/rtjpegn.h b/libmpcodecs/native/rtjpegn.h
index a854818..859b823 100644
--- a/libmpcodecs/native/rtjpegn.h
+++ b/libmpcodecs/native/rtjpegn.h
@@ -35,27 +35,10 @@
#define __s32 int32_t
#define __s64 int64_t
-extern void RTjpeg_init_Q(__u8 Q);
-extern void RTjpeg_init_compress(__u32 *buf, int width, int height, __u8 Q);
-extern void RTjpeg_init_decompress(__u32 *buf, int width, int height);
-extern int RTjpeg_compressYUV420(__s8 *sp, unsigned char *bp);
-extern int RTjpeg_compressYUV422(__s8 *sp, unsigned char *bp);
-extern void RTjpeg_decompressYUV420(__s8 *sp, __u8 *bp);
-extern void RTjpeg_decompressYUV422(__s8 *sp, __u8 *bp);
-extern int RTjpeg_compress8(__s8 *sp, unsigned char *bp);
-extern void RTjpeg_decompress8(__s8 *sp, __u8 *bp);
-
-extern void RTjpeg_init_mcompress(void);
-extern int RTjpeg_mcompressYUV420(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask);
-extern int RTjpeg_mcompressYUV422(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask);
-extern int RTjpeg_mcompress8(__s8 *sp, unsigned char *bp, __u16 lmask);
-extern void RTjpeg_set_test(int i);
-
-extern void RTjpeg_yuv420rgb(__u8 *buf, __u8 *rgb, int stride);
-extern void RTjpeg_yuv422rgb(__u8 *buf, __u8 *rgb, int stride);
-extern void RTjpeg_yuvrgb8(__u8 *buf, __u8 *rgb, int stride);
-extern void RTjpeg_yuvrgb16(__u8 *buf, __u8 *rgb, int stride);
-extern void RTjpeg_yuvrgb24(__u8 *buf, __u8 *rgb, int stride);
-extern void RTjpeg_yuvrgb32(__u8 *buf, __u8 *rgb, int stride);
+void RTjpeg_init_compress(__u32 *buf, int width, int height, __u8 Q);
+int RTjpeg_compressYUV420(__s8 *sp, unsigned char *bp);
+
+void RTjpeg_init_mcompress(void);
+int RTjpeg_mcompressYUV420(__s8 *sp, unsigned char *bp, __u16 lmask, __u16 cmask);
#endif /* MPLAYER_RTJPEGN_H */
diff --git a/libmpcodecs/vd.c b/libmpcodecs/vd.c
index 4ebb01e..fa2f74e 100644
--- a/libmpcodecs/vd.c
+++ b/libmpcodecs/vd.c
@@ -35,7 +35,6 @@ extern vd_functions_t mpcodecs_vd_vfwex;
extern vd_functions_t mpcodecs_vd_raw;
extern vd_functions_t mpcodecs_vd_hmblck;
extern vd_functions_t mpcodecs_vd_xanim;
-extern vd_functions_t mpcodecs_vd_nuv;
extern vd_functions_t mpcodecs_vd_mpng;
extern vd_functions_t mpcodecs_vd_ijpg;
extern vd_functions_t mpcodecs_vd_mtga;
@@ -53,7 +52,7 @@ extern vd_functions_t mpcodecs_vd_qtvideo;
* decoder, add it to libavcodec, except for wrappers around external
* libraries and decoders requiring binary support. */
-vd_functions_t* mpcodecs_vd_drivers[] = {
+const vd_functions_t * const mpcodecs_vd_drivers[] = {
&mpcodecs_vd_null,
#ifdef CONFIG_LIBAVCODEC
&mpcodecs_vd_ffmpeg,
@@ -70,7 +69,6 @@ vd_functions_t* mpcodecs_vd_drivers[] = {
&mpcodecs_vd_lzo,
&mpcodecs_vd_raw,
&mpcodecs_vd_hmblck,
- &mpcodecs_vd_nuv,
#ifdef CONFIG_XANIM
&mpcodecs_vd_xanim,
#endif
diff --git a/libmpcodecs/vd.h b/libmpcodecs/vd.h
index a3d7733..f05241b 100644
--- a/libmpcodecs/vd.h
+++ b/libmpcodecs/vd.h
@@ -18,7 +18,7 @@ typedef struct vd_functions_s
} vd_functions_t;
// NULL terminated array of all drivers
-extern vd_functions_t* mpcodecs_vd_drivers[];
+extern const vd_functions_t * const mpcodecs_vd_drivers[];
extern int vd_use_slices;
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 6f9030e..e8e53ca 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -409,7 +409,8 @@ static int init(sh_video_t *sh){
uninit(sh);
return 0;
}
- // this is necessary in case get_format was never called
+ // this is necessary in case get_format was never called and init_vo is
+ // too late e.g. for H.264 VDPAU
set_format_params(avctx, avctx->pix_fmt);
mp_msg(MSGT_DECVIDEO, MSGL_V, "INFO: libavcodec init OK!\n");
return 1; //mpcodecs_config_vo(sh, sh->disp_w, sh->disp_h, IMGFMT_YV12);
@@ -504,6 +505,9 @@ static int init_vo(sh_video_t *sh, enum PixelFormat pix_fmt){
pix_fmt != ctx->pix_fmt ||
!ctx->vo_initialized)
{
+ // this is a special-case HACK for MPEG-1/2 VDPAU that uses neither get_format nor
+ // sets the value correctly in avcodec_open.
+ set_format_params(avctx, avctx->pix_fmt);
mp_msg(MSGT_DECVIDEO, MSGL_V, "[ffmpeg] aspect_ratio: %f\n", aspect);
if (sh->aspect == 0 ||
av_cmp_q(avctx->sample_aspect_ratio,
@@ -715,7 +719,7 @@ static void release_buffer(struct AVCodecContext *avctx, AVFrame *pic){
}
#endif
// release mpi (in case MPI_IMGTYPE_NUMBERED is used, e.g. for VDPAU)
- mpi->flags &= ~MP_IMGFLAG_IN_USE;
+ mpi->usage_count--;
}
if(pic->type!=FF_BUFFER_TYPE_USER){
diff --git a/libmpcodecs/vd_nuv.c b/libmpcodecs/vd_nuv.c
deleted file mode 100644
index cb89ddb..0000000
--- a/libmpcodecs/vd_nuv.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include "vd_internal.h"
-
-static vd_info_t info = {
- "NuppelVideo decoder",
- "nuv",
- "A'rpi",
- "Alex & Panagiotis Issaris <takis at lumumba.luc.ac.be>",
- "native codecs"
-};
-
-LIBVD_EXTERN(nuv)
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
- return mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_I420);
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-void decode_nuv(
- unsigned char *encoded,
- int encoded_size,
- unsigned char *decoded,
- int width,
- int height);
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- mp_image_t* mpi;
- if(len<=0) return NULL; // skipped frame
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, 0,
- sh->disp_w, sh->disp_h);
- if(!mpi) return NULL;
-
- decode_nuv(data, len, mpi->planes[0], sh->disp_w, sh->disp_h);
-
- return mpi;
-}
diff --git a/libmpcodecs/ve_nuv.c b/libmpcodecs/ve_nuv.c
index 0b67017..af6a1df 100644
--- a/libmpcodecs/ve_nuv.c
+++ b/libmpcodecs/ve_nuv.c
@@ -19,13 +19,12 @@
#include "mp_image.h"
#include "vf.h"
-#include "libmpdemux/nuppelvideo.h"
+#include "libavutil/intreadwrite.h"
#include <lzo/lzo1x.h>
#include "native/rtjpegn.h"
#define LZO_AL(size) (((size) + (sizeof(long) - 1)) / sizeof(long))
-#define LZO_IN_LEN (1024*1024L)
-#define LZO_OUT_LEN (LZO_IN_LEN + LZO_IN_LEN / 64 + 16 + 3)
+#define LZO_OUT_LEN(in) ((in) + (in) / 64 + 16 + 3)
//===========================================================================//
@@ -68,6 +67,9 @@ m_option_t nuvopts_conf[]={
//===========================================================================//
+#define COMPDATASIZE (128*4)
+#define FRAMEHEADERSIZE 12
+
static int config(struct vf_instance_s* vf,
int width, int height, int d_width, int d_height,
unsigned int flags, unsigned int outfmt){
@@ -75,14 +77,16 @@ static int config(struct vf_instance_s* vf,
// We need a buffer wich can holda header and a whole YV12 picture
// or a RTJpeg table
vf->priv->buf_size = width*height*3/2+FRAMEHEADERSIZE;
- if(vf->priv->buf_size < (int)(128*sizeof(long int) + FRAMEHEADERSIZE))
- vf->priv->buf_size = 128*sizeof(long int) + FRAMEHEADERSIZE;
+ if(vf->priv->buf_size < COMPDATASIZE + FRAMEHEADERSIZE)
+ vf->priv->buf_size = COMPDATASIZE + FRAMEHEADERSIZE;
mux_v->bih->biWidth=width;
mux_v->bih->biHeight=height;
mux_v->bih->biSizeImage=mux_v->bih->biWidth*mux_v->bih->biHeight*(mux_v->bih->biBitCount/8);
mux_v->aspect = (float)d_width/d_height;
vf->priv->buffer = realloc(vf->priv->buffer,vf->priv->buf_size);
+ if (vf->priv->lzo)
+ vf->priv->zbuffer = realloc(vf->priv->zbuffer, FRAMEHEADERSIZE + LZO_OUT_LEN(vf->priv->buf_size));
vf->priv->tbl_wrote = 0;
return 1;
@@ -99,29 +103,29 @@ static int query_format(struct vf_instance_s* vf, unsigned int fmt){
}
static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
- struct rtframeheader* ench = (struct rtframeheader*)vf->priv->buffer;
+ uint8_t *header = vf->priv->buffer;
uint8_t* data = vf->priv->buffer + FRAMEHEADERSIZE;
uint8_t* zdata = vf->priv->zbuffer + FRAMEHEADERSIZE;
- int len = 0, zlen = 0,r;
+ int len = 0, r;
+ size_t zlen = 0;
- memset(vf->priv->buffer,0,FRAMEHEADERSIZE); // Reset the header
+ memset(header, 0, FRAMEHEADERSIZE); // Reset the header
if(vf->priv->lzo)
memset(vf->priv->zbuffer,0,FRAMEHEADERSIZE);
// This has to be don here otherwise tv with sound doesn't work
if(!vf->priv->tbl_wrote) {
- RTjpeg_init_compress((long int*)data,mpi->width,mpi->height,vf->priv->q);
+ RTjpeg_init_compress((uint32_t *)data,mpi->width,mpi->height,vf->priv->q);
RTjpeg_init_mcompress();
- ench->frametype = 'D'; // compressor data
- ench->comptype = 'R'; // compressor data for RTjpeg
- ench->packetlength = 128*sizeof(long int);
+ header[0] = 'D'; // frametype: compressor data
+ header[1] = 'R'; // comptype: compressor data for RTjpeg
+ AV_WL32(header + 8, COMPDATASIZE); // packetlength
- le2me_rtframeheader(ench);
mux_v->buffer=vf->priv->buffer;
- muxer_write_chunk(mux_v,FRAMEHEADERSIZE + 128*sizeof(long int), 0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
+ muxer_write_chunk(mux_v,FRAMEHEADERSIZE + COMPDATASIZE, 0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
vf->priv->tbl_wrote = 1;
- memset(ench,0,FRAMEHEADERSIZE); // Reset the header
+ memset(header, 0, FRAMEHEADERSIZE); // Reset the header
}
// Raw picture
@@ -129,7 +133,7 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
len = mpi->width*mpi->height*3/2;
// Try lzo ???
if(vf->priv->lzo) {
- r = lzo1x_1_compress(mpi->planes[0],mpi->width*mpi->height*3/2,
+ r = lzo1x_1_compress(mpi->planes[0],len,
zdata,&zlen,vf->priv->zmem);
if(r != LZO_E_OK) {
mp_msg(MSGT_VFILTER,MSGL_ERR,"LZO compress error\n");
@@ -139,10 +143,10 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
if(zlen <= 0 || zlen > len) {
memcpy(data,mpi->planes[0],len);
- ench->comptype = '0';
+ header[1] = '0'; // comptype: uncompressed
} else { // Use lzo only if it's littler
- ench = (struct rtframeheader*)vf->priv->zbuffer;
- ench->comptype = '3';
+ header = vf->priv->zbuffer;
+ header[1] = '3'; //comptype: lzo
len = zlen;
}
@@ -163,19 +167,18 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){
}
if(zlen <= 0 || zlen > len)
- ench->comptype = '1';
+ header[1] = '1'; // comptype: RTjpeg
else {
- ench = (struct rtframeheader*)vf->priv->zbuffer;
- ench->comptype = '2';
+ header = vf->priv->zbuffer;
+ header[1] = '2'; // comptype: RTjpeg + LZO
len = zlen;
}
}
- ench->frametype = 'V'; // video frame
- ench->packetlength = len;
- le2me_rtframeheader(ench);
- mux_v->buffer=(void*)ench;
+ header[0] = 'V'; // frametype: video frame
+ AV_WL32(header + 8, len); // packetlength
+ mux_v->buffer = header;
muxer_write_chunk(mux_v, len + FRAMEHEADERSIZE, 0x10, pts, pts);
return 1;
}
@@ -216,8 +219,7 @@ static int vf_open(vf_instance_t *vf, char* args){
if(lzo_init() != LZO_E_OK) {
mp_msg(MSGT_VFILTER,MSGL_WARN,"LZO init failed: no lzo compression\n");
vf->priv->lzo = 0;
- }
- vf->priv->zbuffer = (lzo_bytep)malloc(FRAMEHEADERSIZE + LZO_OUT_LEN);
+ } else
vf->priv->zmem = malloc(sizeof(long)*LZO_AL(LZO1X_1_MEM_COMPRESS));
}
diff --git a/libmpcodecs/vf.c b/libmpcodecs/vf.c
index ad72f30..0f286d6 100644
--- a/libmpcodecs/vf.c
+++ b/libmpcodecs/vf.c
@@ -304,7 +304,7 @@ mp_image_t* vf_get_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype,
if (number == -1) {
int i;
for (i = 0; i < NUM_NUMBERED_MPI; i++)
- if (!vf->imgctx.numbered_images[i] || !(vf->imgctx.numbered_images[i]->flags & MP_IMGFLAG_IN_USE))
+ if (!vf->imgctx.numbered_images[i] || !vf->imgctx.numbered_images[i]->usage_count)
break;
number = i;
}
@@ -431,7 +431,7 @@ mp_image_t* vf_get_image(vf_instance_t* vf, unsigned int outfmt, int mp_imgtype,
mpi->qscale = NULL;
}
- mpi->flags |= MP_IMGFLAG_IN_USE;
+ mpi->usage_count++;
// printf("\rVF_MPI: %p %p %p %d %d %d \n",
// mpi->planes[0],mpi->planes[1],mpi->planes[2],
// mpi->stride[0],mpi->stride[1],mpi->stride[2]);
diff --git a/libmpcodecs/vf_bmovl.c b/libmpcodecs/vf_bmovl.c
index 80b61ca..02f9326 100644
--- a/libmpcodecs/vf_bmovl.c
+++ b/libmpcodecs/vf_bmovl.c
@@ -1,5 +1,5 @@
/*
- * vf_bmovl.c v0.9.1 - BitMap OVerLay video filter for MPlayer
+ * BitMap OVerLay video filter for MPlayer
*
* (C) 2002 Per Wigren <wigren at home.se>
*
diff --git a/libmpcodecs/vf_decimate.c b/libmpcodecs/vf_decimate.c
index e1cea34..a6eb3da 100644
--- a/libmpcodecs/vf_decimate.c
+++ b/libmpcodecs/vf_decimate.c
@@ -19,7 +19,7 @@ struct vf_priv_s {
int max, last, cnt;
};
-#if HAVE_MMX
+#if HAVE_MMX && HAVE_EBX_AVAILABLE
static int diff_MMX(unsigned char *old, unsigned char *new, int os, int ns)
{
volatile short out[4];
@@ -55,7 +55,7 @@ static int diff_MMX(unsigned char *old, unsigned char *new, int os, int ns)
"emms \n\t"
:
: "S" (old), "D" (new), "a" ((long)os), "b" ((long)ns), "d" (out)
- : "memory"
+ : "%ecx", "memory"
);
return out[0]+out[1]+out[2]+out[3];
}
@@ -164,7 +164,7 @@ static int open(vf_instance_t *vf, char* args)
p->frac = 0.33;
if (args) sscanf(args, "%d:%d:%d:%f", &p->max, &p->hi, &p->lo, &p->frac);
diff = diff_C;
-#if HAVE_MMX
+#if HAVE_MMX && HAVE_EBX_AVAILABLE
if(gCpuCaps.hasMMX) diff = diff_MMX;
#endif
return 1;
diff --git a/libmpcodecs/vf_divtc.c b/libmpcodecs/vf_divtc.c
index 1d55dc1..fa29181 100644
--- a/libmpcodecs/vf_divtc.c
+++ b/libmpcodecs/vf_divtc.c
@@ -33,7 +33,7 @@ struct vf_priv_s
* diff_MMX and diff_C stolen from vf_decimate.c
*/
-#if HAVE_MMX
+#if HAVE_MMX && HAVE_EBX_AVAILABLE
static int diff_MMX(unsigned char *old, unsigned char *new, int os, int ns)
{
volatile short out[4];
@@ -69,7 +69,7 @@ static int diff_MMX(unsigned char *old, unsigned char *new, int os, int ns)
"emms \n\t"
:
: "S" (old), "D" (new), "a" ((long)os), "b" ((long)ns), "d" (out)
- : "memory"
+ : "%ecx", "memory"
);
return out[0]+out[1]+out[2]+out[3];
}
@@ -682,11 +682,10 @@ static int open(vf_instance_t *vf, char* args)
if(!(p->history=calloc(sizeof *p->history, p->window)))
goto nomem;
- diff=
-#if HAVE_MMX
- gCpuCaps.hasMMX?diff_MMX:
+ diff = diff_C;
+#if HAVE_MMX && HAVE_EBX_AVAILABLE
+ if(gCpuCaps.hasMMX) diff = diff_MMX;
#endif
- diff_C;
free(args);
return 1;
diff --git a/libmpcodecs/vf_framestep.c b/libmpcodecs/vf_framestep.c
index 956fe03..9f6d331 100644
--- a/libmpcodecs/vf_framestep.c
+++ b/libmpcodecs/vf_framestep.c
@@ -1,6 +1,5 @@
/*
- * vf_fstep.c - filter to ouput only 1 every n frame, or only the I (key)
- * frame
+ * filter to ouput only 1 every n frame, or only the I (key)frame
*
* The parameters are:
*
diff --git a/libmpcodecs/vf_tile.c b/libmpcodecs/vf_tile.c
index 8fc4b70..6bb43ea 100644
--- a/libmpcodecs/vf_tile.c
+++ b/libmpcodecs/vf_tile.c
@@ -1,5 +1,5 @@
/*
- * vf_tile.c - filter to tile a serie of image in a single, bigger, image
+ * filter to tile a serie of image in a single, bigger, image
*
* The parameters are:
*
diff --git a/libmpdemux/demux_mf.c b/libmpdemux/demux_mf.c
index f7c241f..dc990c0 100644
--- a/libmpdemux/demux_mf.c
+++ b/libmpdemux/demux_mf.c
@@ -58,6 +58,8 @@ static int demux_mf_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds){
return 1;
}
+// force extension/type to have a fourcc
+
static const struct {
const char *type;
uint32_t format;
@@ -65,6 +67,9 @@ static const struct {
{ "bmp", mmioFOURCC('b', 'm', 'p', ' ') },
{ "jpeg", mmioFOURCC('I', 'J', 'P', 'G') },
{ "jpg", mmioFOURCC('I', 'J', 'P', 'G') },
+ { "jls", mmioFOURCC('I', 'J', 'P', 'G') },
+ { "thm", mmioFOURCC('I', 'J', 'P', 'G') },
+ { "db", mmioFOURCC('I', 'J', 'P', 'G') },
{ "pcx", mmioFOURCC('p', 'c', 'x', ' ') },
{ "png", mmioFOURCC('M', 'P', 'N', 'G') },
{ "ptx", mmioFOURCC('p', 't', 'x', ' ') },
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index 8217c47..bcb249b 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -2192,7 +2192,6 @@ if(trak->pos==0 && trak->stream_header_len>0){
if (samplenr < 0)
vo_sub = NULL;
else if (samplenr != priv->current_sub) {
- av_unused sh_sub_t *sh = demuxer->sub->sh;
off_t pos = trak->samples[samplenr].pos;
int len = trak->samples[samplenr].size;
double subpts = (double)trak->samples[samplenr].pts / (double)trak->timescale;
diff --git a/libmpdemux/demux_nuv.c b/libmpdemux/demux_nuv.c
deleted file mode 100644
index 2ca1d2b..0000000
--- a/libmpdemux/demux_nuv.c
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
- * NuppelVideo 0.05 file parser
- * for MPlayer
- * by Panagiotis Issaris <takis at lumumba.luc.ac.be>
- *
- * Reworked by alex
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "config.h"
-#include "mp_msg.h"
-#include "help_mp.h"
-#include "stream/stream.h"
-#include "demuxer.h"
-#include "stheader.h"
-#include "nuppelvideo.h"
-
-
-struct nuv_signature
-{
- char finfo[12]; /* "NuppelVideo" + \0 */
- char version[5]; /* "0.05" + \0 */
-};
-
-typedef struct nuv_position_t nuv_position_t;
-
-struct nuv_position_t
-{
- off_t offset;
- float time;
- int frame;
- nuv_position_t* next;
-};
-
-typedef struct nuv_info_t
-{
- int current_audio_frame;
- int current_video_frame;
- nuv_position_t *index_list;
- nuv_position_t *current_position;
-} nuv_priv_t;
-
-/**
- * \brief find best matching bitrate (in kbps) out of a table
- * \param bitrate bitrate to find best match for
- * \return best match from table
- */
-static int nearestBitrate(int bitrate) {
- const int rates[17] = {8000, 16000, 24000, 32000, 40000, 48000, 56000,
- 64000, 80000, 96000, 112000, 128000, 160000,
- 192000, 224000, 256000, 320000};
- int i;
- for (i = 0; i < 16; i++) {
- if ((rates[i] + rates[i + 1]) / 2 > bitrate)
- break;
- }
- return rates[i];
-}
-
-/**
- * Seek to a position relative to the current position, indicated in time.
- */
-static void demux_seek_nuv ( demuxer_t *demuxer, float rel_seek_secs, float audio_delay, int flags )
-{
-#define MAX_TIME 1000000
- nuv_priv_t* priv = demuxer->priv;
- struct rtframeheader rtjpeg_frameheader;
- off_t orig_pos;
- off_t curr_pos;
- float current_time = 0;
- float start_time = MAX_TIME;
- float target_time = start_time + rel_seek_secs * 1000; /* target_time, start_time are ms, rel_seek_secs s */
-
- orig_pos = stream_tell ( demuxer->stream );
-
- if ( rel_seek_secs > 0 )
- {
- /* Seeking forward */
-
-
- while(current_time < target_time )
- {
- if (stream_read ( demuxer->stream, (char*)& rtjpeg_frameheader, sizeof ( rtjpeg_frameheader ) ) < sizeof(rtjpeg_frameheader))
- return; /* EOF */
- le2me_rtframeheader(&rtjpeg_frameheader);
-
- if ( rtjpeg_frameheader.frametype == 'V' )
- {
- priv->current_position->next = (nuv_position_t*) malloc ( sizeof ( nuv_position_t ) );
- priv->current_position = priv->current_position->next;
- priv->current_position->frame = priv->current_video_frame++;
- priv->current_position->time = rtjpeg_frameheader.timecode;
- priv->current_position->offset = orig_pos;
- priv->current_position->next = NULL;
-
- if ( start_time == MAX_TIME )
- {
- start_time = rtjpeg_frameheader.timecode;
- /* Recalculate target time with real start time */
- target_time = start_time + rel_seek_secs*1000;
- }
-
- current_time = rtjpeg_frameheader.timecode;
-
- curr_pos = stream_tell ( demuxer->stream );
- stream_seek ( demuxer->stream, curr_pos + rtjpeg_frameheader.packetlength );
-
- /* Adjust current sequence pointer */
- }
- else if ( rtjpeg_frameheader.frametype == 'A' )
- {
- if ( start_time == MAX_TIME )
- {
- start_time = rtjpeg_frameheader.timecode;
- /* Recalculate target time with real start time */
- target_time = start_time + rel_seek_secs * 1000;
- }
- current_time = rtjpeg_frameheader.timecode;
-
-
- curr_pos = stream_tell ( demuxer->stream );
- stream_seek ( demuxer->stream, curr_pos + rtjpeg_frameheader.packetlength );
- }
- }
- }
- else
- {
- /* Seeking backward */
- nuv_position_t* p;
- start_time = priv->current_position->time;
-
- /* Recalculate target time with real start time */
- target_time = start_time + rel_seek_secs * 1000;
-
-
- if(target_time < 0)
- target_time = 0;
-
- // Search the target time in the index list, get the offset
- // and go to that offset.
- p = priv->index_list;
- while ( ( p->next != NULL ) && ( p->time < target_time ) )
- {
- p = p->next;
- }
- stream_seek ( demuxer->stream, p->offset );
- priv->current_video_frame = p->frame;
- }
-}
-
-
-static int demux_nuv_fill_buffer ( demuxer_t *demuxer, demux_stream_t *ds )
-{
- struct rtframeheader rtjpeg_frameheader;
- off_t orig_pos;
- nuv_priv_t* priv = demuxer->priv;
- int want_audio = (demuxer->audio)&&(demuxer->audio->id!=-2);
-
- demuxer->filepos = orig_pos = stream_tell ( demuxer->stream );
- if (stream_read ( demuxer->stream, (char*)& rtjpeg_frameheader, sizeof ( rtjpeg_frameheader ) ) < sizeof(rtjpeg_frameheader))
- return 0; /* EOF */
- le2me_rtframeheader(&rtjpeg_frameheader);
-
-#if 0
- printf("NUV frame: frametype: %c, comptype: %c, packetlength: %d\n",
- rtjpeg_frameheader.frametype, rtjpeg_frameheader.comptype,
- rtjpeg_frameheader.packetlength);
-#endif
-
- /* Skip Seekpoint, Extended header and Sync for now */
- if ((rtjpeg_frameheader.frametype == 'R') ||
- (rtjpeg_frameheader.frametype == 'X') ||
- (rtjpeg_frameheader.frametype == 'S'))
- return 1;
-
- /* Skip seektable and text (these have a payload) */
- if ((rtjpeg_frameheader.frametype == 'Q') ||
- (rtjpeg_frameheader.frametype == 'T')) {
- stream_skip(demuxer->stream, rtjpeg_frameheader.packetlength);
- return 1;
- }
-
- if (((rtjpeg_frameheader.frametype == 'D') &&
- (rtjpeg_frameheader.comptype == 'R')) ||
- (rtjpeg_frameheader.frametype == 'V'))
- {
- if ( rtjpeg_frameheader.frametype == 'V' )
- {
- priv->current_video_frame++;
- priv->current_position->next = (nuv_position_t*) malloc(sizeof(nuv_position_t));
- priv->current_position = priv->current_position->next;
- priv->current_position->frame = priv->current_video_frame;
- priv->current_position->time = rtjpeg_frameheader.timecode;
- priv->current_position->offset = orig_pos;
- priv->current_position->next = NULL;
- }
- /* put RTjpeg tables, Video info to video buffer */
- stream_seek ( demuxer->stream, orig_pos );
- ds_read_packet ( demuxer->video, demuxer->stream, rtjpeg_frameheader.packetlength + 12,
- rtjpeg_frameheader.timecode*0.001, orig_pos, 0 );
-
-
- } else
- if (demuxer->audio && (rtjpeg_frameheader.frametype == 'A'))
- {
- priv->current_audio_frame++;
- if (want_audio) {
- /* put Audio to audio buffer */
- ds_read_packet ( demuxer->audio, demuxer->stream,
- rtjpeg_frameheader.packetlength,
- rtjpeg_frameheader.timecode*0.001,
- orig_pos + 12, 0 );
- } else {
- /* skip audio block */
- stream_skip ( demuxer->stream,
- rtjpeg_frameheader.packetlength );
- }
- }
-
- return 1;
-}
-
-/* Scan for the extended data in MythTV nuv streams */
-static int demux_xscan_nuv(demuxer_t* demuxer, int width, int height) {
- int i;
- off_t orig_pos = stream_tell(demuxer->stream);
- struct rtframeheader rtjpeg_frameheader;
- struct extendeddata ext;
- sh_video_t* sh_video = demuxer->video->sh;
- sh_audio_t* sh_audio = demuxer->audio->sh;
-
- for (i = 0; i < 2; ++i) {
- if (stream_read(demuxer->stream, (char*)&rtjpeg_frameheader,
- sizeof(rtjpeg_frameheader)) < sizeof(rtjpeg_frameheader))
- goto out;
- le2me_rtframeheader(&rtjpeg_frameheader);
-
- if (rtjpeg_frameheader.frametype != 'X')
- stream_skip(demuxer->stream, rtjpeg_frameheader.packetlength);
- }
-
- if ( rtjpeg_frameheader.frametype != 'X' )
- goto out;
-
- if (rtjpeg_frameheader.packetlength != sizeof(ext)) {
- mp_msg(MSGT_DEMUXER, MSGL_WARN,
- "NUV extended frame does not have expected length, ignoring\n");
- goto out;
- }
-
- if (stream_read(demuxer->stream, (char*)&ext, sizeof(ext)) < sizeof(ext))
- goto out;
- le2me_extendeddata(&ext);
-
- if (ext.version != 1) {
- mp_msg(MSGT_DEMUXER, MSGL_WARN,
- "NUV extended frame has unknown version number (%d), ignoring\n",
- ext.version);
- goto out;
- }
-
- mp_msg(MSGT_DEMUXER, MSGL_V, "Detected MythTV stream\n");
-
- /* Video parameters */
- mp_msg(MSGT_DEMUXER, MSGL_V, "FOURCC: %c%c%c%c\n",
- (ext.video_fourcc >> 24) & 0xff,
- (ext.video_fourcc >> 16) & 0xff,
- (ext.video_fourcc >> 8) & 0xff,
- (ext.video_fourcc) & 0xff);
- sh_video->format = ext.video_fourcc;
- sh_video->i_bps = ext.lavc_bitrate;
-
- /* Audio parameters */
- if (ext.audio_fourcc == mmioFOURCC('L', 'A', 'M', 'E')) {
- sh_audio->format = 0x55;
- } else if (ext.audio_fourcc == mmioFOURCC('R', 'A', 'W', 'A')) {
- sh_audio->format = 0x1;
- } else {
- mp_msg(MSGT_DEMUXER, MSGL_WARN,
- "Unknown audio format 0x%x\n", ext.audio_fourcc);
- }
-
- sh_audio->channels = ext.audio_channels;
- sh_audio->samplerate = ext.audio_sample_rate;
- sh_audio->i_bps = sh_audio->channels * sh_audio->samplerate *
- ext.audio_bits_per_sample;
- if (sh_audio->format != 0x1)
- sh_audio->i_bps = nearestBitrate(sh_audio->i_bps /
- ext.audio_compression_ratio);
- sh_audio->wf->wFormatTag = sh_audio->format;
- sh_audio->wf->nChannels = sh_audio->channels;
- sh_audio->wf->nSamplesPerSec = sh_audio->samplerate;
- sh_audio->wf->nAvgBytesPerSec = sh_audio->i_bps / 8;
- sh_audio->wf->nBlockAlign = sh_audio->channels * 2;
- sh_audio->wf->wBitsPerSample = ext.audio_bits_per_sample;
- sh_audio->wf->cbSize = 0;
-
- mp_msg(MSGT_DEMUXER, MSGL_V,
- "channels=%d bitspersample=%d samplerate=%d compression_ratio=%d\n",
- ext.audio_channels, ext.audio_bits_per_sample,
- ext.audio_sample_rate, ext.audio_compression_ratio);
- return 1;
-out:
- stream_reset(demuxer->stream);
- stream_seek(demuxer->stream, orig_pos);
- return 0;
-}
-
-static demuxer_t* demux_open_nuv ( demuxer_t* demuxer )
-{
- sh_video_t *sh_video = NULL;
- sh_audio_t *sh_audio = NULL;
- struct rtfileheader rtjpeg_fileheader;
- nuv_priv_t* priv = (nuv_priv_t*) malloc ( sizeof ( nuv_priv_t) );
- demuxer->priv = priv;
- priv->current_audio_frame = 0;
- priv->current_video_frame = 0;
-
-
- /* Go to the start */
- stream_reset(demuxer->stream);
- stream_seek(demuxer->stream, 0);
-
- stream_read ( demuxer->stream, (char*)& rtjpeg_fileheader, sizeof(rtjpeg_fileheader) );
- le2me_rtfileheader(&rtjpeg_fileheader);
-
- /* no video */
- if (rtjpeg_fileheader.videoblocks == 0)
- {
- mp_msg(MSGT_DEMUXER, MSGL_INFO, MSGTR_MPDEMUX_NUV_NoVideoBlocksInFile);
- return NULL;
- }
-
- /* Create a new video stream header */
- sh_video = new_sh_video ( demuxer, 0 );
-
- /* Make sure the demuxer knows about the new video stream header
- * (even though new_sh_video() ought to take care of it)
- */
- demuxer->video->sh = sh_video;
-
- /* Make sure that the video demuxer stream header knows about its
- * parent video demuxer stream (this is getting wacky), or else
- * video_read_properties() will choke
- */
- sh_video->ds = demuxer->video;
-
- /* Custom fourcc for internal MPlayer use */
- sh_video->format = mmioFOURCC('N', 'U', 'V', '1');
-
- sh_video->disp_w = rtjpeg_fileheader.width;
- sh_video->disp_h = rtjpeg_fileheader.height;
-
- /* NuppelVideo uses pixel aspect ratio
- here display aspect ratio is used.
- For the moment NuppelVideo only supports 1.0 thus
- 1.33 == 4:3 aspect ratio.
- */
- if(rtjpeg_fileheader.aspect == 1.0)
- sh_video->aspect = (float) 4.0f/3.0f;
-
- /* Get the FPS */
- sh_video->fps = rtjpeg_fileheader.fps;
- sh_video->frametime = 1 / sh_video->fps;
-
- if (rtjpeg_fileheader.audioblocks != 0)
- {
- sh_audio = new_sh_audio(demuxer, 0);
- demuxer->audio->id = 0;
- demuxer->audio->sh = sh_audio;
- sh_audio->ds = demuxer->audio;
- sh_audio->format = 0x1;
- sh_audio->channels = 2;
- sh_audio->samplerate = 44100;
-
- sh_audio->wf = malloc(sizeof(WAVEFORMATEX));
- memset(sh_audio->wf, 0, sizeof(WAVEFORMATEX));
- sh_audio->wf->wFormatTag = sh_audio->format;
- sh_audio->wf->nChannels = sh_audio->channels;
- sh_audio->wf->wBitsPerSample = 16;
- sh_audio->wf->nSamplesPerSec = sh_audio->samplerate;
- sh_audio->wf->nAvgBytesPerSec = sh_audio->wf->nChannels*
- sh_audio->wf->wBitsPerSample*sh_audio->wf->nSamplesPerSec/8;
- sh_audio->wf->nBlockAlign = sh_audio->channels * 2;
- sh_audio->wf->cbSize = 0;
- }
-
- /* Check for extended data (X frame) and read settings from it */
- if (!demux_xscan_nuv(demuxer, rtjpeg_fileheader.width,
- rtjpeg_fileheader.height))
- /* Otherwise assume defaults */
- mp_msg(MSGT_DEMUXER, MSGL_V, "No NUV extended frame, using defaults\n");
-
-
- priv->index_list = (nuv_position_t*) malloc(sizeof(nuv_position_t));
- priv->index_list->frame = 0;
- priv->index_list->time = 0;
- priv->index_list->offset = stream_tell ( demuxer->stream );
- priv->index_list->next = NULL;
- priv->current_position = priv->index_list;
-
- return demuxer;
-}
-
-static int nuv_check_file ( demuxer_t* demuxer )
-{
- struct nuv_signature ns;
-
- /* Store original position */
- off_t orig_pos = stream_tell(demuxer->stream);
-
- mp_msg ( MSGT_DEMUX, MSGL_V, "Checking for NuppelVideo\n" );
-
- if(stream_read(demuxer->stream,(char*)&ns,sizeof(ns)) != sizeof(ns))
- return 0;
-
- if ( strncmp ( ns.finfo, "NuppelVideo", 12 ) &&
- strncmp ( ns.finfo, "MythTVVideo", 12 ) )
- return 0; /* Not a NuppelVideo file */
- if ( strncmp ( ns.version, "0.05", 5 ) &&
- strncmp ( ns.version, "0.06", 5 ) &&
- strncmp ( ns.version, "0.07", 5 ) )
- return 0; /* Wrong version NuppelVideo file */
-
- /* Return to original position */
- stream_seek ( demuxer->stream, orig_pos );
- return DEMUXER_TYPE_NUV;
-}
-
-static void demux_close_nuv(demuxer_t* demuxer) {
- nuv_priv_t* priv = demuxer->priv;
- nuv_position_t* pos;
- if(!priv)
- return;
- for(pos = priv->index_list ; pos != NULL ; ) {
- nuv_position_t* p = pos;
- pos = pos->next;
- free(p);
- }
- free(priv);
-}
-
-
-const demuxer_desc_t demuxer_desc_nuv = {
- "NuppelVideo demuxer",
- "nuv",
- "NuppelVideo",
- "Panagiotis Issaris",
- "",
- DEMUXER_TYPE_NUV,
- 1, // safe autodetect
- nuv_check_file,
- demux_nuv_fill_buffer,
- demux_open_nuv,
- demux_close_nuv,
- demux_seek_nuv,
- NULL
-};
diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index 3d15281..33ffcdb 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -1762,7 +1762,8 @@ static int parse_pat(ts_priv_t * priv, int is_start, unsigned char *buff, int si
priv->pat.progs[idx].id = progid;
priv->pat.progs[idx].pmt_pid = ((base[2] & 0x1F) << 8) | base[3];
mp_msg(MSGT_DEMUX, MSGL_V, "PROG: %d (%d-th of %d), PMT: %d\n", priv->pat.progs[idx].id, i+1, entries, priv->pat.progs[idx].pmt_pid);
- mp_msg(MSGT_IDENTIFY, MSGL_V, "PROGRAM_ID=%d (0x%02X), PMT_PID: %d(0x%02X)\n", progid, priv->pat.progs[idx].pmt_pid );
+ mp_msg(MSGT_IDENTIFY, MSGL_V, "PROGRAM_ID=%d (0x%02X), PMT_PID: %d(0x%02X)\n",
+ progid, progid, priv->pat.progs[idx].pmt_pid, priv->pat.progs[idx].pmt_pid);
}
return 1;
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 74bbd8e..bfe321b 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -45,7 +45,6 @@ extern const demuxer_desc_t demuxer_desc_mf;
extern const demuxer_desc_t demuxer_desc_avi;
extern const demuxer_desc_t demuxer_desc_y4m;
extern const demuxer_desc_t demuxer_desc_asf;
-extern const demuxer_desc_t demuxer_desc_nuv;
extern const demuxer_desc_t demuxer_desc_real;
extern const demuxer_desc_t demuxer_desc_smjpeg;
extern const demuxer_desc_t demuxer_desc_matroska;
@@ -100,7 +99,6 @@ const demuxer_desc_t *const demuxer_list[] = {
&demuxer_desc_y4m,
&demuxer_desc_asf,
&demuxer_desc_nsv,
- &demuxer_desc_nuv,
&demuxer_desc_real,
&demuxer_desc_smjpeg,
&demuxer_desc_matroska,
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 5e4f085..6a1e26d 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -35,7 +35,6 @@
#define DEMUXER_TYPE_FLI 10
#define DEMUXER_TYPE_REAL 11
#define DEMUXER_TYPE_Y4M 12
-#define DEMUXER_TYPE_NUV 13
#define DEMUXER_TYPE_FILM 14
#define DEMUXER_TYPE_ROQ 15
#define DEMUXER_TYPE_MF 16
diff --git a/libmpdemux/ms_hdr.h b/libmpdemux/ms_hdr.h
index 6b81056..89f95ec 100644
--- a/libmpdemux/ms_hdr.h
+++ b/libmpdemux/ms_hdr.h
@@ -27,7 +27,7 @@ typedef struct __attribute__((__packed__)) mpeglayer3waveformat_tag {
#endif /* _MPEGLAYER3WAVEFORMAT_ */
/* windows.h #includes wingdi.h on MinGW. */
-#if !defined(_BITMAPINFOHEADER_) && !defined(_WINGDI_H)
+#if !defined(_BITMAPINFOHEADER_) && !defined(_WINGDI_)
#define _BITMAPINFOHEADER_
typedef struct __attribute__((__packed__))
{
diff --git a/libmpdemux/nuppelvideo.h b/libmpdemux/nuppelvideo.h
deleted file mode 100644
index e12c1eb..0000000
--- a/libmpdemux/nuppelvideo.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- nuppelvideo.h taken from NuppelVideo, by
- (c) Roman Hochleitner roman at mars.tuwien.ac.at
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-#ifndef MPLAYER_NUPPELVIDEO_H
-#define MPLAYER_NUPPELVIDEO_H
-
-#include "libavutil/intfloat_readwrite.h"
-
-typedef struct __attribute__((packed)) rtfileheader
-{
- char finfo[12]; // "NuppelVideo" + \0
- char version[5]; // "0.05" + \0
- char pad1[3];
- int width;
- int height;
- int desiredwidth; // 0 .. as it is
- int desiredheight; // 0 .. as it is
- char pimode; // P .. progressive
- // I .. interlaced (2 half pics) [NI]
- char pad2[3];
- double aspect; // 1.0 .. square pixel (1.5 .. e.g. width=480: width*1.5=720
- // for capturing for svcd material
- double fps;
- int videoblocks; // count of video-blocks -1 .. unknown 0 .. no video
- int audioblocks; // count of audio-blocks -1 .. unknown 0 .. no audio
- int textsblocks; // count of text-blocks -1 .. unknown 0 .. no text
- int keyframedist;
-} rtfileheader;
-
-typedef struct __attribute__((packed)) rtframeheader
-{
- char frametype; // A .. Audio, V .. Video, S .. Sync, T .. Text
- // R .. Seekpoint: String RTjjjjjjjj (use full packet)
- // D .. Addition Data for Compressors
- // ct: R .. RTjpeg Tables
-
- char comptype; // V: 0 .. Uncompressed [NI]
- // 1 .. RTJpeg
- // 2 .. RTJpeg with lzo afterwards
- // N .. black frame
- // L .. simply copy last frame (if lost frames)
- // A: 0 .. Uncompressed (44100/sec 16bit 2ch)
- // 1 .. lzo compression [NI]
- // 2 .. layer2 (packet) [NI]
- // 3 .. layer3 (packet) [NI]
- // F .. flac (lossless) [NI]
- // S .. shorten (lossless) [NI]
- // N .. null frame loudless
- // L .. simply copy last frame (may sound bad) NI
- // S: B .. Audio and Video sync point [NI]
- // A .. Audio Sync Information
- // timecode == effective dsp-frequency*100
- // when reaching this audio sync point
- // because many cheap soundcards are unexact
- // and have a range from 44000 to 44250
- // instead of the expected exact 44100 S./sec
- // V .. Next Video Sync
- // timecode == next video framenumber
- // S .. Audio,Video,Text Correlation [NI]
- char keyframe; // 0 .. keyframe
- // 1 .. nr of frame in gop => no keyframe
-
- char filters; // Every bit stands for one type of filter
- // 1 .. Gauss 5 Pixel (8*m+2*l+2*r+2*a+2*b)/16 [NYI]
- // 2 .. Gauss 5 Pixel (8*m+1*l+1*r+1*a+1*b)/12 [NYI]
- // 4 .. Cartoon Filter [NI]
- // 8 .. Reserverd Filter [NI]
- // 16 .. Reserverd Filter [NI]
- // 32 .. Reserverd Filter [NI]
- // 64 .. Reserverd Filter [NI]
- // 128 .. Reserverd Filter [NI]
-
- int timecode; // Timecodeinformation sec*1000 + msecs
-
- int packetlength; // V,A,T: length of following data in stream
- // S: length of packet correl. information [NI]
- // R: do not use here! (fixed 'RTjjjjjjjjjjjjjj')
-} rtframeheader;
-
-/* for MythTV */
-typedef struct __attribute__((packed)) extendeddata
-{
- int version; // yes, this is repeated from the file header
- int video_fourcc; // video encoding method used
- int audio_fourcc; // audio encoding method used
- // generic data
- int audio_sample_rate;
- int audio_bits_per_sample;
- int audio_channels;
- // codec specific
- // mp3lame
- int audio_compression_ratio;
- int audio_quality;
- // rtjpeg
- int rtjpeg_quality;
- int rtjpeg_luma_filter;
- int rtjpeg_chroma_filter;
- // libavcodec
- int lavc_bitrate;
- int lavc_qmin;
- int lavc_qmax;
- int lavc_maxqdiff;
- // unused for later -- total size of 128 integers.
- // new fields must be added at the end, above this comment.
- int expansion[113];
-} extendeddata;
-
-#define FRAMEHEADERSIZE sizeof(rtframeheader)
-#define FILEHEADERSIZE sizeof(rtfileheader)
-
-typedef struct vidbuffertype
-{
- int sample;
- int timecode;
- int freeToEncode;
- int freeToBuffer;
- unsigned char *buffer_offset;
-} vidbuffertyp;
-
-typedef struct audbuffertype
-{
- int sample;
- int timecode;
- int freeToEncode;
- int freeToBuffer;
- unsigned char *buffer_offset;
-} audbuffertyp;
-
-#define le2me_rtfileheader(h) { \
- (h)->width = le2me_32((h)->width); \
- (h)->height = le2me_32((h)->height); \
- (h)->desiredwidth = le2me_32((h)->desiredwidth); \
- (h)->desiredheight = le2me_32((h)->desiredheight); \
- (h)->aspect = av_int2dbl(le2me_64(*(uint64_t *)&(h)->aspect));\
- (h)->fps = av_int2dbl(le2me_64(*(uint64_t *)&(h)->fps)); \
- (h)->videoblocks = le2me_32((h)->videoblocks); \
- (h)->audioblocks = le2me_32((h)->audioblocks); \
- (h)->textsblocks = le2me_32((h)->textsblocks); \
- (h)->keyframedist = le2me_32((h)->keyframedist); \
- }
-#define le2me_rtframeheader(h) { \
- (h)->timecode = le2me_32((h)->timecode); \
- (h)->packetlength = le2me_32((h)->packetlength); \
- }
-#define le2me_extendeddata(h) { \
- (h)->version = le2me_32((h)->version); \
- (h)->video_fourcc = le2me_32((h)->video_fourcc); \
- (h)->audio_fourcc = le2me_32((h)->audio_fourcc); \
- (h)->audio_sample_rate = le2me_32((h)->audio_sample_rate); \
- (h)->audio_bits_per_sample = le2me_32((h)->audio_bits_per_sample);\
- (h)->audio_channels = le2me_32((h)->audio_channels); \
- (h)->audio_compression_ratio = le2me_32((h)->audio_compression_ratio);\
- (h)->audio_quality = le2me_32((h)->audio_quality); \
- (h)->rtjpeg_quality = le2me_32((h)->rtjpeg_quality); \
- (h)->rtjpeg_luma_filter = le2me_32((h)->rtjpeg_luma_filter); \
- (h)->rtjpeg_chroma_filter = le2me_32((h)->rtjpeg_chroma_filter);\
- (h)->lavc_bitrate = le2me_32((h)->lavc_bitrate); \
- (h)->lavc_qmin = le2me_32((h)->lavc_qmin); \
- (h)->lavc_qmax = le2me_32((h)->lavc_qmax); \
- (h)->lavc_maxqdiff = le2me_32((h)->lavc_maxqdiff); \
- }
-
-#endif /* MPLAYER_NUPPELVIDEO_H */
diff --git a/libmpeg2/libmpeg2_changes.diff b/libmpeg2/libmpeg2_changes.diff
index 64cfd3c..49f85a2 100644
--- a/libmpeg2/libmpeg2_changes.diff
+++ b/libmpeg2/libmpeg2_changes.diff
@@ -6,7 +6,8 @@
+#include "cpudetect.h"
+
- #if defined(ARCH_X86) || defined(ARCH_X86_64)
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
static inline uint32_t arch_accel (uint32_t accel)
{
+/* Use MPlayer CPU detection instead of libmpeg2 variant. */
@@ -36,6 +37,95 @@
}
#endif /* ARCH_X86 || ARCH_X86_64 */
+@@ -127,7 +150,7 @@
+ }
+ #endif /* ARCH_X86 || ARCH_X86_64 */
+
+-#if defined(ACCEL_DETECT) && (defined(ARCH_PPC) || defined(ARCH_SPARC))
++#if defined(ACCEL_DETECT) && (ARCH_PPC || ARCH_SPARC)
+ #include <signal.h>
+ #include <setjmp.h>
+
+@@ -146,7 +169,7 @@
+ }
+ #endif /* ACCEL_DETECT && (ARCH_PPC || ARCH_SPARC) */
+
+-#ifdef ARCH_PPC
++#if ARCH_PPC
+ static uint32_t arch_accel (uint32_t accel)
+ {
+ #ifdef ACCEL_DETECT
+@@ -183,7 +206,7 @@
+ }
+ #endif /* ARCH_PPC */
+
+-#ifdef ARCH_SPARC
++#if ARCH_SPARC
+ static uint32_t arch_accel (uint32_t accel)
+ {
+ if (accel & MPEG2_ACCEL_SPARC_VIS2)
+@@ -229,7 +252,7 @@
+ }
+ #endif /* ARCH_SPARC */
+
+-#ifdef ARCH_ALPHA
++#if ARCH_ALPHA
+ static inline uint32_t arch_accel (uint32_t accel)
+ {
+ if (accel & MPEG2_ACCEL_ALPHA_MVI)
+@@ -253,7 +276,7 @@
+
+ uint32_t mpeg2_detect_accel (uint32_t accel)
+ {
+-#if defined (ARCH_X86) || defined (ARCH_X86_64) || defined (ARCH_PPC) || defined (ARCH_ALPHA) || defined (ARCH_SPARC)
++#if ARCH_X86 || ARCH_X86_64 || ARCH_PPC || ARCH_ALPHA || ARCH_SPARC
+ accel = arch_accel (accel);
+ #endif
+ return accel;
+Index: libmpeg2/cpu_state.c
+===================================================================
+--- libmpeg2/cpu_state.c (revision 28324)
++++ libmpeg2/cpu_state.c (revision 28325)
+@@ -29,21 +29,21 @@
+ #include "mpeg2.h"
+ #include "attributes.h"
+ #include "mpeg2_internal.h"
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+ #include "mmx.h"
+ #endif
+
+ void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
+ void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL;
+
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+ static void state_restore_mmx (cpu_state_t * state)
+ {
+ emms ();
+ }
+ #endif
+
+-#ifdef ARCH_PPC
++#if ARCH_PPC
+ #if defined(__APPLE_CC__) /* apple */
+ #define LI(a,b) "li r" #a "," #b "\n\t"
+ #define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t"
+@@ -115,12 +115,12 @@
+
+ void mpeg2_cpu_state_init (uint32_t accel)
+ {
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+ if (accel & MPEG2_ACCEL_X86_MMX) {
+ mpeg2_cpu_state_restore = state_restore_mmx;
+ }
+ #endif
+-#ifdef ARCH_PPC
++#if ARCH_PPC
+ if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {
+ mpeg2_cpu_state_save = state_save_altivec;
+ mpeg2_cpu_state_restore = state_restore_altivec;
--- libmpeg2/decode.c 2006-06-16 20:12:26.000000000 +0200
+++ libmpeg2/decode.c 2006-06-16 20:12:50.000000000 +0200
@@ -345,6 +349,15 @@
@@ -81,7 +171,7 @@
void mpeg2_idct_init (uint32_t accel)
{
-#ifdef ARCH_X86
-+#ifdef HAVE_SSE2
++#if HAVE_SSE2
if (accel & MPEG2_ACCEL_X86_SSE2) {
mpeg2_idct_copy = mpeg2_idct_copy_sse2;
mpeg2_idct_add = mpeg2_idct_add_sse2;
@@ -103,7 +193,7 @@
} else
#endif
-#ifdef ARCH_PPC
-+#ifdef HAVE_ALTIVEC
++#if HAVE_ALTIVEC
if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {
mpeg2_idct_copy = mpeg2_idct_copy_altivec;
mpeg2_idct_add = mpeg2_idct_add_altivec;
@@ -111,7 +201,7 @@
} else
#endif
-#ifdef ARCH_ALPHA
-+#ifdef HAVE_MVI
++#if HAVE_MVI
if (accel & MPEG2_ACCEL_ALPHA_MVI) {
mpeg2_idct_copy = mpeg2_idct_copy_mvi;
mpeg2_idct_add = mpeg2_idct_add_mvi;
@@ -123,46 +213,89 @@
int i;
mpeg2_idct_copy = mpeg2_idct_copy_alpha;
+Index: libmpeg2/idct_alpha.c
+===================================================================
+--- libmpeg2/idct_alpha.c (revision 28324)
++++ libmpeg2/idct_alpha.c (revision 28325)
+@@ -24,7 +24,7 @@
+
+ #include "config.h"
+
+-#ifdef ARCH_ALPHA
++#if ARCH_ALPHA
+
+ #include <stdlib.h>
+ #include <inttypes.h>
+Index: libmpeg2/idct_altivec.c
+===================================================================
+--- libmpeg2/idct_altivec.c (revision 28324)
++++ libmpeg2/idct_altivec.c (revision 28325)
+@@ -23,7 +23,7 @@
+
+ #include "config.h"
+
+-#ifdef ARCH_PPC
++#if ARCH_PPC
+
+ #ifdef HAVE_ALTIVEC_H
+ #include <altivec.h>
+Index: libmpeg2/idct_mmx.c
+===================================================================
+--- libmpeg2/idct_mmx.c (revision 28324)
++++ libmpeg2/idct_mmx.c (revision 28325)
+@@ -23,7 +23,7 @@
+
+ #include "config.h"
+
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+
+ #include <inttypes.h>
+
--- libmpeg2/motion_comp.c 2006-06-16 20:12:26.000000000 +0200
+++ libmpeg2/motion_comp.c 2006-06-16 20:12:50.000000000 +0200
-@@ -33,16 +37,22 @@
+@@ -33,34 +37,40 @@
void mpeg2_mc_init (uint32_t accel)
{
-#ifdef ARCH_X86
-+#ifdef HAVE_MMX2
++#if HAVE_MMX2
if (accel & MPEG2_ACCEL_X86_MMXEXT)
mpeg2_mc = mpeg2_mc_mmxext;
- else if (accel & MPEG2_ACCEL_X86_3DNOW)
+ else
+#endif
-+#ifdef HAVE_AMD3DNOW
++#if HAVE_AMD3DNOW
+ if (accel & MPEG2_ACCEL_X86_3DNOW)
mpeg2_mc = mpeg2_mc_3dnow;
- else if (accel & MPEG2_ACCEL_X86_MMX)
+ else
+#endif
-+#ifdef HAVE_MMX
++#if HAVE_MMX
+ if (accel & MPEG2_ACCEL_X86_MMX)
mpeg2_mc = mpeg2_mc_mmx;
else
#endif
-#ifdef ARCH_PPC
-+#ifdef HAVE_ALTIVEC
++#if HAVE_ALTIVEC
if (accel & MPEG2_ACCEL_PPC_ALTIVEC)
mpeg2_mc = mpeg2_mc_altivec;
else
-@@ -52,15 +62,15 @@
+ #endif
+-#ifdef ARCH_ALPHA
++#if ARCH_ALPHA
+ if (accel & MPEG2_ACCEL_ALPHA)
mpeg2_mc = mpeg2_mc_alpha;
else
#endif
-#ifdef ARCH_SPARC
-+#ifdef HAVE_VIS
++#if HAVE_VIS
if (accel & MPEG2_ACCEL_SPARC_VIS)
mpeg2_mc = mpeg2_mc_vis;
else
#endif
- #ifdef ARCH_ARM
+-#ifdef ARCH_ARM
++#if ARCH_ARM
- if (accel & MPEG2_ACCEL_ARM) {
+ if (accel & MPEG2_ACCEL_ARM)
mpeg2_mc = mpeg2_mc_arm;
@@ -171,6 +304,71 @@
#endif
mpeg2_mc = mpeg2_mc_c;
}
+Index: libmpeg2/motion_comp_alpha.c
+===================================================================
+--- libmpeg2/motion_comp_alpha.c (revision 28324)
++++ libmpeg2/motion_comp_alpha.c (revision 28325)
+@@ -22,7 +22,7 @@
+
+ #include "config.h"
+
+-#ifdef ARCH_ALPHA
++#if ARCH_ALPHA
+
+ #include <inttypes.h>
+
+Index: libmpeg2/motion_comp_altivec.c
+===================================================================
+--- libmpeg2/motion_comp_altivec.c (revision 28324)
++++ libmpeg2/motion_comp_altivec.c (revision 28325)
+@@ -23,7 +23,7 @@
+
+ #include "config.h"
+
+-#ifdef ARCH_PPC
++#if ARCH_PPC
+
+ #ifdef HAVE_ALTIVEC_H
+ #include <altivec.h>
+Index: libmpeg2/motion_comp_arm.c
+===================================================================
+--- libmpeg2/motion_comp_arm.c (revision 28324)
++++ libmpeg2/motion_comp_arm.c (revision 28325)
+@@ -22,7 +22,7 @@
+
+ #include "config.h"
+
+-#ifdef ARCH_ARM
++#if ARCH_ARM
+
+ #include <inttypes.h>
+
+Index: libmpeg2/motion_comp_mmx.c
+===================================================================
+--- libmpeg2/motion_comp_mmx.c (revision 28324)
++++ libmpeg2/motion_comp_mmx.c (revision 28325)
+@@ -23,7 +23,7 @@
+
+ #include "config.h"
+
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if ARCH_X86 || ARCH_X86_64
+
+ #include <inttypes.h>
+
+Index: libmpeg2/motion_comp_vis.c
+===================================================================
+--- libmpeg2/motion_comp_vis.c (revision 28324)
++++ libmpeg2/motion_comp_vis.c (revision 28325)
+@@ -22,7 +22,7 @@
+
+ #include "config.h"
+
+-#ifdef ARCH_SPARC
++#if ARCH_SPARC
+
+ #include <inttypes.h>
+
--- libmpeg2/mpeg2_internal.h 2006-06-16 20:12:26.000000000 +0200
+++ libmpeg2/mpeg2_internal.h 2006-06-16 20:12:50.000000000 +0200
@@ -152,6 +156,11 @@
@@ -195,6 +393,15 @@
};
typedef struct {
+@@ -226,7 +238,7 @@
+ };
+
+ typedef struct {
+-#ifdef ARCH_PPC
++#if ARCH_PPC
+ uint8_t regv[12*16];
+ #endif
+ int dummy;
--- libmpeg2/slice.c 2006-06-16 20:12:26.000000000 +0200
+++ libmpeg2/slice.c 2006-06-16 20:12:50.000000000 +0200
@@ -142,6 +146,7 @@
diff --git a/libpostproc/.svnrevision b/libpostproc/.svnrevision
index f8ba6ba..5883118 100644
--- a/libpostproc/.svnrevision
+++ b/libpostproc/.svnrevision
@@ -1 +1 @@
-17737
+18693
diff --git a/libswscale/.svnrevision b/libswscale/.svnrevision
new file mode 100644
index 0000000..440d0d6
--- /dev/null
+++ b/libswscale/.svnrevision
@@ -0,0 +1 @@
+28777
diff --git a/libvo/aclib.c b/libvo/aclib.c
index cae86dd..47c9dea 100644
--- a/libvo/aclib.c
+++ b/libvo/aclib.c
@@ -33,9 +33,6 @@
//Feel free to fine-tune the above 2, it might be possible to get some speedup with them :)
//#define STATISTICS
-#if ARCH_X86
-#define CAN_COMPILE_X86_ASM
-#endif
//Note: we have MMX, MMX2, 3DNOW version there is no 3DNOW+MMX2 one
//Plain C versions
@@ -43,7 +40,7 @@
//#define COMPILE_C
//#endif
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
#if (HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)
#define COMPILE_MMX
@@ -155,14 +152,14 @@
#include "aclib_template.c"
#endif
-#endif // CAN_COMPILE_X86_ASM
+#endif /* ARCH_X86 */
#undef fast_memcpy
void * fast_memcpy(void * to, const void * from, size_t len)
{
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered per speed fasterst first
if(gCpuCaps.hasSSE2)
fast_memcpy_SSE(to, from, len);
@@ -173,7 +170,7 @@ void * fast_memcpy(void * to, const void * from, size_t len)
else if(gCpuCaps.hasMMX)
fast_memcpy_MMX(to, from, len);
else
-#endif //CAN_COMPILE_X86_ASM
+#endif
memcpy(to, from, len); // prior to mmx we use the standart memcpy
#else
#if HAVE_SSE2
@@ -196,7 +193,7 @@ void * fast_memcpy(void * to, const void * from, size_t len)
void * mem2agpcpy(void * to, const void * from, size_t len)
{
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered per speed fasterst first
if(gCpuCaps.hasSSE2)
mem2agpcpy_SSE(to, from, len);
@@ -207,7 +204,7 @@ void * mem2agpcpy(void * to, const void * from, size_t len)
else if(gCpuCaps.hasMMX)
mem2agpcpy_MMX(to, from, len);
else
-#endif //CAN_COMPILE_X86_ASM
+#endif
memcpy(to, from, len); // prior to mmx we use the standart memcpy
#else
#if HAVE_SSE2
diff --git a/libvo/fastmemcpy.h b/libvo/fastmemcpy.h
index fa736b6..16767d9 100644
--- a/libvo/fastmemcpy.h
+++ b/libvo/fastmemcpy.h
@@ -23,20 +23,13 @@
#include <inttypes.h>
#include <string.h>
-#ifdef CONFIG_FASTMEMCPY
-#if HAVE_MMX || HAVE_MMX2 || HAVE_AMD3DNOW \
-/* || HAVE_SSE || HAVE_SSE2 */
+#if defined(CONFIG_FASTMEMCPY) && (HAVE_MMX || HAVE_MMX2 || HAVE_AMD3DNOW /* || HAVE_SSE || HAVE_SSE2 */)
#include <stddef.h>
void * fast_memcpy(void * to, const void * from, size_t len);
void * mem2agpcpy(void * to, const void * from, size_t len);
-#else /* HAVE_MMX/MMX2/3DNOW/SSE/SSE2 */
-#define mem2agpcpy(a,b,c) memcpy(a,b,c)
-#define fast_memcpy(a,b,c) memcpy(a,b,c)
-#endif
-
-#else /* CONFIG_FASTMEMCPY */
+#else
#define mem2agpcpy(a,b,c) memcpy(a,b,c)
#define fast_memcpy(a,b,c) memcpy(a,b,c)
#endif
diff --git a/libvo/font_load_ft.c b/libvo/font_load_ft.c
index ddb6af5..20d673a 100644
--- a/libvo/font_load_ft.c
+++ b/libvo/font_load_ft.c
@@ -56,8 +56,8 @@
#endif
char *subtitle_font_encoding = NULL;
-float text_font_scale_factor = 5.0;
-float osd_font_scale_factor = 6.0;
+float text_font_scale_factor = 3.5;
+float osd_font_scale_factor = 4.0;
float subtitle_font_radius = 2.0;
float subtitle_font_thickness = 2.0;
// 0 = no autoscale
diff --git a/libvo/osd.c b/libvo/osd.c
index 6660500..42dd4fc 100644
--- a/libvo/osd.c
+++ b/libvo/osd.c
@@ -30,10 +30,6 @@
#include "cpudetect.h"
#if ARCH_X86
-#define CAN_COMPILE_X86_ASM
-#endif
-
-#ifdef CAN_COMPILE_X86_ASM
static const uint64_t bFF __attribute__((aligned(8))) = 0xFFFFFFFFFFFFFFFFULL;
static const unsigned long long mask24lh __attribute__((aligned(8))) = 0xFFFF000000000000ULL;
static const unsigned long long mask24hl __attribute__((aligned(8))) = 0x0000FFFFFFFFFFFFULL;
@@ -45,7 +41,7 @@ static const unsigned long long mask24hl __attribute__((aligned(8))) = 0x0000FF
#define COMPILE_C
#endif
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
#if (HAVE_MMX && !HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)
#define COMPILE_MMX
@@ -58,7 +54,8 @@ static const unsigned long long mask24hl __attribute__((aligned(8))) = 0x0000FF
#if (HAVE_AMD3DNOW && !HAVE_MMX2) || defined (RUNTIME_CPUDETECT)
#define COMPILE_3DNOW
#endif
-#endif //CAN_COMPILE_X86_ASM
+
+#endif /* ARCH_X86 */
#undef HAVE_MMX
#undef HAVE_MMX2
@@ -67,7 +64,7 @@ static const unsigned long long mask24hl __attribute__((aligned(8))) = 0x0000FF
#define HAVE_MMX2 0
#define HAVE_AMD3DNOW 0
-#ifndef CAN_COMPILE_X86_ASM
+#if ! ARCH_X86
#ifdef COMPILE_C
#undef HAVE_MMX
@@ -134,11 +131,11 @@ static const unsigned long long mask24hl __attribute__((aligned(8))) = 0x0000FF
#include "osd_template.c"
#endif
-#endif //CAN_COMPILE_X86_ASM
+#endif /* ARCH_X86 */
void vo_draw_alpha_yv12(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered by speed / fastest first
if(gCpuCaps.hasMMX2)
vo_draw_alpha_yv12_MMX2(w, h, src, srca, srcstride, dstbase, dststride);
@@ -168,7 +165,7 @@ void vo_draw_alpha_yv12(int w,int h, unsigned char* src, unsigned char *srca, in
void vo_draw_alpha_yuy2(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered by speed / fastest first
if(gCpuCaps.hasMMX2)
vo_draw_alpha_yuy2_MMX2(w, h, src, srca, srcstride, dstbase, dststride);
@@ -198,7 +195,7 @@ void vo_draw_alpha_yuy2(int w,int h, unsigned char* src, unsigned char *srca, in
void vo_draw_alpha_uyvy(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered by speed / fastest first
if(gCpuCaps.hasMMX2)
vo_draw_alpha_uyvy_MMX2(w, h, src, srca, srcstride, dstbase, dststride);
@@ -228,7 +225,7 @@ void vo_draw_alpha_uyvy(int w,int h, unsigned char* src, unsigned char *srca, in
void vo_draw_alpha_rgb24(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered by speed / fastest first
if(gCpuCaps.hasMMX2)
vo_draw_alpha_rgb24_MMX2(w, h, src, srca, srcstride, dstbase, dststride);
@@ -258,7 +255,7 @@ void vo_draw_alpha_rgb24(int w,int h, unsigned char* src, unsigned char *srca, i
void vo_draw_alpha_rgb32(int w,int h, unsigned char* src, unsigned char *srca, int srcstride, unsigned char* dstbase,int dststride){
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered by speed / fastest first
if(gCpuCaps.hasMMX2)
vo_draw_alpha_rgb32_MMX2(w, h, src, srca, srcstride, dstbase, dststride);
@@ -303,7 +300,7 @@ void vo_draw_alpha_init(void){
if( mp_msg_test(MSGT_OSD,MSGL_V) )
{
#ifdef RUNTIME_CPUDETECT
-#ifdef CAN_COMPILE_X86_ASM
+#if ARCH_X86
// ordered per speed fasterst first
if(gCpuCaps.hasMMX2)
mp_msg(MSGT_OSD,MSGL_INFO,"Using MMX (with tiny bit MMX2) Optimized OnScreenDisplay\n");
diff --git a/libvo/spuenc.c b/libvo/spuenc.c
index 41303ae..7ce2d12 100644
--- a/libvo/spuenc.c
+++ b/libvo/spuenc.c
@@ -1,5 +1,5 @@
/*
- * subpic_encode.c - encodes a pixmap with RLE
+ * encode a pixmap with RLE
*
* Copyright (C) 2000 Alejandro J. Cura <alecu at protocultura.net>
*
diff --git a/libvo/spuenc.h b/libvo/spuenc.h
index 5f27680..5bc83b3 100644
--- a/libvo/spuenc.h
+++ b/libvo/spuenc.h
@@ -1,5 +1,5 @@
/*
- * subpic_encode.c - encodes a pixmap with RLE
+ * encode a pixmap with RLE
*
* Copyright (C) 2000 Alejandro J. Cura <alecu at protocultura.net>
*
diff --git a/libvo/video_out.c b/libvo/video_out.c
index 05d2291..fac5ed9 100644
--- a/libvo/video_out.c
+++ b/libvo/video_out.c
@@ -112,6 +112,7 @@ extern vo_functions_t video_out_mpegpes;
extern vo_functions_t video_out_yuv4mpeg;
extern vo_functions_t video_out_direct3d;
extern vo_functions_t video_out_directx;
+extern vo_functions_t video_out_kva;
extern vo_functions_t video_out_dxr2;
extern vo_functions_t video_out_dxr3;
extern vo_functions_t video_out_ivtv;
@@ -146,6 +147,9 @@ const vo_functions_t* const video_out_drivers[] =
#ifdef CONFIG_DIRECT3D
&video_out_direct3d,
#endif
+#ifdef CONFIG_KVA
+ &video_out_kva,
+#endif
#ifdef CONFIG_COREVIDEO
&video_out_macosx,
#endif
diff --git a/libvo/vo_aa.c b/libvo/vo_aa.c
index 5046a8b..514ad25 100644
--- a/libvo/vo_aa.c
+++ b/libvo/vo_aa.c
@@ -578,19 +578,19 @@ static int parse_suboptions(const char *arg) {
char *pseudoargv[4], *osdcolor = NULL, *subcolor = NULL, **strings,
*helpmsg = NULL;
int pseudoargc, displayhelp = 0, *booleans;
- opt_t extra_opts[] = {
- {"osdcolor", OPT_ARG_MSTRZ, &osdcolor, NULL, 0},
- {"subcolor", OPT_ARG_MSTRZ, &subcolor, NULL, 0},
- {"help", OPT_ARG_BOOL, &displayhelp, NULL, 0} };
+ const opt_t extra_opts[] = {
+ {"osdcolor", OPT_ARG_MSTRZ, &osdcolor, NULL},
+ {"subcolor", OPT_ARG_MSTRZ, &subcolor, NULL},
+ {"help", OPT_ARG_BOOL, &displayhelp, NULL} };
opt_t *subopts = NULL, *p;
- char *strings_list[] = {"-driver", "-kbddriver", "-mousedriver", "-font",
+ char * const strings_list[] = {"-driver", "-kbddriver", "-mousedriver", "-font",
"-width", "-height", "-minwidth", "-minheight", "-maxwidth",
"-maxheight", "-recwidth", "-recheight", "-bright", "-contrast",
"-gamma", "-dimmul", "-boldmul", "-random" };
- char *booleans_list[] = {"-dim", "-bold", "-reverse", "-normal",
+ char * const booleans_list[] = {"-dim", "-bold", "-reverse", "-normal",
"-boldfont", "-inverse", "-extended", "-eight", "-dither",
"-floyd_steinberg", "-error_distribution"};
- char *nobooleans_list[] = {"-nodim", "-nobold", "-noreverse", "-nonormal",
+ char * const nobooleans_list[] = {"-nodim", "-nobold", "-noreverse", "-nonormal",
"-noboldfont", "-noinverse", "-noextended", "-noeight", "-nodither",
"-nofloyd_steinberg", "-noerror_distribution"};
const int nstrings = sizeof(strings_list) / sizeof(char*);
diff --git a/libvo/vo_directfb2.c b/libvo/vo_directfb2.c
index 133f46a..7aafe09 100644
--- a/libvo/vo_directfb2.c
+++ b/libvo/vo_directfb2.c
@@ -175,7 +175,7 @@ static int preinit(const char *arg)
strarg_t mode_str = {0, NULL};
strarg_t par_str = {0, NULL};
strarg_t dfb_params = {0, NULL};
- opt_t subopts[] = {
+ const opt_t subopts[] = {
{"input", OPT_ARG_BOOL, &use_input, NULL},
{"buffermode", OPT_ARG_STR, &mode_str, check_mode},
{"fieldparity", OPT_ARG_STR, &par_str, check_parity},
diff --git a/libvo/vo_gif89a.c b/libvo/vo_gif89a.c
index b7a9894..b480b75 100644
--- a/libvo/vo_gif89a.c
+++ b/libvo/vo_gif89a.c
@@ -104,10 +104,10 @@ static char *gif_filename = NULL;
// the default output filename
#define DEFAULT_FILE "out.gif"
-static opt_t subopts[] = {
- {"output", OPT_ARG_MSTRZ, &gif_filename, NULL, 0},
- {"fps", OPT_ARG_FLOAT, &target_fps, NULL, 0},
- {NULL, 0, NULL, NULL, 0}
+static const opt_t subopts[] = {
+ {"output", OPT_ARG_MSTRZ, &gif_filename, NULL},
+ {"fps", OPT_ARG_FLOAT, &target_fps, NULL},
+ {NULL, 0, NULL, NULL}
};
static int preinit(const char *arg)
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c
index 0ffcab0..2fa0db5 100644
--- a/libvo/vo_gl.c
+++ b/libvo/vo_gl.c
@@ -76,6 +76,13 @@ static GLuint osdtex[MAX_OSD_PARTS];
static GLuint osdatex[MAX_OSD_PARTS];
#endif
static GLuint *eosdtex;
+#define LARGE_EOSD_TEX_SIZE 512
+#define TINYTEX_SIZE 16
+#define TINYTEX_COLS (LARGE_EOSD_TEX_SIZE/TINYTEX_SIZE)
+#define TINYTEX_MAX (TINYTEX_COLS*TINYTEX_COLS)
+#define SMALLTEX_SIZE 32
+#define SMALLTEX_COLS (LARGE_EOSD_TEX_SIZE/SMALLTEX_SIZE)
+#define SMALLTEX_MAX (SMALLTEX_COLS*SMALLTEX_COLS)
static GLuint largeeosdtex[2];
//! Display lists that draw the OSD parts
static GLuint osdDispList[MAX_OSD_PARTS];
@@ -284,6 +291,26 @@ static void clearEOSD(void) {
eosdtex = NULL;
}
+static void do_render_osd(int);
+
+static inline int is_tinytex(ass_image_t *i, int tinytexcur) {
+ return i->w < TINYTEX_SIZE && i->h < TINYTEX_SIZE && tinytexcur < TINYTEX_MAX;
+}
+
+static inline int is_smalltex(ass_image_t *i, int smalltexcur) {
+ return i->w < SMALLTEX_SIZE && i->h < SMALLTEX_SIZE && smalltexcur < SMALLTEX_MAX;
+}
+
+static inline void tinytex_pos(int tinytexcur, int *x, int *y) {
+ *x = (tinytexcur % TINYTEX_COLS) * TINYTEX_SIZE;
+ *y = (tinytexcur / TINYTEX_COLS) * TINYTEX_SIZE;
+}
+
+static inline void smalltex_pos(int smalltexcur, int *x, int *y) {
+ *x = (smalltexcur % SMALLTEX_COLS) * SMALLTEX_SIZE;
+ *y = (smalltexcur / SMALLTEX_COLS) * SMALLTEX_SIZE;
+}
+
/**
* \brief construct display list from ass image list
* \param img image list to create OSD from.
@@ -309,17 +336,17 @@ static void genEOSD(mp_eosd_images_t *imgs) {
if (!largeeosdtex[0]) {
glGenTextures(2, largeeosdtex);
BindTexture(gl_target, largeeosdtex[0]);
- glCreateClearTex(gl_target, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, scale_type, 512, 512, 0);
+ glCreateClearTex(gl_target, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, scale_type, LARGE_EOSD_TEX_SIZE, LARGE_EOSD_TEX_SIZE, 0);
BindTexture(gl_target, largeeosdtex[1]);
- glCreateClearTex(gl_target, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, scale_type, 512, 512, 0);
+ glCreateClearTex(gl_target, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, scale_type, LARGE_EOSD_TEX_SIZE, LARGE_EOSD_TEX_SIZE, 0);
}
for (i = img; i; i = i->next)
{
if (i->w <= 0 || i->h <= 0 || i->stride < i->w)
continue;
- if (i->w < 16 && i->h < 16 && tinytexcur < 1024)
+ if (is_tinytex(i, tinytexcur))
tinytexcur++;
- else if (i->w < 32 && i->h < 32 && smalltexcur < 256)
+ else if (is_smalltex(i, smalltexcur))
smalltexcur++;
else
eosdtexCnt++;
@@ -337,14 +364,12 @@ static void genEOSD(mp_eosd_images_t *imgs) {
mp_msg(MSGT_VO, MSGL_V, "Invalid dimensions OSD for part!\n");
continue;
}
- if (i->w < 16 && i->h < 16 && tinytexcur < 1024) {
- x = (tinytexcur & 31) << 4;
- y = (tinytexcur >> 5) << 4;
+ if (is_tinytex(i, tinytexcur)) {
+ tinytex_pos(tinytexcur, &x, &y);
BindTexture(gl_target, largeeosdtex[0]);
tinytexcur++;
- } else if (i->w < 32 && i->h < 32 && smalltexcur < 256) {
- x = (smalltexcur & 15) << 5;
- y = (smalltexcur >> 4) << 5;
+ } else if (is_smalltex(i, smalltexcur)) {
+ smalltex_pos(smalltexcur, &x, &y);
BindTexture(gl_target, largeeosdtex[1]);
smalltexcur++;
} else {
@@ -364,16 +389,14 @@ skip_upload:
if (i->w <= 0 || i->h <= 0 || i->stride < i->w)
continue;
glColor4ub(i->color >> 24, (i->color >> 16) & 0xff, (i->color >> 8) & 0xff, 255 - (i->color & 0xff));
- if (i->w < 16 && i->h < 16 && tinytexcur < 1024) {
- x = (tinytexcur & 31) << 4;
- y = (tinytexcur >> 5) << 4;
- sx = sy = 512;
+ if (is_tinytex(i, tinytexcur)) {
+ tinytex_pos(tinytexcur, &x, &y);
+ sx = sy = LARGE_EOSD_TEX_SIZE;
BindTexture(gl_target, largeeosdtex[0]);
tinytexcur++;
- } else if (i->w < 32 && i->h < 32 && smalltexcur < 256) {
- x = (smalltexcur & 15) << 5;
- y = (smalltexcur >> 4) << 5;
- sx = sy = 512;
+ } else if (is_smalltex(i, smalltexcur)) {
+ smalltex_pos(smalltexcur, &x, &y);
+ sx = sy = LARGE_EOSD_TEX_SIZE;
BindTexture(gl_target, largeeosdtex[1]);
smalltexcur++;
} else {
@@ -630,8 +653,6 @@ static void create_osd_texture(int x0, int y0, int w, int h,
osdtexCnt++;
}
-static void do_render_osd(void);
-
static void draw_osd(void)
{
if (!use_osd) return;
@@ -643,7 +664,7 @@ static void draw_osd(void)
vo_draw_text_ext(osd_w, osd_h, ass_border_x, ass_border_y, ass_border_x, ass_border_y,
image_width, image_height, create_osd_texture);
}
- if (vo_doublebuffering) do_render_osd();
+ if (vo_doublebuffering) do_render_osd(1);
}
static void do_render(void) {
@@ -662,8 +683,11 @@ static void do_render(void) {
glDisableYUVConversion(gl_target, yuvconvtype);
}
-static void do_render_osd(void) {
- if (osdtexCnt > 0 || eosdDispList) {
+/**
+ * \param type bit 0: render OSD, bit 1: render EOSD
+ */
+static void do_render_osd(int type) {
+ if (((type & 1) && osdtexCnt > 0) || ((type & 2) && eosdDispList)) {
// set special rendering parameters
if (!scaled_osd) {
glMatrixMode(GL_PROJECTION);
@@ -672,11 +696,11 @@ static void do_render_osd(void) {
glOrtho(0, vo_dwidth, vo_dheight, 0, -1, 1);
}
glEnable(GL_BLEND);
- if (eosdDispList) {
+ if ((type & 2) && eosdDispList) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glCallList(eosdDispList);
}
- if (osdtexCnt > 0) {
+ if ((type & 1) && osdtexCnt > 0) {
glColor4ub((osd_color >> 16) & 0xff, (osd_color >> 8) & 0xff, osd_color & 0xff, 0xff - (osd_color >> 24));
// draw OSD
#ifndef FAST_OSD
@@ -702,14 +726,14 @@ static void flip_page(void) {
glClear(GL_COLOR_BUFFER_BIT);
} else {
do_render();
- do_render_osd();
+ do_render_osd(3);
if (use_glFinish) glFinish();
else glFlush();
}
}
static void redraw(void) {
- if (vo_doublebuffering) { do_render(); do_render_osd(); }
+ if (vo_doublebuffering) { do_render(); do_render_osd(3); }
flip_page();
}
@@ -741,6 +765,9 @@ static uint32_t get_image(mp_image_t *mpi) {
return VO_FALSE;
}
if (mpi->flags & MP_IMGFLAG_READABLE) return VO_FALSE;
+ if (mpi->type != MP_IMGTYPE_STATIC && mpi->type != MP_IMGTYPE_TEMP &&
+ (mpi->type != MP_IMGTYPE_NUMBERED || mpi->number))
+ return VO_FALSE;
if (mesa_buffer) mpi->width = texture_width;
else if (ati_hack) {
mpi->width = texture_width;
@@ -949,7 +976,7 @@ uninit(void)
vo_uninit();
}
-static opt_t subopts[] = {
+static const opt_t subopts[] = {
{"manyfmts", OPT_ARG_BOOL, &many_fmts, NULL},
{"osd", OPT_ARG_BOOL, &use_osd, NULL},
{"scaled-osd", OPT_ARG_BOOL, &scaled_osd, NULL},
@@ -1113,6 +1140,7 @@ static int control(uint32_t request, void *data, ...)
if (!data)
return VO_FALSE;
genEOSD(data);
+ if (vo_doublebuffering) do_render_osd(2);
return VO_TRUE;
case VOCTRL_GET_EOSD_RES:
{
diff --git a/libvo/vo_gl2.c b/libvo/vo_gl2.c
index 28afc77..9509001 100644
--- a/libvo/vo_gl2.c
+++ b/libvo/vo_gl2.c
@@ -844,7 +844,7 @@ uninit(void)
vo_uninit();
}
-static opt_t subopts[] = {
+static const opt_t subopts[] = {
{"yuv", OPT_ARG_INT, &use_yuv, (opt_test_f)int_non_neg},
{"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL},
{NULL}
diff --git a/libvo/vo_ivtv.c b/libvo/vo_ivtv.c
index 05f3730..7dd9279 100644
--- a/libvo/vo_ivtv.c
+++ b/libvo/vo_ivtv.c
@@ -59,7 +59,7 @@ static vo_mpegpes_t *pes;
static int output = -1;
static char *device = NULL;
-static opt_t subopts[] = {
+static const opt_t subopts[] = {
{"output", OPT_ARG_INT, &output, (opt_test_f)int_non_neg},
{"device", OPT_ARG_MSTRZ, &device, NULL},
{NULL}
diff --git a/libvo/vo_jpeg.c b/libvo/vo_jpeg.c
index e1a397e..4ba5178 100644
--- a/libvo/vo_jpeg.c
+++ b/libvo/vo_jpeg.c
@@ -339,20 +339,20 @@ static int int_zero_hundred(int *val)
static int preinit(const char *arg)
{
- opt_t subopts[] = {
- {"progressive", OPT_ARG_BOOL, &jpeg_progressive_mode, NULL, 0},
- {"baseline", OPT_ARG_BOOL, &jpeg_baseline, NULL, 0},
+ const opt_t subopts[] = {
+ {"progressive", OPT_ARG_BOOL, &jpeg_progressive_mode, NULL},
+ {"baseline", OPT_ARG_BOOL, &jpeg_baseline, NULL},
{"optimize", OPT_ARG_INT, &jpeg_optimize,
- (opt_test_f)int_zero_hundred, 0},
+ (opt_test_f)int_zero_hundred},
{"smooth", OPT_ARG_INT, &jpeg_smooth,
- (opt_test_f)int_zero_hundred, 0},
+ (opt_test_f)int_zero_hundred},
{"quality", OPT_ARG_INT, &jpeg_quality,
- (opt_test_f)int_zero_hundred, 0},
- {"dpi", OPT_ARG_INT, &jpeg_dpi, NULL, 0},
- {"outdir", OPT_ARG_MSTRZ, &jpeg_outdir, NULL, 0},
- {"subdirs", OPT_ARG_MSTRZ, &jpeg_subdirs, NULL, 0},
- {"maxfiles", OPT_ARG_INT, &jpeg_maxfiles, (opt_test_f)int_pos, 0},
- {NULL, 0, NULL, NULL, 0}
+ (opt_test_f)int_zero_hundred},
+ {"dpi", OPT_ARG_INT, &jpeg_dpi, NULL},
+ {"outdir", OPT_ARG_MSTRZ, &jpeg_outdir, NULL},
+ {"subdirs", OPT_ARG_MSTRZ, &jpeg_subdirs, NULL},
+ {"maxfiles", OPT_ARG_INT, &jpeg_maxfiles, (opt_test_f)int_pos},
+ {NULL, 0, NULL, NULL}
};
const char *info_message = NULL;
diff --git a/libvo/vo_kva.c b/libvo/vo_kva.c
new file mode 100644
index 0000000..57df14b
--- /dev/null
+++ b/libvo/vo_kva.c
@@ -0,0 +1,1087 @@
+/*
+ * OS/2 video output driver
+ *
+ * Copyright (c) 2007-2009 by KO Myung-Hun (komh at chollian.net)
+ *
+ * This file is part of MPlayer.
+ *
+ * MPlayer is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * MPlayer 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#define INCL_WIN
+#define INCL_GPI
+#define INCL_DOS
+#include <os2.h>
+
+#include <mmioos2.h>
+#include <fourcc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+
+#include <kva.h>
+
+#include "config.h"
+#include "mp_msg.h"
+#include "help_mp.h"
+#include "video_out.h"
+#include "video_out_internal.h"
+#include "aspect.h"
+
+#include "fastmemcpy.h"
+#include "mp_fifo.h"
+#include "osdep/keycodes.h"
+#include "input/input.h"
+#include "input/mouse.h"
+#include "subopt-helper.h"
+#include "sub.h"
+
+#include "cpudetect.h"
+#include "libswscale/swscale.h"
+#include "libmpcodecs/vf_scale.h"
+
+static const vo_info_t info = {
+ "SNAP/WarpOverlay!/DIVE video output",
+ "kva",
+ "KO Myung-Hun <komh at chollian.net>",
+ ""
+};
+
+LIBVO_EXTERN(kva)
+
+#define WC_MPLAYER "WC_MPLAYER"
+
+#define SRC_WIDTH m_int.kvas.szlSrcSize.cx
+#define SRC_HEIGHT m_int.kvas.szlSrcSize.cy
+
+#define HWNDFROMWINID(wid) ((wid) + 0x80000000UL)
+
+static const struct keymap m_vk_map[] = {
+ {VK_NEWLINE, KEY_ENTER}, {VK_TAB, KEY_TAB}, {VK_SPACE, ' '},
+
+ // control keys
+ {VK_CTRL, KEY_CTRL}, {VK_BACKSPACE, KEY_BS},
+ {VK_DELETE, KEY_DELETE}, {VK_INSERT, KEY_INSERT},
+ {VK_HOME, KEY_HOME}, {VK_END, KEY_END},
+ {VK_PAGEUP, KEY_PAGE_UP}, {VK_PAGEDOWN, KEY_PAGE_DOWN},
+ {VK_ESC, KEY_ESC},
+
+ // cursor keys
+ {VK_RIGHT, KEY_RIGHT}, {VK_LEFT, KEY_LEFT},
+ {VK_DOWN, KEY_DOWN}, {VK_UP, KEY_UP},
+
+ // function keys
+ {VK_F1, KEY_F+1}, {VK_F2, KEY_F+2}, {VK_F3, KEY_F+3}, {VK_F4, KEY_F+4},
+ {VK_F5, KEY_F+5}, {VK_F6, KEY_F+6}, {VK_F7, KEY_F+7}, {VK_F8, KEY_F+8},
+ {VK_F9, KEY_F+9}, {VK_F10, KEY_F+10}, {VK_F11, KEY_F+11}, {VK_F12, KEY_F+12},
+
+ {0, 0}
+};
+
+static const struct keymap m_keypad_map[] = {
+ // keypad keys
+ {0x52, KEY_KP0}, {0x4F, KEY_KP1}, {0x50, KEY_KP2}, {0x51, KEY_KP3},
+ {0x4B, KEY_KP4}, {0x4C, KEY_KP5}, {0x4D, KEY_KP6}, {0x47, KEY_KP7},
+ {0x48, KEY_KP8}, {0x49, KEY_KP9}, {0x53, KEY_KPDEC}, {0x5A, KEY_KPENTER},
+
+ {0, 0}
+};
+
+static const struct keymap m_mouse_map[] = {
+ {WM_BUTTON1DOWN, MOUSE_BTN0},
+ {WM_BUTTON3DOWN, MOUSE_BTN1},
+ {WM_BUTTON2DOWN, MOUSE_BTN2},
+ {WM_BUTTON1DBLCLK, MOUSE_BTN0_DBL},
+ {WM_BUTTON3DBLCLK, MOUSE_BTN1_DBL},
+ {WM_BUTTON2DBLCLK, MOUSE_BTN2_DBL},
+
+ {0, 0}
+};
+
+struct {
+ HAB hab;
+ HMQ hmq;
+ HWND hwndFrame;
+ HWND hwndClient;
+ HWND hwndSysMenu;
+ HWND hwndTitleBar;
+ HWND hwndMinMax;
+ FOURCC fcc;
+ int iImageFormat;
+ int nChromaShift;
+ KVASETUP kvas;
+ KVACAPS kvac;
+ RECTL rclDst;
+ int bpp;
+ LONG lStride;
+ PBYTE pbImage;
+ BOOL fFixT23;
+ PFNWP pfnwpOldFrame;
+ uint8_t *planes[3]; // y = 0, u = 1, v = 2
+ int stride[3];
+ BOOL fHWAccel;
+ RECTL rclParent;
+ struct SwsContext *sws;
+} m_int;
+
+static inline void setAspectRatio(ULONG ulRatio)
+{
+ m_int.kvas.ulRatio = ulRatio;
+ kvaSetup(&m_int.kvas);
+}
+
+static int query_format_info(int format, PBOOL pfHWAccel, PFOURCC pfcc,
+ int *pbpp, int *pnChromaShift)
+{
+ BOOL fHWAccel;
+ FOURCC fcc;
+ INT bpp;
+ INT nChromaShift;
+
+ switch (format) {
+ case IMGFMT_YV12:
+ fHWAccel = m_int.kvac.ulInputFormatFlags & KVAF_YV12;
+ fcc = FOURCC_YV12;
+ bpp = 1;
+ nChromaShift = 1;
+ break;
+
+ case IMGFMT_YUY2:
+ fHWAccel = m_int.kvac.ulInputFormatFlags & KVAF_YUY2;
+ fcc = FOURCC_Y422;
+ bpp = 2;
+ nChromaShift = 0;
+ break;
+
+ case IMGFMT_YVU9:
+ fHWAccel = m_int.kvac.ulInputFormatFlags & KVAF_YVU9;
+ fcc = FOURCC_YVU9;
+ bpp = 1;
+ nChromaShift = 2;
+ break;
+
+ case IMGFMT_BGR24:
+ fHWAccel = m_int.kvac.ulInputFormatFlags & KVAF_BGR24;
+ fcc = FOURCC_BGR3;
+ bpp = 3;
+ nChromaShift = 0;
+ break;
+
+ case IMGFMT_BGR16:
+ fHWAccel = m_int.kvac.ulInputFormatFlags & KVAF_BGR16;
+ fcc = FOURCC_R565;
+ bpp = 2;
+ nChromaShift = 0;
+ break;
+
+ case IMGFMT_BGR15:
+ fHWAccel = m_int.kvac.ulInputFormatFlags & KVAF_BGR15;
+ fcc = FOURCC_R555;
+ bpp = 2;
+ nChromaShift = 0;
+ break;
+
+ default:
+ return 1;
+ }
+
+ if (pfHWAccel)
+ *pfHWAccel = fHWAccel;
+
+ if (pfcc)
+ *pfcc = fcc;
+
+ if (pbpp)
+ *pbpp = bpp;
+
+ if (pnChromaShift)
+ *pnChromaShift = nChromaShift;
+
+ return 0;
+}
+
+static void imgCreate(void)
+{
+ int size = SRC_HEIGHT * m_int.lStride;;
+
+ switch (m_int.iImageFormat) {
+ case IMGFMT_YV12:
+ size += size / 2;
+ break;
+
+ case IMGFMT_YVU9:
+ size += size / 8;
+ break;
+ }
+
+ m_int.pbImage = malloc(size);
+
+ m_int.planes[0] = m_int.pbImage;
+ m_int.stride[0] = m_int.lStride;
+
+ // YV12 or YVU9 ?
+ if (m_int.nChromaShift) {
+ m_int.planes[1] = m_int.planes[0] + SRC_HEIGHT * m_int.stride[0];
+ m_int.stride[1] = m_int.stride[0] >> m_int.nChromaShift;
+
+ m_int.planes[2] = m_int.planes[1] +
+ (SRC_HEIGHT >> m_int.nChromaShift) * m_int.stride[1];
+ m_int.stride[2] = m_int.stride[1];
+ }
+}
+
+static void imgFree(void)
+{
+ free(m_int.pbImage);
+
+ m_int.pbImage = NULL;
+}
+
+static void imgDisplay(void)
+{
+ PVOID pBuffer;
+ ULONG ulBPL;
+
+ if (!kvaLockBuffer(&pBuffer, &ulBPL)) {
+ uint8_t *dst[3];
+ int dstStride[3];
+
+ // Get packed or Y
+ dst[0] = pBuffer;
+ dstStride[0] = ulBPL;
+
+ // YV12 or YVU9 ?
+ if (m_int.nChromaShift) {
+ // Get V
+ dst[2] = dst[0] + SRC_HEIGHT * dstStride[0];
+ dstStride[2] = dstStride[0] >> m_int.nChromaShift;
+
+ // Get U
+ dst[1] = dst[2] +
+ (SRC_HEIGHT >> m_int.nChromaShift ) * dstStride[2];
+ dstStride[1] = dstStride[2];
+ }
+
+ if (m_int.fHWAccel) {
+ int w, h;
+
+ w = m_int.stride[0];
+ h = SRC_HEIGHT;
+
+ // Copy packed or Y
+ mem2agpcpy_pic(dst[0], m_int.planes[0], w, h,
+ dstStride[0], m_int.stride[0]);
+
+ // YV12 or YVU9 ?
+ if (m_int.nChromaShift) {
+ w >>= m_int.nChromaShift; h >>= m_int.nChromaShift;
+
+ // Copy U
+ mem2agpcpy_pic(dst[1], m_int.planes[1], w, h,
+ dstStride[1], m_int.stride[1]);
+
+ // Copy V
+ mem2agpcpy_pic(dst[2], m_int.planes[2], w, h,
+ dstStride[2], m_int.stride[2]);
+ }
+ } else {
+ sws_scale(m_int.sws, m_int.planes, m_int.stride, 0, SRC_HEIGHT,
+ dst, dstStride);
+ }
+
+ kvaUnlockBuffer();
+ }
+}
+
+// Frame window procedure to work around T23 laptop with S3 video card,
+// which supports upscaling only.
+static MRESULT EXPENTRY NewFrameWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
+ MPARAM mp2)
+{
+ switch (msg) {
+ case WM_QUERYTRACKINFO:
+ {
+ PTRACKINFO pti = (PTRACKINFO)mp2;
+ RECTL rcl;
+
+ if (vo_fs)
+ break;
+
+ m_int.pfnwpOldFrame(hwnd, msg, mp1, mp2);
+
+ rcl.xLeft = 0;
+ rcl.yBottom = 0;
+ rcl.xRight = SRC_WIDTH + 1;
+ rcl.yTop = SRC_HEIGHT + 1;
+
+ WinCalcFrameRect(hwnd, &rcl, FALSE);
+
+ pti->ptlMinTrackSize.x = rcl.xRight - rcl.xLeft;
+ pti->ptlMinTrackSize.y = rcl.yTop - rcl.yBottom;
+
+ pti->ptlMaxTrackSize.x = vo_screenwidth;
+ pti->ptlMaxTrackSize.y = vo_screenheight;
+
+ return (MRESULT)TRUE;
+ }
+
+ case WM_ADJUSTWINDOWPOS:
+ {
+ PSWP pswp = (PSWP)mp1;
+ RECTL rcl;
+
+ if (vo_fs)
+ break;
+
+ if (pswp->fl & SWP_SIZE) {
+ rcl.xLeft = pswp->x;
+ rcl.yBottom = pswp->y;
+ rcl.xRight = rcl.xLeft + pswp->cx;
+ rcl.yTop = rcl.yBottom + pswp->cy;
+
+ WinCalcFrameRect(hwnd, &rcl, TRUE);
+
+ if (rcl.xRight - rcl.xLeft <= SRC_WIDTH)
+ rcl.xRight = rcl.xLeft + (SRC_WIDTH + 1);
+
+ if (rcl.yTop - rcl.yBottom <= SRC_HEIGHT)
+ rcl.yTop = rcl.yBottom + (SRC_HEIGHT + 1);
+
+ WinCalcFrameRect(hwnd, &rcl, FALSE);
+
+ if (rcl.xRight - rcl.xLeft > vo_screenwidth) {
+ rcl.xLeft = 0;
+ rcl.xRight = vo_screenwidth;
+ }
+
+ if (rcl.yTop - rcl.yBottom > vo_screenheight) {
+ rcl.yBottom = 0;
+ rcl.yTop = vo_screenheight;
+ }
+
+ pswp->fl |= SWP_MOVE;
+ pswp->x = rcl.xLeft;
+ pswp->y = rcl.yBottom;
+ pswp->cx = rcl.xRight - rcl.xLeft;
+ pswp->cy = rcl.yTop - rcl.yBottom;
+ }
+ break;
+ }
+ }
+
+ return m_int.pfnwpOldFrame(hwnd, msg, mp1, mp2);
+}
+
+static MRESULT EXPENTRY WndProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
+{
+ // if slave mode, ignore mouse events and deliver them to a parent window
+ if (WinID != -1 &&
+ ((msg >= WM_MOUSEFIRST && msg <= WM_MOUSELAST) ||
+ (msg >= WM_EXTMOUSEFIRST && msg <= WM_EXTMOUSELAST))) {
+ WinPostMsg(HWNDFROMWINID(WinID), msg, mp1, mp2);
+
+ return (MRESULT)TRUE;
+ }
+
+ switch (msg) {
+ case WM_CLOSE:
+ mplayer_put_key(KEY_CLOSE_WIN);
+
+ return 0;
+
+ case WM_CHAR:
+ {
+ USHORT fsFlags = SHORT1FROMMP(mp1);
+ UCHAR uchScan = CHAR4FROMMP(mp1);
+ USHORT usCh = SHORT1FROMMP(mp2);
+ USHORT usVk = SHORT2FROMMP(mp2);
+ int mpkey;
+
+ if (fsFlags & KC_KEYUP)
+ break;
+
+ if (fsFlags & KC_SCANCODE) {
+ mpkey = lookup_keymap_table(m_keypad_map, uchScan);
+ if (mpkey) {
+ // distinguish KEY_KP0 and KEY_KPINS
+ if (mpkey == KEY_KP0 && usCh != '0')
+ mpkey = KEY_KPINS;
+
+ // distinguish KEY_KPDEC and KEY_KPDEL
+ if (mpkey == KEY_KPDEC && usCh != '.')
+ mpkey = KEY_KPDEL;
+
+ mplayer_put_key(mpkey);
+
+ return (MRESULT)TRUE;
+ }
+ }
+
+ if (fsFlags & KC_VIRTUALKEY) {
+ mpkey = lookup_keymap_table(m_vk_map, usVk);
+ if (mpkey) {
+ mplayer_put_key(mpkey);
+
+ return (MRESULT)TRUE;
+ }
+ }
+
+ if ((fsFlags & KC_CHAR) && !HIBYTE(usCh))
+ mplayer_put_key(usCh);
+
+ return (MRESULT)TRUE;
+ }
+
+ case WM_BUTTON1DOWN:
+ case WM_BUTTON3DOWN:
+ case WM_BUTTON2DOWN:
+ case WM_BUTTON1DBLCLK:
+ case WM_BUTTON3DBLCLK:
+ case WM_BUTTON2DBLCLK:
+ if (WinQueryFocus(HWND_DESKTOP) != hwnd)
+ WinSetFocus(HWND_DESKTOP, hwnd);
+ else if (!vo_nomouse_input)
+ mplayer_put_key(lookup_keymap_table(m_mouse_map, msg));
+
+ return (MRESULT)TRUE;
+
+ case WM_PAINT:
+ {
+ HPS hps;
+ RECTL rcl, rclDst;
+ PRECTL prcl = NULL;
+ HRGN hrgn, hrgnDst;
+ RGNRECT rgnCtl;
+
+ // get a current movie area
+ kvaAdjustDstRect(&m_int.kvas.rclSrcRect, &rclDst);
+
+ // get a current invalidated area
+ hps = WinBeginPaint(hwnd, NULLHANDLE, &rcl);
+
+ // create a region for an invalidated area
+ hrgn = GpiCreateRegion(hps, 1, &rcl);
+ // create a region for a movie area
+ hrgnDst = GpiCreateRegion(hps, 1, &rclDst);
+
+ // exclude a movie area from an invalidated area
+ GpiCombineRegion(hps, hrgn, hrgn, hrgnDst, CRGN_DIFF);
+
+ // get rectangles from the region
+ rgnCtl.ircStart = 1;
+ rgnCtl.ulDirection = RECTDIR_LFRT_TOPBOT;
+ GpiQueryRegionRects(hps, hrgn, NULL, &rgnCtl, NULL);
+
+ if (rgnCtl.crcReturned > 0) {
+ rgnCtl.crc = rgnCtl.crcReturned;
+ prcl = malloc(sizeof(RECTL) * rgnCtl.crcReturned);
+ }
+
+ // draw black bar if needed
+ if (prcl && GpiQueryRegionRects(hps, hrgn, NULL, &rgnCtl, prcl)) {
+ int i;
+
+ for (i = 0; i < rgnCtl.crcReturned; i++)
+ WinFillRect(hps, &prcl[i], CLR_BLACK);
+ }
+
+ free(prcl);
+
+ GpiDestroyRegion(hps, hrgnDst);
+ GpiDestroyRegion(hps, hrgn);
+
+ WinEndPaint(hps);
+
+ return 0;
+ }
+ }
+
+ return WinDefWindowProc(hwnd, msg, mp1, mp2);
+}
+
+// Change process type from VIO to PM to use PM APIs.
+static void morphToPM(void)
+{
+ PPIB pib;
+
+ DosGetInfoBlocks(NULL, &pib);
+
+ // Change flag from VIO to PM:
+ if (pib->pib_ultype == 2)
+ pib->pib_ultype = 3;
+}
+
+static int preinit(const char *arg)
+{
+ HWND hwndParent;
+ ULONG flFrameFlags;
+ ULONG kvaMode = 0;
+
+ int fUseSnap = 0;
+ int fUseWO = 0;
+ int fUseDive = 0;
+ int fFixT23 = 0;
+
+ const opt_t subopts[] = {
+ {"snap", OPT_ARG_BOOL, &fUseSnap, NULL},
+ {"wo", OPT_ARG_BOOL, &fUseWO, NULL},
+ {"dive", OPT_ARG_BOOL, &fUseDive, NULL},
+ {"t23", OPT_ARG_BOOL, &fFixT23, NULL},
+ {NULL, 0, NULL, NULL}
+ };
+
+ PCSZ pcszVideoModeStr[3] = {"DIVE", "WarpOverlay!", "SNAP"};
+
+ if (subopt_parse(arg, subopts) != 0)
+ return -1;
+
+ morphToPM();
+
+ memset(&m_int, 0, sizeof(m_int));
+
+ m_int.hab = WinInitialize(0);
+ m_int.hmq = WinCreateMsgQueue(m_int.hab, 0);
+
+ WinRegisterClass(m_int.hab,
+ WC_MPLAYER,
+ WndProc,
+ CS_SIZEREDRAW | CS_MOVENOTIFY,
+ sizeof(PVOID));
+
+ if (WinID == -1) {
+ hwndParent = HWND_DESKTOP;
+ flFrameFlags = FCF_SYSMENU | FCF_TITLEBAR | FCF_MINMAX |
+ FCF_SIZEBORDER | FCF_TASKLIST;
+ } else {
+ hwndParent = HWNDFROMWINID(WinID);
+ flFrameFlags = 0;
+ }
+
+ m_int.hwndFrame =
+ WinCreateStdWindow(hwndParent, // parent window handle
+ WS_VISIBLE, // frame window style
+ &flFrameFlags, // window style
+ WC_MPLAYER, // class name
+ "", // window title
+ 0L, // default client style
+ NULLHANDLE, // resource in exe file
+ 1, // frame window id
+ &m_int.hwndClient); // client window handle
+
+ if (m_int.hwndFrame == NULLHANDLE)
+ return -1;
+
+ m_int.hwndSysMenu = WinWindowFromID(m_int.hwndFrame, FID_SYSMENU);
+ m_int.hwndTitleBar = WinWindowFromID(m_int.hwndFrame, FID_TITLEBAR);
+ m_int.hwndMinMax = WinWindowFromID(m_int.hwndFrame, FID_MINMAX);
+
+ m_int.fFixT23 = fFixT23;
+
+ if (m_int.fFixT23)
+ m_int.pfnwpOldFrame = WinSubclassWindow(m_int.hwndFrame,
+ NewFrameWndProc);
+
+ if (!!fUseSnap + !!fUseWO + !!fUseDive > 1)
+ mp_msg(MSGT_VO, MSGL_WARN,"KVA: Multiple mode specified!!!\n");
+
+ if (fUseSnap)
+ kvaMode = KVAM_SNAP;
+ else if (fUseWO)
+ kvaMode = KVAM_WO;
+ else if (fUseDive)
+ kvaMode = KVAM_DIVE;
+ else
+ kvaMode = KVAM_AUTO;
+
+ if (kvaInit(kvaMode, m_int.hwndClient, vo_colorkey)) {
+ mp_msg(MSGT_VO, MSGL_ERR, "KVA: Init failed!!!\n");
+
+ return -1;
+ }
+
+ kvaCaps(&m_int.kvac);
+
+ mp_msg(MSGT_VO, MSGL_V, "KVA: Selected video mode = %s\n",
+ pcszVideoModeStr[m_int.kvac.ulMode - 1]);
+
+ kvaDisableScreenSaver();
+
+ // Might cause PM DLLs to be loaded which incorrectly enable SIG_FPE,
+ // so mask off all floating-point exceptions.
+ _control87(MCW_EM, MCW_EM);
+
+ return 0;
+}
+
+static void uninit(void)
+{
+ kvaEnableScreenSaver();
+
+ imgFree();
+
+ sws_freeContext(m_int.sws);
+
+ if (m_int.hwndFrame != NULLHANDLE) {
+ kvaResetAttr();
+ kvaDone();
+
+ if (m_int.fFixT23)
+ WinSubclassWindow(m_int.hwndFrame, m_int.pfnwpOldFrame);
+
+ WinDestroyWindow(m_int.hwndFrame);
+ }
+
+ WinDestroyMsgQueue(m_int.hmq);
+ WinTerminate(m_int.hab);
+}
+
+static int config(uint32_t width, uint32_t height,
+ uint32_t d_width, uint32_t d_height,
+ uint32_t flags, char *title, uint32_t format)
+{
+ RECTL rcl;
+
+ mp_msg(MSGT_VO, MSGL_V,
+ "KVA: Using 0x%X (%s) image format, vo_config_count = %d\n",
+ format, vo_format_name(format), vo_config_count);
+
+ imgFree();
+
+ if (query_format_info(format, &m_int.fHWAccel, &m_int.fcc, &m_int.bpp,
+ &m_int.nChromaShift))
+ return 1;
+
+ m_int.iImageFormat = format;
+
+ // if there is no hw accel for given format,
+ // try any format supported by hw accel
+ if (!m_int.fHWAccel) {
+ int dstFormat = 0;
+
+ sws_freeContext(m_int.sws);
+
+ if (m_int.kvac.ulInputFormatFlags & KVAF_YV12)
+ dstFormat = IMGFMT_YV12;
+ else if (m_int.kvac.ulInputFormatFlags & KVAF_YUY2)
+ dstFormat = IMGFMT_YUY2;
+ else if (m_int.kvac.ulInputFormatFlags & KVAF_YVU9)
+ dstFormat = IMGFMT_YVU9;
+ else if (m_int.kvac.ulInputFormatFlags & KVAF_BGR24)
+ dstFormat = IMGFMT_BGR24;
+ else if (m_int.kvac.ulInputFormatFlags & KVAF_BGR16)
+ dstFormat = IMGFMT_BGR16;
+ else if (m_int.kvac.ulInputFormatFlags & KVAF_BGR15)
+ dstFormat = IMGFMT_BGR15;
+
+ if (query_format_info(dstFormat, NULL, &m_int.fcc, NULL, NULL))
+ return 1;
+
+ m_int.sws = sws_getContextFromCmdLine(width, height, format,
+ width, height, dstFormat);
+ }
+
+ mp_msg(MSGT_VO, MSGL_V, "KVA: Selected FOURCC = %.4s\n", (char *)&m_int.fcc);
+
+ m_int.kvas.ulLength = sizeof(KVASETUP);
+ m_int.kvas.szlSrcSize.cx = width;
+ m_int.kvas.szlSrcSize.cy = height;
+ m_int.kvas.rclSrcRect.xLeft = 0;
+ m_int.kvas.rclSrcRect.yTop = 0;
+ m_int.kvas.rclSrcRect.xRight = width;
+ m_int.kvas.rclSrcRect.yBottom = height;
+ m_int.kvas.ulRatio = vo_keepaspect ? KVAR_FORCEANY : KVAR_NONE;
+ m_int.kvas.ulAspectWidth = d_width;
+ m_int.kvas.ulAspectHeight = d_height;
+ m_int.kvas.fccSrcColor = m_int.fcc;
+ m_int.kvas.fDither = TRUE;
+
+ if (kvaSetup(&m_int.kvas)) {
+ mp_msg(MSGT_VO, MSGL_ERR, "KVA: Setup failed!!!\n");
+
+ return 1;
+ }
+
+ m_int.lStride = width * m_int.bpp;
+
+ imgCreate();
+
+ if (WinID == -1) {
+ WinSetWindowText(m_int.hwndFrame, title);
+
+ // initialize 'vo_fs' only once at first config() call
+ if (vo_config_count == 0)
+ vo_fs = flags & VOFLAG_FULLSCREEN;
+
+ // workaround for T23 laptop with S3 Video by Franz Bakan
+ if (!vo_fs && m_int.fFixT23) {
+ d_width++;
+ d_height++;
+ }
+
+ m_int.rclDst.xLeft = ((LONG)vo_screenwidth - (LONG)d_width) / 2;
+ m_int.rclDst.yBottom = ((LONG)vo_screenheight - (LONG)d_height) / 2;
+ m_int.rclDst.xRight = m_int.rclDst.xLeft + d_width;
+ m_int.rclDst.yTop = m_int.rclDst.yBottom + d_height;
+
+ if (vo_fs) {
+ d_width = vo_screenwidth;
+ d_height = vo_screenheight;
+
+ // when -fs option is used without this, title bar is not highlighted
+ WinSetActiveWindow(HWND_DESKTOP, m_int.hwndFrame);
+
+ WinSetParent(m_int.hwndSysMenu, HWND_OBJECT, FALSE);
+ WinSetParent(m_int.hwndTitleBar, HWND_OBJECT, FALSE);
+ WinSetParent(m_int.hwndMinMax, HWND_OBJECT, FALSE);
+
+ setAspectRatio(KVAR_FORCEANY);
+ }
+
+ rcl.xLeft = ((LONG)vo_screenwidth - (LONG)d_width) / 2;
+ rcl.yBottom = ((LONG)vo_screenheight - (LONG)d_height) /2 ;
+ rcl.xRight = rcl.xLeft + d_width;
+ rcl.yTop = rcl.yBottom + d_height;
+ } else {
+ vo_fs = 0;
+
+ WinQueryWindowRect(HWNDFROMWINID(WinID), &m_int.rclDst);
+ rcl = m_int.rclDst;
+ }
+
+ WinCalcFrameRect(m_int.hwndFrame, &rcl, FALSE);
+
+ WinSetWindowPos(m_int.hwndFrame, HWND_TOP,
+ rcl.xLeft, rcl.yBottom,
+ rcl.xRight - rcl.xLeft, rcl.yTop - rcl.yBottom,
+ SWP_SIZE | SWP_MOVE | SWP_ZORDER | SWP_SHOW |
+ (WinID == -1 ? SWP_ACTIVATE : 0));
+
+ WinInvalidateRect(m_int.hwndFrame, NULL, TRUE);
+
+ return 0;
+}
+
+static uint32_t get_image(mp_image_t *mpi)
+{
+ if (m_int.iImageFormat != mpi->imgfmt)
+ return VO_FALSE;
+
+ if (mpi->type == MP_IMGTYPE_STATIC || mpi->type == MP_IMGTYPE_TEMP) {
+ if (mpi->flags & MP_IMGFLAG_PLANAR) {
+ mpi->planes[1] = m_int.planes[1];
+ mpi->planes[2] = m_int.planes[2];
+
+ mpi->stride[1] = m_int.stride[1];
+ mpi->stride[2] = m_int.stride[2];
+ }
+
+ mpi->planes[0] = m_int.planes[0];
+ mpi->stride[0] = m_int.stride[0];
+ mpi->flags |= MP_IMGFLAG_DIRECT;
+
+ return VO_TRUE;
+ }
+
+ return VO_FALSE;
+}
+
+static uint32_t draw_image(mp_image_t *mpi)
+{
+ // if -dr or -slices then do nothing:
+ if (mpi->flags & (MP_IMGFLAG_DIRECT | MP_IMGFLAG_DRAW_CALLBACK))
+ return VO_TRUE;
+
+ draw_slice(mpi->planes, mpi->stride, mpi->w, mpi->h, mpi->x, mpi->y);
+
+ return VO_TRUE;
+}
+
+static int query_format(uint32_t format)
+{
+ BOOL fHWAccel;
+ int res;
+
+ if (query_format_info(format, &fHWAccel, NULL, NULL, NULL))
+ return 0;
+
+ res = VFCAP_CSP_SUPPORTED | VFCAP_OSD;
+ if (fHWAccel) {
+ res |= VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_HWSCALE_UP;
+
+ if (!m_int.fFixT23)
+ res |= VFCAP_HWSCALE_DOWN;
+ }
+
+ return res;
+}
+
+static int fs_toggle(void)
+{
+ RECTL rcl;
+
+ vo_fs = !vo_fs;
+
+ if (vo_fs) {
+ SWP swp;
+
+ WinQueryWindowPos(m_int.hwndFrame, &swp);
+ m_int.rclDst.xLeft = swp.x;
+ m_int.rclDst.yBottom = swp.y;
+ m_int.rclDst.xRight = m_int.rclDst.xLeft + swp.cx;
+ m_int.rclDst.yTop = m_int.rclDst.yBottom + swp.cy;
+ WinCalcFrameRect(m_int.hwndFrame, &m_int.rclDst, TRUE);
+
+ if (WinID != -1)
+ WinSetParent(m_int.hwndFrame, HWND_DESKTOP, FALSE);
+
+ WinSetParent(m_int.hwndSysMenu, HWND_OBJECT, FALSE);
+ WinSetParent(m_int.hwndTitleBar, HWND_OBJECT, FALSE);
+ WinSetParent(m_int.hwndMinMax, HWND_OBJECT, FALSE);
+
+ rcl.xLeft = 0;
+ rcl.yBottom = 0;
+ rcl.xRight = vo_screenwidth;
+ rcl.yTop = vo_screenheight;
+
+ setAspectRatio(KVAR_FORCEANY);
+ } else {
+ if (WinID != -1)
+ WinSetParent(m_int.hwndFrame, HWNDFROMWINID(WinID), TRUE);
+
+ WinSetParent(m_int.hwndSysMenu, m_int.hwndFrame, FALSE);
+ WinSetParent(m_int.hwndTitleBar, m_int.hwndFrame, FALSE);
+ WinSetParent(m_int.hwndMinMax, m_int.hwndFrame, FALSE);
+
+ rcl = m_int.rclDst;
+
+ setAspectRatio(vo_keepaspect ? KVAR_FORCEANY : KVAR_NONE);
+ }
+
+ WinCalcFrameRect(m_int.hwndFrame, &rcl, FALSE);
+
+ WinSetWindowPos(m_int.hwndFrame, HWND_TOP,
+ rcl.xLeft, rcl.yBottom,
+ rcl.xRight - rcl.xLeft, rcl.yTop - rcl.yBottom,
+ SWP_SIZE | SWP_MOVE | SWP_ZORDER | SWP_SHOW |
+ (WinID == -1 ? SWP_ACTIVATE : 0));
+
+ return VO_TRUE;
+}
+
+static int color_ctrl_set(char *what, int value)
+{
+ ULONG ulAttr;
+ ULONG ulValue;
+
+ if (!strcmp(what, "brightness"))
+ ulAttr = KVAA_BRIGHTNESS;
+ else if (!strcmp(what, "contrast"))
+ ulAttr = KVAA_CONTRAST;
+ else if (!strcmp(what, "hue"))
+ ulAttr = KVAA_HUE;
+ else if (!strcmp(what, "saturation"))
+ ulAttr = KVAA_SATURATION;
+ else
+ return VO_NOTIMPL;
+
+ ulValue = (value + 100) * 255 / 200;
+
+ if (kvaSetAttr(ulAttr, &ulValue))
+ return VO_NOTIMPL;
+
+ return VO_TRUE;
+}
+
+static int color_ctrl_get(char *what, int *value)
+{
+ ULONG ulAttr;
+ ULONG ulValue;
+
+ if (!strcmp(what, "brightness"))
+ ulAttr = KVAA_BRIGHTNESS;
+ else if (!strcmp(what, "contrast"))
+ ulAttr = KVAA_CONTRAST;
+ else if (!strcmp(what, "hue"))
+ ulAttr = KVAA_HUE;
+ else if (!strcmp(what, "saturation"))
+ ulAttr = KVAA_SATURATION;
+ else
+ return VO_NOTIMPL;
+
+ if (kvaQueryAttr(ulAttr, &ulValue))
+ return VO_NOTIMPL;
+
+ // add 1 to adjust range
+ *value = ((ulValue + 1) * 200 / 255) - 100;
+
+ return VO_TRUE;
+}
+
+static int control(uint32_t request, void *data, ...)
+{
+ switch (request) {
+ case VOCTRL_GET_IMAGE:
+ return get_image(data);
+
+ case VOCTRL_DRAW_IMAGE:
+ return draw_image(data);
+
+ case VOCTRL_QUERY_FORMAT:
+ return query_format(*(uint32_t *)data);
+
+ case VOCTRL_FULLSCREEN:
+ return fs_toggle();
+
+ case VOCTRL_SET_EQUALIZER:
+ {
+ va_list ap;
+ int value;
+
+ va_start(ap, data);
+ value = va_arg(ap, int);
+ va_end(ap);
+
+ return color_ctrl_set(data, value);
+ }
+
+ case VOCTRL_GET_EQUALIZER:
+ {
+ va_list ap;
+ int *value;
+
+ va_start(ap, data);
+ value = va_arg(ap, int *);
+ va_end(ap);
+
+ return color_ctrl_get(data, value);
+ }
+
+ case VOCTRL_UPDATE_SCREENINFO:
+ vo_screenwidth = m_int.kvac.cxScreen;
+ vo_screenheight = m_int.kvac.cyScreen;
+
+ aspect_save_screenres(vo_screenwidth, vo_screenheight);
+
+ return VO_TRUE;
+ }
+
+ return VO_NOTIMPL;
+}
+
+static int draw_frame(uint8_t *src[])
+{
+ return VO_ERROR;
+}
+
+static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y)
+{
+ uint8_t *s;
+ uint8_t *d;
+
+ // copy packed or Y
+ d = m_int.planes[0] + m_int.stride[0] * y + x;
+ s = src[0];
+ mem2agpcpy_pic(d, s, w * m_int.bpp, h, m_int.stride[0], stride[0]);
+
+ // YV12 or YVU9
+ if (m_int.nChromaShift) {
+ w >>= m_int.nChromaShift; h >>= m_int.nChromaShift;
+ x >>= m_int.nChromaShift; y >>= m_int.nChromaShift;
+
+ // copy U
+ d = m_int.planes[1] + m_int.stride[1] * y + x;
+ s = src[1];
+ mem2agpcpy_pic(d, s, w, h, m_int.stride[1], stride[1]);
+
+ // copy V
+ d = m_int.planes[2] + m_int.stride[2] * y + x;
+ s = src[2];
+ mem2agpcpy_pic(d, s, w, h, m_int.stride[2], stride[2]);
+ }
+
+ return 0;
+}
+
+#define vo_draw_alpha(imgfmt) \
+ vo_draw_alpha_##imgfmt(w, h, src, srca, stride, \
+ m_int.planes[0] + m_int.stride[0] * y0 + m_int.bpp * x0, \
+ m_int.stride[0])
+
+static void draw_alpha(int x0, int y0, int w, int h,
+ unsigned char *src, unsigned char *srca, int stride)
+{
+ switch (m_int.iImageFormat) {
+ case IMGFMT_YV12:
+ case IMGFMT_YVU9:
+ vo_draw_alpha(yv12);
+ break;
+
+ case IMGFMT_YUY2:
+ vo_draw_alpha(yuy2);
+ break;
+
+ case IMGFMT_BGR24:
+ vo_draw_alpha(rgb24);
+ break;
+
+ case IMGFMT_BGR16:
+ vo_draw_alpha(rgb16);
+ break;
+
+ case IMGFMT_BGR15:
+ vo_draw_alpha(rgb15);
+ break;
+ }
+}
+
+static void draw_osd(void)
+{
+ vo_draw_text(SRC_WIDTH, SRC_HEIGHT, draw_alpha);
+}
+
+static void flip_page(void)
+{
+ imgDisplay();
+}
+
+static void check_events(void)
+{
+ QMSG qm;
+
+ // On slave mode, we need to change our window size according to a
+ // parent window size
+ if (WinID != -1) {
+ RECTL rcl;
+
+ WinQueryWindowRect(HWNDFROMWINID(WinID), &rcl);
+
+ if (rcl.xLeft != m_int.rclParent.xLeft ||
+ rcl.yBottom != m_int.rclParent.yBottom ||
+ rcl.xRight != m_int.rclParent.xRight ||
+ rcl.yTop != m_int.rclParent.yTop) {
+ WinSetWindowPos(m_int.hwndFrame, NULLHANDLE,
+ rcl.xLeft, rcl.yBottom,
+ rcl.xRight - rcl.xLeft, rcl.yTop - rcl.yBottom,
+ SWP_SIZE | SWP_MOVE);
+
+ m_int.rclParent = rcl;
+ }
+ }
+
+ while (WinPeekMsg(m_int.hab, &qm, NULLHANDLE, 0, 0, PM_REMOVE))
+ WinDispatchMsg(m_int.hab, &qm);
+}
diff --git a/libvo/vo_macosx.m b/libvo/vo_macosx.m
index 1cd1d43..8a23819 100644
--- a/libvo/vo_macosx.m
+++ b/libvo/vo_macosx.m
@@ -1,4 +1,7 @@
/*
+ * Mac OS X video output driver
+ * Copyright (c) 2005 Nicolas Plourde <nicolasplourde at gmail.com>
+ *
* This file is part of MPlayer.
*
* MPlayer is free software; you can redistribute it and/or modify
@@ -16,14 +19,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-/*
- vo_macosx.m
- by Nicolas Plourde <nicolasplourde at gmail.com>
-
- MPlayer Mac OSX video out module.
- Copyright (c) Nicolas Plourde - 2005
-*/
-
#import "vo_macosx.h"
#include <sys/types.h>
#include <sys/ipc.h>
@@ -100,7 +95,7 @@ static BOOL isLeopardOrLater;
static vo_info_t info =
{
- "Mac OSX Core Video",
+ "Mac OS X Core Video",
"macosx",
"Nicolas Plourde <nicolas.plourde at gmail.com>",
""
@@ -132,7 +127,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_
}
else
{
- mp_msg(MSGT_VO, MSGL_FATAL, "Get device error: Device ID %d do not exist, falling back to main device.\n", screen_id);
+ mp_msg(MSGT_VO, MSGL_FATAL, "Get device error: Device ID %d does not exist, falling back to main device.\n", screen_id);
screen_handle = [screen_array objectAtIndex:0];
screen_id = -1;
}
@@ -217,7 +212,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_
return 1;
}
- //connnect to mplayerosx
+ //connect to mplayerosx
mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:[NSString stringWithCString:buffer_name] host:nil];
if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) {
[mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)];
@@ -362,7 +357,7 @@ static int preinit(const char *arg)
"Example: mplayer -vo macosx:device_id=1:shared_buffer:buffer_name=mybuff\n"
"\nOptions:\n"
" device_id=<0-...>\n"
- " Set screen device id for fullscreen.\n"
+ " Set screen device ID for fullscreen.\n"
" shared_buffer\n"
" Write output to a shared memory buffer instead of displaying it.\n"
" buffer_name=<name>\n"
@@ -813,7 +808,7 @@ static int control(uint32_t request, void *data, ...)
curTime = TickCount()/60;
- //auto hide mouse cursor (and future on-screen control?)
+ //automatically hide mouse cursor (and future on-screen control?)
if(isFullscreen && !mouseHide && !isRootwin)
{
if( ((curTime - lastMouseHide) >= 5) || (lastMouseHide == 0) )
@@ -964,8 +959,8 @@ static int control(uint32_t request, void *data, ...)
return;
[NSApp sendEvent:event];
// Without SDL's bootstrap code (include SDL.h in mplayer.c),
- // on Leopard, we got trouble to get the play window auto focused
- // when app is actived. Following code fix this problem.
+ // on Leopard, we have trouble to get the play window automatically focused
+ // when the app is actived. The Following code fix this problem.
#ifndef CONFIG_SDL
if (isLeopardOrLater && [event type] == NSAppKitDefined
&& [event subtype] == NSApplicationActivatedEventType) {
diff --git a/libvo/vo_md5sum.c b/libvo/vo_md5sum.c
index 4fd9cdd..bf506f4 100644
--- a/libvo/vo_md5sum.c
+++ b/libvo/vo_md5sum.c
@@ -107,9 +107,9 @@ static void md5sum_write_error(void) {
static int preinit(const char *arg)
{
- opt_t subopts[] = {
- {"outfile", OPT_ARG_MSTRZ, &md5sum_outfile, NULL, 0},
- {NULL, 0, NULL, NULL, 0}
+ const opt_t subopts[] = {
+ {"outfile", OPT_ARG_MSTRZ, &md5sum_outfile, NULL},
+ {NULL, 0, NULL, NULL}
};
mp_msg(MSGT_VO, MSGL_INFO, "%s: %s\n", info.short_name,
diff --git a/libvo/vo_png.c b/libvo/vo_png.c
index 5a2edf7..9f0dbed 100644
--- a/libvo/vo_png.c
+++ b/libvo/vo_png.c
@@ -290,10 +290,10 @@ static int int_zero_to_nine(int *sh)
return 1;
}
-static opt_t subopts[] = {
- {"alpha", OPT_ARG_BOOL, &use_alpha, NULL, 0},
+static const opt_t subopts[] = {
+ {"alpha", OPT_ARG_BOOL, &use_alpha, NULL},
{"z", OPT_ARG_INT, &z_compression, (opt_test_f)int_zero_to_nine},
- {"outdir", OPT_ARG_MSTRZ, &png_outdir, NULL, 0},
+ {"outdir", OPT_ARG_MSTRZ, &png_outdir, NULL},
{NULL}
};
diff --git a/libvo/vo_pnm.c b/libvo/vo_pnm.c
index ba88db2..9fab71f 100644
--- a/libvo/vo_pnm.c
+++ b/libvo/vo_pnm.c
@@ -120,16 +120,16 @@ static int preinit(const char *arg)
{
int ppm_type = 0, pgm_type = 0, pgmyuv_type = 0,
raw_mode = 0, ascii_mode = 0;
- opt_t subopts[] = {
- {"ppm", OPT_ARG_BOOL, &ppm_type, NULL, 0},
- {"pgm", OPT_ARG_BOOL, &pgm_type, NULL, 0},
- {"pgmyuv", OPT_ARG_BOOL, &pgmyuv_type, NULL, 0},
- {"raw", OPT_ARG_BOOL, &raw_mode, NULL, 0},
- {"ascii", OPT_ARG_BOOL, &ascii_mode, NULL, 0},
- {"outdir", OPT_ARG_MSTRZ, &pnm_outdir, NULL, 0},
- {"subdirs", OPT_ARG_MSTRZ, &pnm_subdirs, NULL, 0},
- {"maxfiles", OPT_ARG_INT, &pnm_maxfiles, (opt_test_f)int_pos, 0},
- {NULL, 0, NULL, NULL, 0}
+ const opt_t subopts[] = {
+ {"ppm", OPT_ARG_BOOL, &ppm_type, NULL},
+ {"pgm", OPT_ARG_BOOL, &pgm_type, NULL},
+ {"pgmyuv", OPT_ARG_BOOL, &pgmyuv_type, NULL},
+ {"raw", OPT_ARG_BOOL, &raw_mode, NULL},
+ {"ascii", OPT_ARG_BOOL, &ascii_mode, NULL},
+ {"outdir", OPT_ARG_MSTRZ, &pnm_outdir, NULL},
+ {"subdirs", OPT_ARG_MSTRZ, &pnm_subdirs, NULL},
+ {"maxfiles", OPT_ARG_INT, &pnm_maxfiles, (opt_test_f)int_pos},
+ {NULL, 0, NULL, NULL}
};
const char *info_message = NULL;
diff --git a/libvo/vo_sdl.c b/libvo/vo_sdl.c
index 26b1777..a62a7a2 100644
--- a/libvo/vo_sdl.c
+++ b/libvo/vo_sdl.c
@@ -1526,11 +1526,11 @@ static int preinit(const char *arg)
char * sdl_driver = NULL;
int sdl_hwaccel;
int sdl_forcexv;
- opt_t subopts[] = {
- {"forcexv", OPT_ARG_BOOL, &sdl_forcexv, NULL, 0},
- {"hwaccel", OPT_ARG_BOOL, &sdl_hwaccel, NULL, 0},
- {"driver", OPT_ARG_MSTRZ, &sdl_driver, NULL, 0},
- {NULL, 0, NULL, NULL, 0}
+ const opt_t subopts[] = {
+ {"forcexv", OPT_ARG_BOOL, &sdl_forcexv, NULL},
+ {"hwaccel", OPT_ARG_BOOL, &sdl_hwaccel, NULL},
+ {"driver", OPT_ARG_MSTRZ, &sdl_driver, NULL},
+ {NULL, 0, NULL, NULL}
};
sdl_forcexv = 1;
diff --git a/libvo/vo_v4l2.c b/libvo/vo_v4l2.c
index 7cecfd7..1f611d8 100644
--- a/libvo/vo_v4l2.c
+++ b/libvo/vo_v4l2.c
@@ -53,7 +53,7 @@ static vo_mpegpes_t *pes;
static int output = -1;
static char *device = NULL;
-static opt_t subopts[] = {
+static const opt_t subopts[] = {
{"output", OPT_ARG_INT, &output, (opt_test_f)int_non_neg},
{"device", OPT_ARG_MSTRZ, &device, NULL},
{NULL}
diff --git a/libvo/vo_vdpau.c b/libvo/vo_vdpau.c
index 7417c70..963cf17 100644
--- a/libvo/vo_vdpau.c
+++ b/libvo/vo_vdpau.c
@@ -147,14 +147,19 @@ static void *vdpau_lib_handle;
/* output_surfaces[NUM_OUTPUT_SURFACES] is misused for OSD. */
#define osd_surface output_surfaces[NUM_OUTPUT_SURFACES]
static VdpOutputSurface output_surfaces[NUM_OUTPUT_SURFACES + 1];
+static VdpVideoSurface deint_surfaces[3];
+static mp_image_t *deint_mpi[2];
static int output_surface_width, output_surface_height;
static VdpVideoMixer video_mixer;
static int deint;
static int deint_type;
+static int deint_counter;
+static int deint_buffer_past_frames;
static int pullup;
static float denoise;
static float sharpen;
+static int chroma_deint;
static int top_field_first;
static VdpDecoder decoder;
@@ -205,6 +210,15 @@ static VdpProcamp procamp;
static int visible_buf;
static int int_pause;
+static void draw_eosd(void);
+
+static void push_deint_surface(VdpVideoSurface surface)
+{
+ deint_surfaces[2] = deint_surfaces[1];
+ deint_surfaces[1] = deint_surfaces[0];
+ deint_surfaces[0] = surface;
+}
+
static void video_to_output_surface(void)
{
VdpTime dummy;
@@ -213,17 +227,19 @@ static void video_to_output_surface(void)
if (vid_surface_num < 0)
return;
- // we would need to provide 2 past and 1 future frames to allow advanced
- // deinterlacing, which is not really possible currently.
+ if (deint < 2 || deint_surfaces[0] == VDP_INVALID_HANDLE)
+ push_deint_surface(surface_render[vid_surface_num].surface);
+
for (i = 0; i <= !!(deint > 1); i++) {
int field = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME;
VdpOutputSurface output_surface;
if (i) {
+ draw_eosd();
draw_osd();
flip_page();
}
if (deint)
- field = top_field_first == i ?
+ field = (top_field_first == i) ^ (deint > 1) ?
VDP_VIDEO_MIXER_PICTURE_STRUCTURE_BOTTOM_FIELD:
VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD;
output_surface = output_surfaces[surface_num];
@@ -233,12 +249,14 @@ static void video_to_output_surface(void)
CHECK_ST_WARNING("Error when calling vdp_presentation_queue_block_until_surface_idle")
vdp_st = vdp_video_mixer_render(video_mixer, VDP_INVALID_HANDLE, 0,
- field, 0, NULL,
- surface_render[vid_surface_num].surface,
- 0, NULL, &src_rect_vid,
+ field, 2, deint_surfaces + 1,
+ deint_surfaces[0],
+ 1, &surface_render[vid_surface_num].surface,
+ &src_rect_vid,
output_surface,
NULL, &out_rect_vid, 0, NULL);
CHECK_ST_WARNING("Error when calling vdp_video_mixer_render")
+ push_deint_surface(surface_render[vid_surface_num].surface);
}
}
@@ -394,6 +412,9 @@ static int create_vdp_mixer(VdpChromaType vdp_chroma_type) {
const void * const denoise_value[] = {&denoise};
static const VdpVideoMixerAttribute sharpen_attrib[] = {VDP_VIDEO_MIXER_ATTRIBUTE_SHARPNESS_LEVEL};
const void * const sharpen_value[] = {&sharpen};
+ static const VdpVideoMixerAttribute skip_chroma_attrib[] = {VDP_VIDEO_MIXER_ATTRIBUTE_SKIP_CHROMA_DEINTERLACE};
+ const uint8_t skip_chroma_value = 1;
+ const void * const skip_chroma_value_ptr[] = {&skip_chroma_value};
static const VdpVideoMixerParameter parameters[VDP_NUM_MIXER_PARAMETER] = {
VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_WIDTH,
VDP_VIDEO_MIXER_PARAMETER_VIDEO_SURFACE_HEIGHT,
@@ -404,8 +425,7 @@ static int create_vdp_mixer(VdpChromaType vdp_chroma_type) {
&vid_height,
&vdp_chroma_type
};
- if (deint == 3)
- features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL;
+ features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL;
if (deint == 4)
features[feature_count++] = VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL;
if (pullup)
@@ -422,12 +442,16 @@ static int create_vdp_mixer(VdpChromaType vdp_chroma_type) {
CHECK_ST_ERROR("Error when calling vdp_video_mixer_create")
for (i = 0; i < feature_count; i++) feature_enables[i] = VDP_TRUE;
+ if (deint < 3)
+ feature_enables[0] = VDP_FALSE;
if (feature_count)
vdp_video_mixer_set_feature_enables(video_mixer, feature_count, features, feature_enables);
if (denoise)
vdp_video_mixer_set_attribute_values(video_mixer, 1, denoise_attrib, denoise_value);
if (sharpen)
vdp_video_mixer_set_attribute_values(video_mixer, 1, sharpen_attrib, sharpen_value);
+ if (!chroma_deint)
+ vdp_video_mixer_set_attribute_values(video_mixer, 1, skip_chroma_attrib, skip_chroma_value_ptr);
return 0;
}
@@ -442,6 +466,15 @@ static void free_video_specific(void) {
decoder = VDP_INVALID_HANDLE;
decoder_max_refs = -1;
+ for (i = 0; i < 3; i++)
+ deint_surfaces[i] = VDP_INVALID_HANDLE;
+
+ for (i = 0; i < 2; i++)
+ if (deint_mpi[i]) {
+ deint_mpi[i]->usage_count--;
+ deint_mpi[i] = NULL;
+ }
+
for (i = 0; i < MAX_VIDEO_SURFACES; i++) {
if (surface_render[i].surface != VDP_INVALID_HANDLE) {
vdp_st = vdp_video_surface_destroy(surface_render[i].surface);
@@ -457,6 +490,42 @@ static void free_video_specific(void) {
video_mixer = VDP_INVALID_HANDLE;
}
+static int create_vdp_decoder(int max_refs)
+{
+ VdpStatus vdp_st;
+ VdpDecoderProfile vdp_decoder_profile;
+ if (decoder != VDP_INVALID_HANDLE)
+ vdp_decoder_destroy(decoder);
+ switch (image_format) {
+ case IMGFMT_VDPAU_MPEG1:
+ vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG1;
+ break;
+ case IMGFMT_VDPAU_MPEG2:
+ vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG2_MAIN;
+ break;
+ case IMGFMT_VDPAU_H264:
+ vdp_decoder_profile = VDP_DECODER_PROFILE_H264_HIGH;
+ mp_msg(MSGT_VO, MSGL_V, "[vdpau] Creating H264 hardware decoder for %d reference frames.\n", max_refs);
+ break;
+ case IMGFMT_VDPAU_WMV3:
+ vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_MAIN;
+ break;
+ case IMGFMT_VDPAU_VC1:
+ vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_ADVANCED;
+ break;
+ }
+ vdp_st = vdp_decoder_create(vdp_device, vdp_decoder_profile,
+ vid_width, vid_height, max_refs, &decoder);
+ CHECK_ST_WARNING("Failed creating VDPAU decoder");
+ if (vdp_st != VDP_STATUS_OK) {
+ decoder = VDP_INVALID_HANDLE;
+ decoder_max_refs = 0;
+ return 0;
+ }
+ decoder_max_refs = max_refs;
+ return 1;
+}
+
/*
* connect to X server, create and map window, initialize all
* VDPAU objects, create different surfaces etc.
@@ -476,6 +545,11 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
#endif
image_format = format;
+ vid_width = width;
+ vid_height = height;
+ free_video_specific();
+ if (IMGFMT_IS_VDPAU(image_format) && !create_vdp_decoder(2))
+ return -1;
int_pause = 0;
visible_buf = 0;
@@ -521,16 +595,9 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
vo_fs = 1;
/* -----VDPAU related code here -------- */
-
- free_video_specific();
-
if (vdp_flip_queue == VDP_INVALID_HANDLE && win_x11_init_vdpau_flip_queue())
return -1;
- // video width and height
- vid_width = width;
- vid_height = height;
-
if (create_vdp_mixer(vdp_chroma_type))
return -1;
@@ -742,7 +809,6 @@ static void draw_osd(void)
{
mp_msg(MSGT_VO, MSGL_DBG2, "DRAW_OSD\n");
- draw_eosd();
vo_draw_text_ext(vo_dwidth, vo_dheight, border_x, border_y, border_x, border_y,
vid_width, vid_height, draw_osd_I8A8);
}
@@ -770,37 +836,10 @@ static int draw_slice(uint8_t *image[], int stride[], int w, int h,
int max_refs = image_format == IMGFMT_VDPAU_H264 ? rndr->info.h264.num_ref_frames : 2;
if (!IMGFMT_IS_VDPAU(image_format))
return VO_FALSE;
- if (decoder == VDP_INVALID_HANDLE || decoder_max_refs < max_refs) {
- VdpDecoderProfile vdp_decoder_profile;
- if (decoder != VDP_INVALID_HANDLE)
- vdp_decoder_destroy(decoder);
- decoder = VDP_INVALID_HANDLE;
- switch (image_format) {
- case IMGFMT_VDPAU_MPEG1:
- vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG1;
- break;
- case IMGFMT_VDPAU_MPEG2:
- vdp_decoder_profile = VDP_DECODER_PROFILE_MPEG2_MAIN;
- break;
- case IMGFMT_VDPAU_H264:
- vdp_decoder_profile = VDP_DECODER_PROFILE_H264_HIGH;
- break;
- case IMGFMT_VDPAU_WMV3:
- vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_MAIN;
- break;
- case IMGFMT_VDPAU_VC1:
- vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_ADVANCED;
- break;
- }
- vdp_st = vdp_decoder_create(vdp_device, vdp_decoder_profile, vid_width, vid_height, max_refs, &decoder);
- CHECK_ST_WARNING("Failed creating VDPAU decoder");
- if (vdp_st != VDP_STATUS_OK) {
- decoder = VDP_INVALID_HANDLE;
- decoder_max_refs = 0;
- return VO_FALSE;
- }
- decoder_max_refs = max_refs;
- }
+ if ((decoder == VDP_INVALID_HANDLE || decoder_max_refs < max_refs)
+ && !create_vdp_decoder(max_refs))
+ return VO_FALSE;
+
vdp_st = vdp_decoder_render(decoder, rndr->surface, (void *)&rndr->info, rndr->bitstream_buffers_used, rndr->bitstream_buffers);
CHECK_ST_WARNING("Failed VDPAU decoder rendering");
return VO_TRUE;
@@ -834,10 +873,18 @@ static uint32_t draw_image(mp_image_t *mpi)
if (IMGFMT_IS_VDPAU(image_format)) {
struct vdpau_render_state *rndr = mpi->priv;
vid_surface_num = rndr - surface_render;
+ if (deint_buffer_past_frames) {
+ mpi->usage_count++;
+ if (deint_mpi[1])
+ deint_mpi[1]->usage_count--;
+ deint_mpi[1] = deint_mpi[0];
+ deint_mpi[0] = mpi;
+ }
} else if (!(mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)) {
VdpStatus vdp_st;
void *destdata[3] = {mpi->planes[0], mpi->planes[2], mpi->planes[1]};
- struct vdpau_render_state *rndr = get_surface(0);
+ struct vdpau_render_state *rndr = get_surface(deint_counter);
+ deint_counter = (deint_counter + 1) % 3;
vid_surface_num = rndr - surface_render;
vdp_st = vdp_video_surface_put_bits_y_cb_cr(rndr->surface,
VDP_YCBCR_FORMAT_YV12,
@@ -947,8 +994,9 @@ static void uninit(void)
dlclose(vdpau_lib_handle);
}
-static opt_t subopts[] = {
+static const opt_t subopts[] = {
{"deint", OPT_ARG_INT, &deint, (opt_test_f)int_non_neg},
+ {"chroma-deint", OPT_ARG_BOOL, &chroma_deint, NULL},
{"pullup", OPT_ARG_BOOL, &pullup, NULL},
{"denoise", OPT_ARG_FLOAT, &denoise, NULL},
{"sharpen", OPT_ARG_FLOAT, &sharpen, NULL},
@@ -962,11 +1010,14 @@ static const char help_msg[] =
" deint (all modes > 0 respect -field-dominance)\n"
" 0: no deinterlacing\n"
" 1: only show first field\n"
- " 2: bob deinterlacing (current fallback)\n"
- " 3: temporal deinterlacing (not yet working)\n"
- " 4: temporal-spatial deinterlacing (not yet working)\n"
+ " 2: bob deinterlacing\n"
+ " 3: temporal deinterlacing (resource-hungry)\n"
+ " 4: temporal-spatial deinterlacing (very resource-hungry)\n"
+ " chroma-deint\n"
+ " Operate on luma and chroma when using temporal deinterlacing (default)\n"
+ " Use nochroma-deint to speed up temporal deinterlacing\n"
" pullup\n"
- " Try to apply inverse-telecine (needs deinterlacing, not working)\n"
+ " Try to apply inverse-telecine (needs temporal deinterlacing)\n"
" denoise\n"
" Apply denoising, argument is strength from 0.0 to 1.0\n"
" sharpen\n"
@@ -981,6 +1032,10 @@ static int preinit(const char *arg)
deint = 0;
deint_type = 3;
+ deint_counter = 0;
+ deint_buffer_past_frames = 0;
+ deint_mpi[0] = deint_mpi[1] = NULL;
+ chroma_deint = 1;
pullup = 0;
denoise = 0;
sharpen = 0;
@@ -990,6 +1045,8 @@ static int preinit(const char *arg)
}
if (deint)
deint_type = deint;
+ if (deint > 1)
+ deint_buffer_past_frames = 1;
vdpau_lib_handle = dlopen(vdpaulibrary, RTLD_LAZY);
if (!vdpau_lib_handle) {
@@ -1010,7 +1067,7 @@ static int preinit(const char *arg)
for (i = 0; i < MAX_VIDEO_SURFACES; i++)
surface_render[i].surface = VDP_INVALID_HANDLE;
video_mixer = VDP_INVALID_HANDLE;
- for (i = 0; i < NUM_OUTPUT_SURFACES; i++)
+ for (i = 0; i <= NUM_OUTPUT_SURFACES; i++)
output_surfaces[i] = VDP_INVALID_HANDLE;
vdp_flip_queue = VDP_INVALID_HANDLE;
output_surface_width = output_surface_height = -1;
@@ -1084,6 +1141,19 @@ static int control(uint32_t request, void *data, ...)
deint = *(int*)data;
if (deint)
deint = deint_type;
+ if (deint_type > 2) {
+ VdpStatus vdp_st;
+ VdpVideoMixerFeature features[1] =
+ {deint_type == 3 ?
+ VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL :
+ VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL};
+ VdpBool feature_enables[1] = {deint ? VDP_TRUE : VDP_FALSE};
+ vdp_st = vdp_video_mixer_set_feature_enables(video_mixer, 1,
+ features,
+ feature_enables);
+ CHECK_ST_WARNING("Error changing deinterlacing settings")
+ deint_buffer_past_frames = 1;
+ }
return VO_TRUE;
case VOCTRL_PAUSE:
return (int_pause = 1);
@@ -1140,6 +1210,7 @@ static int control(uint32_t request, void *data, ...)
if (!data)
return VO_FALSE;
generate_eosd(data);
+ draw_eosd();
return VO_TRUE;
case VOCTRL_GET_EOSD_RES: {
mp_eosd_res_t *r = data;
diff --git a/libvo/vo_xv.c b/libvo/vo_xv.c
index 47174d4..d9325eb 100644
--- a/libvo/vo_xv.c
+++ b/libvo/vo_xv.c
@@ -295,8 +295,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
current_buf = 0;
current_ip_buf = 0;
- if ((flags & VOFLAG_FULLSCREEN) && WinID <= 0) vo_fs = 1;
-
resize();
return 0;
@@ -611,7 +609,7 @@ static int preinit(const char *arg)
strarg_t ck_method_arg = { 0, NULL };
int xv_adaptor = -1;
- opt_t subopts[] =
+ const opt_t subopts[] =
{
/* name arg type arg var test */
{ "port", OPT_ARG_INT, &xv_port, (opt_test_f)int_pos },
diff --git a/libvo/vo_xvmc.c b/libvo/vo_xvmc.c
index 1492bce..1673fa8 100644
--- a/libvo/vo_xvmc.c
+++ b/libvo/vo_xvmc.c
@@ -63,7 +63,7 @@
#define UNUSED(x) ((void)(x))
#if LIBAVCODEC_BUILD < ((51<<16)+(40<<8)+2)
-#error You need at least libavcodecs v51.40.2
+#error You need at least libavcodec v51.40.2
#endif
@@ -226,7 +226,7 @@ return -1;//fail
//print all info needed to add new format
static void print_xvimage_format_values(XvImageFormatValues *xifv){
int i;
- const msgl=MSGL_DBG4;
+ const int msgl=MSGL_DBG4;
mp_msg(MSGT_VO,msgl,"Format_ID = 0x%X\n",xifv->id);
@@ -379,7 +379,7 @@ static int preinit(const char *arg){
int mc_ver,mc_rev;
strarg_t ck_src_arg = { 0, NULL };
strarg_t ck_method_arg = { 0, NULL };
- opt_t subopts [] =
+ const opt_t subopts [] =
{
/* name arg type arg var test */
{ "port", OPT_ARG_INT, &xv_port_request, (opt_test_f)int_pos },
@@ -664,8 +664,6 @@ skip_surface_allocation:
#endif
}
- if ((flags & VOFLAG_FULLSCREEN) && WinID <= 0) vo_fs = 1;
-
//end vo_xv
/* store image dimesions for displaying */
diff --git a/libvo/vo_yuv4mpeg.c b/libvo/vo_yuv4mpeg.c
index 3b7c06c..a7790fc 100644
--- a/libvo/vo_yuv4mpeg.c
+++ b/libvo/vo_yuv4mpeg.c
@@ -513,7 +513,7 @@ static void check_events(void)
static int preinit(const char *arg)
{
int il, il_bf;
- opt_t subopts[] = {
+ const opt_t subopts[] = {
{"interlaced", OPT_ARG_BOOL, &il, NULL},
{"interlaced_bf", OPT_ARG_BOOL, &il_bf, NULL},
{"file", OPT_ARG_MSTRZ, &yuv_filename, NULL},
diff --git a/libvo/vo_zr2.c b/libvo/vo_zr2.c
index f1b6413..d83a8b2 100644
--- a/libvo/vo_zr2.c
+++ b/libvo/vo_zr2.c
@@ -20,7 +20,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-/* $Id: vo_zr2.c 27541 2008-09-07 14:09:51Z diego $ */
+/* $Id: vo_zr2.c 28957 2009-03-15 10:03:09Z diego $ */
#include <stdio.h>
#include <stdlib.h>
@@ -209,11 +209,11 @@ static int preinit(const char *arg) {
const char *dev = NULL;
char *dev_arg = NULL, *norm_arg = NULL;
int norm = VIDEO_MODE_AUTO, prebuf = 0;
- opt_t subopts[] = { /* don't want warnings with -Wall... */
- { "dev", OPT_ARG_MSTRZ, &dev_arg, NULL, 0 },
- { "prebuf", OPT_ARG_BOOL, &prebuf, (opt_test_f)pbc, 0 },
- { "norm", OPT_ARG_MSTRZ, &norm_arg, (opt_test_f)nc, 0 },
- { NULL, 0, NULL, NULL, 0 }
+ const opt_t subopts[] = { /* don't want warnings with -Wall... */
+ { "dev", OPT_ARG_MSTRZ, &dev_arg, NULL },
+ { "prebuf", OPT_ARG_BOOL, &prebuf, (opt_test_f)pbc },
+ { "norm", OPT_ARG_MSTRZ, &norm_arg, (opt_test_f)nc },
+ { NULL, 0, NULL, NULL }
};
VERBOSE("preinit() called with arg: %s\n", arg);
diff --git a/libvo/w32_common.c b/libvo/w32_common.c
index e482536..a9abab2 100644
--- a/libvo/w32_common.c
+++ b/libvo/w32_common.c
@@ -36,7 +36,7 @@ extern int enable_mouse_movements;
#define MONITOR_DEFAULTTOPRIMARY 1
#endif
-static const char classname[] = "MPlayer - Media player for Win32";
+static const char classname[] = "MPlayer - The Movie Player";
int vo_vm = 0;
// last non-fullscreen extends
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index df72ebb..16a97d5 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -1135,6 +1135,12 @@ void vo_x11_create_vo_window(XVisualInfo *vis, int x, int y,
vo_x11_nofs_sizepos(vo_dx, vo_dy, width, height);
if (!!vo_fs != !!(flags & VOFLAG_FULLSCREEN))
vo_x11_fullscreen();
+ else if (vo_fs) {
+ // if we are already in fullscreen do not switch back and forth, just
+ // set the size values right.
+ vo_dwidth = vo_screenwidth;
+ vo_dheight = vo_screenheight;
+ }
final:
if (vo_gc != None)
XFreeGC(mDisplay, vo_gc);
diff --git a/loader/win32.c b/loader/win32.c
index 2ee9f1e..3aded84 100644
--- a/loader/win32.c
+++ b/loader/win32.c
@@ -63,6 +63,8 @@ for DLL to know too much about its environment.
#include <sys/types.h>
#include <dirent.h>
#include <sys/time.h>
+#include <sys/stat.h>
+#include <sys/timeb.h>
#ifdef HAVE_KSTAT
#include <kstat.h>
#endif
@@ -3519,7 +3521,7 @@ static HANDLE WINAPI expCreateFileA(LPCSTR cs1,DWORD i1,DWORD i2,
free(tmp);
return result;
}
- if (strstr(cs1, "vp3"))
+ if (strstr(cs1, "vp3") || strstr(cs1, ".fpf"))
{
int r;
int flg = 0;
@@ -3537,10 +3539,10 @@ static HANDLE WINAPI expCreateFileA(LPCSTR cs1,DWORD i1,DWORD i2,
flg |= O_RDONLY;
else if (GENERIC_WRITE & i1)
{
- flg |= O_WRONLY;
+ flg |= O_WRONLY | O_CREAT;
printf("Warning: openning filename %s %d (flags; 0x%x) for write\n", tmp, r, flg);
}
- r=open(tmp, flg);
+ r=open(tmp, flg, S_IRWXU);
free(tmp);
return r;
}
diff --git a/m_option.c b/m_option.c
index 71ad216..8504f25 100644
--- a/m_option.c
+++ b/m_option.c
@@ -173,7 +173,6 @@ static int parse_int(const m_option_t* opt,const char *name, char *param, void*
}
static char* print_int(const m_option_t* opt, const void* val) {
- opt = NULL;
if (opt->type->size == sizeof(int64_t))
return dup_printf("%"PRId64, *(const int64_t *)val);
return dup_printf("%d",VAL(val));
diff --git a/mp3lib/decode_mmx.c b/mp3lib/decode_mmx.c
index 55dc6a9..67a7cdb 100644
--- a/mp3lib/decode_mmx.c
+++ b/mp3lib/decode_mmx.c
@@ -12,9 +12,9 @@
#define real float /* ugly - but only way */
extern void (*dct64_MMX_func)(short*, short*, real*);
-static unsigned long long attribute_used __attribute__((aligned(8))) null_one = 0x0000ffff0000ffffULL;
-static unsigned long long attribute_used __attribute__((aligned(8))) one_null = 0xffff0000ffff0000ULL;
-unsigned int __attribute__((aligned(16))) costab_mmx[] =
+static const unsigned long long attribute_used __attribute__((aligned(8))) null_one = 0x0000ffff0000ffffULL;
+static const unsigned long long attribute_used __attribute__((aligned(8))) one_null = 0xffff0000ffff0000ULL;
+const unsigned int __attribute__((aligned(16))) costab_mmx[] =
{
1056974725,
1057056395,
@@ -54,7 +54,7 @@ unsigned int __attribute__((aligned(16))) costab_mmx[] =
make_decode_tables_MMX(32768), which had been implemented in (deleted since
r23383) tabinit_MMX.c.
*/
-static short __attribute__((aligned(8))) mp3lib_decwins[] =
+static const short __attribute__((aligned(8))) mp3lib_decwins[] =
{
0, 7, 54, 114, 510, 1288, 1644, 9372,
18760, -9373, 1644, -1289, 510, -115, 54, -8,
@@ -191,7 +191,7 @@ int synth_1to1_MMX(real *bandPtr, int channel, short *samples)
static short buffs[2][2][0x110] __attribute__((aligned(8)));
static int bo = 1;
short *b0, (*buf)[0x110], *a, *b;
- short* window;
+ const short* window;
int bo1, i = 8;
if (channel == 0) {
diff --git a/mp3lib/layer3.c b/mp3lib/layer3.c
index 70bf08f..dd4502d 100644
--- a/mp3lib/layer3.c
+++ b/mp3lib/layer3.c
@@ -1,7 +1,7 @@
/*
* Modified for use with MPlayer, for details see the changelog at
* http://svn.mplayerhq.hu/mplayer/trunk/
- * $Id: layer3.c 23485 2007-06-06 05:16:08Z zuxy $
+ * $Id: layer3.c 28866 2009-03-07 09:14:45Z reimar $
*/
/*
@@ -44,16 +44,16 @@ static real cos9[3],cos18[3];
#endif
struct bandInfoStruct {
- int longIdx[23];
- int longDiff[22];
- int shortIdx[14];
- int shortDiff[13];
+ uint16_t longIdx[23];
+ uint8_t longDiff[22];
+ uint16_t shortIdx[14];
+ uint8_t shortDiff[13];
};
static int longLimit[9][23];
static int shortLimit[9][14];
-static struct bandInfoStruct bandInfo[9] = {
+static const struct bandInfoStruct bandInfo[9] = {
/* MPEG 1.0 */
{ {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
@@ -132,7 +132,7 @@ static void init_layer3(int down_sample_sblimit)
for (i=0;i<8;i++)
{
- static double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
+ static const double Ci[8]={-0.6,-0.535,-0.33,-0.185,-0.095,-0.041,-0.0142,-0.0037};
double sq=sqrt(1.0+Ci[i]*Ci[i]);
aa_cs[i] = 1.0/sq;
aa_ca[i] = Ci[i]/sq;
@@ -180,7 +180,7 @@ static void init_layer3(int down_sample_sblimit)
}
for(j=0;j<4;j++) {
- static int len[4] = { 36,36,12,36 };
+ static const int len[4] = { 36,36,12,36 };
for(i=0;i<len[j];i+=2)
win1[j][i] = + win[j][i];
for(i=1;i<len[j];i+=2)
@@ -213,10 +213,10 @@ static void init_layer3(int down_sample_sblimit)
for(j=0;j<9;j++)
{
- struct bandInfoStruct *bi = &bandInfo[j];
+ const struct bandInfoStruct *bi = &bandInfo[j];
int *mp;
int cb,lwin;
- int *bdf;
+ const uint8_t *bdf;
mp = map[j][0] = mapbuf0[j];
bdf = bi->longDiff;
@@ -984,7 +984,7 @@ static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
{
real (*xr)[SBLIMIT*SSLIMIT] = (real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
- struct bandInfoStruct *bi = &bandInfo[sfreq];
+ const struct bandInfoStruct *bi = &bandInfo[sfreq];
const real *tab1,*tab2;
diff --git a/mplayer.c b/mplayer.c
index 1b6a350..81fc389 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -2346,8 +2346,7 @@ static void pause_loop(void)
if (mpctx->audio_out && mpctx->sh_audio)
mpctx->audio_out->pause(); // pause audio, keep data if possible
- while ( (cmd = mp_input_get_cmd(20, 1, 1)) == NULL
- || cmd->id == MP_CMD_SET_MOUSE_POS || cmd->pausing == 4) {
+ while ( (cmd = mp_input_get_cmd(20, 1, 1)) == NULL || cmd->pausing == 4) {
if (cmd) {
cmd = mp_input_get_cmd(0,1,0);
run_command(mpctx, cmd);
diff --git a/osdep/getch2-os2.c b/osdep/getch2-os2.c
index ef2dcf2..abb7f2e 100644
--- a/osdep/getch2-os2.c
+++ b/osdep/getch2-os2.c
@@ -1,5 +1,5 @@
/*
- * getch2-os2.c : OS/2 TermIO for MPlayer
+ * OS/2 TermIO
*
* Copyright (c) 2007 KO Myung-Hun (komh at chollian.net)
*
diff --git a/osdep/getch2.h b/osdep/getch2.h
index 9b6e793..f6f416b 100644
--- a/osdep/getch2.h
+++ b/osdep/getch2.h
@@ -2,6 +2,8 @@
* GyS-TermIO v2.0 (for GySmail v3)
* a very small replacement of ncurses library
*
+ * copyright (C) 1999 A'rpi/ESP-team
+ *
* This file is part of MPlayer.
*
* MPlayer is free software; you can redistribute it and/or modify
diff --git a/stream/asf_streaming.c b/stream/asf_streaming.c
index 64a8152..c3e70a4 100644
--- a/stream/asf_streaming.c
+++ b/stream/asf_streaming.c
@@ -84,7 +84,8 @@ static int asf_streaming_start( stream_t *stream, int *demuxer_type) {
//Is protocol http, http_proxy, or mms?
if (!strcasecmp(proto, "http_proxy") || !strcasecmp(proto, "http") ||
- !strcasecmp(proto, "mms") || !strcasecmp(proto, "mmshttp"))
+ !strcasecmp(proto, "mms") || !strcasecmp(proto, "mmsh") ||
+ !strcasecmp(proto, "mmshttp"))
{
mp_msg(MSGT_NETWORK,MSGL_V,"Trying ASF/HTTP...\n");
fd = asf_http_streaming_start( stream, demuxer_type );
@@ -148,7 +149,7 @@ extern int audio_id;
extern int video_id;
static void close_s(stream_t *stream) {
- close(stream->fd);
+ closesocket(stream->fd);
stream->fd=-1;
}
@@ -847,7 +848,7 @@ const stream_info_t stream_info_asf = {
"Bertrand, Reimar Doeffinger, Albeu",
"originally based on work by Majormms (is that code still there?)",
open_s,
- {"mms", "mmsu", "mmst", "http", "http_proxy", "mmshttp", NULL},
+ {"mms", "mmsu", "mmst", "http", "http_proxy", "mmsh", "mmshttp", NULL},
NULL,
0 // Urls are an option string
};
diff --git a/stream/freesdp/parser.c b/stream/freesdp/parser.c
index c17041b..bf6f985 100644
--- a/stream/freesdp/parser.c
+++ b/stream/freesdp/parser.c
@@ -1644,7 +1644,7 @@ const char *
fsdp_get_media_format (const fsdp_media_description_t * dsc,
unsigned int index)
{
- if (!dsc || (index < dsc->formats_count))
+ if (!dsc || (index < dsc->formats_count - 1))
return NULL;
return dsc->formats[index];
}
diff --git a/stream/librtsp/rtsp_rtp.c b/stream/librtsp/rtsp_rtp.c
index 0c00e5b..66c7be4 100644
--- a/stream/librtsp/rtsp_rtp.c
+++ b/stream/librtsp/rtsp_rtp.c
@@ -507,7 +507,8 @@ rtp_setup_and_play (rtsp_t *rtsp_session)
}
/* only MPEG-TS is supported at the moment */
- if (!strstr (fsdp_get_media_format (med_dsc, 0),
+ if (!fsdp_get_media_format (med_dsc, 0) ||
+ !strstr (fsdp_get_media_format (med_dsc, 0),
RTSP_MEDIA_CONTAINER_MPEG_TS))
{
fsdp_description_delete (dsc);
diff --git a/stream/tv.c b/stream/tv.c
index 58321d5..7e8ae53 100644
--- a/stream/tv.c
+++ b/stream/tv.c
@@ -439,6 +439,12 @@ static int open_tv(tvi_handle_t *tvh)
#endif
/* limits on w&h are norm-dependent -- JM */
+ if (tvh->tv_param->width != -1 && tvh->tv_param->height != -1) {
+ // first tell the driver both width and height, some drivers do not support setting them independently.
+ int dim[2];
+ dim[0] = tvh->tv_param->width; dim[1] = tvh->tv_param->height;
+ funcs->control(tvh->priv, TVI_CONTROL_VID_SET_WIDTH_HEIGHT, dim);
+ }
/* set width */
if (tvh->tv_param->width != -1)
{
diff --git a/stream/tv.h b/stream/tv.h
index 37c63b7..c7ffae0 100644
--- a/stream/tv.h
+++ b/stream/tv.h
@@ -175,6 +175,7 @@ typedef struct {
#define TVI_CONTROL_VID_SET_PICTURE 0x11e
#define TVI_CONTROL_VID_SET_GAIN 0x11f
#define TVI_CONTROL_VID_GET_GAIN 0x120
+#define TVI_CONTROL_VID_SET_WIDTH_HEIGHT 0x121
/* TUNER controls */
#define TVI_CONTROL_TUN_GET_FREQ 0x201
diff --git a/stream/tvi_v4l2.c b/stream/tvi_v4l2.c
index 0742135..c890d7a 100644
--- a/stream/tvi_v4l2.c
+++ b/stream/tvi_v4l2.c
@@ -780,6 +780,14 @@ static int control(priv_t *priv, int cmd, void *arg)
return TVI_CONTROL_TRUE;
case TVI_CONTROL_VID_CHK_WIDTH:
return TVI_CONTROL_TRUE;
+ case TVI_CONTROL_VID_SET_WIDTH_HEIGHT:
+ if (getfmt(priv) < 0) return TVI_CONTROL_FALSE;
+ priv->format.fmt.pix.width = ((int *)arg)[0];
+ priv->format.fmt.pix.height = ((int *)arg)[1];
+ priv->format.fmt.pix.field = V4L2_FIELD_ANY;
+ if (ioctl(priv->video_fd, VIDIOC_S_FMT, &priv->format) < 0)
+ return TVI_CONTROL_FALSE;
+ return TVI_CONTROL_TRUE;
case TVI_CONTROL_VID_SET_WIDTH:
if (getfmt(priv) < 0) return TVI_CONTROL_FALSE;
priv->format.fmt.pix.width = *(int *)arg;
@@ -1126,7 +1134,7 @@ static int uninit(priv_t *priv)
struct v4l2_buffer buf;
/* get performance */
- frames = 1 + lrintf((double)(priv->curr_frame - priv->first_frame) / (1e6 * getfps(priv)));
+ frames = 1 + lrintf((double)(priv->curr_frame - priv->first_frame) / 1e6 * getfps(priv));
dropped = frames - priv->frames;
/* turn off streaming */
diff --git a/sub_cc.c b/sub_cc.c
index 2acebf0..3a420ed 100644
--- a/sub_cc.c
+++ b/sub_cc.c
@@ -1,5 +1,5 @@
/*
- * sub_cc.c - Decoder for Closed Captions
+ * decoder for Closed Captions
*
* This decoder relies on MPlayer's OSD to display subtitles.
* Be warned that the decoding is somewhat preliminary, though it basically works.
@@ -130,7 +130,7 @@ static void append_char(char c)
{
if(cursor_pos==CC_MAX_LINE_LENGTH-1)
{
- fprintf(stderr,"sub_cc.c: append_char() reached CC_MAX_LINE_LENGTH!\n");
+ fprintf(stderr,"CC: append_char() reached CC_MAX_LINE_LENGTH!\n");
return;
}
bb->text[bb->lines - 1][cursor_pos++]=c;
diff --git a/subopt-helper.c b/subopt-helper.c
index d1a1692..6f4bcf6 100644
--- a/subopt-helper.c
+++ b/subopt-helper.c
@@ -45,18 +45,11 @@ static char const * parse_float( char const * const str, float * const valp );
* else a non-zero value is returned.
*
*/
-int subopt_parse( char const * const str, opt_t * opts )
+int subopt_parse( char const * const str, const opt_t * opts )
{
int parse_err = 0, idx;
unsigned int parse_pos = 0;
- /* Initialize set member to false. *
- * It is set to true if it was found in str */
- for ( idx=0; opts[idx].name; ++idx )
- {
- opts[idx].set = 0;
- }
-
if ( str )
{
while ( str[parse_pos] && !parse_err )
@@ -101,7 +94,7 @@ int subopt_parse( char const * const str, opt_t * opts )
if( strncmp( &str[parse_pos], opts[idx].name, opt_len ) == 0 )
{
/* option was found */
- opts[idx].set = 1; next = 1;
+ next = 1;
assert( opts[idx].valp && "Need a pointer to store the arg!" );
@@ -196,7 +189,7 @@ else if ( substr_len == opt_len+2 )
strncmp( &str[parse_pos+2], opts[idx].name, opt_len ) == 0 )
{
/* option was found but negated */
- opts[idx].set = 1; next = 1;
+ next = 1;
/* set arg to false */
*((int *)(opts[idx].valp)) = 0;
diff --git a/subopt-helper.h b/subopt-helper.h
index cd435d4..ea6bdd5 100644
--- a/subopt-helper.h
+++ b/subopt-helper.h
@@ -24,13 +24,10 @@ typedef struct opt_s
int type; ///< option type as defined in subopt-helper.h
void * valp; ///< pointer to the mem where the value should be stored
opt_test_f test; ///< argument test func ( optional )
- int set; ///< Is set internally by the parser if the option was found.
- ///< Don't use it at initialization of your opts, it will be
- ///< overriden anyway!
} opt_t;
/** parses the string for the options specified in opt */
-int subopt_parse( char const * const str, opt_t * opts );
+int subopt_parse( char const * const str, const opt_t * opts );
/*------------------ arg specific types and declaration -------------------*/
diff --git a/tremor/tremor.diff b/tremor/tremor.diff
index 393889a..2838721 100644
--- a/tremor/tremor.diff
+++ b/tremor/tremor.diff
@@ -166,3 +166,13 @@
+#endif /* 0 */
+
#endif /* _OS_TYPES_H */
+--- mapping0.c (revision 28274)
++++ mapping0.c (revision 28275)
+@@ -19,6 +20,7 @@
+ #include <string.h>
+ #include <math.h>
+ #include "ogg.h"
++#include "os.h"
+ #include "ivorbiscodec.h"
+ #include "mdct.h"
+ #include "codec_internal.h"
diff --git a/version.sh b/version.sh
index eb302c9..dee9bcf 100755
--- a/version.sh
+++ b/version.sh
@@ -8,9 +8,14 @@ svn_revision=$(cat snapshot_version 2> /dev/null)
test $svn_revision || svn_revision=$(LC_ALL=C svn info 2> /dev/null | grep Revision | cut -d' ' -f2)
test $svn_revision || svn_revision=$(grep revision .svn/entries 2>/dev/null | cut -d '"' -f2)
test $svn_revision || svn_revision=$(sed -n -e '/^dir$/{n;p;q;}' .svn/entries 2>/dev/null)
+test $svn_revision && svn_revision=SVN-r$svn_revision
test $svn_revision || svn_revision=UNKNOWN
-NEW_REVISION="#define VERSION \"SVN-r${svn_revision}${extra}\""
+# releases extract the version number from the VERSION file
+version=$(cat VERSION 2> /dev/null)
+test $version || version=$svn_revision
+
+NEW_REVISION="#define VERSION \"${version}${extra}\""
OLD_REVISION=$(cat version.h 2> /dev/null)
TITLE='#define MP_TITLE "%s "VERSION" (C) 2000-2009 MPlayer Team\n"'
--
mplayer packaging
More information about the pkg-multimedia-commits
mailing list