Merge svn changes up to r30055

This commit is contained in:
Uoti Urpala 2009-12-18 18:54:42 +02:00
commit efcc9ad712
40 changed files with 747 additions and 615 deletions

View File

@ -12,10 +12,10 @@ Thanks for reading MPlayer documentation !!!
each language in its own subdirectory.
b, If you prefer reading the documentation as a single big file it
can be found in the HTML-single/ directory, each language in its
can be found in the file MPlayer.html, each language in its
own subdirectory.
c, If the HTML/ or HTML-single/ directories don't contain your language,
c, If the HTML/ directory does not contain your language,
try the subdirectories in this very same folder.
@ -23,7 +23,7 @@ Thanks for reading MPlayer documentation !!!
a, Enter the xml/ directory, and read the README file there to find
out how to build a HTML version of the XML documentation. It will
be created in the HTML/ and HTML-single/ directories.
be created in the HTML/ directory.
b, If the xml/ directory doesn't contain your language, try the
subdirectories in this very same folder.

View File

@ -3115,11 +3115,11 @@ y coordinates are relative to the top-left corner of the window rather
than the screen.
The coordinates are relative to the screen given with \-xineramascreen for
the video output drivers that fully support \-xineramascreen (direct3d, gl, gl2,
vdpau, x11, xv, xvmc).
vdpau, x11, xv, xvmc, corevideo).
.br
.I NOTE:
This option is only supported by the x11, xmga, xv, xvmc, xvidix,
gl, gl2, directx, fbdev and tdfxfb video output drivers.
gl, gl2, directx, fbdev, tdfxfb and corevideo video output drivers.
.sp 1
.I EXAMPLE:
.PD 0
@ -3305,7 +3305,7 @@ This option is not suitable to only set the startup screen (because
it will always display on the given screen in fullscreen mode),
\-geometry is the best that is available for that purpose
currently.
Supported by at least the direct3d, gl, gl2, x11 and xv video output drivers.
Supported by at least the direct3d, gl, gl2, x11, xv and corevideo video output drivers.
.
.TP
.B \-zrbw (\-vo zr only)

View File

@ -1,4 +1,4 @@
.\" sync with en/mplayer.1 r29905
.\" sync with en/mplayer.1 r30053
.\" Encoding: UTF-8
.\" Reminder of hard terms which need better/final solution later:
.\" /capture; playtree in parent list; colorkey; retrace; desync; downmix;
@ -2935,14 +2935,14 @@ x 和 y 代表从屏幕左上角到显示图像左上角的距离(以像素为
如果使用 \-wid 选项指定了外部窗口,
那么 x 和 y 坐标是相对于窗口而不是屏幕的左上角。
坐标是相对于 \-xineramascreen 选项给出的屏幕,该屏幕用于完全支持 \-xineramascreen 的
视频输出的驱动direct3d、gl、gl2、vdpau、x11、xv、xvmc
视频输出的驱动direct3d、gl、gl2、vdpau、x11、xv、xvmc、corevideo)。
The coordinates are relative to the screen given with \-xineramascreen for
the video output drivers that fully support \-xineramascreen (direct3d, gl, gl2,
vdpau, x11, xv, xvmc).
.br
.I 注意:
此选项仅被 x11、xmga、xv、xvmc、xvidix、
gl、gl2、directx、fbdev 和 tdfxfb 视频输出驱动支持。
此选项仅被 x11、xmga、xv、xvmc、xvidix、gl、gl2、directx、fbdev、tdfxfb 和
corevideo 视频输出驱动支持。
.sp 1
.I 示例:
.PD 0
@ -3116,7 +3116,7 @@ ggi 和 gl2 的都支持此功能。
通常只能与 "\-fstype \-fullscreen" 或 "\-fstype none" 一起工作。
该选项不适用于仅仅设置启动屏幕(并且也不适合设置全屏屏幕),\-geometry 是目前可用
于此目的的最好选项。
至少 direct3d、gl、gl2、x11 和 xv 视频输出驱动支持该选项。
至少 direct3d、gl、gl2、x11、xv 和 corevideo 视频输出驱动支持该选项。
.TP
.B \-zrbw (仅用于 \-vo zr)
黑白显示。

View File

@ -2,11 +2,11 @@
include ../../config.mak
# Generated chunked HTML files go here.
HTML_CHUNKED = ../HTML
# Generated HTML files go here.
HTML = ../HTML
# Generated single HTML files go here.
HTML_SINGLE = ../HTML-single
MAIN_XML_ALL = $(foreach lang,$(DOC_LANG_ALL),$(lang)/main.xml)
CONFIGURE_GENERATED = html-chunk.xsl html-single.xsl xsltproc.sh xmllint.sh
all: html-chunked html-single
@ -18,48 +18,48 @@ help:
@echo "html-single-LANG : As above, but only one language."
@echo "html-chunked : HTML documentation for configured languages (multiple files)"
@echo "html-chunked-LANG : As above, but only one language."
@echo "xmllint : Check syntax of all xml files."
@echo "xmllint-LANG : Check syntax of LANG xml files."
@echo "clean : Purge the 'HTML' and 'HTML-single' directories."
@echo "xmllint : Check syntax of XML files for configured languages."
@echo "xmllint-LANG : Check syntax of LANG XML files."
@echo "clean : Purge the 'HTML' directory."
@echo "releaseclean : Remove generated files but keep the HTML."
@echo "distclean : Remove ALL generated files."
@echo "Substitute LANG for one of $(DOC_LANG_ALL)"
html-chunked: xsltproc.sh xmllint.sh $(HTML_CHUNKED) $(addprefix html-chunked-,$(DOC_LANGS))
html-chunked: $(addprefix html-chunked-,$(DOC_LANGS))
html-single: $(addprefix html-single-,$(DOC_LANGS))
html-single: xsltproc.sh xmllint.sh $(HTML_SINGLE) $(addprefix html-single-,$(DOC_LANGS))
xmllint: $(addprefix xmllint-,$(DOC_LANGS))
xmllint: xmllint.sh $(addprefix xmllint-,$(DOC_LANG_ALL))
$(foreach lang,$(DOC_LANG_ALL),$(HTML)/$(lang)):
mkdir -p $@
$(HTML_CHUNKED) $(HTML_SINGLE):
-mkdir -p $@
xsltproc.sh xmllint.sh:
$(CONFIGURE_GENERATED) $(MAIN_XML_ALL):
sh configure
define lang-def
html-chunked-$(1): xsltproc.sh xmllint.sh $(HTML_CHUNKED)
-mkdir -p $(HTML_CHUNKED)/$(1)
$(MAKE) HTMLDIR=../$(HTML_CHUNKED)/$(1) -C $(1) html-chunked
html-chunked-$(lang) html-single-$(lang): $(HTML)/$(lang) $(CONFIGURE_GENERATED)
html-single-$(1): xsltproc.sh xmllint.sh $(HTML_SINGLE)
-mkdir -p $(HTML_SINGLE)/$(1)
$(MAKE) HTMLFILE=../$(HTML_SINGLE)/$(1)/MPlayer.html -C $(1) html-single
html-chunked-$(lang):
$(MAKE) HTMLDIR=../$$< -C $(lang) html-chunked
xmllint-$(1): xmllint.sh
$(MAKE) HTMLFILE=../$(HTML_SINGLE)/$(1)/MPlayer.html -C $(1) xmllint
html-single-$(lang):
$(MAKE) HTMLDIR=../$$< -C $(lang) html-single
xmllint-$(lang): xmllint.sh
$(MAKE) -C $(lang) xmllint
endef
$(foreach lang, $(DOC_LANG_ALL),$(eval $(call lang-def,$(lang))))
$(foreach lang, $(DOC_LANG_ALL),$(eval $(lang-def)))
clean:
rm -rf $(HTML_CHUNKED) $(HTML_SINGLE)
-rm -rf $(HTML)
releaseclean:
rm -f $(foreach lang,$(DOC_LANG_ALL),$(lang)/main.xml)
rm -f $$(find . -name *.xml -type l)
rm -f html-chunk.xsl html-single.xsl xsltproc.sh xmllint.sh
-rm -f $(CONFIGURE_GENERATED)
-rm -f $(MAIN_XML_ALL)
-rm -f $$(find . -name *.xml -type l)
distclean: clean releaseclean
.PHONY: all help html-chunked* html-single* xmllint* *clean*
.PHONY: all help html-chunked html-single xmllint
.PHONY: html-chunked-* html-single-* xmllint-* *clean*

View File

@ -2,75 +2,35 @@
# Makefile.inc for Makefiles in subdirectories.
#
# Use customized html-chunk.xsl and/or html-single.xsl file if they exist...
# Also add html-common.xsl to depends if it exists.
ifeq (html-common.xsl,$(wildcard html-common.xsl))
COMMON_XSL_DEPS := html-common.xsl ../html-common.xsl
else
COMMON_XSL_DEPS := ../html-common.xsl
endif
ifeq (html-chunk.xsl,$(wildcard html-chunk.xsl))
HTML_CHUNK_XSL := html-chunk.xsl
CHUNK_XSL_DEPS := $(HTML_CHUNK_XSL) ../html-chunk.xsl $(COMMON_XSL_DEPS)
else
HTML_CHUNK_XSL := ../html-chunk.xsl
CHUNK_XSL_DEPS := $(HTML_CHUNK_XSL) ../html-common.xsl
endif
ifeq (html-single.xsl,$(wildcard html-single.xsl))
HTML_SINGLE_XSL := html-single.xsl
XSL_DEPS := $(HTML_SINGLE_XSL) ../html-single.xsl $(COMMON_XSL_DEPS)
else
HTML_SINGLE_XSL := ../html-single.xsl
XSL_DEPS := $(HTML_SINGLE_XSL) ../html-common.xsl
endif
# Fall back to the default HTML stylesheet if none is specified.
HTML_STYLESHEET ?= ../default.css
SINGLE_XSL_DEPS := $(HTML_SINGLE_XSL) ../html-common.xsl
# This is the main target...
all: html-chunked html-single
html-chunked: $(HTMLDIR)/index.html
html-single: $(HTMLFILE)
html-single: $(HTMLDIR)/MPlayer.html
SYMLINKS_DEPS:=$(if $(findstring yes,$(USE_SYMLINKS)), $(patsubst ../en/%,%,$(wildcard ../en/*.xml)))
SYMLINKS_DEPS := $(filter-out $(wildcard *.xml),$(notdir $(wildcard ../en/*.xml)))
xmllint: main.xml $(SYMLINKS_DEPS)
../xmllint.sh $<
$(HTMLDIR)/index.html: main.xml $(CHUNK_XSL_DEPS) $(SYMLINKS_DEPS)
ifndef HTMLDIR
$(warning $(HTMLDIR))
$(warning Error: HTMLDIR not set!!!)
$(warning Typically this means, that you've run make from a subdir of DOCS/xml.)
$(error Don't do this!)
endif
-rm -f $(HTMLDIR)/*
../xmllint.sh $<
cp -f $(HTML_STYLESHEET) $(HTMLDIR)/
$(HTMLDIR)/default.css:
cp -f ../default.css $(@D)
$(HTMLDIR)/index.html: main.xml $(CHUNK_XSL_DEPS) $(SYMLINKS_DEPS) xmllint $(HTMLDIR)/default.css
../xsltproc.sh $(HTMLDIR)/ $(HTML_CHUNK_XSL) $<
$(HTMLFILE): main.xml $(XSL_DEPS) $(SYMLINKS_DEPS)
ifndef HTMLFILE
$(warning Error: HTMLFILE not set!!!)
$(warning Typically this means, that you've run make from a subdir of DOCS/xml.)
$(error Don't do this!)
endif
-rm -f $(HTMLFILE)
../xmllint.sh $<
cp -f $(HTML_STYLESHEET) `dirname $(HTMLFILE)`
../xsltproc.sh $(HTMLFILE) $(HTML_SINGLE_XSL) $<
$(HTMLDIR)/MPlayer.html: main.xml $(SINGLE_XSL_DEPS) $(SYMLINKS_DEPS) xmllint $(HTMLDIR)/default.css
../xsltproc.sh $@ $(HTML_SINGLE_XSL) $<
../html-chunk.xsl ../html-single.xsl main.xml:
cd .. && sh configure
$(filter-out main.xml, $(patsubst ../en/%,%, $(wildcard ../en/*.xml))):
$(if $(findstring yes,$(USE_SYMLINKS)), ,exit 0;)\
for file in ../en/*.xml ; do \
if ! test -r `basename $$file` ; then \
ln -s $$file `basename $$file` ; \
fi; \
done
$(SYMLINKS_DEPS):
ln -s ../en/$@ $@
.PHONY: all html-chunked html-single xmllint

View File

@ -2,21 +2,17 @@ The documentation and its translations reside in subdirectories.
When building the documentation, the toplevel Makefile goes into
the subdirectories listed in the SUBDIRS variable and executes make
in each of those directories to create the HTML documentation
in subdirectories of the 'HTML' and 'HTML-single' directories.
in subdirectories of the 'HTML' directory.
IMPORTANT: Do NOT place sensitive files under 'HTML' or 'HTML-single'!
IMPORTANT: Do NOT place sensitive files under 'HTML'!
It is for generated documentation only.
The whole directory tree is wiped out by the Makefile
when running 'make distclean' or 'make clean'.
Also, subdirectories are wiped out one by one before
creating the HTML files.
Each subdirectory must have a Makefile. Its purpose is to include
the toplevel Makefile.inc file (with the rules to build the docs)
and add dependency information to the main target, $(HTMLDIR)/index.html.
The main target usually depends on all the XML and XSL files in the
subdirectory. (Note that the toplevel *.xsl files are added automatically
by Makefile.inc, so you do not have to list them.)
The main target usually depends on all the XML files in the subdirectory.
Adding new translations
@ -28,56 +24,8 @@ Adding new translations
2) Make sure to create a 'Makefile' for the translation -- you can
use 'en/Makefile' as an example.
3) If you want to use a customized XSL stylesheet, create one and name it
'html-common.xsl'. Also create two additional XSL stylesheets
('html-single.xsl' and 'html-chunk.xsl'), with content such as this:
html-single.xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="../html-single.xsl"/>
<xsl:include href="html-common.xsl"/>
</xsl:stylesheet>
html-chunk.xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="../html-chunk.xsl"/>
<xsl:include href="html-common.xsl"/>
</xsl:stylesheet>
Note: You mustn't xsl:include or xsl:import chunk.xsl directly!
Including it can (and will) break building of documentation if chunk.xsl
is installed at a nonstandard location.
4) If you wish to change the output encoding of generated files, create
html-common.xsl as suggested in step 4) and add strings such as these
somewhere between the <xsl:stylesheet ...> and </xsl:stylesheet> tags
(please, pay attention to quotes):
<xsl:param name="chunker.output.encoding" select="'your_encoding'"/>
<xsl:output encoding="your_encoding"/>
5) If you are using your own HTML stylesheet, edit your Makefile and set
the HTML_STYLESHEET variable to its name. Please, don't call your HTML
stylesheet 'default.css'.
6) In each translated file after the <?xml ... ?> tag you must put a note
3) In each translated file after the <?xml ... ?> tag you must put a note
like <!-- synced with r2 -->, where 2 is the revision of corresponding
English file (see comment at the top of file).
7) While your translation isn't finished, you can change USE_SYMLINKS
to "yes" in your Makefile. This will help you testing your translation:
English files will be used instead of untranslated ones, when generating
HTML docs.
That's all, in theory.

2
DOCS/xml/configure vendored
View File

@ -181,7 +181,7 @@ echo "Looking for a valid XSLT processor..."
# Also checks for Jade/OpenJade.
#FIXME: Add support for the xalan/xalan2 XSLT processors.
if xsltproc --version &> /dev/null
if xsltproc --version > /dev/null 2>&1
then
if test -z "$_fake_chunk_xsl"
then

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = no
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = yes
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = no
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = yes
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = no
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = yes
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = yes
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = no
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="../html-chunk.xsl"/>
<xsl:include href="html-common.xsl"/>
</xsl:stylesheet>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:param name="local.l10n.xml" select="document('')"/>
<l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0">
<l:l10n language="pl">
<l:gentext key="NOTE" text="Informacja"/>
<l:gentext key="Note" text="Informacja"/>
<l:gentext key="note" text="Informacja"/>
</l:l10n>
</l:i18n>
</xsl:stylesheet>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="../html-single.xsl"/>
<xsl:include href="html-common.xsl"/>
</xsl:stylesheet>

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = yes
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -1,11 +1,4 @@
# Set if you are using your own HTML stylesheet...
#HTML_STYLESHEET = mystyle.css
# Change to yes to enable symlinking missing files to English master versions
USE_SYMLINKS = yes
# Dependency information.
$(HTMLDIR)/index.html: $(wildcard *.xml)
$(HTMLFILE): $(wildcard *.xml)
$(HTMLDIR)/index.html $(HTMLDIR)/MPlayer.html: $(wildcard *.xml)
include ../Makefile.inc

View File

@ -269,7 +269,10 @@ SRCS_COMMON-$(TREMOR_INTERNAL) += tremor/bitwise.c \
SRCS_COMMON-$(TV) += stream/stream_tv.c stream/tv.c \
stream/frequencies.c stream/tvi_dummy.c
SRCS_COMMON-$(TV_BSDBT848) += stream/tvi_bsdbt848.c
SRCS_COMMON-$(TV_DSHOW) += stream/tvi_dshow.c
SRCS_COMMON-$(TV_DSHOW) += stream/tvi_dshow.c \
loader/dshow/guids.c \
loader/dshow/mediatype.c \
SRCS_COMMON-$(TV_V4L1) += stream/tvi_v4l.c stream/audio_in.c
SRCS_COMMON-$(TV_V4L2) += stream/tvi_v4l2.c stream/audio_in.c
SRCS_COMMON-$(UNRAR_EXEC) += unrar_exec.c

5
configure vendored
View File

@ -2962,7 +2962,8 @@ _socklib=no
for _ld_tmp in "" "-lsocket -lbind" "-lsocket -ldnet" "-lsocket -lnsl" "-lnsl" "-lsocket" ; do
cc_check $_ld_tmp && _ld_sock="$_ld_tmp" && _socklib=yes && break
done
if test $_winsock2_h = auto && ! cygwin ; then
test $_socklib = yes && test $_winsock2_h = auto && _winsock2_h=no
if test $_winsock2_h = auto ; then
_winsock2_h=no
cat > $TMPC << EOF
#include <winsock2.h>
@ -6972,7 +6973,7 @@ if test "$_x264" = auto ; then
cat > $TMPC << EOF
#include <inttypes.h>
#include <x264.h>
#if X264_BUILD < 78
#if X264_BUILD < 79
#error We do not support old versions of x264. Get the latest from git.
#endif
int main(void) { x264_encoder_open((void*)0); return 0; }

View File

@ -76,6 +76,14 @@ videocodec yuv8
out YV12,I420,UYVY
out BGR24,BGR15,BGR32
videocodec ffr210
info "FFmpeg R210 - 10-bit RGB"
status working
fourcc r210
driver ffmpeg
dll "r210"
out RGB48BE,RGB48LE
videocodec blackmagic
info "Blackmagic 10-bit"
status working
@ -162,6 +170,7 @@ videocodec ffmpeg2
fourcc m2v1
fourcc PIM2
fourcc LMP2 ; Lead mpeg2 in avi
fourcc slif ; SoftLab MPEG-2 I-frames Codec
driver ffmpeg
dll "mpeg2video"
out YV12,I420,IYUV
@ -200,6 +209,7 @@ videocodec ffmpeg12
fourcc mp2v,mpgv
fourcc m2v1,m1v1
fourcc LMP2 ; Lead mpeg2 in avi
fourcc slif ; SoftLab MPEG-2 I-frames Codec
driver ffmpeg
dll "mpegvideo"
out YV12,I420,IYUV
@ -1265,6 +1275,8 @@ videocodec ffmjpeg
fourcc SLMJ ; SL M-JPEG
fourcc MVJP ; Midvid JPEG Video Codec
fourcc IJLV ; Intel JPEG Library Video Codec
fourcc avi1,avi2
fourcc MTSJ
driver ffmpeg
dll mjpeg
out 444P
@ -1340,6 +1352,7 @@ videocodec LEAD
fourcc MJPG
fourcc jpeg MJPG ; MOV Photo-JPEG
fourcc LEAD
fourcc MTSJ MJPG
driver vfw
dll "LCodcCMP.dll"
out BGR24,BGR15

View File

@ -16,6 +16,10 @@
# video settings #
##################
# Specify vdpau codecs when using -vo vdpau.
#[vo.vdpau]
#vc=ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,ffodivxvdpau,
# Specify default video driver (see -vo help for a list).
#vo=xv
@ -82,6 +86,9 @@
# Resample the sound to 44100Hz with the lavcresample audio filter.
#af=lavcresample=44100
# Output audio to S/PDIF
#ao=alsa:device=spdif
#ac=hwac3,hwdts,hwmpa,
##################
# other settings #
@ -93,7 +100,7 @@
# Pretend to be Quicktime
# Fixes playback for apple.com/trailers redirects
#user-agent="QuickTime/7.1.3 (qtver=7.1.3;cpu=PPC;os=Mac 10.4.8)"
#user-agent="QuickTime"
# Drop frames to preserve audio/video sync.
#framedrop = yes

View File

@ -856,6 +856,7 @@ static const char help_text[]=
#define MSGTR_LIBVO_FONT_LOAD_FT_CannotPrepareOSDFont "Cannot prepare OSD font.\n"
#define MSGTR_LIBVO_FONT_LOAD_FT_CannotGenerateTables "Cannot generate tables.\n"
#define MSGTR_LIBVO_FONT_LOAD_FT_DoneFreeTypeFailed "FT_Done_FreeType failed.\n"
#define MSGTR_LIBVO_FONT_LOAD_FT_FontconfigNoMatch "Fontconfig failed to select a font. Trying without fontconfig...\n"
// sub.c
#define MSGTR_VO_SUB_Seekbar "Seekbar"

View File

@ -1,4 +1,4 @@
// Synced with help_mp-en.h r29912 (MSGTR_MPDEMUX_ASFHDR_HeaderSizeOver1MB)
// Synced with help_mp-en.h r30044 (MSGTR_VO_YUV4MPEG_InterlacedHeightDivisibleBy4)
// Reminder of hard terms which need better/final solution later:
// (file links to be updated later if available!);
// NAV; section/subsection; XScreenSaver; keycolor;
@ -842,7 +842,7 @@ static const char help_text[]=
#define MSGTR_LIBVO_FONT_LOAD_FT_DoneFreeTypeFailed "调用 FT_Done_FreeType 失败。\n"
// sub.c
#define MSGTR_VO_SUB_Seekbar "搜索条"
#define MSGTR_VO_SUB_Seekbar "定位条"
#define MSGTR_VO_SUB_Play "播放"
#define MSGTR_VO_SUB_Pause "暂停"
#define MSGTR_VO_SUB_Stop "停止"
@ -989,14 +989,14 @@ static const char help_text[]=
// 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_AGPMoveFailedToClearTheScreen "[VO_TDFXVID] AGP 移动操作未能清空屏幕。\n"
#define MSGTR_LIBVO_TDFXVID_BlitFailed "[VO_TDFXVID] 位块传输失败。\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] 纹理位块传输准备完毕%d(%d) x %d @ %d => %d(%d) x %d @ %d。\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] 纹理位块传输就绪%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"
@ -1004,9 +1004,9 @@ static const char help_text[]=
#define MSGTR_LIBVO_TDFXVID_GetImageTodo "获得图像 todo。\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] Y 平面 AGP 移动操作失败。\n"
#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnUPlane "[VO_TDFXVID] U 平面 AGP 移动操作失败。\n"
#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnVPlane "[VO_TDFXVID] V 平面 AGP 移动操作失败。\n"
#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnYPlane "[VO_TDFXVID] Y 平面 AGP 移动操作失败。\n"
#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnUPlane "[VO_TDFXVID] U 平面 AGP 移动操作失败。\n"
#define MSGTR_LIBVO_TDFXVID_AgpMoveFailedOnVPlane "[VO_TDFXVID] V 平面 AGP 移动操作失败。\n"
#define MSGTR_LIBVO_TDFXVID_UnknownFormat "[VO_TDFXVID] 未知格式0x%x。\n"
// vo_tdfxfb.c
@ -1016,10 +1016,10 @@ static const char help_text[]=
#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_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"
#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"
@ -1027,11 +1027,11 @@ static const char help_text[]=
// 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_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_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 Kb。\n"
@ -1043,7 +1043,7 @@ static const char help_text[]=
#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] 提示:为使用电视输出你应当在启动前插入 TV 接口。\n"\
#define MSGTR_LIBVO_VESA_Hint "[VO_VESA] 提示:为使用电视输出你应当在启动前插入电视接头。\n"\
"[VO_VESA] 因为 VESA BIOS 只在自检的时候执行初始化。\n"
#define MSGTR_LIBVO_VESA_UsingVesaMode "[VO_VESA] 使用 VESA 模式 (%u) = %x [%ux%u@%u]\n"
#define MSGTR_LIBVO_VESA_CantInitializeSwscaler "[VO_VESA] 无法初始化软件缩放功能。\n"
@ -1055,7 +1055,7 @@ static const char help_text[]=
#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_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"
@ -1068,15 +1068,15 @@ static const char help_text[]=
#define MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported "[VESA_LVO] 这个分支版本已经不再维护。\n[VESA_LVO] 请使用 -vo vesa:vidix。\n"
#define MSGTR_LIBVO_VESA_CouldntOpen "[VESA_LVO] 无法打开:‘%s\n"
#define MSGTR_LIBVO_VESA_InvalidOutputFormat "[VESA_LVI] 无效的输出格式:%s(%0X)\n"
#define MSGTR_LIBVO_VESA_IncompatibleDriverVersion "[VESA_LVO] 你的 fb_vid 驱动版本与该版本 MPlayer 不兼容!\n"
#define MSGTR_LIBVO_VESA_IncompatibleDriverVersion "[VESA_LVO] fb_vid 驱动版本与该版本 MPlayer 不兼容!\n"
// vo_x11.c
#define MSGTR_LIBVO_X11_DrawFrameCalled "[VO_X11] 已调用 draw_frame()\n"
// vo_xv.c
#define MSGTR_LIBVO_XV_DrawFrameCalled "[VO_XV] 已调用 draw_frame()\n"
#define MSGTR_LIBVO_XV_SharedMemoryNotSupported "[VO_XV] 共享内存模式不支持\n回复到正常 Xv 模式。\n"
#define MSGTR_LIBVO_XV_XvNotSupportedByX11 "[VO_XV] 对不起,该 X11 版本/驱动不支持 Xv\n[VO_XV] ******** 试使用 -vo x11 或 -vo sdl *********\n"
#define MSGTR_LIBVO_XV_SharedMemoryNotSupported "[VO_XV] 不支持共享内存模式\n回复到正常 Xv 模式。\n"
#define MSGTR_LIBVO_XV_XvNotSupportedByX11 "[VO_XV] 对不起,该 X11 版本/驱动不支持 Xv\n[VO_XV] ******** 请尝试使用 -vo x11 或 -vo sdl *********\n"
#define MSGTR_LIBVO_XV_XvQueryAdaptorsFailed "[VO_XV] XvQueryAdaptors 失败。\n"
#define MSGTR_LIBVO_XV_InvalidPortParameter "[VO_XV] 无效的端口参数,改用端口 0。\n"
#define MSGTR_LIBVO_XV_CouldNotGrabPort "[VO_XV] 无法绑定端口 %i。\n"
@ -1440,40 +1440,40 @@ static const char help_text[]=
// asfheader.c
#define MSGTR_MPDEMUX_ASFHDR_HeaderSizeOver1MB "致命: 头部的大小超过 1 MB (%d)!\n请联系 MPlayer 的作者, 并且发送或上传此文件。\n"
#define MSGTR_MPDEMUX_ASFHDR_HeaderMallocFailed "不能为头部分配 %d 字节的空间。\n"
#define MSGTR_MPDEMUX_ASFHDR_EOFWhileReadingHeader "读 ASF 头部时遇到 EOF, 文件损坏或不完整?\n"
#define MSGTR_MPDEMUX_ASFHDR_DVRWantsLibavformat "DVR 可能只能和 libavformat 一起工作, 如果有问题请试试 -demuxer 35\n"
#define MSGTR_MPDEMUX_ASFHDR_NoDataChunkAfterHeader "没有数据块紧随头部之后!\n"
#define MSGTR_MPDEMUX_ASFHDR_AudioVideoHeaderNotFound "ASF: 找不到音频或视频头部 - 文件损坏?\n"
#define MSGTR_MPDEMUX_ASFHDR_InvalidLengthInASFHeader "无效的 ASF 头部长度!\n"
#define MSGTR_MPDEMUX_ASFHDR_DRMLicenseURL "DRM许可证URL地址%s\n"
#define MSGTR_MPDEMUX_ASFHDR_DRMProtected "该文件经过了DRM加密不能在Mplayer中播放!\n"
#define MSGTR_MPDEMUX_ASFHDR_HeaderSizeOver1MB "致命错误:文件头部大小超过 1 MB%d\n请联系 MPlayer 的作者, 并且发送或上传此文件。\n"
#define MSGTR_MPDEMUX_ASFHDR_HeaderMallocFailed "无法为文件头部分配 %d 字节的存放空间。\n"
#define MSGTR_MPDEMUX_ASFHDR_EOFWhileReadingHeader "读 ASF 头部时遇到文件结尾,文件损坏或不完整?\n"
#define MSGTR_MPDEMUX_ASFHDR_DVRWantsLibavformat "DVR 可能只能与 libavformat 一同使用,如果有问题请尝试 -demuxer 35。\n"
#define MSGTR_MPDEMUX_ASFHDR_NoDataChunkAfterHeader "文件头部之后没有数据块!\n"
#define MSGTR_MPDEMUX_ASFHDR_AudioVideoHeaderNotFound "ASF:未找到音频或视频头部 - 文件损坏?\n"
#define MSGTR_MPDEMUX_ASFHDR_InvalidLengthInASFHeader "ASF 头部长度无效!\n"
#define MSGTR_MPDEMUX_ASFHDR_DRMLicenseURL "DRM 许可证 URL 地址:%s\n"
#define MSGTR_MPDEMUX_ASFHDR_DRMProtected "该文件经过了 DRM 加密保护,无法在 Mplayer 中播放!\n"
// aviheader.c
#define MSGTR_MPDEMUX_AVIHDR_EmptyList "**空列表?!\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundMovieAt "在 0x%X - 0x%X 找到电影\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundBitmapInfoHeader "找到 'bih', %u 字节的 %d\n"
#define MSGTR_MPDEMUX_AVIHDR_EmptyList "**空列表\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundMovieAt "于 0x%X - 0x%X 位置找到影片数据\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundBitmapInfoHeader "找到bih%u 字节,%d\n"
#define MSGTR_MPDEMUX_AVIHDR_RegeneratingKeyfTableForMPG4V1 "为 M$ mpg4v1 视频重新生成关键帧表。\n"
#define MSGTR_MPDEMUX_AVIHDR_RegeneratingKeyfTableForDIVX3 "为 DIVX3 视频重新生成关键帧表。\n"
#define MSGTR_MPDEMUX_AVIHDR_RegeneratingKeyfTableForMPEG4 "为 MPEG4 视频重新生成关键帧表。\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundWaveFmt "找到 'wf', %d 字节的 %d\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundAVIV2Header "AVI: 发现 dmlh (size=%d) (total_frames=%d)\n"
#define MSGTR_MPDEMUX_AVIHDR_ReadingIndexBlockChunksForFrames "正在读 INDEX 块, %d 区块的 %d 帧 (fpos=%"PRId64")。\n"
#define MSGTR_MPDEMUX_AVIHDR_AdditionalRIFFHdr "附加的 RIFF 头...\n"
#define MSGTR_MPDEMUX_AVIHDR_WarnNotExtendedAVIHdr "** 警告: 这不是扩展的 AVI 头部..\n"
#define MSGTR_MPDEMUX_AVIHDR_BrokenChunk "区块损坏? chunksize=%d (id=%.4s)\n"
#define MSGTR_MPDEMUX_AVIHDR_BuildingODMLidx "AVI: ODML: 建造 ODML 索引 (%d superindexchunks)。\n"
#define MSGTR_MPDEMUX_AVIHDR_BrokenODMLfile "AVI: ODML: 检测到损坏的(不完整的?)文件。将使用传统的索引。\n"
#define MSGTR_MPDEMUX_AVIHDR_CantReadIdxFile "不能读索引文件 %s: %s\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundWaveFmt "找到wf%d 字节,%d\n"
#define MSGTR_MPDEMUX_AVIHDR_FoundAVIV2Header "AVI发现 dmlh (size=%d) (total_frames=%d)\n"
#define MSGTR_MPDEMUX_AVIHDR_ReadingIndexBlockChunksForFrames "正在读取索引数据块,%d 块数据用于 %d 帧 (fpos=%"PRId64")。\n"
#define MSGTR_MPDEMUX_AVIHDR_AdditionalRIFFHdr "额外的 RIFF 头部数据...\n"
#define MSGTR_MPDEMUX_AVIHDR_WarnNotExtendedAVIHdr "** 警告:这不是扩展格式的 AVI 头部..\n"
#define MSGTR_MPDEMUX_AVIHDR_BrokenChunk "数据块损坏? chunksize=%d (id=%.4s)\n"
#define MSGTR_MPDEMUX_AVIHDR_BuildingODMLidx "AVIODML造 ODML 索引 (%d superindexchunks)。\n"
#define MSGTR_MPDEMUX_AVIHDR_BrokenODMLfile "AVIODML检测到损坏的不完整的文件。将使用传统的索引模式。\n"
#define MSGTR_MPDEMUX_AVIHDR_CantReadIdxFile "无法读索引文件 %s%s\n"
#define MSGTR_MPDEMUX_AVIHDR_NotValidMPidxFile "%s 不是有效的 MPlayer 索引文件。\n"
#define MSGTR_MPDEMUX_AVIHDR_FailedMallocForIdxFile "无法为来自 %s 的索引数据分配内存。\n"
#define MSGTR_MPDEMUX_AVIHDR_PrematureEOF "过早结束的索引文件 %s\n"
#define MSGTR_MPDEMUX_AVIHDR_IdxFileLoaded "装载索引文件: %s\n"
#define MSGTR_MPDEMUX_AVIHDR_GeneratingIdx "正在生成索引: %3lu %s \r"
#define MSGTR_MPDEMUX_AVIHDR_IdxGeneratedForHowManyChunks "AVI: 为 %d 区块生成索引表!\n"
#define MSGTR_MPDEMUX_AVIHDR_Failed2WriteIdxFile "无法写索引文件 %s: %s\n"
#define MSGTR_MPDEMUX_AVIHDR_IdxFileSaved "已保存索引文件: %s\n"
#define MSGTR_MPDEMUX_AVIHDR_IdxFileLoaded "已加载索引文件:%s\n"
#define MSGTR_MPDEMUX_AVIHDR_GeneratingIdx "正在生成索引%3lu %s \r"
#define MSGTR_MPDEMUX_AVIHDR_IdxGeneratedForHowManyChunks "AVI:为 %d 块数据生成索引表!\n"
#define MSGTR_MPDEMUX_AVIHDR_Failed2WriteIdxFile "无法写入索引文件 %s%s\n"
#define MSGTR_MPDEMUX_AVIHDR_IdxFileSaved "已保存索引文件%s\n"
// demux_audio.c
#define MSGTR_MPDEMUX_AUDIO_UnknownFormat "音频分路器: 未知格式 %d。\n"

View File

@ -632,11 +632,11 @@ if (index_file_load) {
}
gen_index:
if(index_mode>=2 || (priv->idx_size==0 && index_mode==1)){
int idx_pos = 0;
// build index for file:
stream_reset(demuxer->stream);
stream_seek(demuxer->stream,demuxer->movi_start);
priv->idx_pos=0;
priv->idx_size=0;
priv->idx=NULL;
@ -657,13 +657,13 @@ if(index_mode>=2 || (priv->idx_size==0 && index_mode==1)){
if(stream_eof(demuxer->stream)) break;
if(!id || avi_stream_id(id)==100) goto skip_chunk; // bad ID (or padding?)
if(priv->idx_pos>=priv->idx_size){
if(idx_pos>=priv->idx_size){
// priv->idx_size+=32;
priv->idx_size+=1024; // +16kB
priv->idx=realloc(priv->idx,priv->idx_size*sizeof(AVIINDEXENTRY));
if(!priv->idx){priv->idx_pos=0; break;} // error!
if(!priv->idx){idx_pos=0; break;} // error!
}
idx=&((AVIINDEXENTRY *)priv->idx)[priv->idx_pos++];
idx=&((AVIINDEXENTRY *)priv->idx)[idx_pos++];
idx->ckid=id;
idx->dwFlags=AVIIF_KEYFRAME; // FIXME
idx->dwFlags|=(demuxer->filepos>>16)&0xffff0000U;
@ -713,7 +713,7 @@ skip_chunk:
skip=(len+1)&(~1UL); // total bytes in this chunk
stream_seek(demuxer->stream,8+demuxer->filepos+skip);
}
priv->idx_size=priv->idx_pos;
priv->idx_size=idx_pos;
mp_tmsg(MSGT_HEADER,MSGL_INFO,"AVI: Generated index table for %d chunks!\n",priv->idx_size);
if( mp_msg_test(MSGT_HEADER,MSGL_DBG2) ) print_index(priv->idx,priv->idx_size,MSGL_DBG2);

View File

@ -1144,6 +1144,7 @@ void load_font_ft(int width, int height, font_desc_t** fontp, const char *font_n
FcChar8 *s;
int face_index;
FcBool scalable;
FcResult result;
#endif
font_desc_t *vo_font = *fontp;
vo_image_width = width;
@ -1162,25 +1163,29 @@ void load_font_ft(int width, int height, font_desc_t** fontp, const char *font_n
FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
FcDefaultSubstitute(fc_pattern);
fc_pattern2 = fc_pattern;
fc_pattern = FcFontMatch(0, fc_pattern, 0);
FcPatternDestroy(fc_pattern2);
FcPatternGetBool(fc_pattern, FC_SCALABLE, 0, &scalable);
if (scalable != FcTrue) {
FcPatternDestroy(fc_pattern);
fc_pattern = FcNameParse("sans-serif");
FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
FcDefaultSubstitute(fc_pattern);
fc_pattern2 = fc_pattern;
fc_pattern = FcFontMatch(0, fc_pattern, 0);
FcPatternDestroy(fc_pattern2);
}
// s doesn't need to be freed according to fontconfig docs
FcPatternGetString(fc_pattern, FC_FILE, 0, &s);
FcPatternGetInteger(fc_pattern, FC_INDEX, 0, &face_index);
*fontp=read_font_desc_ft(s, face_index, width, height, font_scale_factor);
FcPatternDestroy(fc_pattern);
fc_pattern = FcFontMatch(0, fc_pattern, &result);
if (fc_pattern) {
FcPatternDestroy(fc_pattern2);
FcPatternGetBool(fc_pattern, FC_SCALABLE, 0, &scalable);
if (scalable != FcTrue) {
FcPatternDestroy(fc_pattern);
fc_pattern = FcNameParse("sans-serif");
FcConfigSubstitute(0, fc_pattern, FcMatchPattern);
FcDefaultSubstitute(fc_pattern);
fc_pattern2 = fc_pattern;
fc_pattern = FcFontMatch(0, fc_pattern, 0);
FcPatternDestroy(fc_pattern2);
}
// s doesn't need to be freed according to fontconfig docs
FcPatternGetString(fc_pattern, FC_FILE, 0, &s);
FcPatternGetInteger(fc_pattern, FC_INDEX, 0, &face_index);
*fontp=read_font_desc_ft(s, face_index, width, height, font_scale_factor);
FcPatternDestroy(fc_pattern);
return;
}
mp_tmsg(MSGT_OSD, MSGL_ERR, "Fontconfig failed to select a font. "
"Trying without fontconfig...\n");
}
else
#endif
*fontp=read_font_desc_ft(font_name, 0, width, height, font_scale_factor);
}

View File

@ -36,6 +36,47 @@
#include "gl_common.h"
#include "libavutil/common.h"
void (GLAPIENTRY *Begin)(GLenum);
void (GLAPIENTRY *End)(void);
void (GLAPIENTRY *Viewport)(GLint, GLint, GLsizei, GLsizei);
void (GLAPIENTRY *MatrixMode)(GLenum);
void (GLAPIENTRY *LoadIdentity)(void);
void (GLAPIENTRY *Scaled)(double, double, double);
void (GLAPIENTRY *Ortho)(double, double, double, double, double, double);
void (GLAPIENTRY *PushMatrix)(void);
void (GLAPIENTRY *PopMatrix)(void);
void (GLAPIENTRY *Clear)(GLbitfield);
GLuint (GLAPIENTRY *GenLists)(GLsizei);
void (GLAPIENTRY *DeleteLists)(GLuint, GLsizei);
void (GLAPIENTRY *NewList)(GLuint, GLenum);
void (GLAPIENTRY *EndList)(void);
void (GLAPIENTRY *CallList)(GLuint);
void (GLAPIENTRY *CallLists)(GLsizei, GLenum, const GLvoid *);
void (GLAPIENTRY *GenTextures)(GLsizei, GLuint *);
void (GLAPIENTRY *DeleteTextures)(GLsizei, const GLuint *);
void (GLAPIENTRY *TexEnvi)(GLenum, GLenum, GLint);
void (GLAPIENTRY *Color4ub)(GLubyte, GLubyte, GLubyte, GLubyte);
void (GLAPIENTRY *Color3f)(GLfloat, GLfloat, GLfloat);
void (GLAPIENTRY *ClearColor)(GLclampf, GLclampf, GLclampf, GLclampf);
void (GLAPIENTRY *Enable)(GLenum);
void (GLAPIENTRY *Disable)(GLenum);
const GLubyte *(GLAPIENTRY *GetString)(GLenum);
void (GLAPIENTRY *DrawBuffer)(GLenum);
void (GLAPIENTRY *DepthMask)(GLboolean);
void (GLAPIENTRY *BlendFunc)(GLenum, GLenum);
void (GLAPIENTRY *Flush)(void);
void (GLAPIENTRY *Finish)(void);
void (GLAPIENTRY *PixelStorei)(GLenum, GLint);
void (GLAPIENTRY *TexImage1D)(GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
void (GLAPIENTRY *TexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
void (GLAPIENTRY *TexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
void (GLAPIENTRY *TexParameteri)(GLenum, GLenum, GLint);
void (GLAPIENTRY *TexParameterf)(GLenum, GLenum, GLfloat);
void (GLAPIENTRY *TexParameterfv)(GLenum, GLenum, const GLfloat *);
void (GLAPIENTRY *TexCoord2f)(GLfloat, GLfloat);
void (GLAPIENTRY *Vertex2f)(GLfloat, GLfloat);
void (GLAPIENTRY *GetIntegerv)(GLenum, GLint *);
/**
* \defgroup glextfunctions OpenGL extension functions
*
@ -43,43 +84,43 @@
* context is created
* \{
*/
void (APIENTRY *GenBuffers)(GLsizei, GLuint *);
void (APIENTRY *DeleteBuffers)(GLsizei, const GLuint *);
void (APIENTRY *BindBuffer)(GLenum, GLuint);
GLvoid* (APIENTRY *MapBuffer)(GLenum, GLenum);
GLboolean (APIENTRY *UnmapBuffer)(GLenum);
void (APIENTRY *BufferData)(GLenum, intptr_t, const GLvoid *, GLenum);
void (APIENTRY *CombinerParameterfv)(GLenum, const GLfloat *);
void (APIENTRY *CombinerParameteri)(GLenum, GLint);
void (APIENTRY *CombinerInput)(GLenum, GLenum, GLenum, GLenum, GLenum,
void (GLAPIENTRY *GenBuffers)(GLsizei, GLuint *);
void (GLAPIENTRY *DeleteBuffers)(GLsizei, const GLuint *);
void (GLAPIENTRY *BindBuffer)(GLenum, GLuint);
GLvoid* (GLAPIENTRY *MapBuffer)(GLenum, GLenum);
GLboolean (GLAPIENTRY *UnmapBuffer)(GLenum);
void (GLAPIENTRY *BufferData)(GLenum, intptr_t, const GLvoid *, GLenum);
void (GLAPIENTRY *CombinerParameterfv)(GLenum, const GLfloat *);
void (GLAPIENTRY *CombinerParameteri)(GLenum, GLint);
void (GLAPIENTRY *CombinerInput)(GLenum, GLenum, GLenum, GLenum, GLenum,
GLenum);
void (APIENTRY *CombinerOutput)(GLenum, GLenum, GLenum, GLenum, GLenum,
void (GLAPIENTRY *CombinerOutput)(GLenum, GLenum, GLenum, GLenum, GLenum,
GLenum, GLenum, GLboolean, GLboolean,
GLboolean);
void (APIENTRY *BeginFragmentShader)(void);
void (APIENTRY *EndFragmentShader)(void);
void (APIENTRY *SampleMap)(GLuint, GLuint, GLenum);
void (APIENTRY *ColorFragmentOp2)(GLenum, GLuint, GLuint, GLuint, GLuint,
void (GLAPIENTRY *BeginFragmentShader)(void);
void (GLAPIENTRY *EndFragmentShader)(void);
void (GLAPIENTRY *SampleMap)(GLuint, GLuint, GLenum);
void (GLAPIENTRY *ColorFragmentOp2)(GLenum, GLuint, GLuint, GLuint, GLuint,
GLuint, GLuint, GLuint, GLuint, GLuint);
void (APIENTRY *ColorFragmentOp3)(GLenum, GLuint, GLuint, GLuint, GLuint,
void (GLAPIENTRY *ColorFragmentOp3)(GLenum, GLuint, GLuint, GLuint, GLuint,
GLuint, GLuint, GLuint, GLuint, GLuint,
GLuint, GLuint, GLuint);
void (APIENTRY *SetFragmentShaderConstant)(GLuint, const GLfloat *);
void (APIENTRY *ActiveTexture)(GLenum);
void (APIENTRY *BindTexture)(GLenum, GLuint);
void (APIENTRY *MultiTexCoord2f)(GLenum, GLfloat, GLfloat);
void (APIENTRY *GenPrograms)(GLsizei, GLuint *);
void (APIENTRY *DeletePrograms)(GLsizei, const GLuint *);
void (APIENTRY *BindProgram)(GLenum, GLuint);
void (APIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *);
void (APIENTRY *GetProgramiv)(GLenum, GLenum, GLint *);
void (APIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat,
void (GLAPIENTRY *SetFragmentShaderConstant)(GLuint, const GLfloat *);
void (GLAPIENTRY *ActiveTexture)(GLenum);
void (GLAPIENTRY *BindTexture)(GLenum, GLuint);
void (GLAPIENTRY *MultiTexCoord2f)(GLenum, GLfloat, GLfloat);
void (GLAPIENTRY *GenPrograms)(GLsizei, GLuint *);
void (GLAPIENTRY *DeletePrograms)(GLsizei, const GLuint *);
void (GLAPIENTRY *BindProgram)(GLenum, GLuint);
void (GLAPIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *);
void (GLAPIENTRY *GetProgramiv)(GLenum, GLenum, GLint *);
void (GLAPIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat,
GLfloat, GLfloat);
int (APIENTRY *SwapInterval)(int);
void (APIENTRY *TexImage3D)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei,
int (GLAPIENTRY *SwapInterval)(int);
void (GLAPIENTRY *TexImage3D)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei,
GLint, GLenum, GLenum, const GLvoid *);
void* (APIENTRY *AllocateMemoryMESA)(void *, int, size_t, float, float, float);
void (APIENTRY *FreeMemoryMESA)(void *, int, void *);
void* (GLAPIENTRY *AllocateMemoryMESA)(void *, int, size_t, float, float, float);
void (GLAPIENTRY *FreeMemoryMESA)(void *, int, void *);
/** \} */ // end of glextfunctions group
//! \defgroup glgeneral OpenGL general helper functions
@ -107,7 +148,7 @@ void glAdjustAlignment(int stride) {
gl_alignment=2;
else
gl_alignment=1;
glPixelStorei (GL_UNPACK_ALIGNMENT, gl_alignment);
PixelStorei(GL_UNPACK_ALIGNMENT, gl_alignment);
}
struct gl_name_map_struct {
@ -289,9 +330,54 @@ typedef struct {
void *funcptr;
const char *extstr;
const char *funcnames[7];
void *fallback;
} extfunc_desc_t;
#define DEF_FUNC_DESC(name) {&name, NULL, {"gl"#name, NULL}, gl ##name}
static const extfunc_desc_t extfuncs[] = {
// these aren't extension functions but we query them anyway to allow
// different "backends" with one binary
DEF_FUNC_DESC(Begin),
DEF_FUNC_DESC(End),
DEF_FUNC_DESC(Viewport),
DEF_FUNC_DESC(MatrixMode),
DEF_FUNC_DESC(LoadIdentity),
DEF_FUNC_DESC(Scaled),
DEF_FUNC_DESC(Ortho),
DEF_FUNC_DESC(PushMatrix),
DEF_FUNC_DESC(PopMatrix),
DEF_FUNC_DESC(Clear),
DEF_FUNC_DESC(GenLists),
DEF_FUNC_DESC(DeleteLists),
DEF_FUNC_DESC(NewList),
DEF_FUNC_DESC(EndList),
DEF_FUNC_DESC(CallList),
DEF_FUNC_DESC(CallLists),
DEF_FUNC_DESC(GenTextures),
DEF_FUNC_DESC(DeleteTextures),
DEF_FUNC_DESC(TexEnvi),
DEF_FUNC_DESC(Color4ub),
DEF_FUNC_DESC(Color3f),
DEF_FUNC_DESC(ClearColor),
DEF_FUNC_DESC(Enable),
DEF_FUNC_DESC(Disable),
DEF_FUNC_DESC(DrawBuffer),
DEF_FUNC_DESC(DepthMask),
DEF_FUNC_DESC(BlendFunc),
DEF_FUNC_DESC(Flush),
DEF_FUNC_DESC(Finish),
DEF_FUNC_DESC(PixelStorei),
DEF_FUNC_DESC(TexImage1D),
DEF_FUNC_DESC(TexImage2D),
DEF_FUNC_DESC(TexSubImage2D),
DEF_FUNC_DESC(TexParameteri),
DEF_FUNC_DESC(TexParameterf),
DEF_FUNC_DESC(TexParameterfv),
DEF_FUNC_DESC(TexCoord2f),
DEF_FUNC_DESC(Vertex2f),
DEF_FUNC_DESC(GetIntegerv),
// here start the real extensions
{&GenBuffers, NULL, {"glGenBuffers", "glGenBuffersARB", NULL}},
{&DeleteBuffers, NULL, {"glDeleteBuffers", "glDeleteBuffersARB", NULL}},
{&BindBuffer, NULL, {"glBindBuffer", "glBindBufferARB", NULL}},
@ -332,8 +418,18 @@ static const extfunc_desc_t extfuncs[] = {
static void getFunctions(void *(*getProcAddress)(const GLubyte *),
const char *ext2) {
const extfunc_desc_t *dsc;
const char *extensions = (const char *)glGetString(GL_EXTENSIONS);
const char *extensions;
char *allexts;
if (!getProcAddress)
getProcAddress = setNull;
// special case, we need glGetString before starting to find the other functions
GetString = getProcAddress("glGetString");
if (!GetString)
GetString = glGetString;
extensions = (const char *)GetString(GL_EXTENSIONS);
if (!extensions) extensions = "";
if (!ext2) ext2 = "";
allexts = malloc(strlen(extensions) + strlen(ext2) + 2);
@ -341,8 +437,6 @@ static void getFunctions(void *(*getProcAddress)(const GLubyte *),
strcat(allexts, " ");
strcat(allexts, ext2);
mp_msg(MSGT_VO, MSGL_DBG2, "OpenGL extensions string:\n%s\n", allexts);
if (!getProcAddress)
getProcAddress = setNull;
for (dsc = extfuncs; dsc->funcptr; dsc++) {
void *ptr = NULL;
int i;
@ -350,6 +444,8 @@ static void getFunctions(void *(*getProcAddress)(const GLubyte *),
for (i = 0; !ptr && dsc->funcnames[i]; i++)
ptr = getProcAddress((const GLubyte *)dsc->funcnames[i]);
}
if (!ptr)
ptr = dsc->fallback;
*(void **)dsc->funcptr = ptr;
}
if (strstr(allexts, "_texture_float"))
@ -383,16 +479,16 @@ void glCreateClearTex(GLenum target, GLenum fmt, GLenum format, GLenum type, GLi
init = malloc(stride * h);
memset(init, val, stride * h);
glAdjustAlignment(stride);
glPixelStorei(GL_UNPACK_ROW_LENGTH, w);
glTexImage2D(target, 0, fmt, w, h, 0, format, type, init);
glTexParameterf(target, GL_TEXTURE_PRIORITY, 1.0);
glTexParameteri(target, GL_TEXTURE_MIN_FILTER, filter);
glTexParameteri(target, GL_TEXTURE_MAG_FILTER, filter);
glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
PixelStorei(GL_UNPACK_ROW_LENGTH, w);
TexImage2D(target, 0, fmt, w, h, 0, format, type, init);
TexParameterf(target, GL_TEXTURE_PRIORITY, 1.0);
TexParameteri(target, GL_TEXTURE_MIN_FILTER, filter);
TexParameteri(target, GL_TEXTURE_MAG_FILTER, filter);
TexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
TexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// Border texels should not be used with CLAMP_TO_EDGE
// We set a sane default anyway.
glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, border);
TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, border);
free(init);
}
@ -540,13 +636,13 @@ void glUploadTex(GLenum target, GLenum format, GLenum type,
}
// this is not always correct, but should work for MPlayer
glAdjustAlignment(stride);
glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / glFmt2bpp(format, type));
PixelStorei(GL_UNPACK_ROW_LENGTH, stride / glFmt2bpp(format, type));
for (; y + slice <= y_max; y += slice) {
glTexSubImage2D(target, 0, x, y, w, slice, format, type, data);
TexSubImage2D(target, 0, x, y, w, slice, format, type, data);
data += stride * slice;
}
if (y < y_max)
glTexSubImage2D(target, 0, x, y, w, y_max - y, format, type, data);
TexSubImage2D(target, 0, x, y, w, y_max - y, format, type, data);
}
static void fillUVcoeff(GLfloat *ucoef, GLfloat *vcoef,
@ -585,11 +681,11 @@ static void glSetupYUVCombiners(float uvcos, float uvsin) {
mp_msg(MSGT_VO, MSGL_FATAL, "[gl] Combiner functions missing!\n");
return;
}
glGetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &i);
GetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &i);
if (i < 2)
mp_msg(MSGT_VO, MSGL_ERR,
"[gl] 2 general combiners needed for YUV combiner support (found %i)\n", i);
glGetIntegerv(GL_MAX_TEXTURE_UNITS, &i);
GetIntegerv(GL_MAX_TEXTURE_UNITS, &i);
if (i < 3)
mp_msg(MSGT_VO, MSGL_ERR,
"[gl] 3 texture units needed for YUV combiner support (found %i)\n", i);
@ -645,11 +741,11 @@ static void glSetupYUVCombinersATI(float uvcos, float uvsin) {
mp_msg(MSGT_VO, MSGL_FATAL, "[gl] Combiner (ATI) functions missing!\n");
return;
}
glGetIntegerv(GL_NUM_FRAGMENT_REGISTERS_ATI, &i);
GetIntegerv(GL_NUM_FRAGMENT_REGISTERS_ATI, &i);
if (i < 3)
mp_msg(MSGT_VO, MSGL_ERR,
"[gl] 3 registers needed for YUV combiner (ATI) support (found %i)\n", i);
glGetIntegerv (GL_MAX_TEXTURE_UNITS, &i);
GetIntegerv (GL_MAX_TEXTURE_UNITS, &i);
if (i < 3)
mp_msg(MSGT_VO, MSGL_ERR,
"[gl] 3 texture units needed for YUV combiner (ATI) support (found %i)\n", i);
@ -711,11 +807,11 @@ static void gen_spline_lookup_tex(GLenum unit) {
store_weights(0, tex);
store_weights(1, &tex[4 * (LOOKUP_BSPLINE_RES - 1)]);
ActiveTexture(unit);
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA16, LOOKUP_BSPLINE_RES, 0, GL_RGBA, GL_FLOAT, tex);
glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_PRIORITY, 1.0);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
TexImage1D(GL_TEXTURE_1D, 0, GL_RGBA16, LOOKUP_BSPLINE_RES, 0, GL_RGBA, GL_FLOAT, tex);
TexParameterf(GL_TEXTURE_1D, GL_TEXTURE_PRIORITY, 1.0);
TexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
TexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
TexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
ActiveTexture(GL_TEXTURE0);
free(tex);
}
@ -1024,15 +1120,15 @@ static void create_conv_textures(gl_conversion_params_t *params, int *texu, char
lookup_data = malloc(3 * sz * sz * sz);
gen_yuv2rgb_map(params, lookup_data, LOOKUP_3DRES);
glAdjustAlignment(sz);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
PixelStorei(GL_UNPACK_ROW_LENGTH, 0);
TexImage3D(GL_TEXTURE_3D, 0, 3, sz, sz, sz, 1,
GL_RGB, GL_UNSIGNED_BYTE, lookup_data);
glTexParameterf(GL_TEXTURE_3D, GL_TEXTURE_PRIORITY, 1.0);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP);
TexParameterf(GL_TEXTURE_3D, GL_TEXTURE_PRIORITY, 1.0);
TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP);
TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP);
TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP);
ActiveTexture(GL_TEXTURE0);
texs[0] += '0';
}
@ -1158,13 +1254,13 @@ int loadGPUProgram(GLenum target, char *prog) {
return 0;
}
ProgramString(target, GL_PROGRAM_FORMAT_ASCII, strlen(prog), prog);
glGetIntegerv(GL_PROGRAM_ERROR_POSITION, &err);
GetIntegerv(GL_PROGRAM_ERROR_POSITION, &err);
if (err != -1) {
mp_msg(MSGT_VO, MSGL_ERR,
"[gl] Error compiling fragment program, make sure your card supports\n"
"[gl] GL_ARB_fragment_program (use glxinfo to check).\n"
"[gl] Error message:\n %s at %.10s\n",
glGetString(GL_PROGRAM_ERROR_STRING), &prog[err]);
GetString(GL_PROGRAM_ERROR_STRING), &prog[err]);
return 0;
}
if (!GetProgramiv || !mp_msg_test(MSGT_VO, MSGL_DBG2))
@ -1212,7 +1308,7 @@ static void glSetupYUVFragprog(gl_conversion_params_t *params) {
memcpy(chrom_scale_texs, lum_scale_texs, sizeof(chrom_scale_texs));
else
create_scaler_textures(YUV_CHROM_SCALER(type), &cur_texu, chrom_scale_texs);
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &i);
GetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &i);
if (i < cur_texu)
mp_msg(MSGT_VO, MSGL_ERR,
"[gl] %i texture units needed for this type of YUV fragment support (found %i)\n",
@ -1329,25 +1425,25 @@ void glEnableYUVConversion(GLenum target, int type) {
switch (YUV_CONVERSION(type)) {
case YUV_CONVERSION_COMBINERS:
ActiveTexture(GL_TEXTURE1);
glEnable(target);
Enable(target);
ActiveTexture(GL_TEXTURE2);
glEnable(target);
Enable(target);
ActiveTexture(GL_TEXTURE0);
glEnable(GL_REGISTER_COMBINERS_NV);
Enable(GL_REGISTER_COMBINERS_NV);
break;
case YUV_CONVERSION_COMBINERS_ATI:
ActiveTexture(GL_TEXTURE1);
glEnable(target);
Enable(target);
ActiveTexture(GL_TEXTURE2);
glEnable(target);
Enable(target);
ActiveTexture(GL_TEXTURE0);
glEnable(GL_FRAGMENT_SHADER_ATI);
Enable(GL_FRAGMENT_SHADER_ATI);
break;
case YUV_CONVERSION_FRAGMENT_LOOKUP3D:
case YUV_CONVERSION_FRAGMENT_LOOKUP:
case YUV_CONVERSION_FRAGMENT_POW:
case YUV_CONVERSION_FRAGMENT:
glEnable(GL_FRAGMENT_PROGRAM);
Enable(GL_FRAGMENT_PROGRAM);
break;
}
}
@ -1363,25 +1459,25 @@ void glDisableYUVConversion(GLenum target, int type) {
switch (YUV_CONVERSION(type)) {
case YUV_CONVERSION_COMBINERS:
ActiveTexture(GL_TEXTURE1);
glDisable(target);
Disable(target);
ActiveTexture(GL_TEXTURE2);
glDisable(target);
Disable(target);
ActiveTexture(GL_TEXTURE0);
glDisable(GL_REGISTER_COMBINERS_NV);
Disable(GL_REGISTER_COMBINERS_NV);
break;
case YUV_CONVERSION_COMBINERS_ATI:
ActiveTexture(GL_TEXTURE1);
glDisable(target);
Disable(target);
ActiveTexture(GL_TEXTURE2);
glDisable(target);
Disable(target);
ActiveTexture(GL_TEXTURE0);
glDisable(GL_FRAGMENT_SHADER_ATI);
Disable(GL_FRAGMENT_SHADER_ATI);
break;
case YUV_CONVERSION_FRAGMENT_LOOKUP3D:
case YUV_CONVERSION_FRAGMENT_LOOKUP:
case YUV_CONVERSION_FRAGMENT_POW:
case YUV_CONVERSION_FRAGMENT:
glDisable(GL_FRAGMENT_PROGRAM);
Disable(GL_FRAGMENT_PROGRAM);
break;
}
}
@ -1415,32 +1511,32 @@ void glDrawTex(GLfloat x, GLfloat y, GLfloat w, GLfloat h,
y += h;
h = -h;
}
glBegin(GL_QUADS);
glTexCoord2f(tx, ty);
Begin(GL_QUADS);
TexCoord2f(tx, ty);
if (is_yv12) {
MultiTexCoord2f(GL_TEXTURE1, tx2, ty2);
MultiTexCoord2f(GL_TEXTURE2, tx2, ty2);
}
glVertex2f(x, y);
glTexCoord2f(tx, ty + th);
Vertex2f(x, y);
TexCoord2f(tx, ty + th);
if (is_yv12) {
MultiTexCoord2f(GL_TEXTURE1, tx2, ty2 + th2);
MultiTexCoord2f(GL_TEXTURE2, tx2, ty2 + th2);
}
glVertex2f(x, y + h);
glTexCoord2f(tx + tw, ty + th);
Vertex2f(x, y + h);
TexCoord2f(tx + tw, ty + th);
if (is_yv12) {
MultiTexCoord2f(GL_TEXTURE1, tx2 + tw2, ty2 + th2);
MultiTexCoord2f(GL_TEXTURE2, tx2 + tw2, ty2 + th2);
}
glVertex2f(x + w, y + h);
glTexCoord2f(tx + tw, ty);
Vertex2f(x + w, y + h);
TexCoord2f(tx + tw, ty);
if (is_yv12) {
MultiTexCoord2f(GL_TEXTURE1, tx2 + tw2, ty2);
MultiTexCoord2f(GL_TEXTURE2, tx2 + tw2, ty2);
}
glVertex2f(x + w, y);
glEnd();
Vertex2f(x + w, y);
End();
}
#ifdef GL_WIN32
@ -1459,8 +1555,11 @@ static void *w32gpa(const GLubyte *procName) {
return GetProcAddress(oglmod, procName);
}
int setGlWindow(int *vinfo, HGLRC *context, HWND win)
static int setGlWindow_w32(MPGLContext *ctx)
{
HWND win = vo_w32_window;
int *vinfo = &ctx->vinfo.w32;
HGLRC *context = &ctx->context.w32;
int new_vinfo;
HDC windc = vo_w32_get_dc(win);
HGLRC new_context = 0;
@ -1470,7 +1569,7 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win)
// should only be needed when keeping context, but not doing glFinish
// can cause flickering even when we do not keep it.
if (*context)
glFinish();
Finish();
new_vinfo = GetPixelFormat(windc);
if (*context && *vinfo && new_vinfo && *vinfo == new_vinfo) {
// we can keep the wglContext
@ -1519,7 +1618,9 @@ out:
return res;
}
void releaseGlContext(int *vinfo, HGLRC *context) {
static void releaseGlContext_w32(MPGLContext *ctx) {
int *vinfo = &ctx->vinfo.w32;
HGLRC *context = &ctx->context.w32;
*vinfo = 0;
if (*context) {
wglMakeCurrent(0, 0);
@ -1528,12 +1629,13 @@ void releaseGlContext(int *vinfo, HGLRC *context) {
*context = 0;
}
void swapGlBuffers(void) {
static void swapGlBuffers_w32(MPGLContext *ctx) {
HDC vo_hdc = vo_w32_get_dc(vo_w32_window);
SwapBuffers(vo_hdc);
vo_w32_release_dc(vo_w32_window, vo_hdc);
}
#else
#endif
#ifdef CONFIG_X11
#ifdef HAVE_LIBDL
#include <dlfcn.h>
#endif
@ -1596,8 +1698,11 @@ static void appendstr(char **dst, const char *str)
* and the caller must initialize it correctly.
* \ingroup glcontext
*/
int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win)
static int setGlWindow_x11(MPGLContext *ctx)
{
XVisualInfo **vinfo = &ctx->vinfo.x11;
GLXContext *context = &ctx->context.x11;
Window win = vo_window;
XVisualInfo *new_vinfo;
GLXContext new_context = NULL;
int keep_context = 0;
@ -1605,7 +1710,7 @@ int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win)
// should only be needed when keeping context, but not doing glFinish
// can cause flickering even when we do not keep it.
if (*context)
glFinish();
Finish();
new_vinfo = getWindowVisualInfo(win);
if (*context && *vinfo && new_vinfo &&
(*vinfo)->visualid == new_vinfo->visualid) {
@ -1675,20 +1780,96 @@ int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win)
* \brief free the VisualInfo and GLXContext of an OpenGL context.
* \ingroup glcontext
*/
void releaseGlContext(XVisualInfo **vinfo, GLXContext *context) {
static void releaseGlContext_x11(MPGLContext *ctx) {
XVisualInfo **vinfo = &ctx->vinfo.x11;
GLXContext *context = &ctx->context.x11;
if (*vinfo)
XFree(*vinfo);
*vinfo = NULL;
if (*context)
{
glFinish();
Finish();
glXMakeCurrent(mDisplay, None, NULL);
glXDestroyContext(mDisplay, *context);
}
*context = 0;
}
void swapGlBuffers(void) {
static void swapGlBuffers_x11(MPGLContext *ctx) {
glXSwapBuffers(mDisplay, vo_window);
}
static int x11_check_events(void) {
return vo_x11_check_events(mDisplay);
}
static void gl_update_xinerama_info(void)
{
update_xinerama_info(global_vo);
}
static void gl_border(void)
{
vo_x11_border();
}
static void gl_fullscreen(void)
{
vo_x11_fullscreen();
}
static void gl_ontop(void)
{
vo_x11_ontop();
}
#endif
int init_mpglcontext(MPGLContext *ctx, enum MPGLType type) {
memset(ctx, 0, sizeof(*ctx));
ctx->type = type;
switch (ctx->type) {
#ifdef GL_WIN32
case GLTYPE_W32:
ctx->setGlWindow = setGlWindow_w32;
ctx->releaseGlContext = releaseGlContext_w32;
ctx->swapGlBuffers = swapGlBuffers_w32;
ctx->update_xinerama_info = w32_update_xinerama_info;
ctx->border = vo_w32_border;
ctx->check_events = vo_w32_check_events;
ctx->fullscreen = vo_w32_fullscreen;
ctx->ontop = vo_w32_ontop;
return vo_w32_init();
#endif
#ifdef CONFIG_X11
case GLTYPE_X11:
ctx->setGlWindow = setGlWindow_x11;
ctx->releaseGlContext = releaseGlContext_x11;
ctx->swapGlBuffers = swapGlBuffers_x11;
ctx->update_xinerama_info = gl_update_xinerama_info;
ctx->border = gl_border;
ctx->check_events = x11_check_events;
ctx->fullscreen = gl_fullscreen;
ctx->ontop = gl_ontop;
return vo_init();
#endif
default:
return 0;
}
}
void uninit_mpglcontext(MPGLContext *ctx) {
ctx->releaseGlContext(ctx);
switch (ctx->type) {
#ifdef GL_WIN32
case GLTYPE_W32:
vo_w32_uninit();
break;
#endif
#ifdef CONFIG_X11
case GLTYPE_X11:
vo_x11_uninit();
break;
#endif
}
memset(ctx, 0, sizeof(*ctx));
}

View File

@ -31,21 +31,24 @@
#include <windows.h>
#include <GL/gl.h>
#include "w32_common.h"
#else
#endif
#ifdef CONFIG_X11
#include <GL/gl.h>
#include <X11/Xlib.h>
#include <GL/glx.h>
#include "x11_common.h"
// This old-vo wrapper macro would conflict with the struct member
#undef update_xinerama_info
#endif
// workaround for some gl.h headers
#ifndef APIENTRY
#ifdef GLAPIENTRY
#define APIENTRY GLAPIENTRY
#ifndef GLAPIENTRY
#ifdef APIENTRY
#define GLAPIENTRY APIENTRY
#elif defined(GL_WIN32)
#define APIENTRY __stdcall
#define GLAPIENTRY __stdcall
#else
#define APIENTRY
#define GLAPIENTRY
#endif
#endif
@ -352,60 +355,116 @@ void glDisableYUVConversion(GLenum target, int type);
#define SET_WINDOW_REINIT 1
/** \} */
#ifdef GL_WIN32
#define vo_gl_border(vo) vo_w32_border()
#define vo_check_events() vo_w32_check_events()
#define vo_fullscreen() vo_w32_fullscreen()
#define vo_gl_ontop() vo_w32_ontop()
#define vo_uninit() vo_w32_uninit()
int setGlWindow(int *vinfo, HGLRC *context, HWND win);
void releaseGlContext(int *vinfo, HGLRC *context);
#else
#define vo_gl_border(vo) vo_x11_border(vo)
#define vo_check_events() vo_x11_check_events(mDisplay)
#define vo_fullscreen() vo_x11_fullscreen()
#define vo_gl_ontop() vo_x11_ontop()
#define vo_uninit() vo_x11_uninit()
int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win);
void releaseGlContext(XVisualInfo **vinfo, GLXContext *context);
#endif
void swapGlBuffers(void);
enum MPGLType {
GLTYPE_W32,
GLTYPE_X11,
};
extern void (APIENTRY *GenBuffers)(GLsizei, GLuint *);
extern void (APIENTRY *DeleteBuffers)(GLsizei, const GLuint *);
extern void (APIENTRY *BindBuffer)(GLenum, GLuint);
extern GLvoid* (APIENTRY *MapBuffer)(GLenum, GLenum);
extern GLboolean (APIENTRY *UnmapBuffer)(GLenum);
extern void (APIENTRY *BufferData)(GLenum, intptr_t, const GLvoid *, GLenum);
extern void (APIENTRY *CombinerParameterfv)(GLenum, const GLfloat *);
extern void (APIENTRY *CombinerParameteri)(GLenum, GLint);
extern void (APIENTRY *CombinerInput)(GLenum, GLenum, GLenum, GLenum, GLenum,
typedef struct MPGLContext {
enum MPGLType type;
union {
int w32;
#ifdef CONFIG_X11
XVisualInfo *x11;
#endif
} vinfo;
union {
#ifdef GL_WIN32
HGLRC w32;
#endif
#ifdef CONFIG_X11
GLXContext x11;
#endif
} context;
int (*setGlWindow)(struct MPGLContext *);
void (*releaseGlContext)(struct MPGLContext *);
void (*swapGlBuffers)(struct MPGLContext *);
void (*update_xinerama_info)(void);
void (*border)(void);
int (*check_events)(void);
void (*fullscreen)(void);
void (*ontop)(void);
} MPGLContext;
int init_mpglcontext(MPGLContext *ctx, enum MPGLType type);
void uninit_mpglcontext(MPGLContext *ctx);
extern void (GLAPIENTRY *Begin)(GLenum);
extern void (GLAPIENTRY *End)(void);
extern void (GLAPIENTRY *Viewport)(GLint, GLint, GLsizei, GLsizei);
extern void (GLAPIENTRY *MatrixMode)(GLenum);
extern void (GLAPIENTRY *LoadIdentity)(void);
extern void (GLAPIENTRY *Scaled)(double, double, double);
extern void (GLAPIENTRY *Ortho)(double, double, double, double, double, double);
extern void (GLAPIENTRY *PushMatrix)(void);
extern void (GLAPIENTRY *PopMatrix)(void);
extern void (GLAPIENTRY *Clear)(GLbitfield);
extern GLuint (GLAPIENTRY *GenLists)(GLsizei);
extern void (GLAPIENTRY *DeleteLists)(GLuint, GLsizei);
extern void (GLAPIENTRY *NewList)(GLuint, GLenum);
extern void (GLAPIENTRY *EndList)(void);
extern void (GLAPIENTRY *CallList)(GLuint);
extern void (GLAPIENTRY *CallLists)(GLsizei, GLenum, const GLvoid *);
extern void (GLAPIENTRY *GenTextures)(GLsizei, GLuint *);
extern void (GLAPIENTRY *DeleteTextures)(GLsizei, const GLuint *);
extern void (GLAPIENTRY *TexEnvi)(GLenum, GLenum, GLint);
extern void (GLAPIENTRY *Color4ub)(GLubyte, GLubyte, GLubyte, GLubyte);
extern void (GLAPIENTRY *Color3f)(GLfloat, GLfloat, GLfloat);
extern void (GLAPIENTRY *ClearColor)(GLclampf, GLclampf, GLclampf, GLclampf);
extern void (GLAPIENTRY *Enable)(GLenum);
extern void (GLAPIENTRY *Disable)(GLenum);
extern const GLubyte *(GLAPIENTRY *GetString)(GLenum);
extern void (GLAPIENTRY *DrawBuffer)(GLenum);
extern void (GLAPIENTRY *DepthMask)(GLboolean);
extern void (GLAPIENTRY *BlendFunc)(GLenum, GLenum);
extern void (GLAPIENTRY *Flush)(void);
extern void (GLAPIENTRY *Finish)(void);
extern void (GLAPIENTRY *PixelStorei)(GLenum, GLint);
extern void (GLAPIENTRY *TexImage1D)(GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
extern void (GLAPIENTRY *TexImage2D)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
extern void (GLAPIENTRY *TexSubImage2D)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
extern void (GLAPIENTRY *TexParameteri)(GLenum, GLenum, GLint);
extern void (GLAPIENTRY *TexParameterf)(GLenum, GLenum, GLfloat);
extern void (GLAPIENTRY *TexParameterfv)(GLenum, GLenum, const GLfloat *);
extern void (GLAPIENTRY *TexCoord2f)(GLfloat, GLfloat);
extern void (GLAPIENTRY *Vertex2f)(GLfloat, GLfloat);
extern void (GLAPIENTRY *GetIntegerv)(GLenum, GLint *);
extern void (GLAPIENTRY *GenBuffers)(GLsizei, GLuint *);
extern void (GLAPIENTRY *DeleteBuffers)(GLsizei, const GLuint *);
extern void (GLAPIENTRY *BindBuffer)(GLenum, GLuint);
extern GLvoid* (GLAPIENTRY *MapBuffer)(GLenum, GLenum);
extern GLboolean (GLAPIENTRY *UnmapBuffer)(GLenum);
extern void (GLAPIENTRY *BufferData)(GLenum, intptr_t, const GLvoid *, GLenum);
extern void (GLAPIENTRY *CombinerParameterfv)(GLenum, const GLfloat *);
extern void (GLAPIENTRY *CombinerParameteri)(GLenum, GLint);
extern void (GLAPIENTRY *CombinerInput)(GLenum, GLenum, GLenum, GLenum, GLenum,
GLenum);
extern void (APIENTRY *CombinerOutput)(GLenum, GLenum, GLenum, GLenum, GLenum,
extern void (GLAPIENTRY *CombinerOutput)(GLenum, GLenum, GLenum, GLenum, GLenum,
GLenum, GLenum, GLboolean, GLboolean,
GLboolean);
extern void (APIENTRY *BeginFragmentShader)(void);
extern void (APIENTRY *EndFragmentShader)(void);
extern void (APIENTRY *SampleMap)(GLuint, GLuint, GLenum);
extern void (APIENTRY *ColorFragmentOp2)(GLenum, GLuint, GLuint, GLuint, GLuint,
extern void (GLAPIENTRY *BeginFragmentShader)(void);
extern void (GLAPIENTRY *EndFragmentShader)(void);
extern void (GLAPIENTRY *SampleMap)(GLuint, GLuint, GLenum);
extern void (GLAPIENTRY *ColorFragmentOp2)(GLenum, GLuint, GLuint, GLuint, GLuint,
GLuint, GLuint, GLuint, GLuint, GLuint);
extern void (APIENTRY *ColorFragmentOp3)(GLenum, GLuint, GLuint, GLuint, GLuint,
extern void (GLAPIENTRY *ColorFragmentOp3)(GLenum, GLuint, GLuint, GLuint, GLuint,
GLuint, GLuint, GLuint, GLuint, GLuint,
GLuint, GLuint, GLuint);
extern void (APIENTRY *SetFragmentShaderConstant)(GLuint, const GLfloat *);
extern void (APIENTRY *ActiveTexture)(GLenum);
extern void (APIENTRY *BindTexture)(GLenum, GLuint);
extern void (APIENTRY *MultiTexCoord2f)(GLenum, GLfloat, GLfloat);
extern void (APIENTRY *GenPrograms)(GLsizei, GLuint *);
extern void (APIENTRY *DeletePrograms)(GLsizei, const GLuint *);
extern void (APIENTRY *BindProgram)(GLenum, GLuint);
extern void (APIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *);
extern void (APIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat,
extern void (GLAPIENTRY *SetFragmentShaderConstant)(GLuint, const GLfloat *);
extern void (GLAPIENTRY *ActiveTexture)(GLenum);
extern void (GLAPIENTRY *BindTexture)(GLenum, GLuint);
extern void (GLAPIENTRY *MultiTexCoord2f)(GLenum, GLfloat, GLfloat);
extern void (GLAPIENTRY *GenPrograms)(GLsizei, GLuint *);
extern void (GLAPIENTRY *DeletePrograms)(GLsizei, const GLuint *);
extern void (GLAPIENTRY *BindProgram)(GLenum, GLuint);
extern void (GLAPIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *);
extern void (GLAPIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat,
GLfloat, GLfloat);
extern int (APIENTRY *SwapInterval)(int);
extern void (APIENTRY *TexImage3D)(GLenum, GLint, GLenum, GLsizei, GLsizei,
extern int (GLAPIENTRY *SwapInterval)(int);
extern void (GLAPIENTRY *TexImage3D)(GLenum, GLint, GLenum, GLsizei, GLsizei,
GLsizei, GLint, GLenum, GLenum, const GLvoid *);
extern void* (APIENTRY *AllocateMemoryMESA)(void *, int, size_t, float, float, float);
extern void (APIENTRY *FreeMemoryMESA)(void *, int, void *);
extern void* (GLAPIENTRY *AllocateMemoryMESA)(void *, int, size_t, float, float, float);
extern void (GLAPIENTRY *FreeMemoryMESA)(void *, int, void *);
#endif /* MPLAYER_GL_COMMON_H */

View File

@ -115,6 +115,9 @@ static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigne
static void update_screen_info(void)
{
if (screen_id == -1 && xinerama_screen > -1)
screen_id = xinerama_screen;
screen_array = [NSScreen screens];
if(screen_id < (int)[screen_array count])
{
@ -494,16 +497,21 @@ static int control(uint32_t request, void *data)
- (void) config
{
uint32_t d_width;
uint32_t d_height;
NSRect frame;
NSRect visibleFrame;
CVReturn error = kCVReturnSuccess;
//config window
d_width = vo_dwidth; d_height = vo_dheight;
frame = NSMakeRect(0, 0, d_width, d_height);
[window setContentSize: frame.size];
[window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)];
// Use visibleFrame to position the window taking the menu bar and dock into account.
// Also flip vo_dy since the screen origin is in the bottom left on OSX.
if (screen_id < 0)
visibleFrame = [[[mpGLView window] screen] visibleFrame];
else
visibleFrame = [[[NSScreen screens] objectAtIndex:screen_id] visibleFrame];
[window setFrameTopLeftPoint:NSMakePoint(
visibleFrame.origin.x + vo_dx,
visibleFrame.origin.y + visibleFrame.size.height - vo_dy)];
[self releaseVideoSpecific];
error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[0], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[0]);
@ -520,7 +528,6 @@ static int control(uint32_t request, void *data)
mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create OpenGL texture(%d)\n", error);
//show window
[window center];
[window makeKeyAndOrderFront:mpGLView];
if(vo_rootwin)

View File

@ -44,15 +44,7 @@ static const vo_info_t info =
const LIBVO_EXTERN(gl)
#ifdef GL_WIN32
static int gl_vinfo = 0;
static HGLRC gl_context = 0;
#define update_xinerama_info w32_update_xinerama_info
#define vo_init vo_w32_init
#define vo_window vo_w32_window
#else
static XVisualInfo *gl_vinfo = NULL;
static GLXContext gl_context = 0;
#ifdef CONFIG_X11
static int wsGLXAttrib[] = { GLX_RGBA,
GLX_RED_SIZE,1,
GLX_GREEN_SIZE,1,
@ -60,6 +52,7 @@ static int wsGLXAttrib[] = { GLX_RGBA,
GLX_DOUBLEBUFFER,
None };
#endif
static MPGLContext glctx;
static int use_osd;
static int scaled_osd;
@ -152,12 +145,12 @@ static void resize(int x,int y){
if (WinID >= 0) {
int top = 0, left = 0, w = x, h = y;
geometry(&top, &left, &w, &h, vo_screenwidth, vo_screenheight);
glViewport(top, left, w, h);
Viewport(top, left, w, h);
} else
glViewport( 0, 0, x, y );
Viewport( 0, 0, x, y );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
MatrixMode(GL_PROJECTION);
LoadIdentity();
ass_border_x = ass_border_y = 0;
if (aspect_scaling() && use_aspect) {
int new_w, new_h;
@ -168,14 +161,14 @@ static void resize(int x,int y){
new_h += vo_panscan_y;
scale_x = (GLdouble)new_w / (GLdouble)x;
scale_y = (GLdouble)new_h / (GLdouble)y;
glScaled(scale_x, scale_y, 1);
Scaled(scale_x, scale_y, 1);
ass_border_x = (vo_dwidth - new_w) / 2;
ass_border_y = (vo_dheight - new_h) / 2;
}
glOrtho(0, image_width, image_height, 0, -1,1);
Ortho(0, image_width, image_height, 0, -1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
MatrixMode(GL_MODELVIEW);
LoadIdentity();
if (!scaled_osd) {
#ifdef CONFIG_FREETYPE
@ -184,7 +177,7 @@ static void resize(int x,int y){
#endif
vo_osd_changed(OSDTYPE_OSD);
}
glClear(GL_COLOR_BUFFER_BIT);
Clear(GL_COLOR_BUFFER_BIT);
redraw();
}
@ -262,14 +255,14 @@ static void clearOSD(void) {
int i;
if (!osdtexCnt)
return;
glDeleteTextures(osdtexCnt, osdtex);
DeleteTextures(osdtexCnt, osdtex);
#ifndef FAST_OSD
glDeleteTextures(osdtexCnt, osdatex);
DeleteTextures(osdtexCnt, osdatex);
for (i = 0; i < osdtexCnt; i++)
glDeleteLists(osdaDispList[i], 1);
DeleteLists(osdaDispList[i], 1);
#endif
for (i = 0; i < osdtexCnt; i++)
glDeleteLists(osdDispList[i], 1);
DeleteLists(osdDispList[i], 1);
osdtexCnt = 0;
}
@ -278,10 +271,10 @@ static void clearOSD(void) {
*/
static void clearEOSD(void) {
if (eosdDispList)
glDeleteLists(eosdDispList, 1);
DeleteLists(eosdDispList, 1);
eosdDispList = 0;
if (eosdtexCnt)
glDeleteTextures(eosdtexCnt, eosdtex);
DeleteTextures(eosdtexCnt, eosdtex);
eosdtexCnt = 0;
free(eosdtex);
eosdtex = NULL;
@ -376,15 +369,15 @@ static void genEOSD(mp_eosd_images_t *imgs) {
glUploadTex(gl_target, GL_ALPHA, GL_UNSIGNED_BYTE, i->bitmap, i->stride,
x, y, i->w, i->h, 0);
}
eosdDispList = glGenLists(1);
eosdDispList = GenLists(1);
skip_upload:
glNewList(eosdDispList, GL_COMPILE);
NewList(eosdDispList, GL_COMPILE);
tinytexcur = smalltexcur = 0;
for (i = img, curtex = eosdtex; i; i = i->next) {
int x = 0, y = 0;
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));
Color4ub(i->color >> 24, (i->color >> 16) & 0xff, (i->color >> 8) & 0xff, 255 - (i->color & 0xff));
if (is_tinytex(i, tinytexcur)) {
tinytex_pos(tinytexcur, &x, &y);
sx = sy = LARGE_EOSD_TEX_SIZE;
@ -401,7 +394,7 @@ skip_upload:
}
glDrawTex(i->dst_x, i->dst_y, i->w, i->h, x, y, i->w, i->h, sx, sy, use_rectangle == 1, 0, 0);
}
glEndList();
EndList();
BindTexture(gl_target, 0);
}
@ -416,12 +409,12 @@ static void uninitGl(void) {
while (default_texs[i] != 0)
i++;
if (i)
glDeleteTextures(i, default_texs);
DeleteTextures(i, default_texs);
default_texs[0] = 0;
clearOSD();
clearEOSD();
if (largeeosdtex[0])
glDeleteTextures(2, largeeosdtex);
DeleteTextures(2, largeeosdtex);
largeeosdtex[0] = 0;
if (DeleteBuffers && gl_buffer)
DeleteBuffers(1, &gl_buffer);
@ -440,9 +433,9 @@ static void uninitGl(void) {
}
static void autodetectGlExtensions(void) {
const char *extensions = glGetString(GL_EXTENSIONS);
const char *vendor = glGetString(GL_VENDOR);
const char *version = glGetString(GL_VERSION);
const char *extensions = GetString(GL_EXTENSIONS);
const char *vendor = GetString(GL_VENDOR);
const char *version = GetString(GL_VERSION);
int is_ati = strstr(vendor, "ATI") != NULL;
int ati_broken_pbo = 0;
if (is_ati && strncmp(version, "2.1.", 4) == 0) {
@ -468,20 +461,20 @@ static int initGl(uint32_t d_width, uint32_t d_height) {
autodetectGlExtensions();
texSize(image_width, image_height, &texture_width, &texture_height);
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
glDisable(GL_CULL_FACE);
glEnable(gl_target);
glDrawBuffer(vo_doublebuffering?GL_BACK:GL_FRONT);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
Disable(GL_BLEND);
Disable(GL_DEPTH_TEST);
DepthMask(GL_FALSE);
Disable(GL_CULL_FACE);
Enable(gl_target);
DrawBuffer(vo_doublebuffering?GL_BACK:GL_FRONT);
TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
mp_msg(MSGT_VO, MSGL_V, "[gl] Creating %dx%d texture...\n",
texture_width, texture_height);
if (image_format == IMGFMT_YV12) {
int i;
glGenTextures(21, default_texs);
GenTextures(21, default_texs);
default_texs[21] = 0;
for (i = 0; i < 7; i++) {
ActiveTexture(GL_TEXTURE1 + i);
@ -516,8 +509,8 @@ static int initGl(uint32_t d_width, uint32_t d_height) {
resize(d_width, d_height);
glClearColor( 0.0f,0.0f,0.0f,0.0f );
glClear( GL_COLOR_BUFFER_BIT );
ClearColor( 0.0f,0.0f,0.0f,0.0f );
Clear( GL_COLOR_BUFFER_BIT );
if (SwapInterval && swap_interval >= 0)
SwapInterval(swap_interval);
return 1;
@ -537,10 +530,11 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
vo_flipped = !!(flags & VOFLAG_FLIPPING);
#ifdef GL_WIN32
if (!vo_w32_config(d_width, d_height, flags))
if (glctx.type == GLTYPE_W32 && !vo_w32_config(d_width, d_height, flags))
return -1;
#else
{
#endif
#ifdef CONFIG_X11
if (glctx.type == GLTYPE_X11) {
XVisualInfo *vinfo=glXChooseVisual( mDisplay,mScreen,wsGLXAttrib );
if (vinfo == NULL)
{
@ -558,7 +552,7 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
glconfig:
if (vo_config_count)
uninitGl();
if (setGlWindow(&gl_vinfo, &gl_context, vo_window) == SET_WINDOW_FAILED)
if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED)
return -1;
if (mesa_buffer && !AllocateMemoryMESA) {
mp_msg(MSGT_VO, MSGL_ERR, "Can not enable mesa-buffer because AllocateMemoryMESA was not found\n");
@ -571,7 +565,7 @@ glconfig:
static void check_events(void)
{
int e=vo_check_events();
int e=glctx.check_events();
if(e&VO_EVENT_RESIZE) resize(vo_dwidth,vo_dheight);
if(e&VO_EVENT_EXPOSE && int_pause) redraw();
}
@ -601,14 +595,14 @@ static void create_osd_texture(int x0, int y0, int w, int h,
}
// create Textures for OSD part
glGenTextures(1, &osdtex[osdtexCnt]);
GenTextures(1, &osdtex[osdtexCnt]);
BindTexture(gl_target, osdtex[osdtexCnt]);
glCreateClearTex(gl_target, GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE, scale_type, sx, sy, 0);
glUploadTex(gl_target, GL_LUMINANCE, GL_UNSIGNED_BYTE, src, stride,
0, 0, w, h, 0);
#ifndef FAST_OSD
glGenTextures(1, &osdatex[osdtexCnt]);
GenTextures(1, &osdatex[osdtexCnt]);
BindTexture(gl_target, osdatex[osdtexCnt]);
glCreateClearTex(gl_target, GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, scale_type, sx, sy, 0);
{
@ -628,19 +622,19 @@ static void create_osd_texture(int x0, int y0, int w, int h,
// Create a list for rendering this OSD part
#ifndef FAST_OSD
osdaDispList[osdtexCnt] = glGenLists(1);
glNewList(osdaDispList[osdtexCnt], GL_COMPILE);
osdaDispList[osdtexCnt] = GenLists(1);
NewList(osdaDispList[osdtexCnt], GL_COMPILE);
// render alpha
BindTexture(gl_target, osdatex[osdtexCnt]);
glDrawTex(x0, y0, w, h, 0, 0, w, h, sx, sy, use_rectangle == 1, 0, 0);
glEndList();
EndList();
#endif
osdDispList[osdtexCnt] = glGenLists(1);
glNewList(osdDispList[osdtexCnt], GL_COMPILE);
osdDispList[osdtexCnt] = GenLists(1);
NewList(osdDispList[osdtexCnt], GL_COMPILE);
// render OSD
BindTexture(gl_target, osdtex[osdtexCnt]);
glDrawTex(x0, y0, w, h, 0, 0, w, h, sx, sy, use_rectangle == 1, 0, 0);
glEndList();
EndList();
osdtexCnt++;
}
@ -660,10 +654,10 @@ static void draw_osd(void)
}
static void do_render(void) {
// glEnable(GL_TEXTURE_2D);
// glBindTexture(GL_TEXTURE_2D, texture_id);
// Enable(GL_TEXTURE_2D);
// BindTexture(GL_TEXTURE_2D, texture_id);
glColor3f(1,1,1);
Color3f(1,1,1);
if (image_format == IMGFMT_YV12)
glEnableYUVConversion(gl_target, yuvconvtype);
glDrawTex(0, 0, image_width, image_height,
@ -682,45 +676,45 @@ 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);
glPushMatrix();
glLoadIdentity();
glOrtho(0, vo_dwidth, vo_dheight, 0, -1, 1);
MatrixMode(GL_PROJECTION);
PushMatrix();
LoadIdentity();
Ortho(0, vo_dwidth, vo_dheight, 0, -1, 1);
}
glEnable(GL_BLEND);
Enable(GL_BLEND);
if ((type & 2) && eosdDispList) {
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glCallList(eosdDispList);
BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
CallList(eosdDispList);
}
if ((type & 1) && osdtexCnt > 0) {
glColor4ub((osd_color >> 16) & 0xff, (osd_color >> 8) & 0xff, osd_color & 0xff, 0xff - (osd_color >> 24));
Color4ub((osd_color >> 16) & 0xff, (osd_color >> 8) & 0xff, osd_color & 0xff, 0xff - (osd_color >> 24));
// draw OSD
#ifndef FAST_OSD
glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
glCallLists(osdtexCnt, GL_UNSIGNED_INT, osdaDispList);
BlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);
CallLists(osdtexCnt, GL_UNSIGNED_INT, osdaDispList);
#endif
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glCallLists(osdtexCnt, GL_UNSIGNED_INT, osdDispList);
BlendFunc(GL_SRC_ALPHA, GL_ONE);
CallLists(osdtexCnt, GL_UNSIGNED_INT, osdDispList);
}
// set rendering parameters back to defaults
glDisable(GL_BLEND);
Disable(GL_BLEND);
if (!scaled_osd)
glPopMatrix();
PopMatrix();
BindTexture(gl_target, 0);
}
}
static void flip_page(void) {
if (vo_doublebuffering) {
if (use_glFinish) glFinish();
swapGlBuffers();
if (use_glFinish) Finish();
glctx.swapGlBuffers(&glctx);
if (aspect_scaling() && use_aspect)
glClear(GL_COLOR_BUFFER_BIT);
Clear(GL_COLOR_BUFFER_BIT);
} else {
do_render();
do_render_osd(3);
if (use_glFinish) glFinish();
else glFlush();
if (use_glFinish) Finish();
else Flush();
}
}
@ -876,7 +870,7 @@ static uint32_t draw_image(mp_image_t *mpi) {
mpi_flipped = stride[0] < 0;
if (mpi->flags & MP_IMGFLAG_DIRECT) {
if (mesa_buffer) {
glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
PixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 1);
w = texture_width;
} else {
intptr_t base = (intptr_t)planes[0];
@ -916,7 +910,7 @@ static uint32_t draw_image(mp_image_t *mpi) {
ActiveTexture(GL_TEXTURE0);
}
if (mpi->flags & MP_IMGFLAG_DIRECT) {
if (mesa_buffer) glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 0);
if (mesa_buffer) PixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, 0);
else BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
}
skip_upload:
@ -960,12 +954,11 @@ uninit(void)
{
if (!vo_config_count) return;
uninitGl();
releaseGlContext(&gl_vinfo, &gl_context);
if (custom_prog) free(custom_prog);
custom_prog = NULL;
if (custom_tex) free(custom_tex);
custom_tex = NULL;
vo_uninit();
uninit_mpglcontext(&glctx);
}
static const opt_t subopts[] = {
@ -995,7 +988,11 @@ static const opt_t subopts[] = {
static int preinit(const char *arg)
{
enum MPGLType gltype = GLTYPE_X11;
// set defaults
#ifdef GL_WIN32
gltype = GLTYPE_W32;
#endif
many_fmts = 1;
use_osd = 1;
scaled_osd = 0;
@ -1090,7 +1087,7 @@ static int preinit(const char *arg)
"Use -vo gl:nomanyfmts if playback fails.\n");
mp_msg(MSGT_VO, MSGL_V, "[gl] Using %d as slice height "
"(0 means image height).\n", slice_height);
if (!vo_init()) return -1; // Can't open X11
if (!init_mpglcontext(&glctx, gltype)) return -1;
return 0;
}
@ -1147,14 +1144,14 @@ static int control(uint32_t request, void *data)
}
return VO_TRUE;
case VOCTRL_ONTOP:
vo_gl_ontop();
glctx.ontop();
return VO_TRUE;
case VOCTRL_FULLSCREEN:
vo_fullscreen();
glctx.fullscreen();
resize(vo_dwidth, vo_dheight);
return VO_TRUE;
case VOCTRL_BORDER:
vo_gl_border();
glctx.border();
resize(vo_dwidth, vo_dheight);
return VO_TRUE;
case VOCTRL_GET_PANSCAN:
@ -1190,7 +1187,7 @@ static int control(uint32_t request, void *data)
}
break;
case VOCTRL_UPDATE_SCREENINFO:
update_xinerama_info();
glctx.update_xinerama_info();
return VO_TRUE;
case VOCTRL_REDRAW_OSD:
if (vo_doublebuffering)

View File

@ -59,16 +59,7 @@ const LIBVO_EXTERN(gl2)
/* local data */
static unsigned char *ImageData=NULL;
#ifdef GL_WIN32
static int gl_vinfo = 0;
static HGLRC gl_context = 0;
#define update_xinerama_info w32_update_xinerama_info
#define vo_init vo_w32_init
#define vo_window vo_w32_window
#else
static XVisualInfo *gl_vinfo = NULL;
static GLXContext gl_context = 0;
#endif
static MPGLContext glctx;
static uint32_t image_width;
static uint32_t image_height;
@ -112,7 +103,10 @@ struct TexSquare
static GLint getInternalFormat(void)
{
switch (glctx.type) {
#ifdef GL_WIN32
case GLTYPE_W32:
{
PIXELFORMATDESCRIPTOR pfd;
HDC vo_hdc = vo_w32_get_dc(vo_w32_window);
int pf = GetPixelFormat(vo_hdc);
@ -125,12 +119,18 @@ static GLint getInternalFormat(void)
a_sz = pfd.cAlphaBits;
}
vo_w32_release_dc(vo_w32_window, vo_hdc);
#else
if (glXGetConfig(mDisplay, gl_vinfo, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0;
if (glXGetConfig(mDisplay, gl_vinfo, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0;
if (glXGetConfig(mDisplay, gl_vinfo, GLX_BLUE_SIZE, &b_sz) != 0) b_sz = 0;
if (glXGetConfig(mDisplay, gl_vinfo, GLX_ALPHA_SIZE, &a_sz) != 0) a_sz = 0;
}
break;
#endif
#ifdef CONFIG_X11
case GLTYPE_X11:
if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0;
if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0;
if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_BLUE_SIZE, &b_sz) != 0) b_sz = 0;
if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_ALPHA_SIZE, &a_sz) != 0) a_sz = 0;
break;
#endif
}
rgb_sz=r_sz+g_sz+b_sz;
if(rgb_sz<=0) rgb_sz=24;
@ -616,7 +616,7 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
#endif
return -1;
if (setGlWindow(&gl_vinfo, &gl_context, vo_window) == SET_WINDOW_FAILED)
if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED)
return -1;
glVersion = glGetString(GL_VERSION);
@ -697,7 +697,7 @@ static void check_events(void)
}
}
#endif
e=vo_check_events();
e=glctx.check_events();
if(e&VO_EVENT_RESIZE) resize(vo_dwidth, vo_dheight);
if(e&VO_EVENT_EXPOSE && int_pause) flip_page();
}
@ -716,7 +716,7 @@ flip_page(void)
// glFlush();
if (use_glFinish)
glFinish();
swapGlBuffers();
glctx.swapGlBuffers(&glctx);
if (aspect_scaling()) // Avoid flickering borders in fullscreen mode
glClear (GL_COLOR_BUFFER_BIT);
@ -813,12 +813,11 @@ static void
uninit(void)
{
if ( !vo_config_count ) return;
releaseGlContext(&gl_vinfo, &gl_context);
if (texgrid) {
free(texgrid);
texgrid = NULL;
}
vo_uninit();
uninit_mpglcontext(&glctx);
}
static const opt_t subopts[] = {
@ -829,7 +828,11 @@ static const opt_t subopts[] = {
static int preinit(const char *arg)
{
enum MPGLType gltype = GLTYPE_X11;
// set defaults
#ifdef GL_WIN32
gltype = GLTYPE_W32;
#endif
use_yuv = 0;
use_glFinish = 1;
if (subopt_parse(arg, subopts) != 0) {
@ -849,7 +852,7 @@ static int preinit(const char *arg)
"\n" );
return -1;
}
if( !vo_init() ) return -1; // Can't open X11
if(!init_mpglcontext(&glctx, gltype)) return -1;
return 0;
}
@ -863,16 +866,16 @@ static int control(uint32_t request, void *data)
case VOCTRL_QUERY_FORMAT:
return query_format(*((uint32_t*)data));
case VOCTRL_ONTOP:
vo_gl_ontop();
glctx.ontop();
return VO_TRUE;
case VOCTRL_FULLSCREEN:
vo_fullscreen();
if (setGlWindow(&gl_vinfo, &gl_context, vo_window) == SET_WINDOW_REINIT)
glctx.fullscreen();
if (glctx.setGlWindow(&glctx) == SET_WINDOW_REINIT)
initGl(vo_dwidth, vo_dheight);
resize(vo_dwidth, vo_dheight);
return VO_TRUE;
case VOCTRL_BORDER:
vo_gl_border();
glctx.border();
return VO_TRUE;
case VOCTRL_GET_PANSCAN:
return VO_TRUE;
@ -892,7 +895,7 @@ static int control(uint32_t request, void *data)
}
#endif
case VOCTRL_UPDATE_SCREENINFO:
update_xinerama_info();
glctx.update_xinerama_info();
return VO_TRUE;
}
return VO_NOTIMPL;

View File

@ -613,7 +613,7 @@ static int vbi_init(priv_t* priv,char* device)
close(vbi_fd);
return TVI_CONTROL_FALSE;
}
if(!cap.capabilities & V4L2_CAP_VBI_CAPTURE){
if(!(cap.capabilities & V4L2_CAP_VBI_CAPTURE)){
mp_msg(MSGT_TV,MSGL_ERR,"vbi: %s does not support VBI capture\n",priv->vbi_dev);
close(vbi_fd);
return TVI_CONTROL_FALSE;

View File

@ -18,6 +18,7 @@
#ifndef _V_RANDOM_H_
#define _V_RANDOM_H_
#include "ivorbiscodec.h"
#include "codec_internal.h"
#include "os_types.h"
#include "asm_arm.h"
@ -29,6 +30,7 @@
/* 64 bit multiply */
#include <sys/types.h>
#include <stdlib.h>
#include "config.h"
#if !HAVE_BIGENDIAN

View File

@ -1,9 +1,18 @@
--- misc.h 2005-01-04 16:29:01.000000000 +0100
+++ misc.h 2004-12-30 13:09:20.000000000 +0100
@@ -29,8 +29,9 @@
@@ -18,6 +18,7 @@
#ifndef _V_RANDOM_H_
#define _V_RANDOM_H_
#include "ivorbiscodec.h"
+#include "codec_internal.h"
#include "os_types.h"
#include "asm_arm.h"
@@ -29,8 +30,10 @@
/* 64 bit multiply */
#include <sys/types.h>
+#include <stdlib.h>
+#include "config.h"
-#if BYTE_ORDER==LITTLE_ENDIAN
@ -11,7 +20,7 @@
union magic {
struct {
ogg_int32_t lo;
@@ -38,9 +39,7 @@
@@ -38,9 +41,7 @@
} halves;
ogg_int64_t whole;
};

View File

@ -77,8 +77,6 @@
#include "sysdep/AsmMacros_arm32.h"
#elif defined(__powerpc__)
#include "sysdep/AsmMacros_powerpc.h"
#elif defined(__sh__)
#include <sys/io.h>
#else
#include "sysdep/AsmMacros_x86.h"
#endif

5
vidix/pci_db2c.awk Normal file → Executable file
View File

@ -1,9 +1,8 @@
#!/usr/bin/awk -f
# This file converts given pci.db to "C" source and header files
# For latest version of pci ids see: http://pciids.sf.net
# Copyright 2002 Nick Kurshev
#
# Usage: awk -f pci_db2c.awk pci.db
#
# Tested with Gawk v 3.0.x and Mawk 1.3.3
# But it should work with standard Awk implementations (hopefully).
# (Nobody tested it with Nawk, but it should work, too).
@ -28,7 +27,7 @@ BEGIN {
if(ARGC != 3) {
# check for arguments:
print "Usage awk -f pci_db2c.awk pci.db (and make sure pci.db file exists first)";
print "Usage ./pci_db2c.awk pci.db (and make sure pci.db file exists first)";
exit(1);
}
in_file = ARGV[1];

View File

@ -1,6 +1,6 @@
/*
* VIDIX driver for SuperH Mobile VEU hardware block.
* Copyright (C) 2008 Magnus Damm
* Copyright (C) 2008, 2009 Magnus Damm
*
* Requires a kernel that exposes the VEU hardware block to user space
* using UIO. Available in upstream linux-2.6.27 or later.
@ -179,8 +179,7 @@ static int get_fb_info(char *device, struct fb_info *fip)
memset(iomem, 0, fip->line_length * fip->height);
munmap(iomem, fip->size);
close(fd);
return 0;
return fd;
}
#define VESTR 0x00 /* start register */
@ -220,6 +219,8 @@ static int get_fb_info(char *device, struct fb_info *fip)
#define VCOFFR 0x224 /* color conversion offset */
#define VCBR 0x228 /* color conversion clip */
#define VRPBR 0xc8 /* resize passband */
/* Helper functions for reading registers. */
static unsigned long read_reg(struct uio_map *ump, int reg_offs)
@ -268,6 +269,7 @@ struct sh_veu_plane {
static struct sh_veu_plane _src, _dst;
static vidix_playback_t my_info;
static int fb_fd;
static int sh_veu_probe(int verbose, int force)
{
@ -276,6 +278,7 @@ static int sh_veu_probe(int verbose, int force)
ret = get_fb_info("/dev/fb0", &fbi);
if (ret < 0)
return ret;
fb_fd = ret;
if (fbi.bpp != 16) {
printf("sh_veu: only 16bpp supported\n");
@ -315,18 +318,26 @@ static void sh_veu_wait_irq(vidix_playback_t *info)
read(uio_dev.fd, &n_pending, sizeof(unsigned long));
write_reg(&uio_mmio, 0x100, VEVTR); /* ack int, write 0 to bit 0 */
/* flush framebuffer to handle deferred io case */
fsync(fb_fd);
}
static int sh_veu_is_veu2h(void)
{
return uio_mmio.size > 0xb8;
return uio_mmio.size == 0x27c;
}
static int sh_veu_is_veu3f(void)
{
return uio_mmio.size == 0xcc;
}
static unsigned long sh_veu_do_scale(struct uio_map *ump,
int vertical, int size_in,
int size_out, int crop_out)
{
unsigned long fixpoint, mant, frac, value, rep;
unsigned long fixpoint, mant, frac, value, rep, vb;
/* calculate FRAC and MANT */
do {
@ -398,6 +409,34 @@ static unsigned long sh_veu_do_scale(struct uio_map *ump,
}
write_reg(ump, value, VRFSR);
/* VEU3F needs additional VRPBR register handling */
if (sh_veu_is_veu3f()) {
if (size_out > size_in)
vb = 64;
else {
if ((mant >= 8) && (mant < 16))
value = 4;
else if ((mant >= 4) && (mant < 8))
value = 2;
else
value = 1;
vb = 64 * 4096 * value;
vb /= 4096 * mant + frac;
}
/* set resize passband register */
value = read_reg(ump, VRPBR);
if (vertical) {
value &= ~0xffff0000;
value |= vb << 16;
} else {
value &= ~0xffff;
value |= vb;
}
write_reg(ump, value, VRPBR);
}
return (((size_in * crop_out) / size_out) + 0x03) & ~0x03;
}
@ -486,6 +525,7 @@ static int sh_veu_init(void)
static void sh_veu_destroy(void)
{
close(fb_fd);
}
static int sh_veu_get_caps(vidix_capability_t *to)

View File

@ -31,7 +31,7 @@
//#include <sys/perm.h> doesn't exist on libc5 systems
int iopl();
#else
#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__x86_64__)
#if !defined(__sparc__) && !defined(__powerpc__) && !defined(__x86_64__) && !defined(__sh__)
#include <sys/io.h>
#endif
#endif