/*****************************************************************************
* postproc.c: video postprocessing using libpostproc
*****************************************************************************
- * Copyright (C) 1999-2009 the VideoLAN team
+ * Copyright (C) 1999-2009 VLC authors and VideoLAN
* $Id$
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Gildas Bazin <gbazin@netcourrier.com>
* Antoine Cellerier <dionoea at videolan dot org>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+/*****************************************************************************
+ * NOTA BENE: this module requires the linking against a library which is
+ * known to require licensing under the GNU General Public License version 2
+ * (or later). Therefore, the result of compiling this module will normally
+ * be subject to the terms of that later license.
+ *****************************************************************************/
+
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#define Q_TEXT N_("Post processing quality")
#define Q_LONGTEXT N_( \
- "Quality of post processing. Valid range is 0 to 6\n" \
- "Higher levels require considerable more CPU power, but produce " \
- "better looking pictures." )
+ "Quality of post processing. Valid range is 0 (disabled) to 6 (highest)\n" \
+ "Higher levels require more CPU power, but produce higher quality pictures.\n" \
+ "With default filter chain, the values map to the following filters:\n" \
+ "1: hb, 2-4: hb+vb, 5-6: hb+vb+dr" )
#define NAME_TEXT N_("FFmpeg post processing filter chains")
#define NAME_LONGTEXT NAME_TEXT
vlc_module_begin ()
set_description( N_("Video post processing filter") )
set_shortname( N_("Postproc" ) )
- add_shortcut( "postprocess" ) /* name is "postproc" */
- add_shortcut( "pp" )
+ add_shortcut( "postprocess", "pp" ) /* name is "postproc" */
set_category( CAT_VIDEO )
set_subcategory( SUBCAT_VIDEO_VFILTER )
set_callbacks( OpenPostproc, ClosePostproc )
add_integer_with_range( FILTER_PREFIX "q", PP_QUALITY_MAX, 0,
- PP_QUALITY_MAX, NULL, Q_TEXT, Q_LONGTEXT, false )
- add_deprecated_alias( "ffmpeg-pp-q" )
+ PP_QUALITY_MAX, Q_TEXT, Q_LONGTEXT, false )
change_safe()
- add_string( FILTER_PREFIX "name", "default", NULL, NAME_TEXT,
+ add_string( FILTER_PREFIX "name", "default", NAME_TEXT,
NAME_LONGTEXT, true )
- add_deprecated_alias( "ffmpeg-pp-name" )
vlc_module_end ()
static const char *const ppsz_filter_options[] = {
struct filter_sys_t
{
/* Never changes after init */
- pp_context_t *pp_context;
+ pp_context *pp_context;
/* Set to NULL if post processing is disabled */
- pp_mode_t *pp_mode;
-
- /* Set to true if previous pic had a quant matrix
- (used to prevent spamming warning messages) */
- bool b_had_matrix;
+ pp_mode *pp_mode;
/* Lock when using or changing pp_mode */
vlc_mutex_t lock;
filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys;
vlc_value_t val, val_orig, text;
- unsigned i_cpu = vlc_CPU();
int i_flags = 0;
if( p_filter->fmt_in.video.i_chroma != p_filter->fmt_out.video.i_chroma ||
}
/* Set CPU capabilities */
- if( i_cpu & CPU_CAPABILITY_MMX )
+#if defined(__i386__) || defined(__x86_64__)
+ if( vlc_CPU_MMX() )
i_flags |= PP_CPU_CAPS_MMX;
- if( i_cpu & CPU_CAPABILITY_MMXEXT )
+ if( vlc_CPU_MMXEXT() )
i_flags |= PP_CPU_CAPS_MMX2;
- if( i_cpu & CPU_CAPABILITY_3DNOW )
+ if( vlc_CPU_3dNOW() )
i_flags |= PP_CPU_CAPS_3DNOW;
- if( i_cpu & CPU_CAPABILITY_ALTIVEC )
+#elif defined(__ppc__) || defined(__ppc64__) || defined(__powerpc__)
+ if( vlc_CPU_ALTIVEC() )
i_flags |= PP_CPU_CAPS_ALTIVEC;
+#endif
switch( p_filter->fmt_in.video.i_chroma )
{
i_flags |= PP_FORMAT_420;
break;
default:
- msg_Err( p_filter, "Unsupported input chroma (%4s)",
+ msg_Err( p_filter, "Unsupported input chroma (%4.4s)",
(char*)&p_filter->fmt_in.video.i_chroma );
return VLC_EGENERIC;
}
var_AddCallback( p_filter, FILTER_PREFIX "name", PPNameCallback, NULL );
p_filter->pf_video_filter = PostprocPict;
- p_sys->b_had_matrix = true;
+ msg_Warn( p_filter, "Quantification table was not set by video decoder. "
+ "Postprocessing won't look good." );
return VLC_SUCCESS;
}
i_dst_stride[i_plane] = p_outpic->p[i_plane].i_pitch;
}
- if( !p_pic->p_q && p_sys->b_had_matrix )
- {
- msg_Warn( p_filter, "Quantification table was not set by video decoder. Postprocessing won't look good." );
- p_sys->b_had_matrix = false;
- }
- else if( p_pic->p_q )
- {
- p_sys->b_had_matrix = true;
- }
-
pp_postprocess( src, i_src_stride, dst, i_dst_stride,
p_filter->fmt_in.video.i_width,
- p_filter->fmt_in.video.i_height,
- p_pic->p_q, p_pic->i_qstride,
- p_sys->pp_mode, p_sys->pp_context,
- p_pic->i_qtype == QTYPE_MPEG2 ? PP_PICT_TYPE_QP2 : 0 );
+ p_filter->fmt_in.video.i_height, NULL, 0,
+ p_sys->pp_mode, p_sys->pp_context, 0 );
vlc_mutex_unlock( &p_sys->lock );
return CopyInfoAndRelease( p_outpic, p_pic );
vlc_mutex_lock( &p_sys->lock );
if( i_quality > 0 )
{
- pp_mode_t *pp_mode = pp_get_mode_by_name_and_quality( psz_name ?
+ pp_mode *pp_mode = pp_get_mode_by_name_and_quality( psz_name ?
psz_name :
"default",
i_quality );