[vlc-commits] avcodec: DXVA2 is now frame multithreading safe

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Tue Apr 28 11:49:09 
2015 +0200| [32ed30c7bdea3a02f75d81aef7b3ae3328e1b437] | committer: 
Jean-Baptiste Kempf

avcodec: DXVA2 is now frame multithreading safe

after changes on the way the codec is reinitialized after seeking and the 
internal lock

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=32ed30c7bdea3a02f75d81aef7b3ae3328e1b437
---

 modules/codec/avcodec/video.c |   15 ---
 1 file changed, 15 deletions(-)

diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
index 5c4e192..f872c6d 100644
--- a/modules/codec/avcodec/video.c
+++ b/modules/codec/avcodec/video.c
@@ -432,21 +432,6 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext 
*p_context,
 break;
 }
 
-/* Workaround: frame multithreading is not compatible with
- * DXVA2. When a frame is being copied to host memory, the frame
- * is locked and cannot be used as a reference frame
- * simultaneously and thus decoding fails for some frames. This
- * causes major image corruption. */
-# if defined(_WIN32)
-char *avcodec_hw = var_InheritString( p_dec, avcodec-hw );
-if( avcodec_hw == NULL || strcasecmp( avcodec_hw, none ) )
-{
-msg_Warn( p_dec, threaded frame decoding is not compatible with 
DXVA2, disabled );
-p_context-thread_type = ~FF_THREAD_FRAME;
-}
-free( avcodec_hw );
-# endif
-
 if( p_context-thread_type  FF_THREAD_FRAME )
 p_dec-i_extra_picture_buffers = 2 * p_context-thread_count;
 #endif

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] FourCC: add D3D9 opaque GPU surface

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Tue Apr 28 14:22:58 
2015 +0200| [96c37b6abe6109a786488c6cd20aac93c399e405] | committer: 
Jean-Baptiste Kempf

FourCC: add D3D9 opaque GPU surface

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=96c37b6abe6109a786488c6cd20aac93c399e405
---

 include/vlc_fourcc.h |3 +++
 src/misc/fourcc.c|2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h
index 5d30ece..df82f6f 100644
--- a/include/vlc_fourcc.h
+++ b/include/vlc_fourcc.h
@@ -332,6 +332,9 @@
 /* Broadcom MMAL opaque buffer type */
 #define VLC_CODEC_MMAL_OPAQUE VLC_FOURCC('M','M','A','L')
 
+/* DXVA2 opaque video surface for use with D3D9 */
+#define VLC_CODEC_D3D9_OPAQUE VLC_FOURCC('D','X','A','9')
+
 /* Image codec (video) */
 #define VLC_CODEC_PNG VLC_FOURCC('p','n','g',' ')
 #define VLC_CODEC_PPM VLC_FOURCC('p','p','m',' ')
diff --git a/src/misc/fourcc.c b/src/misc/fourcc.c
index 3b5c9b3..108b860 100644
--- a/src/misc/fourcc.c
+++ b/src/misc/fourcc.c
@@ -2190,7 +2190,7 @@ static const struct
 { { VLC_CODEC_VDPAU_VIDEO_420, VLC_CODEC_VDPAU_VIDEO_422,
 VLC_CODEC_VDPAU_VIDEO_444, VLC_CODEC_VDPAU_OUTPUT },
FAKE_FMT() },
-{ { VLC_CODEC_ANDROID_OPAQUE, VLC_CODEC_MMAL_OPAQUE, },
+{ { VLC_CODEC_ANDROID_OPAQUE, VLC_CODEC_MMAL_OPAQUE, 
VLC_CODEC_D3D9_OPAQUE, },
FAKE_FMT() },
 
 { { 0 },   FAKE_FMT() }

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] skins2: fix a video control that fails to show up

2015-04-28 Thread Erwan Tulou
vlc | branch: master | Erwan Tulou erwa...@videolan.org | Tue Apr 28 15:32:12 
2015 +0200| [7a00bd9b966fe6eb615d7df1b5ff6afdd92b2d36] | committer: Erwan Tulou

skins2: fix a video control that fails to show up

This fixes a regression in vlc2.2. It is described on the forum at :
https://forum.videolan.org/viewtopic.php?f=15t=125790sid=05f4d8a32853034ce6d497ca15bab1e8

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7a00bd9b966fe6eb615d7df1b5ff6afdd92b2d36
---

 modules/gui/skins2/controls/ctrl_video.cpp |   36 +++-
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/modules/gui/skins2/controls/ctrl_video.cpp 
b/modules/gui/skins2/controls/ctrl_video.cpp
index 7c9dcae..c722755 100644
--- a/modules/gui/skins2/controls/ctrl_video.cpp
+++ b/modules/gui/skins2/controls/ctrl_video.cpp
@@ -113,6 +113,7 @@ void CtrlVideo::setLayout( GenericLayout *pLayout,
 {
 CtrlGeneric::setLayout( pLayout, rPosition );
 m_pLayout-getActiveVar().addObserver( this );
+getWindow()-getVisibleVar().addObserver( this );
 
 // register Video Control
 VoutManager::instance( getIntf() )-registerCtrlVideo( this );
@@ -125,6 +126,7 @@ void CtrlVideo::setLayout( GenericLayout *pLayout,
 void CtrlVideo::unsetLayout()
 {
 m_pLayout-getActiveVar().delObserver( this );
+getWindow()-getVisibleVar().delObserver( this );
 CtrlGeneric::unsetLayout();
 }
 
@@ -162,27 +164,28 @@ void CtrlVideo::resizeControl( int width, int height )
 void CtrlVideo::onUpdate( SubjectVarBool rVariable, void *arg  )
 {
 (void)arg;
+VarBool rFullscreen = VlcProc::instance( getIntf() )-getFullscreenVar();
 
-// Visibility changed
 if( rVariable == m_pVisible )
 {
-msg_Dbg( getIntf(), VideoCtrl : Visibility changed (visible=%d),
-  isVisible() );
+msg_Dbg( getIntf(), VideoCtrl(%p) : control visibility changed (%i),
+  this, isVisible() );
 notifyLayout();
 }
-
-// Active Layout changed
-if( rVariable == m_pLayout-getActiveVar() )
+else if( rVariable == m_pLayout-getActiveVar() )
 {
-msg_Dbg( getIntf(), VideoCtrl : Active Layout changed (isActive=%d),
-  m_pLayout-getActiveVar().get() );
+msg_Dbg( getIntf(), VideoCtrl(%p) : Active Layout changed (%i),
+  this, m_pLayout-getActiveVar().get() );
 }
-
-VarBool rFullscreen = VlcProc::instance( getIntf() )-getFullscreenVar();
-if( rVariable == rFullscreen )
+else if( rVariable == getWindow()-getVisibleVar() )
+{
+msg_Dbg( getIntf(), VideoCtrl(%p) : Window visibility changed (%i),
+  this, getWindow()-getVisibleVar().get() );
+}
+else if( rVariable == rFullscreen )
 {
-msg_Dbg( getIntf(), VideoCtrl : fullscreen toggled (fullscreen = %d),
-  rFullscreen.get() );
+msg_Dbg( getIntf(), VideoCtrl(%p) : fullscreen toggled (%i),
+  this, rFullscreen.get() );
 }
 
 if( isUseable()  !isUsed() )
@@ -232,9 +235,10 @@ bool CtrlVideo::isUseable( ) const
 {
 VarBool rFullscreen = VlcProc::instance( getIntf() )-getFullscreenVar();
 
-return isVisible()  // video control is visible
-   m_pLayout-isVisible()   // layout is visible
-   !rFullscreen.get();// fullscreen is off
+return isVisible()   // video control is visible
+m_pLayout-getActiveVar().get()// layout is active
+getWindow()-getVisibleVar().get() // window is visible
+!rFullscreen.get();// fullscreen is off
 }
 
 

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] skins2: remove a fallback when choosing a video control

2015-04-28 Thread Erwan Tulou
vlc | branch: master | Erwan Tulou erwa...@videolan.org | Tue Apr 28 15:21:24 
2015 +0200| [1d2608d4aa0aa9fe30b9fde5a825f14a9941347c] | committer: Erwan Tulou

skins2: remove a fallback when choosing a video control

This fallback was an attempt to recover when a skin is poorly designed,
but it causes problems under some circumstances. So let's remove it !

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1d2608d4aa0aa9fe30b9fde5a825f14a9941347c
---

 modules/gui/skins2/src/vout_manager.cpp |9 -
 1 file changed, 9 deletions(-)

diff --git a/modules/gui/skins2/src/vout_manager.cpp 
b/modules/gui/skins2/src/vout_manager.cpp
index f6ea8eb..5c9e67c 100644
--- a/modules/gui/skins2/src/vout_manager.cpp
+++ b/modules/gui/skins2/src/vout_manager.cpp
@@ -182,15 +182,6 @@ CtrlVideo* VoutManager::getBestCtrlVideo( )
 }
 }
 
-// as a fallback, look up any video control that is unused
-for( it = m_pCtrlVideoVec.begin(); it != m_pCtrlVideoVec.end(); ++it )
-{
-if( !(*it)-isUsed() )
-{
-return (*it);
-}
-}
-
 return NULL;
 }
 

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] skins2: fix a video control that fails to show up

2015-04-28 Thread Erwan Tulou
vlc/vlc-2.2 | branch: master | Erwan Tulou erwa...@videolan.org | Tue Apr 28 
15:32:12 2015 +0200| [88fa0c4b9d5196c53241fa27f2315ae6553d3808] | committer: 
Erwan Tulou

skins2: fix a video control that fails to show up

This fixes a regression in vlc2.2. It is described on the forum at :
https://forum.videolan.org/viewtopic.php?f=15t=125790sid=05f4d8a32853034ce6d497ca15bab1e8

(cherry picked from commit 7a00bd9b966fe6eb615d7df1b5ff6afdd92b2d36)
Signed-off-by: Erwan Tulou erwa...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=88fa0c4b9d5196c53241fa27f2315ae6553d3808
---

 modules/gui/skins2/controls/ctrl_video.cpp |   36 +++-
 1 file changed, 20 insertions(+), 16 deletions(-)

diff --git a/modules/gui/skins2/controls/ctrl_video.cpp 
b/modules/gui/skins2/controls/ctrl_video.cpp
index 7c9dcae..c722755 100644
--- a/modules/gui/skins2/controls/ctrl_video.cpp
+++ b/modules/gui/skins2/controls/ctrl_video.cpp
@@ -113,6 +113,7 @@ void CtrlVideo::setLayout( GenericLayout *pLayout,
 {
 CtrlGeneric::setLayout( pLayout, rPosition );
 m_pLayout-getActiveVar().addObserver( this );
+getWindow()-getVisibleVar().addObserver( this );
 
 // register Video Control
 VoutManager::instance( getIntf() )-registerCtrlVideo( this );
@@ -125,6 +126,7 @@ void CtrlVideo::setLayout( GenericLayout *pLayout,
 void CtrlVideo::unsetLayout()
 {
 m_pLayout-getActiveVar().delObserver( this );
+getWindow()-getVisibleVar().delObserver( this );
 CtrlGeneric::unsetLayout();
 }
 
@@ -162,27 +164,28 @@ void CtrlVideo::resizeControl( int width, int height )
 void CtrlVideo::onUpdate( SubjectVarBool rVariable, void *arg  )
 {
 (void)arg;
+VarBool rFullscreen = VlcProc::instance( getIntf() )-getFullscreenVar();
 
-// Visibility changed
 if( rVariable == m_pVisible )
 {
-msg_Dbg( getIntf(), VideoCtrl : Visibility changed (visible=%d),
-  isVisible() );
+msg_Dbg( getIntf(), VideoCtrl(%p) : control visibility changed (%i),
+  this, isVisible() );
 notifyLayout();
 }
-
-// Active Layout changed
-if( rVariable == m_pLayout-getActiveVar() )
+else if( rVariable == m_pLayout-getActiveVar() )
 {
-msg_Dbg( getIntf(), VideoCtrl : Active Layout changed (isActive=%d),
-  m_pLayout-getActiveVar().get() );
+msg_Dbg( getIntf(), VideoCtrl(%p) : Active Layout changed (%i),
+  this, m_pLayout-getActiveVar().get() );
 }
-
-VarBool rFullscreen = VlcProc::instance( getIntf() )-getFullscreenVar();
-if( rVariable == rFullscreen )
+else if( rVariable == getWindow()-getVisibleVar() )
+{
+msg_Dbg( getIntf(), VideoCtrl(%p) : Window visibility changed (%i),
+  this, getWindow()-getVisibleVar().get() );
+}
+else if( rVariable == rFullscreen )
 {
-msg_Dbg( getIntf(), VideoCtrl : fullscreen toggled (fullscreen = %d),
-  rFullscreen.get() );
+msg_Dbg( getIntf(), VideoCtrl(%p) : fullscreen toggled (%i),
+  this, rFullscreen.get() );
 }
 
 if( isUseable()  !isUsed() )
@@ -232,9 +235,10 @@ bool CtrlVideo::isUseable( ) const
 {
 VarBool rFullscreen = VlcProc::instance( getIntf() )-getFullscreenVar();
 
-return isVisible()  // video control is visible
-   m_pLayout-isVisible()   // layout is visible
-   !rFullscreen.get();// fullscreen is off
+return isVisible()   // video control is visible
+m_pLayout-getActiveVar().get()// layout is active
+getWindow()-getVisibleVar().get() // window is visible
+!rFullscreen.get();// fullscreen is off
 }
 
 

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] skins2: remove a fallback when choosing a video control

2015-04-28 Thread Erwan Tulou
vlc/vlc-2.2 | branch: master | Erwan Tulou erwa...@videolan.org | Tue Apr 28 
15:21:24 2015 +0200| [e2c4691e3d75fca23ca8255ad530bf5d26e6371b] | committer: 
Erwan Tulou

skins2: remove a fallback when choosing a video control

This fallback was an attempt to recover when a skin is poorly designed,
but it causes problems under some circumstances. So let's remove it !

(cherry picked from commit 1d2608d4aa0aa9fe30b9fde5a825f14a9941347c)
Signed-off-by: Erwan Tulou erwa...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=e2c4691e3d75fca23ca8255ad530bf5d26e6371b
---

 modules/gui/skins2/src/vout_manager.cpp |9 -
 1 file changed, 9 deletions(-)

diff --git a/modules/gui/skins2/src/vout_manager.cpp 
b/modules/gui/skins2/src/vout_manager.cpp
index f6ea8eb..5c9e67c 100644
--- a/modules/gui/skins2/src/vout_manager.cpp
+++ b/modules/gui/skins2/src/vout_manager.cpp
@@ -182,15 +182,6 @@ CtrlVideo* VoutManager::getBestCtrlVideo( )
 }
 }
 
-// as a fallback, look up any video control that is unused
-for( it = m_pCtrlVideoVec.begin(); it != m_pCtrlVideoVec.end(); ++it )
-{
-if( !(*it)-isUsed() )
-{
-return (*it);
-}
-}
-
 return NULL;
 }
 

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mediacodec/omxil: blacklist MTK VC1 decoder

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Tue Apr 28 14:50:50 
2015 +0200| [8a8b2b73f305ff66db912a4acc24831351bcb444] | committer: Thomas 
Guillem

mediacodec/omxil: blacklist MTK VC1 decoder

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8a8b2b73f305ff66db912a4acc24831351bcb444
---

 modules/codec/omxil/utils.c |2 ++
 1 file changed, 2 insertions(+)

diff --git a/modules/codec/omxil/utils.c b/modules/codec/omxil/utils.c
index 31a491d..4ec6981 100644
--- a/modules/codec/omxil/utils.c
+++ b/modules/codec/omxil/utils.c
@@ -336,6 +336,8 @@ bool OMXCodec_IsBlacklisted( const char *p_name, unsigned 
int i_name_len )
 OMX.Nvidia.vc1.decode,
 /* crashes mediaserver */
 OMX.MTK.VIDEO.DECODER.MPEG4,
+/* black screen */
+OMX.MTK.VIDEO.DECODER.VC1,
 /* Not working or crashing (Samsung) */
 OMX.SEC.vp8.dec,
 NULL

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] input: check malloc return

2015-04-28 Thread Jean-Baptiste Kempf
vlc | branch: master | Jean-Baptiste Kempf j...@videolan.org | Tue Apr 28 
15:09:57 2015 +0200| [46437d4aa3300b99dbfe29f6f2d1fa8fcf64155d] | committer: 
Jean-Baptiste Kempf

input: check malloc return

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=46437d4aa3300b99dbfe29f6f2d1fa8fcf64155d
---

 include/vlc_input.h |4 
 1 file changed, 4 insertions(+)

diff --git a/include/vlc_input.h b/include/vlc_input.h
index 5b05ce8..bb478e8 100644
--- a/include/vlc_input.h
+++ b/include/vlc_input.h
@@ -53,6 +53,8 @@ struct seekpoint_t
 static inline seekpoint_t *vlc_seekpoint_New( void )
 {
 seekpoint_t *point = (seekpoint_t*)malloc( sizeof( seekpoint_t ) );
+if( !point )
+return NULL;
 point-i_byte_offset =
 point-i_time_offset = -1;
 point-psz_name = NULL;
@@ -96,6 +98,8 @@ typedef struct input_title_t
 static inline input_title_t *vlc_input_title_New(void)
 {
 input_title_t *t = (input_title_t*)malloc( sizeof( input_title_t ) );
+if( !t )
+return NULL;
 
 t-psz_name = NULL;
 t-b_menu = false;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] DXVA2: we don't need to keep the D3DPRESENT_PARAMETERS

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Tue Apr 28 10:35:24 
2015 +0200| [ffcf411cf8ac284312a358b437d2cad6f0ff1427] | committer: 
Jean-Baptiste Kempf

DXVA2: we don't need to keep the D3DPRESENT_PARAMETERS

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ffcf411cf8ac284312a358b437d2cad6f0ff1427
---

 modules/codec/avcodec/dxva2.c |   29 ++---
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 81c2a9c..482810c 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -328,7 +328,6 @@ struct vlc_va_sys_t
 HINSTANCE hdxva2_dll;
 
 /* Direct3D */
-D3DPRESENT_PARAMETERS  d3dpp;
 LPDIRECT3D9d3dobj;
 D3DADAPTER_IDENTIFIER9 d3dai;
 LPDIRECT3DDEVICE9  d3ddev;
@@ -676,19 +675,19 @@ static int D3dCreateDevice(vlc_va_t *va)
 }
 
 /* */
-D3DPRESENT_PARAMETERS *d3dpp = sys-d3dpp;
-ZeroMemory(d3dpp, sizeof(*d3dpp));
-d3dpp-Flags  = D3DPRESENTFLAG_VIDEO;
-d3dpp-Windowed   = TRUE;
-d3dpp-hDeviceWindow  = NULL;
-d3dpp-SwapEffect = D3DSWAPEFFECT_DISCARD;
-d3dpp-MultiSampleType= D3DMULTISAMPLE_NONE;
-d3dpp-PresentationInterval   = D3DPRESENT_INTERVAL_DEFAULT;
-d3dpp-BackBufferCount= 0;  /* FIXME what to put 
here */
-d3dpp-BackBufferFormat   = D3DFMT_X8R8G8B8;/* FIXME what to put 
here */
-d3dpp-BackBufferWidth= 0;
-d3dpp-BackBufferHeight   = 0;
-d3dpp-EnableAutoDepthStencil = FALSE;
+D3DPRESENT_PARAMETERS d3dpp;
+ZeroMemory(d3dpp, sizeof(d3dpp));
+d3dpp.Flags  = D3DPRESENTFLAG_VIDEO;
+d3dpp.Windowed   = TRUE;
+d3dpp.hDeviceWindow  = NULL;
+d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
+d3dpp.MultiSampleType= D3DMULTISAMPLE_NONE;
+d3dpp.PresentationInterval   = D3DPRESENT_INTERVAL_DEFAULT;
+d3dpp.BackBufferCount= 0;  /* FIXME what to put 
here */
+d3dpp.BackBufferFormat   = D3DFMT_X8R8G8B8;/* FIXME what to put 
here */
+d3dpp.BackBufferWidth= 0;
+d3dpp.BackBufferHeight   = 0;
+d3dpp.EnableAutoDepthStencil = FALSE;
 
 /* Direct3D needs a HWND to create a device, even without using ::Present
 this HWND is used to alert Direct3D when there's a change of focus window.
@@ -698,7 +697,7 @@ static int D3dCreateDevice(vlc_va_t *va)
D3DDEVTYPE_HAL, GetDesktopWindow(),
D3DCREATE_SOFTWARE_VERTEXPROCESSING |
D3DCREATE_MULTITHREADED,
-   d3dpp, d3ddev))) {
+   d3dpp, d3ddev))) {
 msg_Err(va, IDirect3D9_CreateDevice failed);
 return VLC_EGENERIC;
 }

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] packetizer: h264: expose nal type in h264_nal.h

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Thu Apr 23 17:20:50 
2015 +0200| [bafd580455afa7b234382bf0e29e0a4cfc73a972] | committer: Thomas 
Guillem

packetizer: h264: expose nal type in h264_nal.h

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bafd580455afa7b234382bf0e29e0a4cfc73a972
---

 modules/packetizer/h264.c |   23 ---
 modules/packetizer/h264_nal.h |   23 +++
 2 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/modules/packetizer/h264.c b/modules/packetizer/h264.c
index 6401ea4..ed8fad2 100644
--- a/modules/packetizer/h264.c
+++ b/modules/packetizer/h264.c
@@ -147,29 +147,6 @@ struct decoder_sys_t
 cc_data_t cc_next;
 };
 
-enum nal_unit_type_e
-{
-NAL_UNKNOWN = 0,
-NAL_SLICE   = 1,
-NAL_SLICE_DPA   = 2,
-NAL_SLICE_DPB   = 3,
-NAL_SLICE_DPC   = 4,
-NAL_SLICE_IDR   = 5,/* ref_idc != 0 */
-NAL_SEI = 6,/* ref_idc == 0 */
-NAL_SPS = 7,
-NAL_PPS = 8,
-NAL_AU_DELIMITER= 9
-/* ref_idc == 0 for 6,9,10,11,12 */
-};
-
-/* Defined in H.264 annex D */
-enum sei_type_e
-{
-SEI_PIC_TIMING = 1,
-SEI_USER_DATA_REGISTERED = 4,
-SEI_RECOVERY_POINT = 6
-};
-
 #define BLOCK_FLAG_PRIVATE_AUD (1  BLOCK_FLAG_PRIVATE_SHIFT)
 
 static block_t *Packetize( decoder_t *, block_t ** );
diff --git a/modules/packetizer/h264_nal.h b/modules/packetizer/h264_nal.h
index 7028fcf..6358fe6 100644
--- a/modules/packetizer/h264_nal.h
+++ b/modules/packetizer/h264_nal.h
@@ -43,6 +43,29 @@
 #define PROFILE_H264_MVC_STEREO_HIGH  128
 #define PROFILE_H264_MVC_MULTIVIEW_HIGH   118
 
+enum nal_unit_type_e
+{
+NAL_UNKNOWN = 0,
+NAL_SLICE   = 1,
+NAL_SLICE_DPA   = 2,
+NAL_SLICE_DPB   = 3,
+NAL_SLICE_DPC   = 4,
+NAL_SLICE_IDR   = 5,/* ref_idc != 0 */
+NAL_SEI = 6,/* ref_idc == 0 */
+NAL_SPS = 7,
+NAL_PPS = 8,
+NAL_AU_DELIMITER= 9
+/* ref_idc == 0 for 6,9,10,11,12 */
+};
+
+/* Defined in H.264 annex D */
+enum sei_type_e
+{
+SEI_PIC_TIMING = 1,
+SEI_USER_DATA_REGISTERED = 4,
+SEI_RECOVERY_POINT = 6
+};
+
 /* Parse the SPS/PPS Metadata and convert it to annex b format */
 int convert_sps_pps( decoder_t *p_dec, const uint8_t *p_buf,
  uint32_t i_buf_size, uint8_t *p_out_buf,

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mediacodec: parse SPS/PPS, fix H264 via live streaming

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 09:28:39 
2015 +0200| [c3694bf84a4100f6d86daff68dc15e1362329000] | committer: Thomas 
Guillem

mediacodec: parse SPS/PPS, fix H264 via live streaming

Don't abort if H264 fmt doesn't have any valid size or extra. The SPS/PPS will
be parsed from DecodeVideo, MediaCodec will be (re)started if video size changes
and valid SPS/PPS will be sent via BUFFER_FLAG_CODEC_CONFIG flag.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c3694bf84a4100f6d86daff68dc15e1362329000
---

 modules/codec/omxil/android_mediacodec.c |  182 +-
 1 file changed, 176 insertions(+), 6 deletions(-)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index 1b0c275..74b28e4 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -152,10 +152,14 @@ struct decoder_sys_t
 size_t i_config_buffer;
 bool b_config_resend;
 
+int i_width;
+int i_height;
+
 bool allocated;
 bool started;
 bool decoded;
 bool error_state;
+bool b_new_block;
 
 ArchitectureSpecificCopyData architecture_specific_data;
 
@@ -395,6 +399,32 @@ end:
 return ret;
 }
 
+static int H264GetSPSPPS(uint8_t *p_buf, size_t i_buf,
+ uint8_t **pp_sps_buf, size_t *p_sps_size,
+ uint8_t **pp_pps_buf, size_t *p_pps_size,
+ struct nal_sps *p_sps)
+{
+uint8_t *p_sps_buf, *p_pps_buf;
+size_t i_sps_size, i_pps_size;
+
+if (h264_get_spspps(p_buf, i_buf, p_sps_buf, i_sps_size,
+p_pps_buf, i_pps_size) == 0)
+{
+if (pp_sps_buf  p_sps_size )
+{
+*pp_sps_buf = p_sps_buf;
+*p_sps_size = i_sps_size;
+}
+if (pp_pps_buf  p_pps_size )
+{
+*pp_pps_buf = p_pps_buf;
+*p_pps_size = i_pps_size;
+}
+return h264_parse_sps(p_sps_buf, i_sps_size, p_sps);
+} else
+return -1;
+}
+
 /*
  * OpenMediaCodec: Create the mediacodec instance
  */
@@ -533,10 +563,6 @@ loopclean:
 p_sys-allocated = true;
 p_sys-codec = (*env)-NewGlobalRef(env, p_sys-codec);
 
-jobject format = (*env)-CallStaticObjectMethod(env, 
jfields.media_format_class,
- jfields.create_video_format, 
(*env)-NewStringUTF(env, mime),
- p_dec-fmt_in.video.i_width, 
p_dec-fmt_in.video.i_height);
-
 /* Either we use a csd-0 buffer that is provided before codec
  * initialisation via the MediaFormat class, or use a CODEC_CONFIG buffer
  * that can be provided during playback (and must be provided after a flush
@@ -566,7 +592,32 @@ loopclean:
 memcpy(p_sys-p_csd0_buffer, p_dec-fmt_in.p_extra, size);
 }
 p_sys-i_csd0_buffer = size;
+
+if (p_dec-fmt_in.i_codec == VLC_CODEC_H264)
+{
+struct nal_sps sps;
+
+if (H264GetSPSPPS(p_sys-p_csd0_buffer, p_sys-i_csd0_buffer,
+  NULL, NULL, NULL, NULL, sps) == 0)
+{
+msg_Warn(p_dec, SPS found, id: %d size: %dx%d (vs %dx%d),
+ sps.i_id, sps.i_width, sps.i_height,
+ p_sys-i_width, p_sys-i_height);
+p_sys-i_width = sps.i_width;
+p_sys-i_height = sps.i_height;
+}
+}
+}
+
+if (!p_sys-i_width  !p_sys-i_height)
+{
+msg_Err(p_dec, invalid size, abort MediaCodec);
+goto error;
 }
+jobject format = (*env)-CallStaticObjectMethod(env, 
jfields.media_format_class,
+ jfields.create_video_format, 
(*env)-NewStringUTF(env, mime),
+ p_sys-i_width, p_sys-i_height);
+
 if (p_sys-p_csd0_buffer)
 {
 jobject jcsd0_buffer;
@@ -742,6 +793,8 @@ static int OpenDecoder(vlc_object_t *p_this)
 
 switch (p_dec-fmt_in.i_codec) {
 case VLC_CODEC_H264:
+/* We can handle h264 without a valid video size */
+break;
 case VLC_CODEC_HEVC:
 case VLC_CODEC_H263:
 case VLC_CODEC_MP4V:
@@ -775,12 +828,24 @@ static int OpenDecoder(vlc_object_t *p_this)
 p_dec-fmt_out.audio = p_dec-fmt_in.audio;
 p_dec-b_need_packetized = true;
 
+p_dec-p_sys-i_width = p_dec-fmt_in.video.i_width;
+p_dec-p_sys-i_height = p_dec-fmt_in.video.i_height;
+
 p_dec-p_sys-timestamp_fifo = timestamp_FifoNew(32);
 if (!p_dec-p_sys-timestamp_fifo)
 goto error;
 
+p_dec-p_sys-b_new_block = true;
+
 switch (p_dec-fmt_in.i_codec)
 {
+case VLC_CODEC_H264:
+if (!p_dec-p_sys-i_width || !p_dec-p_sys-i_height)
+{
+msg_Warn(p_dec, waiting for sps/pps for codec %4.4s,
+ 

[vlc-commits] mediacodec: factor GetMediaCodecName

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 11:53:22 
2015 +0200| [ccfcd3ff24befbe7b4180075b40d972f4a1d49c8] | committer: Thomas 
Guillem

mediacodec: factor GetMediaCodecName

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ccfcd3ff24befbe7b4180075b40d972f4a1d49c8
---

 modules/codec/omxil/android_mediacodec.c |   85 +-
 1 file changed, 49 insertions(+), 36 deletions(-)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index cac2df0..4824111 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -433,50 +433,23 @@ static int H264GetSPSPPS(uint8_t *p_buf, size_t i_buf,
 return -1;
 }
 
-/*
- * OpenMediaCodec: Create the mediacodec instance
- */
-static int OpenMediaCodec(decoder_t *p_dec, JNIEnv *env)
+static jstring GetMediaCodecName(decoder_t *p_dec, JNIEnv *env,
+ const char *mime, jstring jmime)
 {
 decoder_sys_t *p_sys = p_dec-p_sys;
-const char *mime = NULL;
+int num_codecs;
 size_t fmt_profile = 0;
-int i_ret = VLC_EGENERIC;
-jstring jmime = NULL;
 jstring jcodec_name = NULL;
-jobject jcodec = NULL;
-jobject jcsd0_buffer = NULL;
-jstring jcsd0_string = NULL;
-jobject jformat = NULL;
-jstring jrotation_string = NULL;
-jobject jinput_buffers = NULL;
-jobject joutput_buffers = NULL;
-jobject jbuffer_info = NULL;
-
-switch (p_dec-fmt_in.i_codec) {
-case VLC_CODEC_HEVC: mime = video/hevc; break;
-case VLC_CODEC_H264: mime = video/avc; break;
-case VLC_CODEC_H263: mime = video/3gpp; break;
-case VLC_CODEC_MP4V: mime = video/mp4v-es; break;
-case VLC_CODEC_WMV3: mime = video/x-ms-wmv; break;
-case VLC_CODEC_VC1:  mime = video/wvc1; break;
-case VLC_CODEC_VP8:  mime = video/x-vnd.on2.vp8; break;
-case VLC_CODEC_VP9:  mime = video/x-vnd.on2.vp9; break;
-default:
-vlc_assert_unreachable();
-}
-
-jmime = (*env)-NewStringUTF(env, mime);
-if (!jmime)
-return VLC_EGENERIC;
 
 if (p_dec-fmt_in.i_codec == VLC_CODEC_H264)
 h264_get_profile_level(p_dec-fmt_in, fmt_profile, NULL, NULL);
 
-int num_codecs = (*env)-CallStaticIntMethod(env, 
jfields.media_codec_list_class,
- jfields.get_codec_count);
+num_codecs = (*env)-CallStaticIntMethod(env,
+ jfields.media_codec_list_class,
+ jfields.get_codec_count);
 
-for (int i = 0; i  num_codecs; i++) {
+for (int i = 0; i  num_codecs; i++)
+{
 jobject codec_capabilities = NULL;
 jobject profile_levels = NULL;
 jobject info = NULL;
@@ -500,7 +473,8 @@ static int OpenMediaCodec(decoder_t *p_dec, JNIEnv *env)
 if ((*env)-CallBooleanMethod(env, info, jfields.is_encoder))
 goto loopclean;
 
-codec_capabilities = (*env)-CallObjectMethod(env, info, 
jfields.get_capabilities_for_type,
+codec_capabilities = (*env)-CallObjectMethod(env, info,
+  
jfields.get_capabilities_for_type,
   jmime);
 if (CHECK_EXCEPTION()) {
 msg_Warn(p_dec, Exception occurred in 
MediaCodecInfo.getCapabilitiesForType);
@@ -571,7 +545,46 @@ loopclean:
 if (found)
 break;
 }
+return jcodec_name;
+}
+
+/*
+ * OpenMediaCodec: Create the mediacodec instance
+ */
+static int OpenMediaCodec(decoder_t *p_dec, JNIEnv *env)
+{
+decoder_sys_t *p_sys = p_dec-p_sys;
+const char *mime = NULL;
+int i_ret = VLC_EGENERIC;
+jstring jmime = NULL;
+jstring jcodec_name = NULL;
+jobject jcodec = NULL;
+jobject jcsd0_buffer = NULL;
+jstring jcsd0_string = NULL;
+jobject jformat = NULL;
+jstring jrotation_string = NULL;
+jobject jinput_buffers = NULL;
+jobject joutput_buffers = NULL;
+jobject jbuffer_info = NULL;
+
+switch (p_dec-fmt_in.i_codec) {
+case VLC_CODEC_HEVC: mime = video/hevc; break;
+case VLC_CODEC_H264: mime = video/avc; break;
+case VLC_CODEC_H263: mime = video/3gpp; break;
+case VLC_CODEC_MP4V: mime = video/mp4v-es; break;
+case VLC_CODEC_WMV3: mime = video/x-ms-wmv; break;
+case VLC_CODEC_VC1:  mime = video/wvc1; break;
+case VLC_CODEC_VP8:  mime = video/x-vnd.on2.vp8; break;
+case VLC_CODEC_VP9:  mime = video/x-vnd.on2.vp9; break;
+default:
+vlc_assert_unreachable();
+}
+
+jmime = (*env)-NewStringUTF(env, mime);
+if 

[vlc-commits] mediacodec: allow interlaced picture only after API 21

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 13:34:56 
2015 +0200| [61949af475e7ec5b1198cc4376d0b7ebcf166056] | committer: Thomas 
Guillem

mediacodec: allow interlaced picture only after API 21

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=61949af475e7ec5b1198cc4376d0b7ebcf166056
---

 modules/codec/omxil/android_mediacodec.c |8 
 1 file changed, 8 insertions(+)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index 4824111..4e924fe 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -1396,6 +1396,14 @@ static picture_t *DecodeVideo(decoder_t *p_dec, block_t 
**pp_block)
 if (p_sys-error_state)
 goto endclean;
 
+/* Allow interlaced picture only after API 21 */
+if (p_block  p_block-i_flags  BLOCK_FLAG_INTERLACED_MASK
+ !(jfields.get_input_buffer  jfields.get_output_buffer))
+{
+b_error = true;
+goto endclean;
+}
+
 if (!(env = jni_get_env(THREAD_NAME)))
 {
 b_error = true;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mediacodec: add decoder_UpdateVideoFormat call

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 14:05:58 
2015 +0200| [2ce0d5826c032505615189ab257201ad52be9f67] | committer: Thomas 
Guillem

mediacodec: add decoder_UpdateVideoFormat call

A failing decoder_UpdateVideoFormat is critical, unlike a failing
decoder_NewPicture.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2ce0d5826c032505615189ab257201ad52be9f67
---

 modules/codec/omxil/android_mediacodec.c |   21 +++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index 4e924fe..03e98fc 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -152,6 +152,7 @@ struct decoder_sys_t
 size_t i_config_buffer;
 bool b_config_resend;
 
+bool b_update_format;
 int i_width;
 int i_height;
 
@@ -763,6 +764,7 @@ static int OpenMediaCodec(decoder_t *p_dec, JNIEnv *env)
 jbuffer_info = (*env)-NewObject(env, jfields.buffer_info_class,
  jfields.buffer_info_ctor);
 p_sys-buffer_info = (*env)-NewGlobalRef(env, jbuffer_info);
+p_sys-b_update_format = true;
 
 i_ret = VLC_SUCCESS;
 
@@ -1280,6 +1282,7 @@ static int GetOutput(decoder_t *p_dec, JNIEnv *env, 
picture_t *p_pic, jlong time
 p_sys-slice_height = 0;
 p_sys-stride = p_dec-fmt_out.video.i_width;
 }
+p_sys-b_update_format = true;
 }
 return 0;
 }
@@ -1466,9 +1469,13 @@ static picture_t *DecodeVideo(decoder_t *p_dec, block_t 
**pp_block)
 /* Use the aspect ratio provided by the input (ie read from packetizer).
  * Don't check the current value of the aspect ratio in fmt_out, since we
  * want to allow changes in it to propagate. */
-if (p_dec-fmt_in.video.i_sar_num != 0  p_dec-fmt_in.video.i_sar_den != 
0) {
+if (p_dec-fmt_in.video.i_sar_num != 0  p_dec-fmt_in.video.i_sar_den != 0
+  (p_dec-fmt_out.video.i_sar_num != p_dec-fmt_in.video.i_sar_num ||
+ p_dec-fmt_out.video.i_sar_den != p_dec-fmt_in.video.i_sar_den))
+{
 p_dec-fmt_out.video.i_sar_num = p_dec-fmt_in.video.i_sar_num;
 p_dec-fmt_out.video.i_sar_den = p_dec-fmt_in.video.i_sar_den;
+p_sys-b_update_format = true;
 }
 
 do {
@@ -1487,10 +1494,20 @@ static picture_t *DecodeVideo(decoder_t *p_dec, block_t 
**pp_block)
 
 if (p_sys-pixel_format)
 {
+if (p_sys-b_update_format)
+{
+p_sys-b_update_format = false;
+if (decoder_UpdateVideoFormat(p_dec) != 0)
+{
+msg_Err(p_dec, decoder_UpdateVideoFormat failed);
+b_error = true;
+break;
+}
+}
 p_pic = decoder_NewPicture(p_dec);
 if (!p_pic) {
 msg_Warn(p_dec, NewPicture failed);
-goto endclean;
+break;
 }
 }
 i_output_ret = GetOutput(p_dec, env, p_pic, timeout);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] h264_nal: add h264_get_spspps

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Thu Apr 23 18:22:51 
2015 +0200| [f815b9e52a34d27271b0cae71a25c277be6f4a0b] | committer: Thomas 
Guillem

h264_nal: add h264_get_spspps

It fetches the SPS and PPS pointers from an Annex B buffer.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f815b9e52a34d27271b0cae71a25c277be6f4a0b
---

 modules/packetizer/h264_nal.c |   68 +
 modules/packetizer/h264_nal.h |6 
 2 files changed, 74 insertions(+)

diff --git a/modules/packetizer/h264_nal.c b/modules/packetizer/h264_nal.c
index 2a375c2..9e7eb70 100644
--- a/modules/packetizer/h264_nal.c
+++ b/modules/packetizer/h264_nal.c
@@ -22,6 +22,8 @@
 
 #include limits.h
 
+static const uint8_t annexb_startcode[] = { 0x00, 0x00, 0x00, 0x01 };
+
 int convert_sps_pps( decoder_t *p_dec, const uint8_t *p_buf,
  uint32_t i_buf_size, uint8_t *p_out_buf,
  uint32_t i_out_buf_size, uint32_t *p_sps_pps_size,
@@ -138,6 +140,72 @@ void convert_h264_to_annexb( uint8_t *p_buf, uint32_t 
i_len,
 }
 }
 
+int h264_get_spspps( uint8_t *p_buf, size_t i_buf,
+ uint8_t **pp_sps, size_t *p_sps_size,
+ uint8_t **pp_pps, size_t *p_pps_size )
+{
+uint8_t *p_sps = NULL, *p_pps = NULL;
+size_t i_sps_size = 0, i_pps_size = 0;
+int i_nal_type = NAL_UNKNOWN;
+
+while( true )
+{
+int i_inc = 0;
+
+if( i_buf  5  memcmp( p_buf, annexb_startcode, 4 ) == 0 )
+{
+i_nal_type = p_buf[4]  0x1F;
+
+/* size of startcode + nal_type */
+i_inc = 5;
+
+/* pointer to the beginning of the sps/pps  */
+if( i_nal_type == NAL_SPS  !p_sps )
+p_sps = p_buf;
+if( i_nal_type == NAL_PPS  !p_pps )
+p_pps = p_buf;
+} else {
+i_inc = 1;
+}
+
+/* cf. 7.4.1.2.3 */
+if( i_nal_type == NAL_UNKNOWN || i_nal_type  18
+ || (i_nal_type = 10  i_nal_type = 12))
+return -1;
+
+/* update SPS/PPS size if the new NAL is different than the last one */
+if( !i_sps_size  p_sps  i_nal_type != NAL_SPS )
+i_sps_size = p_buf - p_sps;
+if( !i_pps_size  p_pps  i_nal_type != NAL_PPS )
+i_pps_size = p_buf - p_pps;
+
+/* SPS/PPS are before the slices */
+if (i_nal_type = NAL_SLICE  i_nal_type = NAL_SLICE_IDR )
+break;
+
+i_buf -= i_inc;
+p_buf += i_inc;
+
+if( i_buf == 0 )
+{
+/* update SPS/PPS size if we reach the end of the buffer */
+if( !i_sps_size  p_sps )
+i_sps_size = p_buf - p_sps;
+if( !i_pps_size  p_pps )
+i_pps_size = p_buf - p_pps;
+break;
+}
+}
+if( ( !p_sps || !i_sps_size )  ( !p_pps || !i_pps_size ) )
+return -1;
+*pp_sps = p_sps;
+*p_sps_size = i_sps_size;
+*pp_pps = p_pps;
+*p_pps_size = i_pps_size;
+
+return 0;
+}
+
 bool h264_get_profile_level(const es_format_t *p_fmt, size_t *p_profile,
 size_t *p_level, size_t *p_nal_size)
 {
diff --git a/modules/packetizer/h264_nal.h b/modules/packetizer/h264_nal.h
index 6358fe6..bc346cf 100644
--- a/modules/packetizer/h264_nal.h
+++ b/modules/packetizer/h264_nal.h
@@ -82,6 +82,12 @@ void convert_h264_to_annexb( uint8_t *p_buf, uint32_t i_len,
  size_t i_nal_size,
  struct H264ConvertState *state );
 
+/* Get the SPS/PPS pointers from an Annex B buffer
+ * Returns 0 if a SPS and/or a PPS is found */
+int h264_get_spspps( uint8_t *p_buf, size_t i_buf,
+ uint8_t **pp_sps, size_t *p_sps_size,
+ uint8_t **pp_pps, size_t *p_pps_size );
+
 /* Get level and Profile */
 bool h264_get_profile_level(const es_format_t *p_fmt, size_t *p_profile,
 size_t *p_level, size_t *p_nal_size);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mediacodec: renome p_extra_buffer to p_csd0_buffer

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 09:13:53 
2015 +0200| [d149b6c011e5263051acf1e9582c95d02c29824d] | committer: Thomas 
Guillem

mediacodec: renome p_extra_buffer to p_csd0_buffer

Since it's the buffer containing the csd-0 configuration buffer.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d149b6c011e5263051acf1e9582c95d02c29824d
---

 modules/codec/omxil/android_mediacodec.c |   42 +++---
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index f98934d..45fe7981 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -142,8 +142,8 @@ struct decoder_sys_t
 int stride, slice_height;
 char *name;
 
-void *p_extra_buffer;
-size_t i_extra_buffer;
+void *p_csd0_buffer;
+size_t i_csd0_buffer;
 
 bool allocated;
 bool started;
@@ -530,50 +530,50 @@ loopclean:
  jfields.create_video_format, 
(*env)-NewStringUTF(env, mime),
  p_dec-fmt_in.video.i_width, 
p_dec-fmt_in.video.i_height);
 
-if (p_dec-fmt_in.i_extra  !p_sys-p_extra_buffer) {
+if (p_dec-fmt_in.i_extra  !p_sys-p_csd0_buffer) {
 uint32_t size = p_dec-fmt_in.i_extra;
 int buf_size = p_dec-fmt_in.i_extra + 20;
 
-/* Don't free p_extra_buffer until Format use it, so until MediaCodec
+/* Don't free p_csd0_buffer until Format use it, so until MediaCodec
  * is closed */
-p_sys-p_extra_buffer = malloc(buf_size);
-if (!p_sys-p_extra_buffer)
+p_sys-p_csd0_buffer = malloc(buf_size);
+if (!p_sys-p_csd0_buffer)
 {
 msg_Warn(p_dec, extra buffer allocation failed);
 goto error;
 }
 if (p_dec-fmt_in.i_codec == VLC_CODEC_H264  
((uint8_t*)p_dec-fmt_in.p_extra)[0] == 1) {
 convert_sps_pps(p_dec, p_dec-fmt_in.p_extra, 
p_dec-fmt_in.i_extra,
-p_sys-p_extra_buffer, buf_size,
+p_sys-p_csd0_buffer, buf_size,
 size, p_sys-nal_size);
 } else if (p_dec-fmt_in.i_codec == VLC_CODEC_HEVC) {
 convert_hevc_nal_units(p_dec, p_dec-fmt_in.p_extra,
p_dec-fmt_in.i_extra,
-   p_sys-p_extra_buffer, buf_size,
+   p_sys-p_csd0_buffer, buf_size,
size, p_sys-nal_size);
 } else {
-memcpy(p_sys-p_extra_buffer, p_dec-fmt_in.p_extra, size);
+memcpy(p_sys-p_csd0_buffer, p_dec-fmt_in.p_extra, size);
 }
-p_sys-i_extra_buffer = size;
+p_sys-i_csd0_buffer = size;
 }
-if (p_sys-p_extra_buffer)
+if (p_sys-p_csd0_buffer)
 {
-jobject jextra_buffer;
+jobject jcsd0_buffer;
 
-jextra_buffer = (*env)-NewDirectByteBuffer( env,
- p_sys-p_extra_buffer,
- p_sys-i_extra_buffer);
-if (CHECK_EXCEPTION() || !jextra_buffer)
+jcsd0_buffer = (*env)-NewDirectByteBuffer( env,
+p_sys-p_csd0_buffer,
+p_sys-i_csd0_buffer);
+if (CHECK_EXCEPTION() || !jcsd0_buffer)
 {
 msg_Warn(p_dec, java extra buffer allocation failed);
-free(p_sys-p_extra_buffer);
-p_sys-p_extra_buffer = NULL;
+free(p_sys-p_csd0_buffer);
+p_sys-p_csd0_buffer = NULL;
 goto error;
 }
 (*env)-CallVoidMethod(env, format, jfields.set_bytebuffer,
(*env)-NewStringUTF(env, csd-0),
-   jextra_buffer);
-(*env)-DeleteLocalRef(env, jextra_buffer);
+   jcsd0_buffer);
+(*env)-DeleteLocalRef(env, jcsd0_buffer);
 }
 
 p_sys-direct_rendering = var_InheritBool(p_dec, CFG_PREFIX dr);
@@ -803,7 +803,7 @@ static void CloseDecoder(vlc_object_t *p_this)
 else
 msg_Warn(p_dec, Can't get a JNIEnv, can't close mediacodec !);
 
-free(p_sys-p_extra_buffer);
+free(p_sys-p_csd0_buffer);
 free(p_sys-name);
 ArchitectureSpecificCopyHooksDestroy(p_sys-pixel_format, 
p_sys-architecture_specific_data);
 free(p_sys-pp_inflight_pictures);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mediacodec: fix LocalRef leaks

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 11:45:46 
2015 +0200| [d5248dbb0c3f38f56099c18ca065b16c0650efb9] | committer: Thomas 
Guillem

mediacodec: fix LocalRef leaks

Now that we can open and close MediaCodec from the same thread, we can reach
quickly the limit of 512 LocalRefs.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d5248dbb0c3f38f56099c18ca065b16c0650efb9
---

 modules/codec/omxil/android_mediacodec.c |  150 +-
 1 file changed, 106 insertions(+), 44 deletions(-)

Diff:   
http://git.videolan.org/gitweb.cgi/vlc.git/?a=commitdiff;h=d5248dbb0c3f38f56099c18ca065b16c0650efb9
___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mediacodec: add a second way to send codec specific data

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Mon Apr 27 09:28:36 
2015 +0200| [88c6f34a703d87e7aa942e5e00f1c39eec27f58e] | committer: Thomas 
Guillem

mediacodec: add a second way to send codec specific data

Via PutInput with the BUFFER_FLAG_CODEC_CONFIG flag. It allows to send codec
specific data during playback without restarting MediaCodec. If you choose to
configure codec via this flags, you shouldn't set the csd-0 buffer during
MediaCodec initialization.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=88c6f34a703d87e7aa942e5e00f1c39eec27f58e
---

 modules/codec/omxil/android_mediacodec.c |   93 +-
 1 file changed, 67 insertions(+), 26 deletions(-)

diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index 45fe7981..1b0c275 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -45,6 +45,8 @@
 #include android_opaque.h
 #include ../../video_output/android/android_window.h
 
+#define BUFFER_FLAG_CODEC_CONFIG  2
+
 #define INFO_OUTPUT_BUFFERS_CHANGED -3
 #define INFO_OUTPUT_FORMAT_CHANGED  -2
 #define INFO_TRY_AGAIN_LATER-1
@@ -142,8 +144,13 @@ struct decoder_sys_t
 int stride, slice_height;
 char *name;
 
+/* csd-0 buffer */
 void *p_csd0_buffer;
 size_t i_csd0_buffer;
+/* or buffer sent via BUFFER_FLAG_CODEC_CONFIG flag */
+uint8_t *p_config_buffer;
+size_t i_config_buffer;
+bool b_config_resend;
 
 bool allocated;
 bool started;
@@ -530,7 +537,11 @@ loopclean:
  jfields.create_video_format, 
(*env)-NewStringUTF(env, mime),
  p_dec-fmt_in.video.i_width, 
p_dec-fmt_in.video.i_height);
 
-if (p_dec-fmt_in.i_extra  !p_sys-p_csd0_buffer) {
+/* Either we use a csd-0 buffer that is provided before codec
+ * initialisation via the MediaFormat class, or use a CODEC_CONFIG buffer
+ * that can be provided during playback (and must be provided after a flush
+ * and a start). */
+if (p_dec-fmt_in.i_extra  !p_sys-p_config_buffer) {
 uint32_t size = p_dec-fmt_in.i_extra;
 int buf_size = p_dec-fmt_in.i_extra + 20;
 
@@ -804,6 +815,7 @@ static void CloseDecoder(vlc_object_t *p_this)
 msg_Warn(p_dec, Can't get a JNIEnv, can't close mediacodec !);
 
 free(p_sys-p_csd0_buffer);
+free(p_sys-p_config_buffer);
 free(p_sys-name);
 ArchitectureSpecificCopyHooksDestroy(p_sys-pixel_format, 
p_sys-architecture_specific_data);
 free(p_sys-pp_inflight_pictures);
@@ -900,10 +912,12 @@ static int PutInput(decoder_t *p_dec, JNIEnv *env, 
block_t *p_block, jlong timeo
 {
 decoder_sys_t *p_sys = p_dec-p_sys;
 int index;
-jobject buf;
-jsize size;
-uint8_t *bufptr;
-struct H264ConvertState convert_state = { 0, 0 };
+int64_t ts = 0;
+uint8_t *p_mc_buf, *p_buf;
+size_t i_buf;
+jobject j_mc_buf;
+jsize j_mc_size;
+jint j_flags = 0;
 
 index = (*env)-CallIntMethod(env, p_sys-codec,
   jfields.dequeue_input_buffer, timeout);
@@ -914,37 +928,60 @@ static int PutInput(decoder_t *p_dec, JNIEnv *env, 
block_t *p_block, jlong timeo
 if (index  0)
 return 0;
 
+if (p_sys-b_config_resend)
+{
+p_buf = p_sys-p_config_buffer;
+i_buf = p_sys-i_config_buffer;
+j_flags = BUFFER_FLAG_CODEC_CONFIG;
+msg_Dbg(p_dec, sending codec specific data of size %d 
+   via BUFFER_FLAG_CODEC_CONFIG flag, i_buf);
+} else
+{
+p_buf = p_block-p_buffer;
+i_buf = p_block-i_buffer;
+}
+
 if (jfields.get_input_buffers)
-buf = (*env)-GetObjectArrayElement(env, p_sys-input_buffers, index);
+j_mc_buf = (*env)-GetObjectArrayElement(env, p_sys-input_buffers,
+ index);
 else
-buf = (*env)-CallObjectMethod(env, p_sys-codec, 
jfields.get_input_buffer, index);
-size = (*env)-GetDirectBufferCapacity(env, buf);
-bufptr = (*env)-GetDirectBufferAddress(env, buf);
-if (size  0) {
+j_mc_buf = (*env)-CallObjectMethod(env, p_sys-codec,
+jfields.get_input_buffer, index);
+j_mc_size = (*env)-GetDirectBufferCapacity(env, j_mc_buf);
+p_mc_buf = (*env)-GetDirectBufferAddress(env, j_mc_buf);
+if (j_mc_size  0) {
 msg_Err(p_dec, Java buffer has invalid size);
 return -1;
 }
-if ((size_t) size  p_block-i_buffer)
-size = p_block-i_buffer;
-memcpy(bufptr, p_block-p_buffer, size);
-
-convert_h264_to_annexb(bufptr, size, p_sys-nal_size, convert_state);
-
-int64_t ts = p_block-i_pts;
-if (!ts  p_block-i_dts)
-ts = p_block-i_dts;
-if (p_block-i_flags  BLOCK_FLAG_PREROLL )
-p_sys-i_preroll_end = ts;
-timestamp_FifoPut(p_sys-timestamp_fifo, p_block-i_pts ? VLC_TS_INVALID : 
p_block-i_dts);
-

[vlc-commits] packetizer h264: refactor and expose SPS/PPS parsing

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Thu Apr 23 18:24:38 
2015 +0200| [a56ed71a07144ea696b5e376073c00d226edea4d] | committer: Thomas 
Guillem

packetizer h264: refactor and expose SPS/PPS parsing

The goal is to expose h264_parse_sps and h264_parse_pps functions that can be
used from decoders.

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a56ed71a07144ea696b5e376073c00d226edea4d
---

 modules/packetizer/h264.c |  306 +
 modules/packetizer/h264_nal.c |  281 +
 modules/packetizer/h264_nal.h |   58 
 3 files changed, 375 insertions(+), 270 deletions(-)

Diff:   
http://git.videolan.org/gitweb.cgi/vlc.git/?a=commitdiff;h=a56ed71a07144ea696b5e376073c00d226edea4d
___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] move h264/hevc nal helper code to packetizer

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Thu Apr 23 16:03:42 
2015 +0200| [6ea9e51b6b826fb4f8ad05fc82b186841a145f35] | committer: Thomas 
Guillem

move h264/hevc nal helper code to packetizer

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6ea9e51b6b826fb4f8ad05fc82b186841a145f35
---

 modules/codec/Makefile.am|   11 ++-
 modules/codec/crystalhd.c|2 +-
 modules/codec/mft.c  |2 +-
 modules/codec/omxil/android_mediacodec.c |4 ++--
 modules/codec/omxil/omxil.c  |4 ++--
 modules/codec/omxil/utils.c  |2 +-
 modules/packetizer/Makefile.am   |2 +-
 modules/packetizer/h264.c|2 +-
 modules/{codec = packetizer}/h264_nal.c |0
 modules/{codec = packetizer}/h264_nal.h |0
 modules/{codec = packetizer}/hevc_nal.c |0
 modules/{codec = packetizer}/hevc_nal.h |0
 12 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/modules/codec/Makefile.am b/modules/codec/Makefile.am
index e5f7ed8..a81cdbf 100644
--- a/modules/codec/Makefile.am
+++ b/modules/codec/Makefile.am
@@ -375,8 +375,8 @@ noinst_HEADERS += \
 
 libomxil_plugin_la_SOURCES = \
codec/omxil/utils.c codec/omxil/omxil_utils.h \
-   codec/h264_nal.c codec/h264_nal.h \
-   codec/hevc_nal.c codec/hevc_nal.h \
+   packetizer/h264_nal.c packetizer/h264_nal.h \
+   packetizer/hevc_nal.c packetizer/hevc_nal.h \
codec/omxil/qcom.c codec/omxil/qcom.h \
codec/omxil/omxil.c codec/omxil/omxil.h codec/omxil/omxil_core.c 
codec/omxil/omxil_core.h \
video_chroma/copy.c
@@ -396,7 +396,8 @@ libiomx_plugin_la_LIBADD = $(libomxil_plugin_la_LIBADD)
 libmediacodec_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/codec/omxil
 libmediacodec_plugin_la_SOURCES = codec/omxil/android_mediacodec.c 
codec/omxil/utils.c \
video_chroma/copy.c codec/omxil/android_opaque.c 
codec/omxil/android_opaque.h \
-   codec/h264_nal.c codec/h264_nal.h codec/hevc_nal.c codec/hevc_nal.h
+   packetizer/h264_nal.c packetizer/h264_nal.h
+   packetizer/hevc_nal.c packetizer/hevc_nal.h
 
 codec_LTLIBRARIES += $(LTLIBomxil) $(LTLIBomxil_vout)
 EXTRA_LTLIBRARIES += libomxil_plugin.la libomxil_vout_plugin.la
@@ -474,7 +475,7 @@ codec_LTLIBRARIES += $(LTLIBtwolame)
 
 ### Hardware encoders ###
 
-libcrystalhd_plugin_la_SOURCES = codec/crystalhd.c codec/h264_nal.c 
codec/h264_nal.h
+libcrystalhd_plugin_la_SOURCES = codec/crystalhd.c packetizer/h264_nal.c 
packetizer/h264_nal.h
 libcrystalhd_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(codecdir)'
 libcrystalhd_plugin_la_LIBADD = $(LIBS_crystalhd)
 EXTRA_LTLIBRARIES += libcrystalhd_plugin.la
@@ -498,7 +499,7 @@ libdmo_plugin_la_LIBADD += -lole32 -luuid
 codec_LTLIBRARIES += libdmo_plugin.la
 endif
 
-libmft_plugin_la_SOURCES = codec/mft.c codec/h264_nal.c codec/h264_nal.h
+libmft_plugin_la_SOURCES = codec/mft.c packetizer/h264_nal.c 
packetizer/h264_nal.h
 if HAVE_WIN32
 libmft_plugin_la_LIBADD = -lole32 -luuid -lmfuuid -lmfplat
 codec_LTLIBRARIES += libmft_plugin.la
diff --git a/modules/codec/crystalhd.c b/modules/codec/crystalhd.c
index b8e39af..d3b99ba 100644
--- a/modules/codec/crystalhd.c
+++ b/modules/codec/crystalhd.c
@@ -39,7 +39,7 @@
 #include vlc_common.h
 #include vlc_plugin.h
 #include vlc_codec.h
-#include h264_nal.h
+#include ../packetizer/h264_nal.h
 
 /* Workaround for some versions of libcrystalHD */
 #if !defined(_WIN32)  !defined(__APPLE__)
diff --git a/modules/codec/mft.c b/modules/codec/mft.c
index 22e647f..8c9373a 100644
--- a/modules/codec/mft.c
+++ b/modules/codec/mft.c
@@ -42,7 +42,7 @@
 #include vlc_common.h
 #include vlc_plugin.h
 #include vlc_codec.h
-#include h264_nal.h
+#include ../packetizer/h264_nal.h
 #define _VIDEOINFOHEADER_
 #include vlc_codecs.h
 
diff --git a/modules/codec/omxil/android_mediacodec.c 
b/modules/codec/omxil/android_mediacodec.c
index 3e03c33..f98934d 100644
--- a/modules/codec/omxil/android_mediacodec.c
+++ b/modules/codec/omxil/android_mediacodec.c
@@ -37,8 +37,8 @@
 #include vlc_block_helper.h
 #include vlc_cpu.h
 
-#include ../h264_nal.h
-#include ../hevc_nal.h
+#include ../../packetizer/h264_nal.h
+#include ../../packetizer/hevc_nal.h
 #include OMX_Core.h
 #include OMX_Component.h
 #include omxil_utils.h
diff --git a/modules/codec/omxil/omxil.c b/modules/codec/omxil/omxil.c
index 0176707..1418340 100644
--- a/modules/codec/omxil/omxil.c
+++ b/modules/codec/omxil/omxil.c
@@ -35,8 +35,8 @@
 #include vlc_codec.h
 #include vlc_block_helper.h
 #include vlc_cpu.h
-#include ../h264_nal.h
-#include ../hevc_nal.h
+#include ../../packetizer/h264_nal.h
+#include ../../packetizer/hevc_nal.h
 
 #include omxil.h
 #include omxil_core.h
diff --git a/modules/codec/omxil/utils.c b/modules/codec/omxil/utils.c
index 4ec6981..8263ad1 100644
--- a/modules/codec/omxil/utils.c
+++ b/modules/codec/omxil/utils.c
@@ -37,7 +37,7 @@
 #include omxil.h
 #include qcom.h
 #include 

[vlc-commits] copy: add NV12 to NV12 plane copies

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Tue Apr 28 13:40:53 
2015 +| [2b52b54c4a81cce2f0f45107238879deee5e80f8] | committer: 
Jean-Baptiste Kempf

copy: add NV12 to NV12 plane copies

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2b52b54c4a81cce2f0f45107238879deee5e80f8
---

 modules/video_chroma/copy.c |   38 ++
 modules/video_chroma/copy.h |6 ++
 2 files changed, 44 insertions(+)

diff --git a/modules/video_chroma/copy.c b/modules/video_chroma/copy.c
index cc98c92..ce3e39d 100644
--- a/modules/video_chroma/copy.c
+++ b/modules/video_chroma/copy.c
@@ -348,6 +348,23 @@ static void SSE_CopyFromYv12(picture_t *dst,
 }
 asm volatile (emms);
 }
+
+
+static void SSE_CopyFromNv12ToNv12(picture_t *dst,
+ uint8_t *src[2], size_t src_pitch[2],
+ unsigned width, unsigned height,
+ copy_cache_t *cache, unsigned cpu)
+{
+SSE_CopyPlane(dst-p[0].p_pixels, dst-p[0].i_pitch,
+  src[0], src_pitch[0],
+  cache-buffer, cache-size,
+  width, height, cpu);
+SSE_CopyPlane(dst-p[1].p_pixels, dst-p[1].i_pitch,
+  src[1], src_pitch[1],
+  cache-buffer, cache-size,
+  width, height/2, cpu);
+asm volatile (emms);
+}
 #undef COPY64
 #endif /* CAN_COMPILE_SSE2 */
 
@@ -400,6 +417,27 @@ void CopyFromNv12(picture_t *dst, uint8_t *src[2], size_t 
src_pitch[2],
 width/2, height/2);
 }
 
+void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
+  unsigned width, unsigned height,
+  copy_cache_t *cache)
+{
+#ifdef CAN_COMPILE_SSE2
+unsigned cpu = vlc_CPU();
+if (vlc_CPU_SSE2())
+return SSE_CopyFromNv12ToNv12(dst, src, src_pitch, width, height,
+cache, cpu);
+#else
+(void) cache;
+#endif
+
+CopyPlane(dst-p[0].p_pixels, dst-p[0].i_pitch,
+  src[0], src_pitch[0],
+  width, height);
+CopyPlane(dst-p[1].p_pixels, dst-p[1].i_pitch,
+  src[1], src_pitch[1],
+  width, height/2);
+}
+
 void CopyFromYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
   unsigned width, unsigned height,
   copy_cache_t *cache)
diff --git a/modules/video_chroma/copy.h b/modules/video_chroma/copy.h
index 39dbf1e..d1e49f2 100644
--- a/modules/video_chroma/copy.h
+++ b/modules/video_chroma/copy.h
@@ -34,11 +34,17 @@ typedef struct {
 int  CopyInitCache(copy_cache_t *cache, unsigned width);
 void CopyCleanCache(copy_cache_t *cache);
 
+/* Copy planes from NV12 to YV12 */
 void CopyFromNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
   unsigned width, unsigned height,
   copy_cache_t *cache);
+/* Copy planes from YV12 to YV12 */
 void CopyFromYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
   unsigned width, unsigned height,
   copy_cache_t *cache);
 
+void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
+unsigned width, unsigned height,
+copy_cache_t *cache);
+
 #endif

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] vdpau: fix bottom bleeding with software decoding

2015-04-28 Thread Rémi Denis-Courmont
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Tue Apr 28 
23:42:23 2015 +0300| [3447e875e656961ee241bc91006ecd3ff5be84e0] | committer: 
Rémi Denis-Courmont

vdpau: fix bottom bleeding with software decoding

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3447e875e656961ee241bc91006ecd3ff5be84e0
---

 modules/hw/vdpau/chroma.c |7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/modules/hw/vdpau/chroma.c b/modules/hw/vdpau/chroma.c
index 4164c22..d74951a 100644
--- a/modules/hw/vdpau/chroma.c
+++ b/modules/hw/vdpau/chroma.c
@@ -65,7 +65,7 @@ static VdpStatus MixerSetupColors(filter_t *filter, const 
VdpProcamp *procamp,
 {
 filter_sys_t *sys = filter-p_sys;
 VdpStatus err;
-VdpColorStandard std = (filter-fmt_in.video.i_height  576)
+VdpColorStandard std = (filter-fmt_in.video.i_visible_height  576)
  ? VDP_COLOR_STANDARD_ITUR_BT_709
  : VDP_COLOR_STANDARD_ITUR_BT_601;
 
@@ -187,7 +187,7 @@ static VdpVideoMixer MixerCreate(filter_t *filter)
 VDP_VIDEO_MIXER_PARAMETER_CHROMA_TYPE,
 };
 uint32_t width = filter-fmt_in.video.i_width;
-uint32_t height = filter-fmt_in.video.i_height;
+uint32_t height = filter-fmt_in.video.i_visible_height;
 const void *values[3] = { width, height, sys-chroma, };
 
 err = vdp_video_mixer_create(sys-vdp, sys-device, featc, featv,
@@ -332,7 +332,8 @@ static picture_t *VideoImport(filter_t *filter, picture_t 
*src)
 /* Create surface (TODO: reuse?) */
 err = vdp_video_surface_create(sys-vdp, sys-device, sys-chroma,
filter-fmt_in.video.i_width,
-   filter-fmt_in.video.i_height, surface);
+   filter-fmt_in.video.i_visible_height,
+   surface);
 if (err != VDP_STATUS_OK)
 {
 msg_Err(filter, video %s %s failure: %s, surface, creation,

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] vdpau: fix bottom bleeding with software decoding

2015-04-28 Thread Rémi Denis-Courmont
vlc/vlc-2.2 | branch: master | Rémi Denis-Courmont r...@remlab.net | Tue Apr 
28 23:42:23 2015 +0300| [e46b99c0357654d4daacedab44a6417928b50812] | committer: 
Rémi Denis-Courmont

vdpau: fix bottom bleeding with software decoding

(cherry picked from commit 3447e875e656961ee241bc91006ecd3ff5be84e0)

 http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=e46b99c0357654d4daacedab44a6417928b50812
---

 modules/hw/vdpau/chroma.c |7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/modules/hw/vdpau/chroma.c b/modules/hw/vdpau/chroma.c
index 1fe511c..346d329 100644
--- a/modules/hw/vdpau/chroma.c
+++ b/modules/hw/vdpau/chroma.c
@@ -65,7 +65,7 @@ static VdpStatus MixerSetupColors(filter_t *filter, const 
VdpProcamp *procamp,
 {
 filter_sys_t *sys = filter-p_sys;
 VdpStatus err;
-VdpColorStandard std = (filter-fmt_in.video.i_height  576)
+VdpColorStandard std = (filter-fmt_in.video.i_visible_height  576)
  ? VDP_COLOR_STANDARD_ITUR_BT_709
  : VDP_COLOR_STANDARD_ITUR_BT_601;
 
@@ -187,7 +187,7 @@ static VdpVideoMixer MixerCreate(filter_t *filter)
 VDP_VIDEO_MIXER_PARAMETER_CHROMA_TYPE,
 };
 uint32_t width = filter-fmt_in.video.i_width;
-uint32_t height = filter-fmt_in.video.i_height;
+uint32_t height = filter-fmt_in.video.i_visible_height;
 const void *values[3] = { width, height, sys-chroma, };
 
 err = vdp_video_mixer_create(sys-vdp, sys-device, featc, featv,
@@ -362,7 +362,8 @@ static picture_t *VideoImport(filter_t *filter, picture_t 
*src)
 /* Create surface (TODO: reuse?) */
 err = vdp_video_surface_create(sys-vdp, sys-device, sys-chroma,
filter-fmt_in.video.i_width,
-   filter-fmt_in.video.i_height, surface);
+   filter-fmt_in.video.i_visible_height,
+   surface);
 if (err != VDP_STATUS_OK)
 {
 msg_Err(filter, video %s %s failure: %s, surface, creation,

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] vout: warn when we get less display pictures than requested

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Tue Apr 21 06:55:44 
2015 +| [7871ce366604de8b9cbcec2e937baa16482f7d04] | committer: 
Jean-Baptiste Kempf

vout: warn when we get less display pictures than requested

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7871ce366604de8b9cbcec2e937baa16482f7d04
---

 src/video_output/vout_wrapper.c |   12 +---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/video_output/vout_wrapper.c b/src/video_output/vout_wrapper.c
index d172bcc..dbaae78 100644
--- a/src/video_output/vout_wrapper.c
+++ b/src/video_output/vout_wrapper.c
@@ -130,9 +130,15 @@ int vout_InitWrapper(vout_thread_t *vout)
 const unsigned reserved_picture = DISPLAY_PICTURE_COUNT +
   private_picture +
   kept_picture;
-picture_pool_t *display_pool =
-vout_display_Pool(vd, allow_dr ? __MAX(VOUT_MAX_PICTURES,
-   reserved_picture + 
decoder_picture) : 3);
+const unsigned display_pool_size = allow_dr ? __MAX(VOUT_MAX_PICTURES,
+reserved_picture + 
decoder_picture) : 3;
+picture_pool_t *display_pool = vout_display_Pool(vd, display_pool_size);
+#ifndef NDEBUG
+if ( picture_pool_GetSize(display_pool)  display_pool_size )
+msg_Warn(vout, Not enough display buffers in the pool, requested %d 
got %d,
+ display_pool_size, picture_pool_GetSize(display_pool));
+#endif
+
 if (allow_dr 
 picture_pool_GetSize(display_pool) = reserved_picture + 
decoder_picture) {
 sys-dpb_size = picture_pool_GetSize(display_pool) - 
reserved_picture;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] playlist/directory: fix wrong warning

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Wed Mar 25 15:05:12 
2015 +0100| [437df0ea5ed3e94852ebc493fb0f1e2aebc26d20] | committer: Thomas 
Guillem

playlist/directory: fix wrong warning

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=437df0ea5ed3e94852ebc493fb0f1e2aebc26d20
---

 modules/demux/playlist/directory.c |3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/modules/demux/playlist/directory.c 
b/modules/demux/playlist/directory.c
index a73a138..9b7ffc2 100644
--- a/modules/demux/playlist/directory.c
+++ b/modules/demux/playlist/directory.c
@@ -69,11 +69,10 @@ static int Demux( demux_t *p_demux )
 
 if( stream_ReadDir( p_demux-s, p_node ) )
 {
+msg_Warn( p_demux, unable to read directory );
 input_item_node_Delete( p_node );
 return VLC_EGENERIC;
 }
-else
-msg_Warn( p_demux, unable to read directory );
 
 input_item_node_PostAndDelete( p_node );
 return VLC_SUCCESS;

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] direct3d11: favor BGRA over RGB32 for better blending

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Mon Apr 27 14:58:28 
2015 +| [9c4805558b79d49a6857eb12db33736a67d12af3] | committer: 
Jean-Baptiste Kempf

direct3d11: favor BGRA over RGB32 for better blending

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9c4805558b79d49a6857eb12db33736a67d12af3
---

 modules/video_output/msw/direct3d11.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/video_output/msw/direct3d11.c 
b/modules/video_output/msw/direct3d11.c
index d9a140f..8ed4598 100644
--- a/modules/video_output/msw/direct3d11.c
+++ b/modules/video_output/msw/direct3d11.c
@@ -87,8 +87,8 @@ static const d3d_format_t d3d_formats[] = {
 { Y410, DXGI_FORMAT_Y410,   VLC_CODEC_I444_10L, 
DXGI_FORMAT_R10G10B10A2_UNORM,  0 },
 { NV11, DXGI_FORMAT_NV11,   VLC_CODEC_I411, 
DXGI_FORMAT_R8_UNORM,   DXGI_FORMAT_R8G8_UNORM },
 #endif
-{ R8G8B8X8, DXGI_FORMAT_B8G8R8X8_UNORM, VLC_CODEC_RGB32,
DXGI_FORMAT_B8G8R8X8_UNORM, 0 },
 { B8G8R8A8, DXGI_FORMAT_B8G8R8A8_UNORM, VLC_CODEC_BGRA, 
DXGI_FORMAT_B8G8R8A8_UNORM, 0 },
+{ R8G8B8X8, DXGI_FORMAT_B8G8R8X8_UNORM, VLC_CODEC_RGB32,
DXGI_FORMAT_B8G8R8X8_UNORM, 0 },
 { B5G6R5,   DXGI_FORMAT_B5G6R5_UNORM,   VLC_CODEC_RGB16,
DXGI_FORMAT_B5G6R5_UNORM,   0 },
 
 { NULL, 0, 0, 0, 0}

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] activex: Do not version generated files

2015-04-28 Thread Hugo Beauzée-Luyssen
npapi-vlc | branch: master | Hugo Beauzée-Luyssen h...@beauzee.fr | Tue Apr 
28 12:13:54 2015 +0200| [e41c1b487a9ccd21889f9fda8543294d75acc1eb] | committer: 
Hugo Beauzée-Luyssen

activex: Do not version generated files

 http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=e41c1b487a9ccd21889f9fda8543294d75acc1eb
---

 activex/axvlc.tlb   |  Bin 25160 - 0 bytes
 activex/axvlc_idl.c |   51 -
 activex/axvlc_idl.h | 5059 ---
 3 files changed, 5110 deletions(-)

Diff:   
http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commitdiff;h=e41c1b487a9ccd21889f9fda8543294d75acc1eb
___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] activex: Ensure we generate axvlc_idl.* for every build

2015-04-28 Thread Hugo Beauzée-Luyssen
npapi-vlc | branch: master | Hugo Beauzée-Luyssen h...@beauzee.fr | Tue Apr 
28 12:14:08 2015 +0200| [d7923aefc619f37076de225fc3613398c7e43ad3] | committer: 
Hugo Beauzée-Luyssen

activex: Ensure we generate axvlc_idl.* for every build

 http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=d7923aefc619f37076de225fc3613398c7e43ad3
---

 activex/Makefile.am |2 ++
 1 file changed, 2 insertions(+)

diff --git a/activex/Makefile.am b/activex/Makefile.am
index 01d4c7c..4004f90 100644
--- a/activex/Makefile.am
+++ b/activex/Makefile.am
@@ -29,6 +29,8 @@ lib_LTLIBRARIES = axvlc.la
 AM_CPPFLAGS = $(LIBVLC_CFLAGS) -DUNICODE -D_UNICODE -D_MIDL_USE_GUIDDEF_ 
-I$(top_srcdir)/vlcpp
 AM_CXXFLAGS = ${CXXFLAGS}
 
+BUILT_SOURCES = axvlc_idl.h axvlc_idl.c
+
 axvlc_la_SOURCES = \
 main.cpp \
 utils.cpp \

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] direct3d9: only stretch the visible area to fill the displayed texture

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Mon Apr 20 11:16:55 
2015 +| [023a8a5861ac8361e3d18399878920857d33a60d] | committer: 
Jean-Baptiste Kempf

direct3d9: only stretch the visible area to fill the displayed texture

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=023a8a5861ac8361e3d18399878920857d33a60d
---

 modules/video_output/msw/direct3d9.c |7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/modules/video_output/msw/direct3d9.c 
b/modules/video_output/msw/direct3d9.c
index 93f2e07..db96275 100644
--- a/modules/video_output/msw/direct3d9.c
+++ b/modules/video_output/msw/direct3d9.c
@@ -1481,7 +1481,12 @@ static int Direct3D9ImportPicture(vout_display_t *vd,
 
 /* Copy picture surface into texture surface
  * color space conversion happen here */
-hr = IDirect3DDevice9_StretchRect(sys-d3ddev, source, NULL, destination, 
NULL, D3DTEXF_LINEAR);
+RECT cropSource;
+cropSource.left = 0;
+cropSource.top = 0;
+cropSource.right = vd-fmt.i_visible_width;
+cropSource.bottom = vd-fmt.i_visible_height;
+hr = IDirect3DDevice9_StretchRect(sys-d3ddev, source, cropSource, 
destination, NULL, D3DTEXF_LINEAR);
 IDirect3DSurface9_Release(destination);
 if (FAILED(hr)) {
 msg_Dbg(vd, Failed IDirect3DDevice9_StretchRect: source 0x%p 0x%0lx, 
source, hr);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] blend: support BGRA blending

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Mon Apr 27 14:56:25 
2015 +| [5b7ab111f461c480c1decbe5e0f85c75e306c547] | committer: 
Jean-Baptiste Kempf

blend: support BGRA blending

--
tested with some colourful karaoke
looking at the code, there's a change VLC_CODEC_ARGB is not handled properly

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5b7ab111f461c480c1decbe5e0f85c75e306c547
---

 modules/video_filter/blend.cpp  |   14 +++---
 src/video_output/vout_subpictures.c |2 ++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/modules/video_filter/blend.cpp b/modules/video_filter/blend.cpp
index befe886..b9b3a97 100644
--- a/modules/video_filter/blend.cpp
+++ b/modules/video_filter/blend.cpp
@@ -268,9 +268,15 @@ public:
 CPictureRGBX(const CPicture cfg) : CPicture(cfg)
 {
 if (has_alpha) {
-offset_r = 0;
-offset_g = 1;
-offset_b = 2;
+if (fmt-i_chroma == VLC_CODEC_BGRA) {
+offset_r = 2;
+offset_g = 1;
+offset_b = 0;
+} else {
+offset_r = 0;
+offset_g = 1;
+offset_b = 2;
+}
 offset_a = 3;
 } else {
 #ifdef WORDS_BIGENDIAN
@@ -403,6 +409,7 @@ typedef CPictureYUVPacked0, 3, 1 CPictureYVYU;
 typedef CPictureYUVPacked1, 2, 0 CPictureVYUY;
 
 typedef CPictureRGBX4, true  CPictureRGBA;
+typedef CPictureRGBX4, true  CPictureBGRA;
 typedef CPictureRGBX4, false CPictureRGB32;
 typedef CPictureRGBX3, false CPictureRGB24;
 
@@ -565,6 +572,7 @@ static const struct {
 RGB(VLC_CODEC_RGB24,CPictureRGB24,convertNone),
 RGB(VLC_CODEC_RGB32,CPictureRGB32,convertNone),
 RGB(VLC_CODEC_RGBA, CPictureRGBA, convertNone),
+RGB(VLC_CODEC_BGRA, CPictureBGRA, convertNone),
 
 YUV(VLC_CODEC_YV9,  CPictureYV9,  convertNone),
 YUV(VLC_CODEC_I410, CPictureI410_8,   convertNone),
diff --git a/src/video_output/vout_subpictures.c 
b/src/video_output/vout_subpictures.c
index b3f0152..5ed60c3 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -1433,12 +1433,14 @@ subpicture_t *spu_Render(spu_t *spu,
 VLC_CODEC_YUVA,
 VLC_CODEC_RGBA,
 VLC_CODEC_ARGB,
+VLC_CODEC_BGRA,
 VLC_CODEC_YUVP,
 0,
 };
 static const vlc_fourcc_t chroma_list_default_rgb[] = {
 VLC_CODEC_RGBA,
 VLC_CODEC_ARGB,
+VLC_CODEC_BGRA,
 VLC_CODEC_YUVA,
 VLC_CODEC_YUVP,
 0,

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] blend: support BGRA blending

2015-04-28 Thread Steve Lhomme
vlc | branch: master | Steve Lhomme rob...@videolabs.io | Mon Apr 27 14:56:25 
2015 +| [e9d1c94eac7ffc03e88a275e8bf8e4436b121ce0] | committer: 
Jean-Baptiste Kempf

blend: support BGRA blending

Signed-off-by: Jean-Baptiste Kempf j...@videolan.org

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e9d1c94eac7ffc03e88a275e8bf8e4436b121ce0
---

 modules/video_filter/blend.cpp  |   14 +++---
 src/video_output/vout_subpictures.c |2 ++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/modules/video_filter/blend.cpp b/modules/video_filter/blend.cpp
index befe886..b9b3a97 100644
--- a/modules/video_filter/blend.cpp
+++ b/modules/video_filter/blend.cpp
@@ -268,9 +268,15 @@ public:
 CPictureRGBX(const CPicture cfg) : CPicture(cfg)
 {
 if (has_alpha) {
-offset_r = 0;
-offset_g = 1;
-offset_b = 2;
+if (fmt-i_chroma == VLC_CODEC_BGRA) {
+offset_r = 2;
+offset_g = 1;
+offset_b = 0;
+} else {
+offset_r = 0;
+offset_g = 1;
+offset_b = 2;
+}
 offset_a = 3;
 } else {
 #ifdef WORDS_BIGENDIAN
@@ -403,6 +409,7 @@ typedef CPictureYUVPacked0, 3, 1 CPictureYVYU;
 typedef CPictureYUVPacked1, 2, 0 CPictureVYUY;
 
 typedef CPictureRGBX4, true  CPictureRGBA;
+typedef CPictureRGBX4, true  CPictureBGRA;
 typedef CPictureRGBX4, false CPictureRGB32;
 typedef CPictureRGBX3, false CPictureRGB24;
 
@@ -565,6 +572,7 @@ static const struct {
 RGB(VLC_CODEC_RGB24,CPictureRGB24,convertNone),
 RGB(VLC_CODEC_RGB32,CPictureRGB32,convertNone),
 RGB(VLC_CODEC_RGBA, CPictureRGBA, convertNone),
+RGB(VLC_CODEC_BGRA, CPictureBGRA, convertNone),
 
 YUV(VLC_CODEC_YV9,  CPictureYV9,  convertNone),
 YUV(VLC_CODEC_I410, CPictureI410_8,   convertNone),
diff --git a/src/video_output/vout_subpictures.c 
b/src/video_output/vout_subpictures.c
index b3f0152..5ed60c3 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -1433,12 +1433,14 @@ subpicture_t *spu_Render(spu_t *spu,
 VLC_CODEC_YUVA,
 VLC_CODEC_RGBA,
 VLC_CODEC_ARGB,
+VLC_CODEC_BGRA,
 VLC_CODEC_YUVP,
 0,
 };
 static const vlc_fourcc_t chroma_list_default_rgb[] = {
 VLC_CODEC_RGBA,
 VLC_CODEC_ARGB,
+VLC_CODEC_BGRA,
 VLC_CODEC_YUVA,
 VLC_CODEC_YUVP,
 0,

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] fix dxva2 build

2015-04-28 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem tho...@gllm.fr | Tue Apr 28 17:54:25 
2015 +0200| [8f433b2594e434c569a88eea653f432c4874a202] | committer: Thomas 
Guillem

fix dxva2 build

A wise man once said: always do a make distcheck when you move some files

 http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8f433b2594e434c569a88eea653f432c4874a202
---

 modules/codec/Makefile.am |2 +-
 modules/codec/avcodec/dxva2.c |2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/codec/Makefile.am b/modules/codec/Makefile.am
index a81cdbf..bd89326 100644
--- a/modules/codec/Makefile.am
+++ b/modules/codec/Makefile.am
@@ -342,7 +342,7 @@ endif
 
 libdxva2_plugin_la_SOURCES = \
video_chroma/copy.c video_chroma/copy.h \
-   codec/avcodec/dxva2.c codec/h264_nal.c codec/h264_nal.h
+   codec/avcodec/dxva2.c packetizer/h264_nal.c packetizer/h264_nal.h
 libdxva2_plugin_la_LIBADD = -lole32 -lshlwapi -luuid
 if HAVE_AVCODEC_DXVA2
 codec_LTLIBRARIES += libdxva2_plugin.la
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 482810c..52b40bd 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -51,7 +51,7 @@
 #include avcodec.h
 #include va.h
 #include ../../video_chroma/copy.h
-#include ../h264_nal.h
+#include ../../packetizer/h264_nal.h
 
 static int Open(vlc_va_t *, AVCodecContext *, enum PixelFormat,
 const es_format_t *, picture_sys_t *p_sys);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits