summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-01-25 15:36:38 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-01-25 15:36:38 +0200
commit4ebf0075806ccf2bdde276a4e56eac41c7e350c4 (patch)
tree89b4572543527808c92f4e37448bca4012e926ad
parentefd25f7811b232ae2b1899ca0fee6fd598837b9f (diff)
parentc2ba58aefce038ce4ccf6ed23791f5de823aa041 (diff)
downloadmpv-4ebf0075806ccf2bdde276a4e56eac41c7e350c4.tar.bz2
mpv-4ebf0075806ccf2bdde276a4e56eac41c7e350c4.tar.xz
Merge svn changes up to r30375
-rw-r--r--Changelog5
-rw-r--r--DOCS/man/en/mplayer.110
-rw-r--r--DOCS/man/it/mplayer.1111
-rwxr-xr-xconfigure49
-rw-r--r--etc/codecs.conf3
-rw-r--r--fmt-conversion.c18
-rw-r--r--libaf/af.c1
-rw-r--r--libmpcodecs/img_format.h16
-rw-r--r--libmpcodecs/ve_lavc.c29
-rw-r--r--libmpdemux/mf.c1
-rw-r--r--libvo/csputils.c11
-rw-r--r--libvo/csputils.h8
-rw-r--r--libvo/vo_directx.c6
-rw-r--r--libvo/vo_gl.c15
-rw-r--r--libvo/vo_gl2.c2
-rw-r--r--loader/dshow/guids.h2
-rw-r--r--osdep/strsep.c1
-rw-r--r--osdep/strsep.h30
-rw-r--r--stream/tvi_dshow.c117
19 files changed, 322 insertions, 113 deletions
diff --git a/Changelog b/Changelog
index a35974a428..3b856cc4f6 100644
--- a/Changelog
+++ b/Changelog
@@ -26,7 +26,7 @@ MPlayer (1.0)
* Support for more formats in OpenGL vos (different YUV
subsampling, 16 bit per component)
* Selectable YUV to RGB conversion standard for -vo gl
- (-vo gl:colorspace=...)
+ (-vo gl:colorspace=...:levelconv=...)
* -vo matrixview finally added
Other:
@@ -43,6 +43,9 @@ MPlayer (1.0)
Use e.g. ffmpeg://http://example.com/test
* better support for 16-bit-per-component formats and formats
with alpha channel.
+ * better out-of-the-box support for compiling for ARM, IA64,
+ MinGW32 and MinGW-w64, MinGW has ASLR enabled with recent
+ enough binutils.
MEncoder:
* add -tsprog for demuxer lavf
diff --git a/DOCS/man/en/mplayer.1 b/DOCS/man/en/mplayer.1
index c718fdd264..1747a598f2 100644
--- a/DOCS/man/en/mplayer.1
+++ b/DOCS/man/en/mplayer.1
@@ -3872,6 +3872,16 @@ Use ITU-R BT.709 color space.
.IPs 3
Use SMPTE-240M color space.
.RE
+.IPs levelconv=<n>
+Select the brightness level conversion to use for the YUV to RGB conversion
+.RSss
+.IPs 0
+Convert TV to PC levels (default).
+.IPs 1
+Convert PC to TV levels.
+.IPs 2
+Do not do any conversion.
+.RE
.IPs lscale=<n>
Select the scaling function to use for luminance scaling.
Only valid for yuv modes 2, 3, 4 and 6.
diff --git a/DOCS/man/it/mplayer.1 b/DOCS/man/it/mplayer.1
index 891240c0d8..1cf1d734fb 100644
--- a/DOCS/man/it/mplayer.1
+++ b/DOCS/man/it/mplayer.1
@@ -1,4 +1,4 @@
-.\" synced with r30043
+.\" synced with r30336
.\" Encoding: iso-8859-1
.\" MPlayer (C) 2000-2009 MPlayer Team
.\" Questa pagina di manuale è stata fatta da Gabucino, Diego Biurrun,
@@ -1292,14 +1292,14 @@ Permette ad un socket di essere riutilizzato da altri processi appena viene
chiuso.
.
.TP
-.B \-bandwidth <valore> (solo rete)
+.B \-bandwidth <Bytes> (solo rete)
Specifica la massima larghezza di banda (bandwidth) per lo streaming attraverso
una rete (per quei server che sono capaci di inviare contenuti, normalmente
filmati, a diversi bitrate).
-Utile se vuoi guardare contenuti multimediali dal vivo con una connessione lenta.
+Utile se vuoi guardare contenuti multimediali dal vivo su una connessione lenta.
Con lo streaming RTSP Real, viene anche usata per impostare la massima larghezza
di banda in uscita dal server, permettendo un riempimento della cache e un dump
-di flusso più veloce.
+del flusso più rapido.
.
.TP
.B \-cache <KBytes>
@@ -1347,15 +1347,15 @@ Usa il dispositivo SCSI generico specificato
.IPs sector-size=<valore>
Dimensione di una lettura atomica
.IPs overlap=<valore>
-Forza la ricerca di sovrapposizione minima (minimum overlap search) durante la verifica a <valore> settori
+Forza la ricerca di sovrapposizione minima (minimum overlap search) durante la
+verifica a <valore> settori.
.IPs toc-bias
Assume che lo scostamento iniziale della traccia 1 come riportato nella TOC
sarà indirizzato come LBA 0.
Alcuni lettori Toshiba hanno bisogno di questa opzione per ottenere la corretta
delimitazione delle tracce.
.IPs toc-offset=<valore>
-Aggiunge <valore> settori ai valori riportati quando si indirizzano
-le tracce.
+Aggiunge <valore> settori ai valori riportati quando si indirizzano le tracce.
Può essere negativo.
.IPs (no)skip
(Non) accetta una ricostruzione imperfetta dei dati.
@@ -2672,7 +2672,7 @@ Attiva il raggio della sfocatura del font (default: 2).
.TP
.B \-subfont\-encoding <valore> (solo FreeType)
Attiva la codifica del font.
-Quando settato a 'unicode' tutti i glifi dal file del font verranno disegnati
+Quando impostato a 'unicode' verranno disegnati tutti i glifi dal file del font
e verrà usato l'unicode (default: unicode).
.
.TP
@@ -3606,7 +3606,7 @@ Seleziona la sorgente da cui viene preso il colorkey (default: cur).
.IPs cur
Il default prende il colorkey correntemente configurato in Xv.
.IPs use
-Utilizza ma non setta il colorkey da MPlayer (utilizza l'opzione \-colorkey
+Utilizza ma non imposta il colorkey da MPlayer (utilizza l'opzione \-colorkey
per cambiarlo).
.IPs set
Uguale a use ma imposta anche il colorkey fornito.
@@ -3668,7 +3668,7 @@ Può aggiungere una piccola (non distinguibile) desincronizzazione costante
del flusso A/V (default: noqueue).
.IPs (no)sleep
Utilizza la funzione sleep mentre aspetta che finisca la visualizzazione
-(non raccomandato con Linux) (default: nosleep).
+(non consigliato in Linux) (default: nosleep).
.IPs ck=cur|use|set
E' lo stesso che \-vo xv:ck (vedi \-vo xv).
.IPs ck-method=man|bg|auto
@@ -4024,6 +4024,10 @@ orizzontale / n).
Richiede il supporto GLX_SGI_swap_control per funzionare.
Con alcune (la maggior parte/tutte?) implementazioni funziona sono in modalità
a schermo intero.
+.IPs ycbcr
+Usa l'estenzione GL_MESA_ycbcr_texture per convertire da YUV a RGB.
+Nella maggior parte dei casi è probabilmente più lento di una conversione
+software verso RGB.
.IPs yuv=<n>
Seleziona il tipo di conversione da YUV a RGB.
.RSss
@@ -4069,10 +4073,28 @@ La gamma può essere impostata indipendentemente per rosso, verde e blu.
La velocità dipende più dall'ampiezza di memoria della GPU rispetto agli altri
metodi.
.RE
-.IPs ycbcr
-Usa l'estenzione GL_MESA_ycbcr_texture per convertire da YUV a RGB.
-Nella maggior parte dei casi è probabilmente più lento di una conversione
-software verso RGB.
+.IPs colorspace
+Seleziona lo spazio colore per la conversione da YUV a RGB.
+.RSss
+.IPs 0
+Utilizza la formula usata solitamente da MPlayer (default).
+.IPs 1
+Usa uno spazio colore ITU-R BT.601.
+.IPs 2
+Usa uno spazio colore ITU-R BT.709.
+.IPs 3
+Usa uno spazio colore SMPTE-240M.
+.RE
+.IPs levelconv=<n>
+Seleziona il livello di luminosità da usare per la conversione da YUV a RGB.
+.RSss
+.IPs 0
+Converte da livelli TV a PC (default).
+.IPs 1
+Converte da livelli PC a TV.
+.IPs 2
+Non effettua alcuna conversione.
+.RE
.IPs lscale=<n>
Seleziona la funzione di ridimensionamento da usare per il ridimensionamento
della luminanza.
@@ -4113,6 +4135,13 @@ GL_NEAREST per la texture 'customtex'.
.IPs (no)customtrect
Se abilitata, usa texture_rectangle per la texture 'customtex'.
Disabilitata di default.
+.IPs (no)mipmapgen
+Se abilitata, vengono generate automaticamente delle mipmap per il video.
+Questo dovrebbe essere utile insieme con customprog e con l'istruzione TXB per
+implementare filtri di sfocatura con un raggio ampio.
+Per la maggior parte delle implementazioni OpenGL è molto lento per un
+qualsiasi formato non RGB.
+Disabilitata di default.
.RE
.sp 1
.RS
@@ -4171,6 +4200,23 @@ A parte ciò, i valori hanno gli stessi significati validi per \-vo gl.
.REss
.
.TP
+.B matrixview
+Renderizzatore basato su OpenGL che crea un effetto di testo stile Matrix.
+.PD 0
+.RSs
+.IPs cols=<n>
+Numero delle colonne di testo da mostrare.
+Valori molto bassi (< 16) probabilmente non funzioneranno a causa delle
+limitazioni dello scalatore.
+Allo stesso modo, valori non divisibili per 16 potrebbero causare problemi.
+.IPs rows=<n>
+Numero delle righe di testo da mostrare.
+Valori molto bassi (< 16) probabilmente non funzioneranno a causa delle
+limitazioni dello scalatore.
+Allo stesso modo, valori non divisibili per 16 potrebbero causare problemi.
+.REss
+.
+.TP
.B "null\ \ \ "
Non produce nessuna uscita video.
Utile per benchmarking (prove di velocità).
@@ -4226,17 +4272,20 @@ Visualizza il video utilizzando la libreria DirectFB.
.IPs (no)input
Utilizza il codice della tastiera di DirectFB invece di quello standard di MPlayer. (default: abilitato)
.IPs buffermode=single|double|triple
-Il doppio ed il triplo buffering danno i migliori risultati se vuoi evitare problemi di tearing.
-Il triplo buffering è più efficiente del doppio buffering perché non blocca MPlayer
-mentre aspetta il tracciamento verticale.
+Il doppio ed il triplo buffering danno i migliori risultati se vuoi evitare
+problemi di tearing.
+Il triplo buffering è più efficiente del doppio buffering perché non blocca
+MPlayer mentre aspetta il tracciamento verticale.
La bufferizzazione singola dovrebbe essere evitata (default: single).
.IPs fieldparity=top|bottom
-Controlla l'ordine di uscita dei fotogrammi interlacciati (default: disabilitato).
-Valori validi sono top (prima il campo superiore) e bottom (prima il campo inferiore).
-Questa opzione non ha alcun effetto su materiale progressivo, generalmente la maggior
-parte dei film MPEG.
-Devi abilitare questa opzione se hai effetti di tearing oppure movimenti non uniformi
-guardando materiale interlacciato.
+Controlla l'ordine di uscita dei fotogrammi interlacciati
+(default: disabilitato).
+Valori validi sono top (prima il campo superiore) e bottom (prima il campo
+inferiore).
+Questa opzione non ha alcun effetto su materiale progressivo, generalmente la
+maggior parte dei film MPEG.
+Devi abilitare questa opzione se hai effetti di tearing oppure movimenti non
+uniformi guardando materiale interlacciato.
.IPs layer=N
Forza l'utilizzo del layer con ID N per la riproduzione (default: \-1 \- auto).
.IPs dfbopts=<list>
@@ -8134,7 +8183,7 @@ lascia che sia LAME a scegliere il valore automaticamente.
.
.TP
.B preset=<valore>
-valore dei settaggi predefiniti (Preset)
+valore delle impostazioni predefinite (Preset)
.RSs
.IPs "help\ "
Stampa le opzioni aggiuntive ed informazioni sui preset.
@@ -8145,7 +8194,7 @@ codifica VBR, alta qualità, bitrate compreso tra 170\-210 kbps
.IPs extreme
codifica VBR, qualità molto alta, bitrate compreso tra 200\-240 kbps
.IPs insane
-codifica CBR, il settaggio di miglior qualità, bitrate di 320 kbps
+codifica CBR, l'impostazione di miglior qualità, bitrate di 320 kbps
.IPs <8\-320>
codifica ABR al bitrate medio specificato
.RE
@@ -9944,12 +9993,12 @@ dai blocchi circostanti (default: attiva).
.
.TP
.B vhq=<0\-4>
-L'algoritmo di ricerca del movimento è basato su una ricerca nel dominio del colore
-e cerca di trovare un vettore di movimento che minimizzi la differenza tra il fotogramma
-di riferimento e quello codificato.
-Con questo settaggio attivato Xvid userà anche il dominio delle frequenze (DCT)
-per ricercare un vettore di movimento che minimizzi non solo la differenza spaziale, ma
-anche la lunghezza codificata del blocco.
+L'algoritmo di ricerca del movimento è basato su una ricerca nel dominio del
+colore e cerca di trovare un vettore di movimento che minimizzi la differenza
+tra il fotogramma di riferimento e quello codificato.
+Con questa impostazione attivata, Xvid userà anche il dominio delle frequenze
+(DCT) per ricercare un vettore di movimento che minimizzi non solo la
+differenza spaziale, ma anche la lunghezza codificata del blocco.
Dalla più rapida alla più lenta:
.PD 0
.RSs
diff --git a/configure b/configure
index 995dee56db..177f33d261 100755
--- a/configure
+++ b/configure
@@ -167,7 +167,7 @@ alpha() {
arm() {
case "$host_arch" in
- arm) return 0;;
+ arm*) return 0;;
*) return 1;;
esac
}
@@ -487,6 +487,7 @@ _sse2=auto
_ssse3=auto
_cmov=auto
_fast_cmov=auto
+_fast_clz=auto
_armv5te=auto
_armv6=auto
_armv6t2=auto
@@ -1225,6 +1226,8 @@ for ac_option do
--disable-cmov) _cmov=no ;;
--enable-fast-cmov) _fast_cmov=yes ;;
--disable-fast-cmov) _fast_cmov=no ;;
+ --enable-fast-clz) _fast_clz=yes ;;
+ --disable-fast-clz) _fast_clz=no ;;
--enable-altivec) _altivec=yes ;;
--disable-altivec) _altivec=no ;;
--enable-armv5te) _armv5te=yes ;;
@@ -1715,7 +1718,9 @@ case "$host_arch" in
proc=k8
;;
- *) proc=k8 iproc=686 ;;
+ *) proc=amdfam10 iproc=686
+ test $_fast_clz = "auto" && _fast_clz=yes
+ ;;
esac
;;
GenuineIntel)
@@ -1741,6 +1746,7 @@ case "$host_arch" in
else
proc=i686
fi
+ test $_fast_clz = "auto" && _fast_clz=yes
;;
15) iproc=686
# A nocona in 32-bit mode has no more capabilities than a prescott.
@@ -1748,6 +1754,7 @@ case "$host_arch" in
proc=prescott
else
proc=pentium4
+ test $_fast_clz = "auto" && _fast_clz=yes
fi
test $_fast_cmov = "auto" && _fast_cmov=no
;;
@@ -1786,6 +1793,7 @@ case "$host_arch" in
*)
proc=i586 iproc=586 ;;
esac
+ test $_fast_clz = "auto" && _fast_clz=no
fi # test "$_runtime_cpudetection" = no
@@ -1897,6 +1905,7 @@ EOF
else
_fast_cmov="no"
fi
+ test $_fast_clz = "auto" && _fast_clz=yes
echores "$proc"
;;
@@ -1925,7 +1934,13 @@ EOF
if test "$_runtime_cpudetection" = no ; then
case "$pvendor" in
AuthenticAMD)
- proc=k8;;
+ case "$pfamily" in
+ 15) proc=k8
+ test $_fast_clz = "auto" && _fast_clz=no
+ ;;
+ *) proc=amdfam10;;
+ esac
+ ;;
GenuineIntel)
case "$pfamily" in
6) proc=core2;;
@@ -1934,6 +1949,7 @@ EOF
# have the same capabilities as a nocona.
proc=nocona
test $_fast_cmov = "auto" && _fast_cmov=no
+ test $_fast_clz = "auto" && _fast_clz=no
;;
esac
;;
@@ -1991,6 +2007,7 @@ EOF
_optimizing="$proc"
test $_fast_cmov = "auto" && _fast_cmov=yes
+ test $_fast_clz = "auto" && _fast_clz=yes
echores "$proc"
;;
@@ -2023,7 +2040,7 @@ EOF
_optimizing="$proc"
;;
- arm|armv4l|armv5tel)
+ arm*)
_arch='ARM'
_target_arch='ARCH_ARM = yes'
iproc='arm'
@@ -2034,6 +2051,7 @@ EOF
_target_arch='ARCH_AVR32 = yes'
def_fast_unaligned='#define HAVE_FAST_UNALIGNED 1'
iproc='avr32'
+ test $_fast_clz = "auto" && _fast_clz=yes
;;
sh|sh4)
@@ -2154,6 +2172,8 @@ EOF
echores "none"
fi
+ test $_fast_clz = "auto" && _fast_clz=yes
+
;;
alpha*)
@@ -2195,6 +2215,8 @@ EOF
_mcpu="-mcpu=$proc"
echores "$proc"
+ test $_fast_clz = "auto" && _fast_clz=yes
+
_optimizing="$proc"
;;
@@ -2221,6 +2243,8 @@ EOF
echores "$proc"
fi
+ test $_fast_clz = "auto" && _fast_clz=yes
+
;;
hppa)
@@ -2654,6 +2678,8 @@ EOF
fi
echores "$_armv5te"
+ test $_armv5te = "yes" && test $_fast_clz = "auto" && _fast_clz=yes
+
echocheck "ARMv6 (SIMD instructions)"
if test $_armv6 = "auto" ; then
cat > $TMPC << EOF
@@ -2705,7 +2731,7 @@ EOF
echores "$_iwmmxt"
fi
-_cpuexts_all='ALTIVEC MMX MMX2 AMD3DNOW AMD3DNOWEXT SSE SSE2 SSSE3 FAST_CMOV CMOV PLD ARMV5TE ARMV6 ARMV6T2 ARMVFP NEON IWMMXT MMI VIS MVI'
+_cpuexts_all='ALTIVEC MMX MMX2 AMD3DNOW AMD3DNOWEXT SSE SSE2 SSSE3 FAST_CMOV CMOV FAST_CLZ PLD ARMV5TE ARMV6 ARMV6T2 ARMVFP NEON IWMMXT MMI VIS MVI'
test "$_altivec" = yes && _cpuexts="ALTIVEC $_cpuexts"
test "$_mmx" = yes && _cpuexts="MMX $_cpuexts"
test "$_mmxext" = yes && _cpuexts="MMX2 $_cpuexts"
@@ -2716,6 +2742,7 @@ test "$_sse2" = yes && _cpuexts="SSE2 $_cpuexts"
test "$_ssse3" = yes && _cpuexts="SSSE3 $_cpuexts"
test "$_cmov" = yes && _cpuexts="CMOV $_cpuexts"
test "$_fast_cmov" = yes && _cpuexts="FAST_CMOV $_cpuexts"
+test "$_fast_clz" = yes && _cpuexts="FAST_CLZ $_cpuexts"
test "$pld" = yes && _cpuexts="PLD $_cpuexts"
test "$_armv5te" = yes && _cpuexts="ARMV5TE $_cpuexts"
test "$_armv6" = yes && _cpuexts="ARMV6 $_cpuexts"
@@ -5101,7 +5128,7 @@ int main(int argc, char *argv[]) {
}
EOF
_sdl=no
- for _ld_tmp in "-lSDL" "-lSDL -lpthread" "-lSDL -lwinmm -lgdi32" ; do
+ for _ld_tmp in "-lSDL" "-lSDL -lpthread" "-lSDL -lwinmm -lgdi32" "-lSDL -lwinmm -lgdi32 -ldxguid" ; do
if cc_check -DCONFIG_SDL_SDL_H $_inc_tmp $_ld_tmp ; then
_sdl=yes
def_sdl_sdl_h="#define CONFIG_SDL_SDL_H 1"
@@ -7610,6 +7637,14 @@ else
echores "no"
fi
+echocheck "linker support for --nxcompat --no-seh --dynamicbase"
+if cc_check "-Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase" ; then
+ extra_ldflags="-Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase $extra_ldflags"
+ echores "yes"
+else
+ echores "no"
+fi
+
# Dynamic linking flags
# (FIXME: 'echocheck "dynamic linking"' above and modify here accordingly)
@@ -8471,12 +8506,12 @@ $def_yasm
#define CONFIG_SWSCALE_ALPHA 1
#define HAVE_ATTRIBUTE_PACKED 1
-#define HAVE_FAST_CLZ 0
#define HAVE_GETHRTIME 0
#define HAVE_INLINE_ASM 1
#define HAVE_LDBRX 0
#define HAVE_POLL_H 1
#define HAVE_PPC4XX 0
+#define HAVE_VFP_ARGS 1
#define HAVE_VIRTUALALLOC 0
/* Some FFmpeg codecs depend on these. Enable them unconditionally for now. */
diff --git a/etc/codecs.conf b/etc/codecs.conf
index 407696451b..04662dd90d 100644
--- a/etc/codecs.conf
+++ b/etc/codecs.conf
@@ -984,6 +984,7 @@ videocodec ffodivx
fourcc DCOD,MVXM,EM4A,PM4V
fourcc M4T3,DMK2,DIGI,INMC
fourcc EPHV,SN40
+ fourcc uldx,ULDX,VSPX
driver ffmpeg
dll mpeg4 ;opendivx
out YV12,I420,IYUV
@@ -1015,6 +1016,7 @@ videocodec ffodivxvdpau
fourcc DCOD,MVXM,EM4A,PM4V
fourcc M4T3,DMK2,DIGI,INMC
fourcc EPHV,SN40
+ fourcc uldx,ULDX,VSPX
driver ffmpeg
dll mpeg4_vdpau
out VDPAU_MPEG4
@@ -1066,6 +1068,7 @@ videocodec xvid
fourcc DCOD,MVXM,EM4A,PM4V
fourcc M4T3,DMK2,DIGI,INMC
fourcc EPHV,SN40
+ fourcc uldx,ULDX,VSPX
format 0x10000004 ; mpeg 4 es
driver xvid
out YV12
diff --git a/fmt-conversion.c b/fmt-conversion.c
index 9371ab1a11..013e3fea55 100644
--- a/fmt-conversion.c
+++ b/fmt-conversion.c
@@ -25,10 +25,13 @@ static const struct {
int fmt;
enum PixelFormat pix_fmt;
} conversion_map[] = {
- {IMGFMT_BGR32, PIX_FMT_RGB32},
+ {IMGFMT_ARGB, PIX_FMT_ARGB},
+ {IMGFMT_BGRA, PIX_FMT_BGRA},
{IMGFMT_BGR24, PIX_FMT_BGR24},
- {IMGFMT_BGR16, PIX_FMT_RGB565},
- {IMGFMT_BGR15, PIX_FMT_RGB555},
+ {IMGFMT_BGR16BE, PIX_FMT_RGB565BE},
+ {IMGFMT_BGR16LE, PIX_FMT_RGB565LE},
+ {IMGFMT_BGR15BE, PIX_FMT_RGB555BE},
+ {IMGFMT_BGR15LE, PIX_FMT_RGB555LE},
{IMGFMT_BGR8, PIX_FMT_RGB8},
{IMGFMT_BGR4, PIX_FMT_RGB4},
{IMGFMT_BGR1, PIX_FMT_MONOBLACK},
@@ -37,10 +40,13 @@ static const struct {
{IMGFMT_BG4B, PIX_FMT_RGB4_BYTE},
{IMGFMT_RGB48LE, PIX_FMT_RGB48LE},
{IMGFMT_RGB48BE, PIX_FMT_RGB48BE},
- {IMGFMT_RGB32, PIX_FMT_BGR32},
+ {IMGFMT_ABGR, PIX_FMT_ABGR},
+ {IMGFMT_RGBA, PIX_FMT_RGBA},
{IMGFMT_RGB24, PIX_FMT_RGB24},
- {IMGFMT_RGB16, PIX_FMT_BGR565},
- {IMGFMT_RGB15, PIX_FMT_BGR555},
+ {IMGFMT_RGB16BE, PIX_FMT_BGR565BE},
+ {IMGFMT_RGB16LE, PIX_FMT_BGR565LE},
+ {IMGFMT_RGB15BE, PIX_FMT_BGR555BE},
+ {IMGFMT_RGB15LE, PIX_FMT_BGR555LE},
{IMGFMT_RGB8, PIX_FMT_BGR8},
{IMGFMT_RGB4, PIX_FMT_BGR4},
{IMGFMT_BGR8, PIX_FMT_PAL8},
diff --git a/libaf/af.c b/libaf/af.c
index 97c5bcfd5c..2e55a52fe1 100644
--- a/libaf/af.c
+++ b/libaf/af.c
@@ -20,6 +20,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include "osdep/strsep.h"
#include "af.h"
diff --git a/libmpcodecs/img_format.h b/libmpcodecs/img_format.h
index 6bab56632d..2aa037e5b7 100644
--- a/libmpcodecs/img_format.h
+++ b/libmpcodecs/img_format.h
@@ -35,12 +35,28 @@
#define IMGFMT_ARGB IMGFMT_BGR32
#define IMGFMT_RGBA (IMGFMT_BGR32|64)
#define IMGFMT_RGB48NE IMGFMT_RGB48BE
+#define IMGFMT_RGB15BE IMGFMT_RGB15
+#define IMGFMT_RGB15LE (IMGFMT_RGB15|64)
+#define IMGFMT_RGB16BE IMGFMT_RGB16
+#define IMGFMT_RGB16LE (IMGFMT_RGB16|64)
+#define IMGFMT_BGR15BE IMGFMT_BGR15
+#define IMGFMT_BGR15LE (IMGFMT_BGR15|64)
+#define IMGFMT_BGR16BE IMGFMT_BGR16
+#define IMGFMT_BGR16LE (IMGFMT_BGR16|64)
#else
#define IMGFMT_ABGR (IMGFMT_BGR32|64)
#define IMGFMT_BGRA IMGFMT_BGR32
#define IMGFMT_ARGB (IMGFMT_RGB32|64)
#define IMGFMT_RGBA IMGFMT_RGB32
#define IMGFMT_RGB48NE IMGFMT_RGB48LE
+#define IMGFMT_RGB15BE (IMGFMT_RGB15|64)
+#define IMGFMT_RGB15LE IMGFMT_RGB15
+#define IMGFMT_RGB16BE (IMGFMT_RGB16|64)
+#define IMGFMT_RGB16LE IMGFMT_RGB16
+#define IMGFMT_BGR15BE (IMGFMT_BGR15|64)
+#define IMGFMT_BGR15LE IMGFMT_BGR15
+#define IMGFMT_BGR16BE (IMGFMT_BGR16|64)
+#define IMGFMT_BGR16LE IMGFMT_BGR16
#endif
/* old names for compatibility */
diff --git a/libmpcodecs/ve_lavc.c b/libmpcodecs/ve_lavc.c
index 3062d9ca5d..5955787204 100644
--- a/libmpcodecs/ve_lavc.c
+++ b/libmpcodecs/ve_lavc.c
@@ -15,6 +15,7 @@
#include "mp_msg.h"
#include "help_mp.h"
#include "av_opts.h"
+#include "osdep/strsep.h"
#include "codec-cfg.h"
#include "stream/stream.h"
@@ -24,6 +25,7 @@
#include "libmpdemux/muxer.h"
#include "img_format.h"
+#include "fmt-conversion.h"
#include "mp_image.h"
#include "vf.h"
@@ -593,30 +595,9 @@ static int config(struct vf_instance* vf,
}
mux_v->imgfmt = lavc_param_format;
- switch(lavc_param_format)
- {
- case IMGFMT_YV12:
- lavc_venc_context->pix_fmt = PIX_FMT_YUV420P;
- break;
- case IMGFMT_422P:
- lavc_venc_context->pix_fmt = PIX_FMT_YUV422P;
- break;
- case IMGFMT_444P:
- lavc_venc_context->pix_fmt = PIX_FMT_YUV444P;
- break;
- case IMGFMT_411P:
- lavc_venc_context->pix_fmt = PIX_FMT_YUV411P;
- break;
- case IMGFMT_YVU9:
- lavc_venc_context->pix_fmt = PIX_FMT_YUV410P;
- break;
- case IMGFMT_BGR32:
- lavc_venc_context->pix_fmt = PIX_FMT_RGB32;
- break;
- default:
- mp_msg(MSGT_MENCODER,MSGL_ERR,"%s is not a supported format\n", vo_format_name(lavc_param_format));
- return 0;
- }
+ lavc_venc_context->pix_fmt = imgfmt2pixfmt(lavc_param_format);
+ if (lavc_venc_context->pix_fmt == PIX_FMT_NONE)
+ return 0;
if(!stats_file) {
/* lavc internal 2pass bitrate control */
diff --git a/libmpdemux/mf.c b/libmpdemux/mf.c
index ee4de16dcc..53c4296bfa 100644
--- a/libmpdemux/mf.c
+++ b/libmpdemux/mf.c
@@ -33,6 +33,7 @@
#else
#include "osdep/glob.h"
#endif
+#include "osdep/strsep.h"
#include "mp_msg.h"
#include "help_mp.h"
diff --git a/libvo/csputils.c b/libvo/csputils.c
index e842592b1f..57362f6725 100644
--- a/libvo/csputils.c
+++ b/libvo/csputils.c
@@ -60,10 +60,15 @@ void mp_get_yuv2rgb_coeffs(struct mp_csp_params *params, float yuv2rgb[3][4]) {
float uvcos = params->saturation * cos(params->hue);
float uvsin = params->saturation * sin(params->hue);
int format = params->format;
+ int levelconv = params->levelconv;
int i;
const float (*uv_coeffs)[3];
const float *level_adjust;
- static const float yuv_pc_level_adjust[4] = {-16 / 255.0, -128 / 255.0, -128 / 255.0, 1.164};
+ static const float yuv_level_adjust[MP_CSP_LEVELCONV_COUNT][4] = {
+ {-16 / 255.0, -128 / 255.0, -128 / 255.0, 1.164},
+ { 16 / 255.0 * 1.164, -128 / 255.0, -128 / 255.0, 1.0/1.164},
+ { 0, -128 / 255.0, -128 / 255.0, 1},
+ };
static const float xyz_level_adjust[4] = {0, 0, 0, 0};
static const float uv_coeffs_table[MP_CSP_COUNT][3][3] = {
[MP_CSP_DEFAULT] = {
@@ -101,7 +106,9 @@ void mp_get_yuv2rgb_coeffs(struct mp_csp_params *params, float yuv2rgb[3][4]) {
if (format < 0 || format >= MP_CSP_COUNT)
format = MP_CSP_DEFAULT;
uv_coeffs = uv_coeffs_table[format];
- level_adjust = yuv_pc_level_adjust;
+ if (levelconv < 0 || levelconv >= MP_CSP_LEVELCONV_COUNT)
+ levelconv = MP_CSP_LEVELCONV_TV_TO_PC;
+ level_adjust = yuv_level_adjust[levelconv];
if (format == MP_CSP_XYZ)
level_adjust = xyz_level_adjust;
diff --git a/libvo/csputils.h b/libvo/csputils.h
index 4723c7006d..54c6926b96 100644
--- a/libvo/csputils.h
+++ b/libvo/csputils.h
@@ -31,8 +31,16 @@ enum mp_csp_standard {
MP_CSP_COUNT
};
+enum mp_csp_levelconv {
+ MP_CSP_LEVELCONV_TV_TO_PC,
+ MP_CSP_LEVELCONV_PC_TO_TV,
+ MP_CSP_LEVELCONV_NONE,
+ MP_CSP_LEVELCONV_COUNT
+};
+
struct mp_csp_params {
enum mp_csp_standard format;
+ enum mp_csp_levelconv levelconv;
float brightness;
float contrast;
float hue;
diff --git a/libvo/vo_directx.c b/libvo/vo_directx.c
index a51a4314e5..00294b881d 100644
--- a/libvo/vo_directx.c
+++ b/libvo/vo_directx.c
@@ -91,12 +91,14 @@ static RECT last_rect = {0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE, 0xDEADC0DE};
* Defining them here allows us to get rid of the dxguid library during
* the linking stage.
*****************************************************************************/
-const GUID IID_IDirectDraw7 =
+#define IID_IDirectDraw7 MP_IID_IDirectDraw7
+static const GUID MP_IID_IDirectDraw7 =
{
0x15e65ec0,0x3b9c,0x11d2,{0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b}
};
-const GUID IID_IDirectDrawColorControl =
+#define IID_IDirectDrawColorControl MP_IID_IDirectDrawColorControl
+static const GUID MP_IID_IDirectDrawColorControl =
{
0x4b9f0ee0,0x0d7e,0x11d0,{0x9b,0x06,0x00,0xa0,0xc9,0x03,0xa3,0xb8}
};
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c
index e86425dbe7..b962beabc8 100644
--- a/libvo/vo_gl.c
+++ b/libvo/vo_gl.c
@@ -91,6 +91,7 @@ static int use_ycbcr;
#define MASK_GAMMA_SUPPORT (MASK_NOT_COMBINERS & ~(1 << YUV_CONVERSION_FRAGMENT))
static int use_yuv;
static int colorspace;
+static int levelconv;
static int is_yuv;
static int lscale;
static int cscale;
@@ -214,7 +215,7 @@ static void update_yuvconv(void) {
float ggamma = exp(log(8.0) * eq_ggamma / 100.0);
float bgamma = exp(log(8.0) * eq_bgamma / 100.0);
gl_conversion_params_t params = {gl_target, yuvconvtype,
- {colorspace, bri, cont, hue, sat, rgamma, ggamma, bgamma},
+ {colorspace, levelconv, bri, cont, hue, sat, rgamma, ggamma, bgamma},
texture_width, texture_height, 0, 0, filter_strength};
mp_get_chroma_shift(image_format, &xs, &ys);
params.chrom_texw = params.texw >> xs;
@@ -996,6 +997,12 @@ static int valid_csp(void *p)
return *csp >= -1 && *csp < MP_CSP_COUNT;
}
+static int valid_csp_lvl(void *p)
+{
+ int *lvl = p;
+ return *lvl >= -1 && *lvl < MP_CSP_LEVELCONV_COUNT;
+}
+
static const opt_t subopts[] = {
{"manyfmts", OPT_ARG_BOOL, &many_fmts, NULL},
{"osd", OPT_ARG_BOOL, &use_osd, NULL},
@@ -1006,6 +1013,7 @@ static const opt_t subopts[] = {
{"rectangle", OPT_ARG_INT, &use_rectangle,int_non_neg},
{"yuv", OPT_ARG_INT, &use_yuv, int_non_neg},
{"colorspace", OPT_ARG_INT, &colorspace, valid_csp},
+ {"levelconv", OPT_ARG_INT, &levelconv, valid_csp_lvl},
{"lscale", OPT_ARG_INT, &lscale, int_non_neg},
{"cscale", OPT_ARG_INT, &cscale, int_non_neg},
{"filter-strength", OPT_ARG_FLOAT, &filter_strength, NULL},
@@ -1037,6 +1045,7 @@ static int preinit(const char *arg)
use_ycbcr = 0;
use_yuv = 0;
colorspace = -1;
+ levelconv = -1;
lscale = 0;
cscale = 0;
filter_strength = 0.5;
@@ -1099,6 +1108,10 @@ static int preinit(const char *arg)
" 3: YUV to RGB according to SMPT-240M\n"
" 4: YUV to RGB according to EBU\n"
" 5: XYZ to RGB\n"
+ " levelconv=<n>\n"
+ " 0: YUV to RGB converting TV to PC levels\n"
+ " 1: YUV to RGB converting PC to TV levels\n"
+ " 2: YUV to RGB without converting levels\n"
" lscale=<n>\n"
" 0: use standard bilinear scaling for luma.\n"
" 1: use improved bicubic scaling for luma.\n"
diff --git a/libvo/vo_gl2.c b/libvo/vo_gl2.c
index f1f69f3de2..ae04cf4139 100644
--- a/libvo/vo_gl2.c
+++ b/libvo/vo_gl2.c
@@ -561,7 +561,7 @@ static int initGl(uint32_t d_width, uint32_t d_height)
if (is_yuv) {
int xs, ys;
gl_conversion_params_t params = {GL_TEXTURE_2D, use_yuv,
- {MP_CSP_DEFAULT, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0},
+ {-1, -1, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0},
texture_width, texture_height, 0, 0, 0};
switch (use_yuv) {
case YUV_CONVERSION_FRAGMENT_LOOKUP:
diff --git a/loader/dshow/guids.h b/loader/dshow/guids.h
index 5bf335f907..80686558b4 100644
--- a/loader/dshow/guids.h
+++ b/loader/dshow/guids.h
@@ -56,6 +56,8 @@ extern const GUID IID_IDivxFilterInterface;
extern const GUID CLSID_IV50_Decoder;
extern const GUID CLSID_MemoryAllocator;
extern const GUID MEDIATYPE_Video;
+// avoid a clash with MinGW-W64 libuuid
+#define GUID_NULL MP_GUID_NULL
extern const GUID GUID_NULL;
extern const GUID FORMAT_VideoInfo;
extern const GUID MEDIASUBTYPE_RGB1;
diff --git a/osdep/strsep.c b/osdep/strsep.c
index a5ffa7054d..e373141887 100644
--- a/osdep/strsep.c
+++ b/osdep/strsep.c
@@ -22,6 +22,7 @@
#include <string.h>
#include "config.h"
+#include "strsep.h"
char *strsep(char **stringp, const char *delim) {
char *begin, *end;
diff --git a/osdep/strsep.h b/osdep/strsep.h
new file mode 100644
index 0000000000..fbd377f084
--- /dev/null
+++ b/