[vlc-commits] avcodec: DXVA2 is now frame multithreading safe
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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