summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/fr/mplayer.1133
-rw-r--r--DOCS/man/zh_CN/mplayer.14
-rw-r--r--Makefile2
-rw-r--r--codec-cfg.c11
-rw-r--r--etc/codecs.conf51
-rw-r--r--fmt-conversion.c11
-rw-r--r--libao2/ao_alsa.c9
-rw-r--r--libao2/ao_dart.c2
-rw-r--r--libmpcodecs/img_format.c64
-rw-r--r--libmpcodecs/img_format.h32
-rw-r--r--libmpcodecs/mp_image.c59
-rw-r--r--libmpcodecs/mp_image.h48
-rw-r--r--libmpcodecs/vd_ffmpeg.c4
-rw-r--r--libmpcodecs/vf.c39
-rw-r--r--libmpcodecs/vf_scale.c26
-rw-r--r--libvo/csputils.c160
-rw-r--r--libvo/csputils.h56
-rw-r--r--libvo/gl_common.c143
-rw-r--r--libvo/gl_common.h12
-rw-r--r--libvo/vo_gl.c105
-rw-r--r--libvo/vo_gl2.c65
-rw-r--r--libvo/vo_ivtv.c2
-rw-r--r--libvo/vo_jpeg.c15
-rw-r--r--libvo/vo_png.c9
-rw-r--r--libvo/vo_pnm.c2
-rw-r--r--libvo/vo_v4l2.c2
-rw-r--r--libvo/vo_xv.c15
-rw-r--r--libvo/vo_xvmc.c4
-rw-r--r--libvo/vo_zr2.c10
-rw-r--r--m_option.c11
-rw-r--r--stream/http.c7
-rw-r--r--subopt-helper.c14
-rw-r--r--subopt-helper.h4
33 files changed, 753 insertions, 378 deletions
diff --git a/DOCS/man/fr/mplayer.1 b/DOCS/man/fr/mplayer.1
index 61ae44e954..f1de6a4065 100644
--- a/DOCS/man/fr/mplayer.1
+++ b/DOCS/man/fr/mplayer.1
@@ -1,4 +1,4 @@
-.\" synced with r29731
+.\" synced with r30135
.\" Encoding: iso-8859-1
.\" MPlayer (C) 2000-2009 MPlayer Team
.\" The English man page was/is done by Gabucino, Diego Biurrun, Jonas Jermann
@@ -188,7 +188,12 @@ rotation, redimensionnement, bruit, conversion RGB/\:YUV) et bien plus.
.PP
.B gmplayer
est l'interface graphique de MPlayer.
-Il possède les mêmes options que MPlayer.
+Elle possède les mêmes options que MPlayer, cela dit toutes peuvent ne
+pas fonctionner correctement à cause des des conflits avec la
+configuration de l'IHM graphique (stocké dans gui.conf).
+Certaines options peuvent êtres redéfinies par la configuration de
+gui.conf, et certaines autres peuvent être définies de façon
+permanente par gui.conf
.PP
Des exemples d'usage pour vous familiariser rapidement sont disponibles
à la fin de cette page de manuel.
@@ -447,9 +452,10 @@ Confirme le choix.
.RS
.
.
-(Les touches suivantes ne sont valides que si MPlayer a été
-compilé avec le support télétexte\ : elles peuvent être utilisées pour contrôler
-le télétexte de la TV.)
+(Les touches suivantes ne sont valides que si MPlayer a été compilé
+avec le support télétexte\ : elles servent à contrôler le télétexte de
+la TV, dont les données peuvent provenir d'une source TV analogique ou
+par MPEG Transport Stream.)
.RE
.PP
.PD 0
@@ -551,18 +557,14 @@ Vous pouvez également écrire des fichiers de config spécifiques à un fichier.
Si vous souhaitez avoir un fichier de config pour un fichier nommé 'film.avi',
créez un fichier nommé 'film.avi.conf' contenant les options spécifiques à ce
fichier et placez-le dans ~/.mplayer/.
-
Si un tel fichier de configuration se trouve dans le même répertoire,
aucun fichier de configuration spécifique ne sera lu depuis
~/.mplayer/.
-
De plus, l'option \-use\-filedir\-conf permet de définir des fichiers
de configuration spécifiques à un répertoire.
-
Pour ce faire, MPlayer essaye de charger un fichier mplayer.conf
depuis le même répertoire que celui du fichier joué, et essaye ensuite
de charger un fichier de configuration spécifique.
-
.PP
.I EXEMPLE DE FICHIER DE CONFIGURATION MPLAYER\ :
.sp 1
@@ -1299,7 +1301,7 @@ Permet au socket d'être ré-utilisé par un autre processus aussitôt qu'il
est fermé.
.
.TP
-.B \-bandwidth <valeur> (réseau uniquement)
+.B \-bandwidth <octets> (réseau uniquement)
Spécifie la bande passante maximum pour le streaming par le réseau (pour les
serveurs capables d'envoyer du contenu à différents débits).
Utile si vous voulez voir en direct avec une connexion lente des médias
@@ -1400,6 +1402,8 @@ Stereo
Surround
.IPs 6
5.1 complet
+.IPs 8
+7.1 complet
.RE
.PD 1
.
@@ -3266,8 +3270,9 @@ Utilise l'astuce _WIN_LAYER avec la couche par défaut.
Utilise l'astuce _WIN_LAYER avec le numéro de couche.
.IPs netwm
Force le style NETWM.
-.IPs none
-N'initialise pas la couche plein-écran de la fenêtre.
+.IPs "none\ "
+Efface la liste des modes\ ; vous pouvez ajouter des modes à activer
+plus tard.
.IPs stays_on_top
Utilise l'astuce _NETWM_STATE_STAYS_ON_TOP si disponible.
.REss
@@ -3298,11 +3303,11 @@ alors les coordonnées x et y sont relatives aux coin supérieur gauche de la
fenêtre au lieu celui de l'écran.
Les coordonnées sont relatives à l'écran donné par l'option \-xineramascreen
pour les pilotes de sortie vidéo gérant complètement l'option \-xineramascreen
-(direct3d, gl, gl2, vdpau, x11, xv, xvmc).
+(direct3d, gl, gl2, vdpau, x11, xv, xvmc, corevideo).
.br
.I NOTE:
Cette option n'est permise que par les pilotes de sortie vidéo x11, xmga, xv,
-xvmc, xvidix, gl, gl2, directx, fbdev et tdfxfb.
+xvmc, xvidix, gl, gl2, directx, fbdev, tdfxfb et corevideo.
.sp 1
.I EXEMPLE:
.PD 0
@@ -3371,6 +3376,10 @@ La valeur 1 signifie des pixels carrés (correct
pour presque tous les écrans LCD).
.
.TP
+.B \-name (X11 uniquement)
+Défini le nom de la classe de fenêtre.
+.
+.TP
.B \-nodouble
Désactive le double tamponnage (buffering), surtout à des fins de débogage.
Le double tamponnage évite les phénomènes de scintillement en plaçant
@@ -3461,6 +3470,17 @@ Si votre reposeur d'écran ne supporte ni l'API XSS, ni XResetScreenSaver,
alors veuillez utiliser \-heartbeat\-cmd à la place.
.
.TP
+.B \-title (voir aussi \-use\-filename\-title)
+Défini le titre de la fenêtre.
+Géré par tous les pilotes de sortie vidéos basés sur X11.
+.
+.TP
+.B \-use\-filename\-title (voir aussi \-title)
+Défini la barre de titre en fonction du nom de fichier du média, quand
+celui-ci n'est pas défini par \-title.
+Géré par tous les pilotes de sortie vidéos basés sur X11.
+.
+.TP
.B "\-vm \ \ \ "
Essaie de changer vers un autre mode vidéo.
Les pilotes de sortie vidéo dga, x11, xv, sdl et directx le permettent.
@@ -3496,7 +3516,8 @@ Fontionnera généralement uniquement avec "\-fstype \-fullscreen" ou
Cette option ne convient pas pour définir l'écran de démarrage (car l'affichage
se fera toujours en plein écran sur le moniteur donné), \-geometry est plus
approprié.
-Géré au moins par les pilotes de sortie vidéo direct3d, gl, gl2, x11, et xv.
+Géré au moins par les pilotes de sortie vidéo direct3d, gl, gl2, x11, xv et
+corevideo.
.
.TP
.B \-zrbw (\-vo zr uniquement)
@@ -3651,7 +3672,8 @@ Sélectionnne le pilote à utiliser comme source pour l'incrustation dans X11.
.PD 1
.
.TP
-.B vdpau (avec \-vc ffmpeg12vdpau, ffwmv3vdpau, ffvc1vdpau ou ffh264vdpau)
+.B vdpau (avec \-vc ffmpeg12vdpau, ffwmv3vdpau, ffvc1vdpau, ffh264vdpau,
+ou ffodivxvdpau)
Sortie vidéo utilisant VDPAU pour décoder les vidéos matériellement.
Gère aussi l'affichage de vidéos décodées en logiciel.
.PD 0
@@ -3693,6 +3715,37 @@ Utile quand la mémoire vidéo est lente.
.IPs pullup
Essaye d'appliquer un filtre téléciné inverse.
Nécessite un filtre de désentrelacement à adaptation de mouvement temporel.
+.IPs colorspace
+Sélectionne l'espace de couleur pour la conversion YUV vers RVB.
+En général, BT.601 est recommandé pour les contenus à définition standard
+(SD), et BT.709 pour la haute définition (HD)
+L'utilisation d'un espace de couleur inapproprié peut donner des
+couleurs trop ou pas assez saturées.
+.RSss
+.IPs 0
+Déduit l'espace de couleur en fonction de la résolution vidéo.
+Une vidéo dont la largeur est >= 1280 ou on la hauteur est > 576 est
+détectée comme HD et donc l'espace de couleur BT.709 sera utilisé.
+.IPs 1
+Utilise l'espace de couleur ITU-R BT.601 (par défaut).
+.IPs 2
+Utilise l'espace de couleur ITU-R BT.709.
+.IPs 3
+Utilise l'espace de couleur SMPTE-240M.
+.RE
+.IPs hqscaling
+.RSss
+.IPs 0
+Utilise la mise à l'échelle VDPAU (par défaut).
+.IPs 1\-9
+Utilise une mise à l'échelle de haute qualité (nécessite un matériel
+compatible).
+.RE
+.IPs force\-mixer
+Force l'utilisation du mixeur VDPAU, qui implémente toutes les options
+ci-dessus (par défaut).
+Utilisez noforce\-mixer pour permettre l'affichage de vidéos utilisant
+l'espace de couleur BGRA.
.RE
.PD 1
.
@@ -3985,6 +4038,9 @@ horizontal / n).
Requiert le support de GLX_SGI_swap_control pour fonctionner.
Avec certaines implémentation (la plupart/toutes?) ceci ne fonctionne
qu'en mode plein écran
+.IPs ycbcr
+Utilise l'extension GL_MESA_ycbcr_texture pour la conversion YUV vers RVB.
+Généralement plus lent que de réaliser cette conversion par logiciel.
.IPs yuv=<n>
Choisit le type de conversion YUV vers RGB.
.RSss
@@ -4038,10 +4094,6 @@ Le gamma du rouge, vert et bleu peut aussi être ajusté indépendement.
La vitesse de ce type de conversion dépend plus de la bande passante
de la carte vidéo que les autres méthodes.
.RE
-.IPs ycbcr
-Utilise l'extension GL_MESA_ycbcr_texture pour la conversion YUV vers RGB.
-Dans la plupart des cas, cela est probablement plus lent que de réaliser
-la conversion RGB par logiciel.
.IPs lscale=<n>
Sélection de la fonction de mise à l'échelle à utiliser pour la luminance.
Valide uniquement pour les modes yuv 2, 3, 4 et 6.
@@ -4083,6 +4135,12 @@ Utilise l'interpolation GL_LINEAR (par défaut), sinon utilise
GL_NEAREST comme texture customtex.
.IPs (no)customtrect
Utilise texture_rectangle comme texture customtex.
+.IPs (no)mipmapgen
+Permet la génération automatique de mipmaps pour la vidéo.
+Peut être utile combiné avec les instruction customprog et TXB
+pour implémenter des filtre de floutage à large diamètre.
+Très lent avec la plupart des implémentation OpenGL pour les formats
+non-RVB.
.RE
.sp 1
.RS
@@ -5372,14 +5430,15 @@ Défini la fréquence de coupure (en Hz).
Défini le niveau d'entrée des basses fréquences (en dixième de dB).
.IPs profile=<valeur>
Plusieurs profils sont disponibles\ :
+.PD 0
.RSs
-default\ : réglage par défaut (fcut=700, feed=45);
-.br
-cmoy: implémentation du circuit Chu Moy (fcut=700, feed=60);
-.br
-jmeier: implémentation du circuit Jan Meier (fcut=650, feed=95).
-.REss
-.PD 1
+.IPs default
+réglage par défaut (fcut=700, feed=45);
+.IPs "cmoy\ "
+implémentation du circuit Chu Moy (fcut=700, feed=60);
+.IPs jmeier
+implémentation du circuit Jan Meier (fcut=650, feed=95).
+.RE
.RE
.sp 1
.RS
@@ -5464,11 +5523,11 @@ d'entrée les canaux en trop seront tronqués.
.PD 0
.RSs
.IPs <nch>
-nombre de canaux de sortie (1\-6)
+nombre de canaux de sortie (1\-8)
.IPs "<nr>\ "
-nombre de routes (1\-6)
+nombre de routes (1\-8)
.IPs <from1:to1:from2:to2:from3:to3:...>
-Paires de nombres entre 0 and 5 définissant où router chaque canal.
+Paires de nombres entre 0 and 7 définissant où router chaque canal.
.RE
.sp 1
.RS
@@ -5575,7 +5634,7 @@ Un exemple de mixage de six canaux vers deux à l'aide de ce filtre peut
.PD 0
.RSs
.IPs "<n>\ \ "
-nombre de canaux de sortie (1\-6)
+nombre de canaux de sortie (1\-8)
.IPs <Lij>
Combien du canal i est mixé dans le canal de sortie j (0\-1).
En principe, vous avez un nombre spécifiant ce que faire avec le premier
@@ -5621,8 +5680,8 @@ aussi bas que possible.
Cela améliorera l'effet surround ou stéréo.
.IPs "<ca>\ "
Définit le numéro de canal vers lequel router le flux du caisson de basse.
-Le numéro de canal doit être compris entre 0 et 5 (par défaut\ : 5).
-Notez que le nombre de canaux sera automatiquement incrémenté jusqu'à <ch>
+Le numéro de canal doit être compris entre 0 et 7 (par défaut\ : 5).
+Notez que le nombre de canaux sera automatiquement incrémenté jusqu'à <ca>
si nécessaire.
.RE
.sp 1
@@ -5646,7 +5705,7 @@ fait une moyenne des canaux et l'atténue de moitié à la place.
.RSs
.IPs <ca>
Détermine le canal dans lequel insérer le canal central.
-Le numéro de canal peut être un nombre compris entre 0 et 5
+Le numéro de canal peut être un nombre compris entre 0 et 7
(par défaut\ : 5).
Notez que le nombre de canaux sera automatiquement augmenté à <ca>
si nécessaire.
@@ -5723,8 +5782,8 @@ Les aires de mémoire mappées contiennent une entête:
int nch /*nombre de canaux*/
int size /*taille du tampon*/
unsigned long long counter /*Utilisé pour garder la synchro, mis à jour
- chaque fois que de nouvelles données son
- exportées.*/
+ chaque fois que de nouvelles données son
+ exportées.*/
.fi
.sp 1
Le reste est charge utile, constitué de données 16bit (non-entrelacées).
@@ -7704,6 +7763,8 @@ disponible \- aucun fichier ne sera écrasé.
Ce filtre ne provoque pas de surcoût lorsqu'il n'est pas utilisé, et accepte
tous les espaces de couleur, donc ça ne pose pas de problème de l'ajouter par
défaut dans votre fichier de configuration.
+Assurez-vous que ce filtre est appliqué après tous les autres filtres vidéos,
+sinon l'image capturée ne correspondra pas à ce que vous voyez à l'écran.
.RE
.
.TP
diff --git a/DOCS/man/zh_CN/mplayer.1 b/DOCS/man/zh_CN/mplayer.1
index c2bf86f4f3..274ef7c2b8 100644
--- a/DOCS/man/zh_CN/mplayer.1
+++ b/DOCS/man/zh_CN/mplayer.1
@@ -1,4 +1,4 @@
-.\" sync with en/mplayer.1 r30053
+.\" sync with en/mplayer.1 r30135
.\" Encoding: UTF-8
.\" Reminder of hard terms which need better/final solution later:
.\" /capture; playtree in parent list; colorkey; retrace; desync; downmix;
@@ -1167,7 +1167,7 @@ MPlayer 在 verbose (\-v) 模å¼ä¸‹ä¼šæ‰“å°å¯ç”¨çš„语言。
å…许SOCKET在关闭åŽç«‹å³è¢«å…¶å®ƒè¿›ç¨‹é‡æ–°åˆ©ç”¨ã€‚
.
.TP
-.B \-bandwidth <å‚数值> (仅适用于网络)
+.B \-bandwidth <字节值> (仅适用于网络)
指定网络æµçš„最大带宽(用于æœåŠ¡å™¨å¯ä»¥ä»¥ä¸åŒå¸¦å®½ä¼ é€å†…容的情况)。
当你以慢速连接观看现场æµåª’体时有用。
对于 Real RTSP æµ, 也用æ¥è®¾ç½®æœ€å¤§çš„ä¼ é€å¸¦å®½
diff --git a/Makefile b/Makefile
index be0530ba86..67c2411599 100644
--- a/Makefile
+++ b/Makefile
@@ -538,7 +538,7 @@ SRCS_MPLAYER-$(ESD) += libao2/ao_esd.c
SRCS_MPLAYER-$(FBDEV) += libvo/vo_fbdev.c libvo/vo_fbdev2.c
SRCS_MPLAYER-$(GGI) += libvo/vo_ggi.c
SRCS_MPLAYER-$(GIF) += libvo/vo_gif89a.c
-SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c libvo/vo_gl2.c
+SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c libvo/vo_gl2.c libvo/csputils.c
SRCS_MPLAYER-$(GL_WIN32) += libvo/w32_common.c
SRCS_MPLAYER-$(GL_X11) += libvo/x11_common.c
diff --git a/codec-cfg.c b/codec-cfg.c
index 27e07c92ac..5a7b7c9d9b 100644
--- a/codec-cfg.c
+++ b/codec-cfg.c
@@ -155,9 +155,20 @@ static int add_to_format(char *s, char *alias,unsigned int *fourcc, unsigned int
{"NV21", IMGFMT_NV21},
{"YVU9", IMGFMT_YVU9},
{"IF09", IMGFMT_IF09},
+ {"444P16LE", IMGFMT_444P16_LE},
+ {"444P16BE", IMGFMT_444P16_BE},
+ {"422P16LE", IMGFMT_422P16_LE},
+ {"422P16BE", IMGFMT_422P16_BE},
+ {"420P16LE", IMGFMT_420P16_LE},
+ {"420P16BE", IMGFMT_420P16_BE},
+ {"444P16", IMGFMT_444P16},
+ {"422P16", IMGFMT_422P16},
+ {"420P16", IMGFMT_420P16},
+ {"420A", IMGFMT_420A},
{"444P", IMGFMT_444P},
{"422P", IMGFMT_422P},
{"411P", IMGFMT_411P},
+ {"440P", IMGFMT_440P},
{"Y800", IMGFMT_Y800},
{"Y8", IMGFMT_Y8},
diff --git a/etc/codecs.conf b/etc/codecs.conf
index 5f22c31a2d..be548cac61 100644
--- a/etc/codecs.conf
+++ b/etc/codecs.conf
@@ -1305,6 +1305,7 @@ videocodec ffmjpeg
dll mjpeg
out 444P
out 422P
+ out 440P
out YUY2 ; queried (conversion from yuv422p)
out YV12,I420,IYUV
out BGR32 ; lossless JPEG
@@ -1319,6 +1320,7 @@ videocodec ffmjpegb
dll mjpegb
out 444P
out 422P
+ out 440P
out YUY2 ; queryed (conversion from yuv422p)
out YV12,I420,IYUV
@@ -2058,7 +2060,7 @@ videocodec ffvp6a
fourcc VP6A
driver ffmpeg
dll "vp6a"
- out I420,YUY2,YV12
+ out 420A
videocodec ffvp6f
info "FFmpeg VP6 Flash"
@@ -2237,6 +2239,15 @@ videocodec tm20
guid 0x4cb63e61, 0xc611, 0x11D0, 0x83, 0xaa, 0x00, 0x00, 0x92, 0x90, 0x01, 0x84
out BGR32,BGR24,BGR16 flip
+videocodec tm2xvfw
+ info "TrueMotion 2.0"
+ status working
+ fourcc TM2X
+ fourcc TM2A TM2X
+ driver vfw
+ dll "tm2X.dll"
+ out BGR32,BGR24,BGR16 flip
+
videocodec tr20
info "TrueMotion RT"
status working
@@ -2627,6 +2638,14 @@ videocodec qtsvq1
dll "QuickTime.qts"
out YVU9
+videocodec ffv210
+ info "FFmpeg V210 - 10-bit"
+ status untested
+ fourcc v210
+ driver ffmpeg
+ dll v210
+ out 422P16
+
videocodec qtcine
info "cinewave uncompressed 10-bit codec"
status working
@@ -3769,7 +3788,7 @@ audiocodec ffaac
audiocodec ffflac
info "FFmpeg FLAC audio"
status working
- format 0x43614C66
+ fourcc "fLaC"
format 0xF1AC
driver ffmpeg
dll "flac"
@@ -4063,15 +4082,6 @@ audiocodec lpcm
driver ffmpeg
dll pcm_bluray
-audiocodec a52
- info "AC3-liba52"
- status working
- format 0x2000
- ; format 0x332D6361 ; ac-3 in mp4 -- not working
- fourcc dnet
- driver liba52
- dll "liba52"
-
audiocodec ffac3
info "FFmpeg AC-3"
status working
@@ -4091,12 +4101,14 @@ audiocodec ffeac3
driver ffmpeg
dll eac3
-audiocodec dts
- info "DTS-libdca"
+audiocodec a52
+ info "AC3-liba52"
status working
- format 0x2001
- format 0x86
- driver libdca
+ format 0x2000
+ ; format 0x332D6361 ; ac-3 in mp4 -- not working
+ fourcc dnet
+ driver liba52
+ dll "liba52"
audiocodec ffdca
info "FFmpeg DTS"
@@ -4106,6 +4118,13 @@ audiocodec ffdca
driver ffmpeg
dll "dca"
+audiocodec dts
+ info "DTS-libdca"
+ status working
+ format 0x2001
+ format 0x86
+ driver libdca
+
audiocodec ffmusepack7
info "Musepack sv7 audio codec"
comment "only works with libavformat demuxer"
diff --git a/fmt-conversion.c b/fmt-conversion.c
index 06699c6ee5..9371ab1a11 100644
--- a/fmt-conversion.c
+++ b/fmt-conversion.c
@@ -58,6 +58,16 @@ static const struct {
{IMGFMT_411P, PIX_FMT_YUV411P},
{IMGFMT_422P, PIX_FMT_YUV422P},
{IMGFMT_444P, PIX_FMT_YUV444P},
+ {IMGFMT_440P, PIX_FMT_YUV440P},
+
+ {IMGFMT_420A, PIX_FMT_YUVA420P},
+
+ {IMGFMT_420P16_LE, PIX_FMT_YUV420P16LE},
+ {IMGFMT_420P16_BE, PIX_FMT_YUV420P16BE},
+ {IMGFMT_422P16_LE, PIX_FMT_YUV422P16LE},
+ {IMGFMT_422P16_BE, PIX_FMT_YUV422P16BE},
+ {IMGFMT_444P16_LE, PIX_FMT_YUV444P16LE},
+ {IMGFMT_444P16_BE, PIX_FMT_YUV444P16BE},
// YUVJ are YUV formats that use the full Y range and not just
// 16 - 235 (see colorspaces.txt).
@@ -65,6 +75,7 @@ static const struct {
{IMGFMT_YV12, PIX_FMT_YUVJ420P},
{IMGFMT_422P, PIX_FMT_YUVJ422P},
{IMGFMT_444P, PIX_FMT_YUVJ444P},
+ {IMGFMT_440P, PIX_FMT_YUVJ440P},
{IMGFMT_XVMC_MOCO_MPEG2, PIX_FMT_XVMC_MPEG2_MC},
{IMGFMT_XVMC_IDCT_MPEG2, PIX_FMT_XVMC_MPEG2_IDCT},
diff --git a/libao2/ao_alsa.c b/libao2/ao_alsa.c
index 4c92597765..140b13a62a 100644
--- a/libao2/ao_alsa.c
+++ b/libao2/ao_alsa.c
@@ -271,10 +271,9 @@ static void print_help (void)
"[AO_ALSA] Sets device (change , to . and : to =)\n");
}
-static int str_maxlen(strarg_t *str) {
- if (str->len > ALSA_DEVICE_SIZE)
- return 0;
- return 1;
+static int str_maxlen(void *strp) {
+ strarg_t *str = strp;
+ return str->len <= ALSA_DEVICE_SIZE;
}
static int try_open_device(const char *device, int open_mode, int try_ac3)
@@ -336,7 +335,7 @@ static int init(int rate_hz, int channels, int format, int flags)
snd_pcm_uframes_t boundary;
const opt_t subopts[] = {
{"block", OPT_ARG_BOOL, &block, NULL},
- {"device", OPT_ARG_STR, &device, (opt_test_f)str_maxlen},
+ {"device", OPT_ARG_STR, &device, str_maxlen},
{NULL}
};
diff --git a/libao2/ao_dart.c b/libao2/ao_dart.c
index 58ee4d1886..e1df7d32f7 100644
--- a/libao2/ao_dart.c
+++ b/libao2/ao_dart.c
@@ -148,7 +148,7 @@ static int init(int rate, int channels, int format, int flags)
const opt_t subopts[] = {
{"share", OPT_ARG_BOOL, &fShare, NULL},
- {"bufsize", OPT_ARG_INT, &nDartSamples, (opt_test_f)int_non_neg},
+ {"bufsize", OPT_ARG_INT, &nDartSamples, int_non_neg},
{NULL}
};
diff --git a/libmpcodecs/img_format.c b/libmpcodecs/img_format.c
index 7d20a77cc7..31cb3591bb 100644
--- a/libmpcodecs/img_format.c
+++ b/libmpcodecs/img_format.c
@@ -37,6 +37,13 @@ const char *vo_format_name(int format)
case IMGFMT_CLPL: return "Planar CLPL";
case IMGFMT_Y800: return "Planar Y800";
case IMGFMT_Y8: return "Planar Y8";
+ case IMGFMT_420P16_LE: return "Planar 420P 16-bit little-endian";
+ case IMGFMT_420P16_BE: return "Planar 420P 16-bit big-endian";
+ case IMGFMT_422P16_LE: return "Planar 422P 16-bit little-endian";
+ case IMGFMT_422P16_BE: return "Planar 422P 16-bit big-endian";
+ case IMGFMT_444P16_LE: return "Planar 444P 16-bit little-endian";
+ case IMGFMT_444P16_BE: return "Planar 444P 16-bit big-endian";
+ case IMGFMT_420A: return "Planar 420P with alpha";
case IMGFMT_444P: return "Planar 444P";
case IMGFMT_422P: return "Planar 422P";
case IMGFMT_411P: return "Planar 411P";
@@ -79,3 +86,60 @@ const char *vo_format_name(int format)
snprintf(unknown_format,20,"Unknown 0x%04x",format);
return unknown_format;
}
+
+int mp_get_chroma_shift(int format, int *x_shift, int *y_shift)
+{
+ int xs = 0, ys = 0;
+ int bpp;
+ int bpp_factor = 1;
+ int err = 0;
+ switch (format) {
+ case IMGFMT_420P16_LE:
+ case IMGFMT_420P16_BE:
+ bpp_factor = 2;
+ case IMGFMT_420A:
+ case IMGFMT_I420:
+ case IMGFMT_IYUV:
+ case IMGFMT_YV12:
+ xs = 1;
+ ys = 1;
+ break;
+ case IMGFMT_IF09:
+ case IMGFMT_YVU9:
+ xs = 2;
+ ys = 2;
+ break;
+ case IMGFMT_444P16_LE:
+ case IMGFMT_444P16_BE:
+ bpp_factor = 2;
+ case IMGFMT_444P:
+ xs = 0;
+ ys = 0;
+ break;
+ case IMGFMT_422P16_LE:
+ case IMGFMT_422P16_BE:
+ bpp_factor = 2;
+ case IMGFMT_422P:
+ xs = 1;
+ ys = 0;
+ break;
+ case IMGFMT_411P:
+ xs = 2;
+ ys = 0;
+ break;
+ case IMGFMT_440P:
+ xs = 0;
+ ys = 1;
+ break;
+ default:
+ err = 1;
+ break;
+ }
+ if (x_shift) *x_shift = xs;
+ if (y_shift) *y_shift = ys;
+ bpp = 8 + (16 >> (xs + ys));
+ if (format == IMGFMT_420A)
+ bpp += 8;
+ bpp *= bpp_factor;
+ return err ? 0 : bpp;
+}
diff --git a/libmpcodecs/img_format.h b/libmpcodecs/img_format.h
index 4c917b01e4..6bab56632d 100644
--- a/libmpcodecs/img_format.h
+++ b/libmpcodecs/img_format.h
@@ -71,8 +71,33 @@
#define IMGFMT_444P 0x50343434
#define IMGFMT_422P 0x50323234
#define IMGFMT_411P 0x50313134
+#define IMGFMT_440P 0x50303434
#define IMGFMT_HM12 0x32314D48
+// 4:2:0 planar with alpha
+#define IMGFMT_420A 0x41303234
+
+#define IMGFMT_444P16_LE 0x51343434
+#define IMGFMT_444P16_BE 0x34343451
+#define IMGFMT_422P16_LE 0x51323234
+#define IMGFMT_422P16_BE 0x34323251
+#define IMGFMT_420P16_LE 0x51303234
+#define IMGFMT_420P16_BE 0x34323051
+#if HAVE_BIGENDIAN
+#define IMGFMT_444P16 IMGFMT_444P16_BE
+#define IMGFMT_422P16 IMGFMT_422P16_BE
+#define IMGFMT_420P16 IMGFMT_420P16_BE
+#else
+#define IMGFMT_444P16 IMGFMT_444P16_LE
+#define IMGFMT_422P16 IMGFMT_422P16_LE
+#define IMGFMT_420P16 IMGFMT_420P16_LE
+#endif
+
+#define IMGFMT_IS_YUVP16_LE(fmt) (((fmt ^ IMGFMT_420P16_LE) & 0xff0000ff) == 0)
+#define IMGFMT_IS_YUVP16_BE(fmt) (((fmt ^ IMGFMT_420P16_BE) & 0xff0000ff) == 0)
+#define IMGFMT_IS_YUVP16_NE(fmt) (((fmt ^ IMGFMT_420P16 ) & 0xff0000ff) == 0)
+#define IMGFMT_IS_YUVP16(fmt) (IMGFMT_IS_YUVP16_LE(fmt) || IMGFMT_IS_YUVP16_BE(fmt))
+
/* Packed YUV Formats */
#define IMGFMT_IUYV 0x56595549
@@ -133,4 +158,11 @@ typedef struct {
const char *vo_format_name(int format);
+/**
+ * Calculates the scale shifts for the chroma planes for planar YUV
+ *
+ * \return bits-per-pixel for format if successful (i.e. format is 3 or 4-planes planar YUV), 0 otherwise
+ */
+int mp_get_chroma_shift(int format, int *x_shift, int *y_shift);
+
#endif /* MPLAYER_IMG_FORMAT_H */
diff --git a/libmpcodecs/mp_image.c b/libmpcodecs/mp_image.c
index 3eb524d491..1bc0492e9c 100644
--- a/libmpcodecs/mp_image.c
+++ b/libmpcodecs/mp_image.c
@@ -14,37 +14,50 @@
#include "libvo/fastmemcpy.h"
-mp_image_t* alloc_mpi(int w, int h, unsigned long int fmt) {
- mp_image_t* mpi = new_mp_image(w,h);
-
- mp_image_setfmt(mpi,fmt);
+void mp_image_alloc_planes(mp_image_t *mpi) {
// IF09 - allocate space for 4. plane delta info - unused
- if (mpi->imgfmt == IMGFMT_IF09)
- {
- mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8+
- mpi->chroma_width*mpi->chroma_height);
- /* delta table, just for fun ;) */
- mpi->planes[3]=mpi->planes[0]+2*(mpi->chroma_width*mpi->chroma_height);
- }
- else
+ if (mpi->imgfmt == IMGFMT_IF09) {
+ mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8+
+ mpi->chroma_width*mpi->chroma_height);
+ } else
mpi->planes[0]=memalign(64, mpi->bpp*mpi->width*(mpi->height+2)/8);
- if(mpi->flags&MP_IMGFLAG_PLANAR){
+ if (mpi->flags&MP_IMGFLAG_PLANAR) {
+ int bpp = IMGFMT_IS_YUVP16(mpi->imgfmt)? 2 : 1;
// YV12/I420/YVU9/IF09. feel free to add other planar formats here...
- if(!mpi->stride[0]) mpi->stride[0]=mpi->width;
- if(!mpi->stride[1]) mpi->stride[1]=mpi->stride[2]=mpi->chroma_width;
- if(mpi->flags&MP_IMGFLAG_SWAPPED){
- // I420/IYUV (Y,U,V)
- mpi->planes[1]=mpi->planes[0]+mpi->width*mpi->height;
- mpi->planes[2]=mpi->planes[1]+mpi->chroma_width*mpi->chroma_height;
+ mpi->stride[0]=mpi->stride[3]=bpp*mpi->width;
+ if(mpi->num_planes > 2){
+ mpi->stride[1]=mpi->stride[2]=bpp*mpi->chroma_width;
+ if(mpi->flags&MP_IMGFLAG_SWAPPED){
+ // I420/IYUV (Y,U,V)
+ mpi->planes[1]=mpi->planes[0]+mpi->stride[0]*mpi->height;
+ mpi->planes[2]=mpi->planes[1]+mpi->stride[1]*mpi->chroma_height;
+ if (mpi->num_planes > 3)
+ mpi->planes[3]=mpi->planes[2]+mpi->stride[2]*mpi->chroma_height;
+ } else {
+ // YV12,YVU9,IF09 (Y,V,U)
+ mpi->planes[2]=mpi->planes[0]+mpi->stride[0]*mpi->height;
+ mpi->planes[1]=mpi->planes[2]+mpi->stride[1]*mpi->chroma_height;
+ if (mpi->num_planes > 3)
+ mpi->planes[3]=mpi->planes[1]+mpi->stride[1]*mpi->chroma_height;
+ }
} else {
- // YV12,YVU9,IF09 (Y,V,U)
- mpi->planes[2]=mpi->planes[0]+mpi->width*mpi->height;
- mpi->planes[1]=mpi->planes[2]+mpi->chroma_width*mpi->chroma_height;
+ // NV12/NV21
+ mpi->stride[1]=mpi->chroma_width;
+ mpi->planes[1]=mpi->planes[0]+mpi->stride[0]*mpi->height;
}
} else {
- if(!mpi->stride[0]) mpi->stride[0]=mpi->width*mpi->bpp/8;
+ mpi->stride[0]=mpi->width*mpi->bpp/8;
+ if (mpi->flags & MP_IMGFLAG_RGB_PALETTE)
+ mpi->planes[1] = memalign(64, 1024);
}
mpi->flags|=MP_IMGFLAG_ALLOCATED;
+}
+
+mp_image_t* alloc_mpi(int w, int h, unsigned long int fmt) {
+ mp_image_t* mpi = new_mp_image(w,h);
+
+ mp_image_setfmt(mpi,fmt);
+ mp_image_alloc_planes(mpi);
return mpi;
}
diff --git a/libmpcodecs/mp_image.h b/libmpcodecs/mp_image.h
index a62f403e27..667c131719 100644
--- a/libmpcodecs/mp_image.h
+++ b/libmpcodecs/mp_image.h
@@ -133,51 +133,32 @@ static inline void mp_image_setfmt(mp_image_t* mpi,unsigned int out_fmt){
}
mpi->flags|=MP_IMGFLAG_YUV;
mpi->num_planes=3;
+ if (mp_get_chroma_shift(out_fmt, NULL, NULL)) {
+ mpi->flags|=MP_IMGFLAG_PLANAR;
+ mpi->bpp = mp_get_chroma_shift(out_fmt, &mpi->chroma_x_shift, &mpi->chroma_y_shift);
+ mpi->chroma_width = mpi->width >> mpi->chroma_x_shift;
+ mpi->chroma_height = mpi->height >> mpi->chroma_y_shift;
+ }</