Commit 229fe32c authored by Jean-Paul Saman's avatar Jean-Paul Saman Committed by Jean-Paul Saman

Backport of swscale functionality from trunk.

parent 469e9790
...@@ -4,11 +4,13 @@ SOURCES_ffmpeg = \ ...@@ -4,11 +4,13 @@ SOURCES_ffmpeg = \
video.c \ video.c \
audio.c \ audio.c \
video_filter.c \ video_filter.c \
deinterlace.c \
chroma.c \ chroma.c \
encoder.c \ encoder.c \
postprocess.c \ postprocess.c \
demux.c \ demux.c \
mux.c \ mux.c \
scale.c \
$(NULL) $(NULL)
SOURCES_ffmpegaltivec = \ SOURCES_ffmpegaltivec = \
...@@ -17,6 +19,7 @@ SOURCES_ffmpegaltivec = \ ...@@ -17,6 +19,7 @@ SOURCES_ffmpegaltivec = \
video.c \ video.c \
audio.c \ audio.c \
video_filter.c \ video_filter.c \
deinterlace.c \
chroma.c \ chroma.c \
encoder.c \ encoder.c \
postprocess.c \ postprocess.c \
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include "ffmpeg.h" #include "ffmpeg.h"
#if !defined(HAVE_FFMPEG_SWSCALE_H) && !defined(HAVE_LIBSWSCALE_TREE)
void E_(InitLibavcodec) ( vlc_object_t *p_object ); void E_(InitLibavcodec) ( vlc_object_t *p_object );
static void ChromaConversion( vout_thread_t *, picture_t *, picture_t * ); static void ChromaConversion( vout_thread_t *, picture_t *, picture_t * );
...@@ -187,3 +188,4 @@ void E_(CloseChroma)( vlc_object_t *p_this ) ...@@ -187,3 +188,4 @@ void E_(CloseChroma)( vlc_object_t *p_this )
} }
free( p_vout->chroma.p_sys ); free( p_vout->chroma.p_sys );
} }
#endif
/*****************************************************************************
* video filter: video filter doing chroma conversion and resizing
* using the ffmpeg library
*****************************************************************************
* Copyright (C) 1999-2001 the VideoLAN team
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.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
* (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.
*
* 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.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc_codec.h>
#include <vlc_filter.h>
/* ffmpeg header */
#ifdef HAVE_FFMPEG_AVCODEC_H
# include <ffmpeg/avcodec.h>
#else
# include <avcodec.h>
#endif
#include "ffmpeg.h"
static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic );
/*****************************************************************************
* filter_sys_t : filter descriptor
*****************************************************************************/
struct filter_sys_t
{
vlc_bool_t b_resize;
vlc_bool_t b_convert;
vlc_bool_t b_resize_first;
vlc_bool_t b_enable_croppadd;
es_format_t fmt_in;
int i_src_ffmpeg_chroma;
es_format_t fmt_out;
int i_dst_ffmpeg_chroma;
AVPicture tmp_pic;
};
/*****************************************************************************
* OpenDeinterlace: probe the filter and return score
*****************************************************************************/
int E_(OpenDeinterlace)( vlc_object_t *p_this )
{
filter_t *p_filter = (filter_t*)p_this;
filter_sys_t *p_sys;
/* Check if we can handle that formats */
if( E_(GetFfmpegChroma)( p_filter->fmt_in.video.i_chroma ) < 0 )
{
return VLC_EGENERIC;
}
/* Allocate the memory needed to store the decoder's structure */
if( ( p_filter->p_sys = p_sys =
(filter_sys_t *)malloc(sizeof(filter_sys_t)) ) == NULL )
{
msg_Err( p_filter, "out of memory" );
return VLC_EGENERIC;
}
/* Misc init */
p_sys->i_src_ffmpeg_chroma =
E_(GetFfmpegChroma)( p_filter->fmt_in.video.i_chroma );
p_filter->pf_video_filter = Deinterlace;
msg_Dbg( p_filter, "deinterlacing" );
/* libavcodec needs to be initialized for some chroma conversions */
E_(InitLibavcodec)(p_this);
return VLC_SUCCESS;
}
/*****************************************************************************
* CloseDeinterlace: clean up the filter
*****************************************************************************/
void E_(CloseDeinterlace)( vlc_object_t *p_this )
{
filter_t *p_filter = (filter_t*)p_this;
filter_sys_t *p_sys = p_filter->p_sys;
free( p_sys );
}
/*****************************************************************************
* Do the processing here
*****************************************************************************/
static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic )
{
filter_sys_t *p_sys = p_filter->p_sys;
AVPicture src_pic, dest_pic;
picture_t *p_pic_dst;
int i;
/* Request output picture */
p_pic_dst = p_filter->pf_vout_buffer_new( p_filter );
if( !p_pic_dst )
{
msg_Warn( p_filter, "can't get output picture" );
return NULL;
}
/* Prepare the AVPictures for the conversion */
for( i = 0; i < p_pic->i_planes; i++ )
{
src_pic.data[i] = p_pic->p[i].p_pixels;
src_pic.linesize[i] = p_pic->p[i].i_pitch;
}
for( i = 0; i < p_pic_dst->i_planes; i++ )
{
dest_pic.data[i] = p_pic_dst->p[i].p_pixels;
dest_pic.linesize[i] = p_pic_dst->p[i].i_pitch;
}
avpicture_deinterlace( &dest_pic, &src_pic, p_sys->i_src_ffmpeg_chroma,
p_filter->fmt_in.video.i_width,
p_filter->fmt_in.video.i_height );
p_pic_dst->date = p_pic->date;
p_pic_dst->b_force = p_pic->b_force;
p_pic_dst->i_nb_fields = p_pic->i_nb_fields;
p_pic_dst->b_progressive = VLC_TRUE;
p_pic_dst->b_top_field_first = p_pic->b_top_field_first;
p_pic->pf_release( p_pic );
return p_pic_dst;
}
...@@ -42,12 +42,10 @@ ...@@ -42,12 +42,10 @@
#include "ffmpeg.h" #include "ffmpeg.h"
#ifdef LIBAVCODEC_PP #ifdef HAVE_POSTPROC_POSTPROCESS_H
# ifdef HAVE_POSTPROC_POSTPROCESS_H
# include <postproc/postprocess.h> # include <postproc/postprocess.h>
# else #else
# include <libpostproc/postprocess.h> # include <libpostproc/postprocess.h>
# endif
#endif #endif
/***************************************************************************** /*****************************************************************************
...@@ -76,6 +74,16 @@ static char *nloopf_list_text[] = ...@@ -76,6 +74,16 @@ static char *nloopf_list_text[] =
static char *enc_hq_list[] = { "rd", "bits", "simple" }; static char *enc_hq_list[] = { "rd", "bits", "simple" };
static char *enc_hq_list_text[] = { N_("rd"), N_("bits"), N_("simple") }; static char *enc_hq_list_text[] = { N_("rd"), N_("bits"), N_("simple") };
#if defined(HAVE_FFMPEG_SWSCALE_H) || defined(HAVE_LIBSWSCALE_TREE)
static int pi_mode_values[] = { 0, 1, 2, 4, 8, 5, 6, 9, 10 };
static const char *ppsz_mode_descriptions[] =
{ N_("Fast bilinear"), N_("Bilinear"), N_("Bicubic (good quality)"),
N_("Experimental"), N_("Nearest neighbour (bad quality)"),
N_("Area"), N_("Luma bicubic / chroma bilinear"), N_("Gauss"),
N_("SincR"), N_("Lanczos"), N_("Bicubic spline") };
#endif
/***************************************************************************** /*****************************************************************************
* Module descriptor * Module descriptor
*****************************************************************************/ *****************************************************************************/
...@@ -112,20 +120,13 @@ vlc_module_begin(); ...@@ -112,20 +120,13 @@ vlc_module_begin();
SKIPLOOPF_LONGTEXT, VLC_TRUE ); SKIPLOOPF_LONGTEXT, VLC_TRUE );
change_integer_list( nloopf_list, nloopf_list_text, 0 ); change_integer_list( nloopf_list, nloopf_list_text, 0 );
#ifdef LIBAVCODEC_PP
add_integer( "ffmpeg-pp-q", 0, NULL, PP_Q_TEXT, PP_Q_LONGTEXT, VLC_FALSE ); add_integer( "ffmpeg-pp-q", 0, NULL, PP_Q_TEXT, PP_Q_LONGTEXT, VLC_FALSE );
add_string( "ffmpeg-pp-name", "default", NULL, LIBAVCODEC_PP_TEXT, add_string( "ffmpeg-pp-name", "default", NULL, LIBAVCODEC_PP_TEXT,
LIBAVCODEC_PP_LONGTEXT, VLC_TRUE ); LIBAVCODEC_PP_LONGTEXT, VLC_TRUE );
#endif
add_integer( "ffmpeg-debug", 0, NULL, DEBUG_TEXT, DEBUG_LONGTEXT, add_integer( "ffmpeg-debug", 0, NULL, DEBUG_TEXT, DEBUG_LONGTEXT,
VLC_TRUE ); VLC_TRUE );
/* chroma conversion submodule */
add_submodule();
set_capability( "chroma", 50 );
set_callbacks( E_(OpenChroma), E_(CloseChroma) );
set_description( _("FFmpeg chroma conversion") );
/* encoder submodule */ /* encoder submodule */
add_submodule(); add_submodule();
set_section( N_("Encoding") , NULL ); set_section( N_("Encoding") , NULL );
...@@ -197,6 +198,18 @@ vlc_module_begin(); ...@@ -197,6 +198,18 @@ vlc_module_begin();
set_capability( "sout mux", 2 ); set_capability( "sout mux", 2 );
set_callbacks( E_(OpenMux), E_(CloseMux) ); set_callbacks( E_(OpenMux), E_(CloseMux) );
#if defined(HAVE_FFMPEG_SWSCALE_H) || defined(HAVE_LIBSWSCALE_TREE)
/* video filter submodule */
add_submodule();
set_description( _("Video scaling filter") );
set_capability( "video filter2", 1000 );
set_category( CAT_VIDEO );
set_subcategory( SUBCAT_VIDEO_VFILTER );
set_callbacks( E_(OpenScaler), E_(CloseScaler) );
add_integer( "swscale-mode", 0, NULL, SCALEMODE_TEXT, SCALEMODE_LONGTEXT, VLC_TRUE );
change_integer_list( pi_mode_values, ppsz_mode_descriptions, 0 );
#else
/* video filter submodule */ /* video filter submodule */
add_submodule(); add_submodule();
set_capability( "video filter2", 50 ); set_capability( "video filter2", 50 );
...@@ -209,6 +222,13 @@ vlc_module_begin(); ...@@ -209,6 +222,13 @@ vlc_module_begin();
set_callbacks( E_(OpenCropPadd), E_(CloseFilter) ); set_callbacks( E_(OpenCropPadd), E_(CloseFilter) );
set_description( _("FFmpeg crop padd filter") ); set_description( _("FFmpeg crop padd filter") );
/* chroma conversion submodule */
add_submodule();
set_capability( "chroma", 50 );
set_callbacks( E_(OpenChroma), E_(CloseChroma) );
set_description( _("FFmpeg chroma conversion") );
#endif
/* video filter submodule */ /* video filter submodule */
add_submodule(); add_submodule();
set_capability( "video filter2", 0 ); set_capability( "video filter2", 0 );
...@@ -455,23 +475,24 @@ static struct ...@@ -455,23 +475,24 @@ static struct
/* Packed YUV formats */ /* Packed YUV formats */
{ VLC_FOURCC('Y','U','Y','2'), PIX_FMT_YUV422 }, { VLC_FOURCC('Y','U','Y','2'), PIX_FMT_YUV422 },
#if LIBAVCODEC_BUILD >= 4720 { VLC_FOURCC('Y','U','Y','V'), PIX_FMT_YUV422 },
{ VLC_FOURCC('U','Y','V','Y'), PIX_FMT_UYVY422 }, { VLC_FOURCC('U','Y','V','Y'), PIX_FMT_UYVY422 },
#endif
/* Packed RGB formats */ /* Packed RGB formats */
{ VLC_FOURCC('R','V','1','5'), PIX_FMT_RGB555 }, { VLC_FOURCC('R','V','1','5'), PIX_FMT_RGB555 },
{ VLC_FOURCC('R','V','1','6'), PIX_FMT_RGB565 }, { VLC_FOURCC('R','V','1','6'), PIX_FMT_RGB565 },
{ VLC_FOURCC('R','V','2','4'), PIX_FMT_RGB24 }, { VLC_FOURCC('R','V','2','4'), PIX_FMT_RGB24 },
{ VLC_FOURCC('R','V','3','2'), PIX_FMT_RGBA32 }, { VLC_FOURCC('R','V','3','2'), PIX_FMT_RGBA32 },
#ifdef WORDS_BIGENDIAN #if defined(HAVE_FFMPEG_SWSCALE_H) || defined(HAVE_LIBSWSCALE_TREE)
# ifdef WORDS_BIGENDIAN
{ VLC_FOURCC('R','G','B','A'), PIX_FMT_RGB32_1 }, { VLC_FOURCC('R','G','B','A'), PIX_FMT_RGB32_1 },
#else # else
{ VLC_FOURCC('R','G','B','A'), PIX_FMT_BGR32 }, { VLC_FOURCC('R','G','B','A'), PIX_FMT_BGR32 },
# endif
#endif #endif
{ VLC_FOURCC('G','R','E','Y'), PIX_FMT_GRAY8 }, { VLC_FOURCC('G','R','E','Y'), PIX_FMT_GRAY8 },
{0} { 0, 0 }
}; };
int E_(GetFfmpegChroma)( vlc_fourcc_t i_chroma ) int E_(GetFfmpegChroma)( vlc_fourcc_t i_chroma )
...@@ -513,12 +534,49 @@ static struct ...@@ -513,12 +534,49 @@ static struct
/* MPEG-1 Video */ /* MPEG-1 Video */
{ VLC_FOURCC('m','p','1','v'), CODEC_ID_MPEG1VIDEO, { VLC_FOURCC('m','p','1','v'), CODEC_ID_MPEG1VIDEO,
VIDEO_ES, "MPEG-1 Video" }, VIDEO_ES, "MPEG-1 Video" },
{ VLC_FOURCC('m','p','e','g'), CODEC_ID_MPEG1VIDEO,
VIDEO_ES, "MPEG-1 Video" },
{ VLC_FOURCC('m','p','g','1'), CODEC_ID_MPEG1VIDEO,
VIDEO_ES, "MPEG-1 Video" },
{ VLC_FOURCC('m','p','e','g'), CODEC_ID_MPEG1VIDEO,
VIDEO_ES, "MPEG-1 Video" },
{ VLC_FOURCC('P','I','M','1'), CODEC_ID_MPEG1VIDEO,
VIDEO_ES, "Pinnacle DC1000 (MPEG-1 Video)" },
/* MPEG-2 Video */ /* MPEG-2 Video */
{ VLC_FOURCC('m','p','2','v'), CODEC_ID_MPEG2VIDEO, { VLC_FOURCC('m','p','2','v'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG-2 Video" }, VIDEO_ES, "MPEG-2 Video" },
{ VLC_FOURCC('m','p','g','v'), CODEC_ID_MPEG2VIDEO, { VLC_FOURCC('m','p','g','v'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG-2 Video" }, VIDEO_ES, "MPEG-2 Video" },
{ VLC_FOURCC('M','P','E','G'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG-2 Video" },
{ VLC_FOURCC('m','p','g','2'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG-2 Video" },
{ VLC_FOURCC('h','d','v','1'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "HDV 720p30 (MPEG-2 Video)" },
{ VLC_FOURCC('h','d','v','2'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "Sony HDV (MPEG-2 Video)" },
{ VLC_FOURCC('h','d','v','3'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "FCP HDV (MPEG-2 Video)" },
{ VLC_FOURCC('m','x','5','n'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG2 IMX NTSC 525/60 50mb/s (FCP)" },
{ VLC_FOURCC('m','x','5','p'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG2 IMX PAL 625/50 50mb/s (FCP)" },
{ VLC_FOURCC('m','x','3','n'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG2 IMX NTSC 525/60 30mb/s (FCP)" },
{ VLC_FOURCC('m','x','3','p'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "MPEG2 IMX NTSC 625/50 30mb/s (FCP)" },
{ VLC_FOURCC('x','d','v','2'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "XDCAM HD 1080i60" },
{ VLC_FOURCC('A','V','m','p'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "AVID IMX PAL" },
/* ATI VCR2 */
{ VLC_FOURCC('V','C','R','2'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "ATI VCR2 Video" },
{ VLC_FOURCC('M','M','E','S'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "Matrox MPEG-2" },
{ VLC_FOURCC('m','m','e','s'), CODEC_ID_MPEG2VIDEO,
VIDEO_ES, "Matrox MPEG-2" },
/* MPEG-4 Video */ /* MPEG-4 Video */
{ VLC_FOURCC('D','I','V','X'), CODEC_ID_MPEG4, { VLC_FOURCC('D','I','V','X'), CODEC_ID_MPEG4,
...@@ -547,6 +605,10 @@ static struct ...@@ -547,6 +605,10 @@ static struct
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('d','x','5','0'), CODEC_ID_MPEG4, { VLC_FOURCC('d','x','5','0'), CODEC_ID_MPEG4,
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('B','L','Z','0'), CODEC_ID_MPEG4,
VIDEO_ES, "Blizzard MPEG-4 Video" },
{ VLC_FOURCC('D','X','G','M'), CODEC_ID_MPEG4,
VIDEO_ES, "Electronic Arts Game MPEG-4 Video" },
{ VLC_FOURCC('m','p','4','v'), CODEC_ID_MPEG4, { VLC_FOURCC('m','p','4','v'), CODEC_ID_MPEG4,
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('M','P','4','V'), CODEC_ID_MPEG4, { VLC_FOURCC('M','P','4','V'), CODEC_ID_MPEG4,
...@@ -559,6 +621,8 @@ static struct ...@@ -559,6 +621,8 @@ static struct
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('F','M','P','4'), CODEC_ID_MPEG4, { VLC_FOURCC('F','M','P','4'), CODEC_ID_MPEG4,
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('f','m','p','4'), CODEC_ID_MPEG4,
VIDEO_ES, "MPEG-4 Video" },
/* 3ivx delta 3.5 Unsupported /* 3ivx delta 3.5 Unsupported
* putting it here gives extreme distorted images * putting it here gives extreme distorted images
{ VLC_FOURCC('3','I','V','1'), CODEC_ID_MPEG4, { VLC_FOURCC('3','I','V','1'), CODEC_ID_MPEG4,
...@@ -570,6 +634,24 @@ static struct ...@@ -570,6 +634,24 @@ static struct
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('3','i','v','2'), CODEC_ID_MPEG4, { VLC_FOURCC('3','i','v','2'), CODEC_ID_MPEG4,
VIDEO_ES, "MPEG-4 Video" }, VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('U','M','P','4'), CODEC_ID_MPEG4,
VIDEO_ES, "UB MPEG-4 Video" },
{ VLC_FOURCC('W','V','1','F'), CODEC_ID_MPEG4,
VIDEO_ES, "MPEG-4 Video" },
{ VLC_FOURCC('S','E','D','G'), CODEC_ID_MPEG4,
VIDEO_ES, "Samsung MPEG-4 Video" },
{ VLC_FOURCC('R','M','P','4'), CODEC_ID_MPEG4,
VIDEO_ES, "REALmagic MPEG-4 Video" },
{ VLC_FOURCC('H','D','X','4'), CODEC_ID_MPEG4,
VIDEO_ES, "Jomigo HDX4 (MPEG-4 Video)" },
{ VLC_FOURCC('h','d','x','4'), CODEC_ID_MPEG4,
VIDEO_ES, "Jomigo HDX4 (MPEG-4 Video)" },
{ VLC_FOURCC('S','M','P','4'), CODEC_ID_MPEG4,
VIDEO_ES, "Samsung SMP4 (MPEG-4 Video)" },
{ VLC_FOURCC('f','v','f','w'), CODEC_ID_MPEG4,
VIDEO_ES, "FFmpeg MPEG-4" },
{ VLC_FOURCC('F','V','F','W'), CODEC_ID_MPEG4,
VIDEO_ES, "FFmpeg MPEG-4" },
/* MSMPEG4 v1 */ /* MSMPEG4 v1 */
{ VLC_FOURCC('D','I','V','1'), CODEC_ID_MSMPEG4V1, { VLC_FOURCC('D','I','V','1'), CODEC_ID_MSMPEG4V1,
...@@ -617,6 +699,15 @@ static struct ...@@ -617,6 +699,15 @@ static struct
VIDEO_ES, "MS MPEG-4 Video v3" }, VIDEO_ES, "MS MPEG-4 Video v3" },
{ VLC_FOURCC('d','i','v','6'), CODEC_ID_MSMPEG4V3, { VLC_FOURCC('d','i','v','6'), CODEC_ID_MSMPEG4V3,
VIDEO_ES, "MS MPEG-4 Video v3" }, VIDEO_ES, "MS MPEG-4 Video v3" },
/* Cool Codec */
{ VLC_FOURCC('C','O','L','1'), CODEC_ID_MSMPEG4V3,
VIDEO_ES, "MS MPEG-4 Video v3" },
{ VLC_FOURCC('c','o','l','1'), CODEC_ID_MSMPEG4V3,
VIDEO_ES, "MS MPEG-4 Video v3" },
{ VLC_FOURCC('C','O','L','0'), CODEC_ID_MSMPEG4V3,
VIDEO_ES, "MS MPEG-4 Video v3" },
{ VLC_FOURCC('c','o','l','0'), CODEC_ID_MSMPEG4V3,
VIDEO_ES, "MS MPEG-4 Video v3" },
/* AngelPotion stuff */ /* AngelPotion stuff */
{ VLC_FOURCC('A','P','4','1'), CODEC_ID_MSMPEG4V3, { VLC_FOURCC('A','P','4','1'), CODEC_ID_MSMPEG4V3,
VIDEO_ES, "MS MPEG-4 Video v3" }, VIDEO_ES, "MS MPEG-4 Video v3" },
...@@ -634,6 +725,10 @@ static struct ...@@ -634,6 +725,10 @@ static struct
/* Sorenson v1 */ /* Sorenson v1 */
{ VLC_FOURCC('S','V','Q','1'), CODEC_ID_SVQ1, { VLC_FOURCC('S','V','Q','1'), CODEC_ID_SVQ1,
VIDEO_ES, "SVQ-1 (Sorenson Video v1)" }, VIDEO_ES, "SVQ-1 (Sorenson Video v1)" },
{ VLC_FOURCC('s','v','q','1'), CODEC_ID_SVQ1,
VIDEO_ES, "SVQ-1 (Sorenson Video v1)" },
{ VLC_FOURCC('s','v','q','i'), CODEC_ID_SVQ1,
VIDEO_ES, "SVQ-1 (Sorenson Video v1)" },
/* Sorenson v3 */ /* Sorenson v3 */
{ VLC_FOURCC('S','V','Q','3'), CODEC_ID_SVQ3, { VLC_FOURCC('S','V','Q','3'), CODEC_ID_SVQ3,
...@@ -650,11 +745,20 @@ static struct ...@@ -650,11 +745,20 @@ static struct
VIDEO_ES, "h264" }, VIDEO_ES, "h264" },
/* avc1: special case h264 */ /* avc1: special case h264 */
{ VLC_FOURCC('a','v','c','1'), CODEC_ID_H264, { VLC_FOURCC('a','v','c','1'), CODEC_ID_H264,
VIDEO_ES, "h264" }, VIDEO_ES, "H264 - MPEG-4 AVC (part 10)" },
{ VLC_FOURCC('A','V','C','1'), CODEC_ID_H264,
VIDEO_ES, "H264 - MPEG-4 AVC (part 10)" },
{ VLC_FOURCC('V','S','S','H'), CODEC_ID_H264, { VLC_FOURCC('V','S','S','H'), CODEC_ID_H264,
VIDEO_ES, "h264" }, VIDEO_ES, "Vanguard VSS H264" },
{ VLC_FOURCC('V','S','S','W'), CODEC_ID_H264,
VIDEO_ES, "Vanguard VSS H264" },
{ VLC_FOURCC('v','s','s','h'), CODEC_ID_H264, { VLC_FOURCC('v','s','s','h'), CODEC_ID_H264,
VIDEO_ES, "h264" }, VIDEO_ES, "Vanguard VSS H264" },
{ VLC_FOURCC('D','A','V','C'), CODEC_ID_H264,
VIDEO_ES, "Dicas MPEGable H.264/MPEG-4 AVC" },
{ VLC_FOURCC('d','a','v','c'), CODEC_ID_H264,
VIDEO_ES, "Dicas MPEGable H.264/MPEG-4 AVC" },
/* H263 and H263i */ /* H263 and H263i */
/* H263(+) is also known as Real Video 1.0 */ /* H263(+) is also known as Real Video 1.0 */
...@@ -662,14 +766,28 @@ static struct ...@@ -662,14 +766,28 @@ static struct
/* FIXME FOURCC_H263P exist but what fourcc ? */ /* FIXME FOURCC_H263P exist but what fourcc ? */
/* H263 */ /* H263 */
{ VLC_FOURCC('D','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "DEC H263" },
{ VLC_FOURCC('H','2','6','3'), CODEC_ID_H263, { VLC_FOURCC('H','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "H263" }, VIDEO_ES, "H263" },
{ VLC_FOURCC('h','2','6','3'), CODEC_ID_H263, { VLC_FOURCC('h','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "H263" }, VIDEO_ES, "H263" },
{ VLC_FOURCC('U','2','6','3'), CODEC_ID_H263, { VLC_FOURCC('U','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "H263" }, VIDEO_ES, "H263" },
{ VLC_FOURCC('M','2','6','3'), CODEC_ID_H263, { VLC_FOURCC('L','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "LEAD H263" },
{ VLC_FOURCC('s','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "H263" },
{ VLC_FOURCC('S','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "H263" }, VIDEO_ES, "H263" },
{ VLC_FOURCC('M','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "Microsoft H263" },
{ VLC_FOURCC('X','2','6','3'), CODEC_ID_H263,
VIDEO_ES, "Xirlink H263" },
/* Zygo (partial) */
{ VLC_FOURCC('Z','y','G','o'), CODEC_ID_H263,
VIDEO_ES, "ITU H263+" },
/* H263i */ /* H263i */
{ VLC_FOURCC('I','2','6','3'), CODEC_ID_H263I, { VLC_FOURCC('I','2','6','3'), CODEC_ID_H263I,
...@@ -677,43 +795,78 @@ static struct ...@@ -677,43 +795,78 @@ static struct
{ VLC_FOURCC('i','2','6','3'), CODEC_ID_H263I, { VLC_FOURCC('i','2','6','3'), CODEC_ID_H263I,
VIDEO_ES, "I263.I" }, VIDEO_ES, "I263.I" },
/* H263P */
{ VLC_FOURCC('v','i','v','1'), CODEC_ID_H263P,
VIDEO_ES, "H263+" },
{ VLC_FOURCC('v','i','v','O'), CODEC_ID_H263P,
VIDEO_ES, "H263+" },
{ VLC_FOURCC('v','i','v','2'), CODEC_ID_H263P,
VIDEO_ES, "H263+" },
{ VLC_FOURCC('U','2','6','3'), CODEC_ID_H263P,
VIDEO_ES, "UB H263+" },
{ VLC_FOURCC('I','L','V','R'), CODEC_ID_H263P,
VIDEO_ES, "ITU H263+" },
/* Flash (H263) variant */ /* Flash (H263) variant */
{ VLC_FOURCC('F','L','V','1'), CODEC_ID_FLV1, { VLC_FOURCC('F','L','V','1'), CODEC_ID_FLV1,
VIDEO_ES, "Flash Video" }, VIDEO_ES, "Flash Video" },
#if LIBAVCODEC_BUILD > 4716 /* H261 */
{ VLC_FOURCC('H','2','6','1'), CODEC_ID_H261, { VLC_FOURCC('H','2','6','1'), CODEC_ID_H261,
VIDEO_ES, "H.261" }, VIDEO_ES, "H.261" },
#endif { VLC_FOURCC('h','2','6','1'), CODEC_ID_H261,
VIDEO_ES, "H.261" },
#if LIBAVCODEC_BUILD > 4680
{ VLC_FOURCC('F','L','I','C'), CODEC_ID_FLIC, { VLC_FOURCC('F','L','I','C'), CODEC_ID_FLIC,
VIDEO_ES, "Flic Video" }, VIDEO_ES, "Flic Video" },
#endif
/* MJPEG */ /* MJPEG */
{ VLC_FOURCC( 'M', 'J', 'P', 'G' ), CODEC_ID_MJPEG, { VLC_FOURCC('M','J','P','G'), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'm', 'j', 'p', 'g' ), CODEC_ID_MJPEG, { VLC_FOURCC('m','j','p','g'), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'm', 'j', 'p', 'a' ), CODEC_ID_MJPEG, /* for mov file */ { VLC_FOURCC('m','j','p','a'), CODEC_ID_MJPEG, /* for mov file */
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'j', 'p', 'e', 'g' ), CODEC_ID_MJPEG, { VLC_FOURCC('j','p','e','g'), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'J', 'P', 'E', 'G' ), CODEC_ID_MJPEG, { VLC_FOURCC('J','P','E','G'), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'J', 'F', 'I', 'F' ), CODEC_ID_MJPEG, { VLC_FOURCC('J','F','I','F'), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'J', 'P', 'G', 'L' ), CODEC_ID_MJPEG, { VLC_FOURCC('J','P','G','L'), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" }, VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'm', 'j', 'p', 'b' ), CODEC_ID_MJPEGB, /* for mov file */ { VLC_FOURCC( 'A','V','D','J' ), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG Video" },
{ VLC_FOURCC( 'm','j','p','b' ), CODEC_ID_MJPEGB, /* for mov file */
VIDEO_ES, "Motion JPEG B Video" }, VIDEO_ES, "Motion JPEG B Video" },
{ VLC_FOURCC( 'L','J','P','G' ), CODEC_ID_LJPEG,
#if LIBAVCODEC_BUILD > 4680 VIDEO_ES, "Lead Motion JPEG Video" },
{ VLC_FOURCC( 'S', 'P', '5', 'X' ), CODEC_ID_SP5X, { VLC_FOURCC( 'L','J','P','G' ), CODEC_ID_MJPEG,
VIDEO_ES, "Lead Motion JPEG Video" },
/* AVID MJPEG */
{ VLC_FOURCC( 'A','V','R','n' ), CODEC_ID_MJPEG,
VIDEO_ES, "Avid Motion JPEG" },
{ VLC_FOURCC( 'A','D','J','V' ), CODEC_ID_MJPEG,
VIDEO_ES, "Avid Motion JPEG" },
{ VLC_FOURCC( 'd','m','b','1' ), CODEC_ID_MJPEG,
VIDEO_ES, "Motion JPEG OpenDML Video" },
/* SP5x */
{ VLC_FOURCC( 'S','P','5','X' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" },
{ VLC_FOURCC( 'S','P','5','3' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" },
{ VLC_FOURCC( 'S','P','5','4' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" },
{ VLC_FOURCC( 'S','P','5','5' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" },
{ VLC_FOURCC( 'S','P','5','6' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" },
{ VLC_FOURCC( 'S','P','5','7' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" },
{ VLC_FOURCC( 'S','P','5','8' ), CODEC_ID_SP5X,
VIDEO_ES, "Sunplus Motion JPEG Video" }, VIDEO_ES, "Sunplus Motion JPEG Video" },
#endif
/* DV */ /* DV */
{ VLC_FOURCC('d','v','s','l'), CODEC_ID_DVVIDEO, { VLC_FOURCC('d','v','s','l'), CODEC_ID_DVVIDEO,
...@@ -734,26 +887,39 @@ static struct ...@@ -734,26 +887,39 @@ static struct
VIDEO_ES, "DV Video Pro PAL" }, VIDEO_ES, "DV Video Pro PAL" },
{ VLC_FOURCC('C','D','V','C'), CODEC_ID_DVVIDEO, { VLC_FOURCC('C','D','V','C'), CODEC_ID_DVVIDEO,
VIDEO_ES, "DV Video" }, VIDEO_ES, "DV Video" },
{ VLC_FOURCC('c','d','v','c'), CODEC_ID_DVVIDEO,
VIDEO_ES, "DV Video" },
{ VLC_FOURCC('d','v','5','p'), CODEC_ID_DVVIDEO,
VIDEO_ES, "DV Video C Pro 50 PAL" },
{ VLC_FOURCC('d','v','5','n'), CODEC_ID_DVVIDEO,
VIDEO_ES, "DV Video C Pro 50 NTSC" },
{ VLC_FOURCC('A','V','d','v'), CODEC_ID_DVVIDEO,
VIDEO_ES, "AVID DV" },
/* Windows Media Video */ /* Windows Media Video */
{ VLC_FOURCC('W','M','V','1'), CODEC_ID_WMV1, { VLC_FOURCC('W','M','V','1'), CODEC_ID_WMV1,
VIDEO_ES, "Windows Media Video 1" }, VIDEO_ES, "Windows Media Video 1" },
{ VLC_FOURCC('w','m','v','1'), CODEC_ID_WMV1,
VIDEO_ES, "Windows Media Video 1" },
{ VLC_FOURCC('W','M','V','2'), CODEC_ID_WMV2, { VLC_FOURCC('W','M','V','2'), CODEC_ID_WMV2,
VIDEO_ES, "Windows Media Video 2" }, VIDEO_ES, "Windows Media Video 2" },
#if LIBAVCODEC_BUILD >= ((51<<16)+(10<<8)+1) { VLC_FOURCC('w','m','v','2'), CODEC_ID_WMV2,
VIDEO_ES, "Windows Media Video 2" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(10<<8)+1)
{ VLC_FOURCC('W','M','V','3'), CODEC_ID_WMV3, { VLC_FOURCC('W','M','V','3'), CODEC_ID_WMV3,
VIDEO_ES, "Windows Media Video 3" }, VIDEO_ES, "Windows Media Video 3" },
{ VLC_FOURCC('w','m','v','3'), CODEC_ID_WMV3,
VIDEO_ES, "Windows Media Video 3" },
{ VLC_FOURCC('W','V','C','1'), CODEC_ID_VC1, { VLC_FOURCC('W','V','C','1'), CODEC_ID_VC1,
VIDEO_ES, "Windows Media Video VC1" }, VIDEO_ES, "Windows Media Video VC1" },
#endif { VLC_FOURCC('w','v','c','1'), CODEC_ID_VC1,
#if 0 VIDEO_ES, "Windows Media Video VC1" },
/* WMVA is the VC-1 codec before the standardization proces, /* WMVA is the VC-1 codec before the standardization proces,
it is not bitstream compatible and deprecated */ it is not bitstream compatible and deprecated */
{ VLC_FOURCC('W','M','V','A'), CODEC_ID_VC1, { VLC_FOURCC('W','M','V','A'), CODEC_ID_VC1,
VIDEO_ES, "Windows Media Video Advanced Profile" }, VIDEO_ES, "Windows Media Video Advanced Profile" },
#endif #endif
#if LIBAVCODEC_BUILD >= 4683
/* Microsoft Video 1 */ /* Microsoft Video 1 */
{ VLC_FOURCC('M','S','V','C'), CODEC_ID_MSVIDEO1, { VLC_FOURCC('M','S','V','C'), CODEC_ID_MSVIDEO1,
VIDEO_ES, "Microsoft Video 1" }, VIDEO_ES, "Microsoft Video 1" },
...@@ -771,9 +937,12 @@ static struct ...@@ -771,9 +937,12 @@ static struct
/* Microsoft RLE */ /* Microsoft RLE */
{ VLC_FOURCC('m','r','l','e'), CODEC_ID_MSRLE, { VLC_FOURCC('m','r','l','e'), CODEC_ID_MSRLE,
VIDEO_ES, "Microsoft RLE Video" }, VIDEO_ES, "Microsoft RLE Video" },
{ VLC_FOURCC('W','R','L','E'), CODEC_ID_MSRLE,
VIDEO_ES, "Microsoft RLE Video" },
{ VLC_FOURCC(0x1,0x0,0x0,0x0), CODEC_ID_MSRLE, { VLC_FOURCC(0x1,0x0,0x0,0x0), CODEC_ID_MSRLE,
VIDEO_ES, "Microsoft RLE Video" }, VIDEO_ES, "Microsoft RLE Video" },
#endif { VLC_FOURCC(0x2,0x0,0x0,0x0), CODEC_ID_MSRLE,
VIDEO_ES, "Microsoft RLE Video" },
/* Indeo Video Codecs (Quality of this decoder on ppc is not good) */ /* Indeo Video Codecs (Quality of this decoder on ppc is not good) */
{ VLC_FOURCC('I','V','3','1'), CODEC_ID_INDEO3, { VLC_FOURCC('I','V','3','1'), CODEC_ID_INDEO3,
...@@ -785,18 +954,17 @@ static struct ...@@ -785,18 +954,17 @@ static struct
{ VLC_FOURCC('i','v','3','2'), CODEC_ID_INDEO3, { VLC_FOURCC('i','v','3','2'), CODEC_ID_INDEO3,
VIDEO_ES, "Indeo Video v3" }, VIDEO_ES, "Indeo Video v3" },
#if LIBAVCODEC_BUILD >= 4721
{ VLC_FOURCC('t','s','c','c'), CODEC_ID_TSCC,
VIDEO_ES, "TechSmith Camtasia Screen Capture Video" },
#endif
/* Huff YUV */ /* Huff YUV */
{ VLC_FOURCC('H','F','Y','U'), CODEC_ID_HUFFYUV, { VLC_FOURCC('H','F','Y','U'), CODEC_ID_HUFFYUV,
VIDEO_ES, "Huff YUV Video" }, VIDEO_ES, "Huff YUV Video" },
{ VLC_FOURCC('F','F','V','H'), CODEC_ID_FFVHUFF,
VIDEO_ES, "Huff YUV Video" },
/* Creative YUV */ /* Creative YUV */
{ VLC_FOURCC('C','Y','U','V'), CODEC_ID_CYUV, { VLC_FOURCC('C','Y','U','V'), CODEC_ID_CYUV,
VIDEO_ES, "Creative YUV Video" }, VIDEO_ES, "Creative YUV Video" },
{ VLC_FOURCC('c','y','u','v'), CODEC_ID_CYUV,
VIDEO_ES, "Creative YUV Video" },
/* On2 VP3 Video Codecs */ /* On2 VP3 Video Codecs */
{ VLC_FOURCC('V','P','3',' '), CODEC_ID_VP3, { VLC_FOURCC('V','P','3',' '), CODEC_ID_VP3,
...@@ -808,7 +976,8 @@ static struct ...@@ -808,7 +976,8 @@ static struct
{ VLC_FOURCC('v','p','3','1'), CODEC_ID_VP3, { VLC_FOURCC('v','p','3','1'), CODEC_ID_VP3,
VIDEO_ES, "On2's VP3 Video" }, VIDEO_ES, "On2's VP3 Video" },
#if LIBAVCODEC_BUILD >= ((51<<16)+(14<<8)+0) /* On2 VP5, VP6 codecs */
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(14<<8)+0)
{ VLC_FOURCC('V','P','5',' '), CODEC_ID_VP5, { VLC_FOURCC('V','P','5',' '), CODEC_ID_VP5,
VIDEO_ES, "On2's VP5 Video" }, VIDEO_ES, "On2's VP5 Video" },
{ VLC_FOURCC('V','P','5','0'), CODEC_ID_VP5, { VLC_FOURCC('V','P','5','0'), CODEC_ID_VP5,
...@@ -828,11 +997,16 @@ static struct ...@@ -828,11 +997,16 @@ static struct
VIDEO_ES, "On2's VP6.1 Video" }, VIDEO_ES, "On2's VP6.1 Video" },
#endif #endif
#if LIBAVCODEC_BUILD >= 4685 #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(47<<8)+0)
{ VLC_FOURCC('V','P','6','A'), CODEC_ID_VP6A,
VIDEO_ES, "On2's VP6 A Video" },
#endif
/* Xiph.org theora */ /* Xiph.org theora */
{ VLC_FOURCC('t','h','e','o'), CODEC_ID_THEORA, { VLC_FOURCC('t','h','e','o'), CODEC_ID_THEORA,
VIDEO_ES, "Xiph.org's Theora Video" }, VIDEO_ES, "Xiph.org's Theora Video" },
#endif { VLC_FOURCC('T','h','r','a'), CODEC_ID_THEORA,
VIDEO_ES, "Xiph.org's Theora Video" },
#if ( !defined( WORDS_BIGENDIAN ) ) #if ( !defined( WORDS_BIGENDIAN ) )
/* Asus Video (Another thing that doesn't work on PPC) */ /* Asus Video (Another thing that doesn't work on PPC) */
...@@ -857,39 +1031,62 @@ static struct ...@@ -857,39 +1031,62 @@ static struct
/* Real Video */ /* Real Video */
{ VLC_FOURCC('R','V','1','0'), CODEC_ID_RV10, { VLC_FOURCC('R','V','1','0'), CODEC_ID_RV10,
VIDEO_ES, "Real Video 10" }, VIDEO_ES, "Real Video 10" },
{ VLC_FOURCC('r','v','1','0'), CODEC_ID_RV10,
VIDEO_ES, "Real Video 10" },
{ VLC_FOURCC('R','V','1','3'), CODEC_ID_RV10, { VLC_FOURCC('R','V','1','3'), CODEC_ID_RV10,
VIDEO_ES, "Real Video 13" }, VIDEO_ES, "Real Video 13" },
#if LIBAVCODEC_BUILD >= ((51<<16)+(15<<8)+1) { VLC_FOURCC('r','v','1','3'), CODEC_ID_RV10,
VIDEO_ES, "Real Video 13" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(15<<8)+1)
{ VLC_FOURCC('R','V','2','0'), CODEC_ID_RV20, { VLC_FOURCC('R','V','2','0'), CODEC_ID_RV20,
VIDEO_ES, "Real Video 20" }, VIDEO_ES, "Real Video 20" },
#endif #endif
#if LIBAVCODEC_BUILD >= 4684
/* Apple Video */ /* Apple Video */
{ VLC_FOURCC('r','p','z','a'), CODEC_ID_RPZA, { VLC_FOURCC('r','p','z','a'), CODEC_ID_RPZA,
VIDEO_ES, "Apple Video" }, VIDEO_ES, "Apple Video" },
{ VLC_FOURCC('a','z','p','r'), CODEC_ID_RPZA,
VIDEO_ES, "Apple Video" },
{ VLC_FOURCC('s','m','c',' '), CODEC_ID_SMC, { VLC_FOURCC('s','m','c',' '), CODEC_ID_SMC,
VIDEO_ES, "Apple graphics" }, VIDEO_ES, "Apple graphics" },
/* Cinepak */ /* CINEPAK. We have our own decoder with an higher priority,
but this can't harm */
{ VLC_FOURCC('C','V','I','D'), CODEC_ID_CINEPAK,
VIDEO_ES, "Cinepak Video" },
{ VLC_FOURCC('c','v','i','d'), CODEC_ID_CINEPAK, { VLC_FOURCC('c','v','i','d'), CODEC_ID_CINEPAK,
VIDEO_ES, "Cinepak Video" }, VIDEO_ES, "Cinepak Video" },
/* Id Quake II CIN */ /* Screen Capture Video Codecs */
{ VLC_FOURCC('I','D','C','I'), CODEC_ID_IDCIN, { VLC_FOURCC('t','s','c','c'), CODEC_ID_TSCC,
VIDEO_ES, "Id Quake II CIN Video" }, VIDEO_ES, "TechSmith Camtasia Screen Capture Video" },
#endif { VLC_FOURCC('T','S','C','C'), CODEC_ID_TSCC,
VIDEO_ES, "TechSmith Camtasia Screen Capture Video" },
/* 4X Technologies */ { VLC_FOURCC('C','S','C','D'), CODEC_ID_CSCD,
{ VLC_FOURCC('4','x','m','v'), CODEC_ID_4XM, VIDEO_ES, "CamStudio Screen Codec" },
VIDEO_ES, "4X Technologies Video" }, { VLC_FOURCC('c','s','c','d'), CODEC_ID_CSCD,
VIDEO_ES, "CamStudio Screen Codec" },
{ VLC_FOURCC('Z','M','B','V'), CODEC_ID_ZMBV,
VIDEO_ES, "DosBox Capture Codec" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(13<<8)+0)
{ VLC_FOURCC('V','M','n','c'), CODEC_ID_VMNC,
VIDEO_ES, "VMware Video" },
#endif
{ VLC_FOURCC('F','P','S','1'), CODEC_ID_FRAPS,
VIDEO_ES, "FRAPS: Realtime Video Capture" },
{ VLC_FOURCC('f','p','s','1'), CODEC_ID_FRAPS,
VIDEO_ES, "FRAPS: Realtime Video Capture" },
#if LIBAVCODEC_BUILD >= 4694
/* Duck TrueMotion */ /* Duck TrueMotion */
{ VLC_FOURCC('D','U','C','K'), CODEC_ID_TRUEMOTION1, { VLC_FOURCC('D','U','C','K'), CODEC_ID_TRUEMOTION1,
VIDEO_ES, "Duck TrueMotion v1 Video" }, VIDEO_ES, "Duck TrueMotion v1 Video" },
#endif
{ VLC_FOURCC('T','M','2','0'), CODEC_ID_TRUEMOTION2,
VIDEO_ES, "Duck TrueMotion v2.0 Video" },
/* Interplay MVE */ /* Interplay MVE */
{ VLC_FOURCC('i','m','v','e'), CODEC_ID_INTERPLAY_VIDEO, { VLC_FOURCC('i','m','v','e'), CODEC_ID_INTERPLAY_VIDEO,
...@@ -903,19 +1100,16 @@ static struct ...@@ -903,19 +1100,16 @@ static struct
{ VLC_FOURCC('M','D','E','C'), CODEC_ID_MDEC, { VLC_FOURCC('M','D','E','C'), CODEC_ID_MDEC,
VIDEO_ES, "PSX MDEC Video" }, VIDEO_ES, "PSX MDEC Video" },
#if LIBAVCODEC_BUILD >= 4699
/* Sierra VMD */ /* Sierra VMD */
{ VLC_FOURCC('v','m','d','v'), CODEC_ID_VMDVIDEO, { VLC_FOURCC('v','m','d','v'), CODEC_ID_VMDVIDEO,
VIDEO_ES, "Sierra VMD Video" }, VIDEO_ES, "Sierra VMD Video" },
#endif
#if LIBAVCODEC_BUILD >= 4719
/* FFMPEG's SNOW wavelet codec */ /* FFMPEG's SNOW wavelet codec */
{ VLC_FOURCC('S','N','O','W'), CODEC_ID_SNOW, { VLC_FOURCC('S','N','O','W'), CODEC_ID_SNOW,
VIDEO_ES, "FFMpeg SNOW wavelet Video" }, VIDEO_ES, "FFMpeg SNOW wavelet Video" },
#endif { VLC_FOURCC('s','n','o','w'), CODEC_ID_SNOW,
VIDEO_ES, "FFMpeg SNOW wavelet Video" },
#if LIBAVCODEC_BUILD >= 4752
{ VLC_FOURCC('r','l','e',' '), CODEC_ID_QTRLE, { VLC_FOURCC('r','l','e',' '), CODEC_ID_QTRLE,
VIDEO_ES, "Apple QuickTime RLE Video" }, VIDEO_ES, "Apple QuickTime RLE Video" },
...@@ -934,6 +1128,8 @@ static struct ...@@ -934,6 +1128,8 @@ static struct
{ VLC_FOURCC('V','I','X','L'), CODEC_ID_VIXL, { VLC_FOURCC('V','I','X','L'), CODEC_ID_VIXL,
VIDEO_ES, "Miro/Pinnacle VideoXL Video" }, VIDEO_ES, "Miro/Pinnacle VideoXL Video" },
{ VLC_FOURCC('P','I','X','L'), CODEC_ID_VIXL,
VIDEO_ES, "Pinnacle VideoXL Video" },
{ VLC_FOURCC('L','O','C','O'), CODEC_ID_LOCO, { VLC_FOURCC('L','O','C','O'), CODEC_ID_LOCO,
VIDEO_ES, "LOCO Video" }, VIDEO_ES, "LOCO Video" },
...@@ -943,25 +1139,113 @@ static struct ...@@ -943,25 +1139,113 @@ static struct
{ VLC_FOURCC('A','A','S','C'), CODEC_ID_AASC, { VLC_FOURCC('A','A','S','C'), CODEC_ID_AASC,
VIDEO_ES, "Autodesc RLE Video" }, VIDEO_ES, "Autodesc RLE Video" },
#endif
#if LIBAVCODEC_BUILD >= 4753
{ VLC_FOURCC('I','V','2','0'), CODEC_ID_INDEO2, { VLC_FOURCC('I','V','2','0'), CODEC_ID_INDEO2,
VIDEO_ES, "Indeo Video v2" }, VIDEO_ES, "Indeo Video v2" },
{ VLC_FOURCC('R','T','2','1'), CODEC_ID_INDEO2, { VLC_FOURCC('R','T','2','1'), CODEC_ID_INDEO2,
VIDEO_ES, "Indeo Video v2" }, VIDEO_ES, "Indeo Video v2" },
/* Flash Screen Video */
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(11<<8)+0)
{ VLC_FOURCC('F','S','V','1'), CODEC_ID_FLASHSV,
VIDEO_ES, "Flash Screen Video" },
#endif
{ VLC_FOURCC('K','M','V','C'), CODEC_ID_KMVC,
VIDEO_ES, "Karl Morton's Video Codec (Worms)" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(13<<8)+0)
{ VLC_FOURCC('N','U','V','1'), CODEC_ID_NUV,
VIDEO_ES, "Nuppel Video" },
{ VLC_FOURCC('R','J','P','G'), CODEC_ID_NUV,
VIDEO_ES, "Nuppel Video" },
#endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(8<<8)+0)
/* CODEC_ID_SMACKVIDEO */
{ VLC_FOURCC('S','M','K','2'), CODEC_ID_SMACKVIDEO,
VIDEO_ES, "Smacker Video" },
{ VLC_FOURCC('S','M','K','4'), CODEC_ID_SMACKVIDEO,
VIDEO_ES, "Smacker Video" },
#endif
/* Chinese AVS - Untested */
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(8<<8)+0)
{ VLC_FOURCC('C','A','V','S'), CODEC_ID_CAVS,
VIDEO_ES, "Chinese AVS" },
#endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+0)
/* Untested yet */
{ VLC_FOURCC('A','V','d','n'), CODEC_ID_DNXHD,
VIDEO_ES, "DNxHD" },
#endif
{ VLC_FOURCC('8','B','P','S'), CODEC_ID_8BPS,
VIDEO_ES, "8BPS" },
/* Videogames Codecs */
/* Interplay MVE */
{ VLC_FOURCC('i','m','v','e'), CODEC_ID_INTERPLAY_VIDEO,
VIDEO_ES, "Interplay MVE Video" },
{ VLC_FOURCC('I','N','P','V'), CODEC_ID_INTERPLAY_VIDEO,
VIDEO_ES, "Interplay MVE Video" },
/* Id Quake II CIN */
{ VLC_FOURCC('I','D','C','I'), CODEC_ID_IDCIN,
VIDEO_ES, "Id Quake II CIN Video" },
/* 4X Technologies */
{ VLC_FOURCC('4','x','m','v'), CODEC_ID_4XM,
VIDEO_ES, "4X Technologies Video" },
{ VLC_FOURCC('4','X','M','V'), CODEC_ID_4XM,
VIDEO_ES, "4X Technologies Video" },
/* Id RoQ */
{ VLC_FOURCC('R','o','Q','v'), CODEC_ID_ROQ,
VIDEO_ES, "Id RoQ Video" },
/* Sony Playstation MDEC */
{ VLC_FOURCC('M','D','E','C'), CODEC_ID_MDEC,
VIDEO_ES, "PSX MDEC Video" },
/* Sierra VMD */
{ VLC_FOURCC('v','m','d','v'), CODEC_ID_VMDVIDEO,
VIDEO_ES, "Sierra VMD Video" },
{ VLC_FOURCC('V','M','D','V'), CODEC_ID_VMDVIDEO,
VIDEO_ES, "Sierra VMD Video" },
#if 0
/* UNTESTED VideoGames*/
{ VLC_FOURCC('W','C','3','V'), CODEC_ID_XAN_WC3,
VIDEO_ES, "XAN wc3 Video" },
{ VLC_FOURCC('W','C','4','V'), CODEC_ID_XAN_WC4,
VIDEO_ES, "XAN wc4 Video" },
{ VLC_FOURCC('S','T','3','C'), CODEC_ID_TXD,
VIDEO_ES, "Renderware TeXture Dictionary" },
{ VLC_FOURCC('V','Q','A','V'), CODEC_ID_WS_VQA,
VIDEO_ES, "WestWood Vector Quantized Animation" },
{ VLC_FOURCC('T','S','E','Q'), CODEC_ID_TIERTEXSEQVIDEO,
VIDEO_ES, "Tiertex SEQ Video" },
{ VLC_FOURCC('D','X','A','1'), CODEC_ID_DXA,
VIDEO_ES, "Feeble DXA Video" },
{ VLC_FOURCC('D','C','I','V'), CODEC_ID_DSICINVIDEO,
VIDEO_ES, "Delphine CIN Video" },
{ VLC_FOURCC('T','H','P','V'), CODEC_ID_THP,
VIDEO_ES, "THP Video" },
{ VLC_FOURCC('B','E','T','H'), CODEC_ID_BETHSOFTVID,
VIDEO_ES, "THP Video" },
{ VLC_FOURCC('C','9','3','V'), CODEC_ID_C93,
VIDEO_ES, "THP Video" },
#endif #endif
#if LIBAVCODEC_BUILD >= ((51<<16)+(13<<8)+0) #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(13<<8)+0)
{ VLC_FOURCC('V','M','n','c'), CODEC_ID_VMNC, { VLC_FOURCC('V','M','n','c'), CODEC_ID_VMNC,
VIDEO_ES, "VMware Video" }, VIDEO_ES, "VMware Video" },
#endif #endif
/* /*
* Image codecs * Image codecs
*/ */
#if LIBAVCODEC_BUILD >= 4731
{ VLC_FOURCC('p','n','g',' '), CODEC_ID_PNG, { VLC_FOURCC('p','n','g',' '), CODEC_ID_PNG,
VIDEO_ES, "PNG Image" }, VIDEO_ES, "PNG Image" },
{ VLC_FOURCC('p','p','m',' '), CODEC_ID_PPM, { VLC_FOURCC('p','p','m',' '), CODEC_ID_PPM,
...@@ -972,13 +1256,31 @@ static struct ...@@ -972,13 +1256,31 @@ static struct
VIDEO_ES, "PGM YUV Image" }, VIDEO_ES, "PGM YUV Image" },
{ VLC_FOURCC('p','a','m',' '), CODEC_ID_PAM, { VLC_FOURCC('p','a','m',' '), CODEC_ID_PAM,
VIDEO_ES, "PAM Image" }, VIDEO_ES, "PAM Image" },
#endif { VLC_FOURCC('M','J','L','S'), CODEC_ID_JPEGLS,
VIDEO_ES, "PAM Image" },
#if LIBAVCODEC_BUILD >= ((51<<16)+(0<<8)+0) #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(0<<8)+0)
{ VLC_FOURCC('b','m','p',' '), CODEC_ID_BMP, { VLC_FOURCC('b','m','p',' '), CODEC_ID_BMP,
VIDEO_ES, "BMP Image" }, VIDEO_ES, "BMP Image" },
#endif #endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+1)
{ VLC_FOURCC('t','i','f','f'), CODEC_ID_TIFF,
VIDEO_ES, "TIFF Image" },
{ VLC_FOURCC('g','i','f',' '), CODEC_ID_GIF,
VIDEO_ES, "GIF Image" },
{ VLC_FOURCC('t','g','a',' '), CODEC_ID_TARGA,
VIDEO_ES, "Truevision Targa Image" },
{ VLC_FOURCC('m','t','g','a'), CODEC_ID_TARGA,
VIDEO_ES, "Truevision Targa Image" },
{ VLC_FOURCC('M','T','G','A'), CODEC_ID_TARGA,
VIDEO_ES, "Truevision Targa Image" },
#endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+3)
{ VLC_FOURCC('s','g','i',' '), CODEC_ID_SGI,
VIDEO_ES, "SGI Image" },
#endif
/* /*
* Audio Codecs * Audio Codecs
*/ */
...@@ -1007,6 +1309,12 @@ static struct ...@@ -1007,6 +1309,12 @@ static struct
{ VLC_FOURCC('M','A','C','6'), CODEC_ID_MACE6, { VLC_FOURCC('M','A','C','6'), CODEC_ID_MACE6,
AUDIO_ES, "MACE-6 Audio" }, AUDIO_ES, "MACE-6 Audio" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(41<<8)+1)
/* MUSEPACK7 Audio */
{ VLC_FOURCC('M','P','C',' '), CODEC_ID_MUSEPACK7,
AUDIO_ES, "MUSEPACK7 Audio" },
#endif
/* RealAudio 1.0 */ /* RealAudio 1.0 */
{ VLC_FOURCC('1','4','_','4'), CODEC_ID_RA_144, { VLC_FOURCC('1','4','_','4'), CODEC_ID_RA_144,
AUDIO_ES, "RealAudio 1.0" }, AUDIO_ES, "RealAudio 1.0" },
...@@ -1020,6 +1328,12 @@ static struct ...@@ -1020,6 +1328,12 @@ static struct
AUDIO_ES, "MPEG Audio layer 1/2" }, AUDIO_ES, "MPEG Audio layer 1/2" },
{ VLC_FOURCC('m','p','3',' '), CODEC_ID_MP3, { VLC_FOURCC('m','p','3',' '), CODEC_ID_MP3,
AUDIO_ES, "MPEG Audio layer 1/2/3" }, AUDIO_ES, "MPEG Audio layer 1/2/3" },
{ VLC_FOURCC('.','m','p','3'), CODEC_ID_MP3,
AUDIO_ES, "MPEG Audio layer 1/2/3" },
{ VLC_FOURCC('M','P','3',' '), CODEC_ID_MP3,
AUDIO_ES, "MPEG Audio layer 1/2/3" },
{ VLC_FOURCC('L','A','M','E'), CODEC_ID_MP3,
AUDIO_ES, "MPEG Audio layer 1/2/3" },
/* A52 Audio (aka AC3) */ /* A52 Audio (aka AC3) */
{ VLC_FOURCC('a','5','2',' '), CODEC_ID_AC3, { VLC_FOURCC('a','5','2',' '), CODEC_ID_AC3,
...@@ -1027,11 +1341,9 @@ static struct ...@@ -1027,11 +1341,9 @@ static struct
{ VLC_FOURCC('a','5','2','b'), CODEC_ID_AC3, /* VLC specific hack */ { VLC_FOURCC('a','5','2','b'), CODEC_ID_AC3, /* VLC specific hack */
AUDIO_ES, "A52 Audio (aka AC3)" }, AUDIO_ES, "A52 Audio (aka AC3)" },
#if LIBAVCODEC_BUILD >= 4719
/* DTS Audio */ /* DTS Audio */
{ VLC_FOURCC('d','t','s',' '), CODEC_ID_DTS, { VLC_FOURCC('d','t','s',' '), CODEC_ID_DTS,
AUDIO_ES, "DTS Audio" }, AUDIO_ES, "DTS Audio" },
#endif
/* AAC audio */ /* AAC audio */
{ VLC_FOURCC('m','p','4','a'), CODEC_ID_AAC, { VLC_FOURCC('m','p','4','a'), CODEC_ID_AAC,
...@@ -1041,6 +1353,10 @@ static struct ...@@ -1041,6 +1353,10 @@ static struct
{ VLC_FOURCC('4','x','m','a'), CODEC_ID_ADPCM_4XM, { VLC_FOURCC('4','x','m','a'), CODEC_ID_ADPCM_4XM,
AUDIO_ES, "4X Technologies Audio" }, AUDIO_ES, "4X Technologies Audio" },
/* EA ADPCM */
{ VLC_FOURCC('A','D','E','A'), CODEC_ID_ADPCM_EA,
AUDIO_ES, "EA ADPCM Audio" },
/* Interplay DPCM */ /* Interplay DPCM */
{ VLC_FOURCC('i','d','p','c'), CODEC_ID_INTERPLAY_DPCM, { VLC_FOURCC('i','d','p','c'), CODEC_ID_INTERPLAY_DPCM,
AUDIO_ES, "Interplay DPCM Audio" }, AUDIO_ES, "Interplay DPCM Audio" },
...@@ -1049,7 +1365,12 @@ static struct ...@@ -1049,7 +1365,12 @@ static struct
{ VLC_FOURCC('R','o','Q','a'), CODEC_ID_ROQ_DPCM, { VLC_FOURCC('R','o','Q','a'), CODEC_ID_ROQ_DPCM,
AUDIO_ES, "Id RoQ DPCM Audio" }, AUDIO_ES, "Id RoQ DPCM Audio" },
#if LIBAVCODEC_BUILD >= 4685 #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(27<<8)+0)
/* DCIN Audio */
{ VLC_FOURCC('D','C','I','A'), CODEC_ID_DSICINAUDIO,
AUDIO_ES, "Delphine CIN Audio" },
#endif
/* Sony Playstation XA ADPCM */ /* Sony Playstation XA ADPCM */
{ VLC_FOURCC('x','a',' ',' '), CODEC_ID_ADPCM_XA, { VLC_FOURCC('x','a',' ',' '), CODEC_ID_ADPCM_XA,
AUDIO_ES, "PSX XA ADPCM Audio" }, AUDIO_ES, "PSX XA ADPCM Audio" },
...@@ -1057,68 +1378,96 @@ static struct ...@@ -1057,68 +1378,96 @@ static struct
/* ADX ADPCM */ /* ADX ADPCM */
{ VLC_FOURCC('a','d','x',' '), CODEC_ID_ADPCM_ADX, { VLC_FOURCC('a','d','x',' '), CODEC_ID_ADPCM_ADX,
AUDIO_ES, "ADX ADPCM Audio" }, AUDIO_ES, "ADX ADPCM Audio" },
#endif
#if LIBAVCODEC_BUILD >= 4699 /* Westwood ADPCM */
{ VLC_FOURCC('A','I','W','S'), CODEC_ID_ADPCM_IMA_WS,
AUDIO_ES, "Westwood IMA ADPCM audio" },
/* Sierra VMD */ /* Sierra VMD */
{ VLC_FOURCC('v','m','d','a'), CODEC_ID_VMDAUDIO, { VLC_FOURCC('v','m','d','a'), CODEC_ID_VMDAUDIO,
AUDIO_ES, "Sierra VMD Audio" }, AUDIO_ES, "Sierra VMD Audio" },
#endif
#if LIBAVCODEC_BUILD >= 4706
/* G.726 ADPCM */ /* G.726 ADPCM */
{ VLC_FOURCC('g','7','2','6'), CODEC_ID_ADPCM_G726, { VLC_FOURCC('g','7','2','6'), CODEC_ID_ADPCM_G726,
AUDIO_ES, "G.726 ADPCM Audio" }, AUDIO_ES, "G.726 ADPCM Audio" },
#endif
#if LIBAVCODEC_BUILD >= 4683
/* AMR */ /* AMR */
{ VLC_FOURCC('s','a','m','r'), CODEC_ID_AMR_NB, { VLC_FOURCC('s','a','m','r'), CODEC_ID_AMR_NB,
AUDIO_ES, "AMR narrow band" }, AUDIO_ES, "AMR narrow band" },
{ VLC_FOURCC('s','a','w','b'), CODEC_ID_AMR_WB, { VLC_FOURCC('s','a','w','b'), CODEC_ID_AMR_WB,
AUDIO_ES, "AMR wide band" }, AUDIO_ES, "AMR wide band" },
#endif
#if LIBAVCODEC_BUILD >= 4703
/* FLAC */ /* FLAC */
{ VLC_FOURCC('f','l','a','c'), CODEC_ID_FLAC, { VLC_FOURCC('f','l','a','c'), CODEC_ID_FLAC,
AUDIO_ES, "FLAC (Free Lossless Audio Codec)" }, AUDIO_ES, "FLAC (Free Lossless Audio Codec)" },
#endif
#if LIBAVCODEC_BUILD >= 4745
/* ALAC */ /* ALAC */
{ VLC_FOURCC('a','l','a','c'), CODEC_ID_ALAC, { VLC_FOURCC('a','l','a','c'), CODEC_ID_ALAC,
AUDIO_ES, "Apple Lossless Audio Codec" }, AUDIO_ES, "Apple Lossless Audio Codec" },
#endif
#if LIBAVCODEC_BUILD >= ((50<<16)+(0<<8)+1) #if LIBAVCODEC_VERSION_INT >= ((50<<16)+(0<<8)+1)
/* QDM2 */ /* QDM2 */
{ VLC_FOURCC('Q','D','M','2'), CODEC_ID_QDM2, { VLC_FOURCC('Q','D','M','2'), CODEC_ID_QDM2,
AUDIO_ES, "QDM2 Audio" }, AUDIO_ES, "QDM2 Audio" },
#endif #endif
#if LIBAVCODEC_BUILD >= ((51<<16)+(0<<8)+0) #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(0<<8)+0)
/* COOK */ /* COOK */
{ VLC_FOURCC('c','o','o','k'), CODEC_ID_COOK, { VLC_FOURCC('c','o','o','k'), CODEC_ID_COOK,
AUDIO_ES, "Cook Audio" }, AUDIO_ES, "Cook Audio" },
#endif #endif
#if LIBAVCODEC_BUILD >= ((51<<16)+(4<<8)+0) #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(4<<8)+0)
/* TTA: The Lossless True Audio */ /* TTA: The Lossless True Audio */
{ VLC_FOURCC('T','T','A','1'), CODEC_ID_TTA, { VLC_FOURCC('T','T','A','1'), CODEC_ID_TTA,
AUDIO_ES, "The Lossless True Audio" }, AUDIO_ES, "The Lossless True Audio" },
#endif #endif
#if LIBAVCODEC_BUILD >= ((51<<16)+(8<<8)+0) #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(8<<8)+0)
/* Shorten */ /* Shorten */
{ VLC_FOURCC('s','h','n',' '), CODEC_ID_SHORTEN, { VLC_FOURCC('s','h','n',' '), CODEC_ID_SHORTEN,
AUDIO_ES, "Shorten Lossless Audio" }, AUDIO_ES, "Shorten Lossless Audio" },
{ VLC_FOURCC('s','h','r','n'), CODEC_ID_SHORTEN,
AUDIO_ES, "Shorten Lossless Audio" },
#endif #endif
#if LIBAVCODEC_BUILD >= ((51<<16)+(16<<8)+0) #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(16<<8)+0)
/* WavPack */ { VLC_FOURCC('w','v','p','k'), CODEC_ID_WAVPACK,
AUDIO_ES, "WavPack" },
{ VLC_FOURCC('W','V','P','K'), CODEC_ID_WAVPACK, { VLC_FOURCC('W','V','P','K'), CODEC_ID_WAVPACK,
AUDIO_ES, "WavPack Lossless Audio" }, AUDIO_ES, "WavPack" },
#endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(34<<8)+0)
{ VLC_FOURCC('g','s','m',' '), CODEC_ID_GSM,
AUDIO_ES, "GSM Audio" },
{ VLC_FOURCC('g','s','m','s'), CODEC_ID_GSM_MS,
AUDIO_ES, "Microsoft GSM Audio" },
#endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+4)
{ VLC_FOURCC('a','t','r','c'), CODEC_ID_ATRAC3,
AUDIO_ES, "atrac 3" },
{ VLC_FOURCC(0x70,0x2,0x0,0x0), CODEC_ID_ATRAC3,
AUDIO_ES, "atrac 3" },
#endif
{ VLC_FOURCC('S','O','N','C'), CODEC_ID_SONIC,
AUDIO_ES, "Sonic" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(34<<8)+0)
{ VLC_FOURCC(0x1,0x4,0x0,0x0), CODEC_ID_IMC,
AUDIO_ES, "IMC" },
#endif
{ VLC_FOURCC(0x22,0x0,0x0,0x0), CODEC_ID_TRUESPEECH,
AUDIO_ES, "TrueSpeech" },
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(46<<8)+0)
{ VLC_FOURCC('N','E','L','L'), CODEC_ID_NELLYMOSER,
AUDIO_ES, "NellyMoser ASAO" },
#endif
#if LIBAVCODEC_VERSION_INT >= ((51<<16)+(44<<8)+0)
{ VLC_FOURCC('A','P','E',' '), CODEC_ID_APE,
AUDIO_ES, "Monkey's Audio" },
#endif #endif
/* PCM */ /* PCM */
...@@ -1154,8 +1503,10 @@ static struct ...@@ -1154,8 +1503,10 @@ static struct
AUDIO_ES, "PCM ALAW" }, AUDIO_ES, "PCM ALAW" },
{ VLC_FOURCC('u','l','a','w'), CODEC_ID_PCM_MULAW, { VLC_FOURCC('u','l','a','w'), CODEC_ID_PCM_MULAW,
AUDIO_ES, "PCM ULAW" }, AUDIO_ES, "PCM ULAW" },
{ VLC_FOURCC('d','a','u','d'), CODEC_ID_PCM_S24DAUD,
AUDIO_ES, "PCM ULAW" },
{0} { 0, 0, 0, 0 }
}; };
int E_(GetFfmpegCodec)( vlc_fourcc_t i_fourcc, int *pi_cat, int E_(GetFfmpegCodec)( vlc_fourcc_t i_fourcc, int *pi_cat,
...@@ -1169,7 +1520,7 @@ int E_(GetFfmpegCodec)( vlc_fourcc_t i_fourcc, int *pi_cat, ...@@ -1169,7 +1520,7 @@ int E_(GetFfmpegCodec)( vlc_fourcc_t i_fourcc, int *pi_cat,
{ {
if( pi_cat ) *pi_cat = codecs_table[i].i_cat; if( pi_cat ) *pi_cat = codecs_table[i].i_cat;
if( pi_ffmpeg_codec ) *pi_ffmpeg_codec = codecs_table[i].i_codec; if( pi_ffmpeg_codec ) *pi_ffmpeg_codec = codecs_table[i].i_codec;
if( ppsz_name ) *ppsz_name = codecs_table[i].psz_name; if( ppsz_name ) *ppsz_name = (char *) codecs_table[i].psz_name;
return VLC_TRUE; return VLC_TRUE;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ffmpeg.h: decoder using the ffmpeg library * ffmpeg.h: decoder using the ffmpeg library
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 the VideoLAN team * Copyright (C) 2001 the VideoLAN team
* $Id$ * $Id: f2ea5ef3a73821145591172cfb79c3d8813f66ad $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -23,12 +23,6 @@ ...@@ -23,12 +23,6 @@
#include "codecs.h" /* BITMAPINFOHEADER */ #include "codecs.h" /* BITMAPINFOHEADER */
#if LIBAVCODEC_BUILD >= 4663
# define LIBAVCODEC_PP
#else
# undef LIBAVCODEC_PP
#endif
struct picture_t; struct picture_t;
struct AVFrame; struct AVFrame;
struct AVCodecContext; struct AVCodecContext;
...@@ -78,6 +72,8 @@ int E_(OpenCropPadd)( vlc_object_t * ); ...@@ -78,6 +72,8 @@ int E_(OpenCropPadd)( vlc_object_t * );
void E_(CloseFilter)( vlc_object_t * ); void E_(CloseFilter)( vlc_object_t * );
int E_(OpenDeinterlace)( vlc_object_t * ); int E_(OpenDeinterlace)( vlc_object_t * );
void E_(CloseDeinterlace)( vlc_object_t * ); void E_(CloseDeinterlace)( vlc_object_t * );
int E_(OpenScaler)( vlc_object_t * );
void E_(CloseScaler)( vlc_object_t * );
/* Postprocessing module */ /* Postprocessing module */
void *E_(OpenPostproc)( decoder_t *, vlc_bool_t * ); void *E_(OpenPostproc)( decoder_t *, vlc_bool_t * );
...@@ -297,3 +293,6 @@ N_("<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]... ...@@ -297,3 +293,6 @@ N_("<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]...
#define ENC_CHROMA_ELIM_LONGTEXT N_( "Eliminates chrominance blocks when " \ #define ENC_CHROMA_ELIM_LONGTEXT N_( "Eliminates chrominance blocks when " \
"the PSNR isn't much changed (default: 0.0). The H264 specification " \ "the PSNR isn't much changed (default: 0.0). The H264 specification " \
"recommends 7." ) "recommends 7." )
#define SCALEMODE_TEXT N_("Scaling mode")
#define SCALEMODE_LONGTEXT N_("Scaling mode to use.")
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* postprocess.c: video postprocessing using the ffmpeg library * postprocess.c: video postprocessing using the ffmpeg library
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 the VideoLAN team * Copyright (C) 1999-2001 the VideoLAN team
* $Id$ * $Id: 2c9471842b31cdcdd4bfad33cff706829f7d72e9 $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Gildas Bazin <gbazin@netcourrier.com> * Gildas Bazin <gbazin@netcourrier.com>
...@@ -35,8 +35,6 @@ ...@@ -35,8 +35,6 @@
#include "ffmpeg.h" #include "ffmpeg.h"
#ifdef LIBAVCODEC_PP
#ifdef HAVE_POSTPROC_POSTPROCESS_H #ifdef HAVE_POSTPROC_POSTPROCESS_H
# include <postproc/postprocess.h> # include <postproc/postprocess.h>
#else #else
...@@ -265,5 +263,3 @@ static int PPQCallback( vlc_object_t *p_this, char const *psz_cmd, ...@@ -265,5 +263,3 @@ static int PPQCallback( vlc_object_t *p_this, char const *psz_cmd,
return VLC_SUCCESS; return VLC_SUCCESS;
} }
#endif /* LIBAVCODEC_PP */
/*****************************************************************************
* filter.c: video scaling module using the swscale library
*****************************************************************************
* Copyright (C) 2003 the VideoLAN team
* $Id$
*
* Author: Gildas Bazin <gbazin@videolan.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
* (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.
*
* 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.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc_codec.h>
#include <vlc_filter.h>
#include <vlc_cpu.h>
/* ffmpeg headers */
#ifdef HAVE_FFMPEG_AVCODEC_H
# include <ffmpeg/avcodec.h>
#else
# include <avcodec.h>
#endif
#ifdef HAVE_FFMPEG_SWSCALE_H
# include <ffmpeg/swscale.h>
#elif defined(HAVE_LIBSWSCALE_TREE)
# include <swscale.h>
#endif
#include "ffmpeg.h"
/* Version checking */
#if ( (defined(HAVE_FFMPEG_SWSCALE_H) || defined(HAVE_LIBSWSCALE_TREE)) && (LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0)) )
/*****************************************************************************
* filter_sys_t : filter descriptor
*****************************************************************************/
struct filter_sys_t
{
struct SwsContext *ctx;
SwsFilter *p_src_filter;
SwsFilter *p_dst_filter;
int i_cpu_mask, i_sws_flags;
es_format_t fmt_in;
es_format_t fmt_out;
};
/****************************************************************************
* Local prototypes
****************************************************************************/
void *( *swscale_fast_memcpy )( void *, const void *, size_t );
static picture_t *Filter( filter_t *, picture_t * );
static int CheckInit( filter_t * );
static const char *ppsz_mode_descriptions[] =
{ N_("Fast bilinear"), N_("Bilinear"), N_("Bicubic (good quality)"),
N_("Experimental"), N_("Nearest neighbour (bad quality)"),
N_("Area"), N_("Luma bicubic / chroma bilinear"), N_("Gauss"),
N_("SincR"), N_("Lanczos"), N_("Bicubic spline") };
/*****************************************************************************
* OpenScaler: probe the filter and return score
*****************************************************************************/
int E_(OpenScaler)( vlc_object_t *p_this )
{
filter_t *p_filter = (filter_t*)p_this;
filter_sys_t *p_sys;
vlc_value_t val;
int i_fmt_in, i_fmt_out;
unsigned int i_cpu;
int i_sws_mode;
float sws_lum_gblur = 0.0, sws_chr_gblur = 0.0;
int sws_chr_vshift = 0, sws_chr_hshift = 0;
float sws_chr_sharpen = 0.0, sws_lum_sharpen = 0.0;
/* Supported Input formats: YV12, I420/IYUV, YUY2, UYVY, BGR32, BGR24,
* BGR16, BGR15, RGB32, RGB24, Y8/Y800, YVU9/IF09 */
i_fmt_in = E_(GetFfmpegChroma)(p_filter->fmt_in.video.i_chroma);
/* Supported output formats: YV12, I420/IYUV, YUY2, UYVY,
* {BGR,RGB}{1,4,8,15,16,24,32}, Y8/Y800, YVU9/IF09 */
i_fmt_out = E_(GetFfmpegChroma)(p_filter->fmt_out.video.i_chroma);
if( ( i_fmt_in < 0 ) || ( i_fmt_out < 0 ) )
{
return VLC_EGENERIC;
}
/* Allocate the memory needed to store the decoder's structure */
if( ( p_filter->p_sys = p_sys =
(filter_sys_t *)malloc(sizeof(filter_sys_t)) ) == NULL )
{
msg_Err( p_filter, "out of memory" );
return VLC_EGENERIC;
}
swscale_fast_memcpy = p_filter->p_vlc->pf_memcpy;
/* Set CPU capabilities */
i_cpu = CPUCapabilities();
p_sys->i_cpu_mask = 0;
if( i_cpu & CPU_CAPABILITY_MMX )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_MMX;
}
if( i_cpu & CPU_CAPABILITY_MMXEXT )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_MMX2;
}
if( i_cpu & CPU_CAPABILITY_3DNOW )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_3DNOW;
}
if( i_cpu & CPU_CAPABILITY_ALTIVEC )
{
p_sys->i_cpu_mask |= SWS_CPU_CAPS_ALTIVEC;
}
var_Create( p_filter, "swscale-mode", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
var_Get( p_filter, "swscale-mode", &val );
i_sws_mode = val.i_int;
switch( i_sws_mode )
{
case 0: p_sys->i_sws_flags = SWS_FAST_BILINEAR; break;
case 1: p_sys->i_sws_flags = SWS_BILINEAR; break;
case 2: p_sys->i_sws_flags = SWS_BICUBIC; break;
case 3: p_sys->i_sws_flags = SWS_X; break;
case 4: p_sys->i_sws_flags = SWS_POINT; break;
case 5: p_sys->i_sws_flags = SWS_AREA; break;
case 6: p_sys->i_sws_flags = SWS_BICUBLIN; break;
case 7: p_sys->i_sws_flags = SWS_GAUSS; break;
case 8: p_sys->i_sws_flags = SWS_SINC; break;
case 9: p_sys->i_sws_flags = SWS_LANCZOS; break;
case 10: p_sys->i_sws_flags = SWS_SPLINE; break;
default: p_sys->i_sws_flags = SWS_FAST_BILINEAR; i_sws_mode = 0; break;
}
p_sys->p_src_filter = NULL;
p_sys->p_dst_filter = NULL;
p_sys->p_src_filter =
sws_getDefaultFilter( sws_lum_gblur, sws_chr_gblur,
sws_lum_sharpen, sws_chr_sharpen,
sws_chr_hshift, sws_chr_vshift, 0 );
/* Misc init */
p_sys->ctx = NULL;
p_filter->pf_video_filter = Filter;
es_format_Init( &p_sys->fmt_in, 0, 0 );
es_format_Init( &p_sys->fmt_out, 0, 0 );
if( CheckInit( p_filter ) != VLC_SUCCESS )
{
if( p_sys->p_src_filter ) sws_freeFilter( p_sys->p_src_filter );
free( p_sys );
return VLC_EGENERIC;
}
msg_Dbg( p_filter, "%ix%i chroma: %4.4s -> %ix%i chroma: %4.4s",
p_filter->fmt_in.video.i_width, p_filter->fmt_in.video.i_height,
(char *)&p_filter->fmt_in.video.i_chroma,
p_filter->fmt_out.video.i_width, p_filter->fmt_out.video.i_height,
(char *)&p_filter->fmt_out.video.i_chroma );
if( p_filter->fmt_in.video.i_width != p_filter->fmt_out.video.i_width ||
p_filter->fmt_in.video.i_height != p_filter->fmt_out.video.i_height )
{
msg_Dbg( p_filter, "scaling mode: %s",
ppsz_mode_descriptions[i_sws_mode] );
}
return VLC_SUCCESS;
}
/*****************************************************************************
* CloseFilter: clean up the filter
*****************************************************************************/
void E_(CloseScaler)( vlc_object_t *p_this )
{
filter_t *p_filter = (filter_t*)p_this;
filter_sys_t *p_sys = p_filter->p_sys;
if( p_sys->ctx ) sws_freeContext( p_sys->ctx );
if( p_sys->p_src_filter ) sws_freeFilter( p_sys->p_src_filter );
free( p_sys );
}
/*****************************************************************************
* CheckInit: Initialise filter when necessary
*****************************************************************************/
static int CheckInit( filter_t *p_filter )
{
filter_sys_t *p_sys = p_filter->p_sys;
if( ( p_filter->fmt_in.video.i_width != p_sys->fmt_in.video.i_width ) ||
( p_filter->fmt_in.video.i_height != p_sys->fmt_in.video.i_height ) ||
( p_filter->fmt_out.video.i_width != p_sys->fmt_out.video.i_width ) ||
( p_filter->fmt_out.video.i_height != p_sys->fmt_out.video.i_height ) )
{
int i_fmt_in, i_fmt_out;
i_fmt_in = E_(GetFfmpegChroma)(p_filter->fmt_in.video.i_chroma);
i_fmt_out = E_(GetFfmpegChroma)(p_filter->fmt_out.video.i_chroma);
if( (i_fmt_in < 0 ) || ( i_fmt_out < 0 ) )
{
msg_Err( p_filter, "format not supported" );
return VLC_EGENERIC;
}
if( p_sys->ctx ) sws_freeContext( p_sys->ctx );
p_sys->ctx =
sws_getContext( p_filter->fmt_in.video.i_width,
p_filter->fmt_in.video.i_height, i_fmt_in,
p_filter->fmt_out.video.i_width,
p_filter->fmt_out.video.i_height, i_fmt_out,
p_sys->i_sws_flags | p_sys->i_cpu_mask,
p_sys->p_src_filter, p_sys->p_dst_filter, 0 );
if( !p_sys->ctx )
{
msg_Err( p_filter, "could not init SwScaler" );
return VLC_EGENERIC;
}
p_sys->fmt_in = p_filter->fmt_in;
p_sys->fmt_out = p_filter->fmt_out;
}
return VLC_SUCCESS;
}
/****************************************************************************
* Filter: the whole thing
****************************************************************************
* This function is called just after the thread is launched.
****************************************************************************/
static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
{
filter_sys_t *p_sys = p_filter->p_sys;
uint8_t *src[3]; int src_stride[3];
uint8_t *dst[3]; int dst_stride[3];
picture_t *p_pic_dst;
int i_plane;
int i_nb_planes = p_pic->i_planes;
/* Check if format properties changed */
if( CheckInit( p_filter ) != VLC_SUCCESS ) return NULL;
/* Request output picture */
p_pic_dst = p_filter->pf_vout_buffer_new( p_filter );
if( !p_pic_dst )
{
msg_Warn( p_filter, "can't get output picture" );
return NULL;
}
if( p_filter->fmt_out.video.i_chroma == VLC_FOURCC('Y','U','V','A') )
{
i_nb_planes = 3;
memset( p_pic_dst->p[3].p_pixels, 0xff, p_filter->fmt_out.video.i_height
* p_pic_dst->p[3].i_pitch );
}
for( i_plane = 0; i_plane < __MIN(3, p_pic->i_planes); i_plane++ )
{
src[i_plane] = p_pic->p[i_plane].p_pixels;
src_stride[i_plane] = p_pic->p[i_plane].i_pitch;
}
for( i_plane = 0; i_plane < __MIN(3, i_nb_planes); i_plane++ )
{
dst[i_plane] = p_pic_dst->p[i_plane].p_pixels;
dst_stride[i_plane] = p_pic_dst->p[i_plane].i_pitch;
}
#if LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0)
sws_scale( p_sys->ctx, src, src_stride,
0, p_filter->fmt_in.video.i_height,
dst, dst_stride );
#else
sws_scale_ordered( p_sys->ctx, src, src_stride,
0, p_filter->fmt_in.video.i_height,
dst, dst_stride );
#endif
p_pic_dst->date = p_pic->date;
p_pic_dst->b_force = p_pic->b_force;
p_pic_dst->i_nb_fields = p_pic->i_nb_fields;
p_pic_dst->b_progressive = p_pic->b_progressive;
p_pic_dst->b_top_field_first = p_pic->b_top_field_first;
p_pic->pf_release( p_pic );
return p_pic_dst;
}
#else /* LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0) */
int E_(OpenScaler)( vlc_object_t *p_this )
{
return VLC_EGENERIC;
}
void E_(CloseScaler)( vlc_object_t *p_this )
{
}
#endif /* LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0) */
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* video.c: video decoder using the ffmpeg library * video.c: video decoder using the ffmpeg library
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 the VideoLAN team * Copyright (C) 1999-2001 the VideoLAN team
* $Id$ * $Id: 5376a0d2d02a3ecdf7cb2c4c200d5749e803182b $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Gildas Bazin <gbazin@videolan.org> * Gildas Bazin <gbazin@videolan.org>
...@@ -130,6 +130,8 @@ static uint32_t ffmpeg_PixFmtToChroma( int i_ff_chroma ) ...@@ -130,6 +130,8 @@ static uint32_t ffmpeg_PixFmtToChroma( int i_ff_chroma )
return VLC_FOURCC('R','V','2','4'); return VLC_FOURCC('R','V','2','4');
case PIX_FMT_RGBA32: case PIX_FMT_RGBA32:
return VLC_FOURCC('R','V','3','2'); return VLC_FOURCC('R','V','3','2');
case PIX_FMT_RGBA:
return VLC_FOURCC('R','G','B','A');
case PIX_FMT_GRAY8: case PIX_FMT_GRAY8:
return VLC_FOURCC('G','R','E','Y'); return VLC_FOURCC('G','R','E','Y');
...@@ -170,16 +172,12 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec, ...@@ -170,16 +172,12 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec,
} }
else else
{ {
#if LIBAVCODEC_BUILD >= 4687
p_dec->fmt_out.video.i_aspect = p_dec->fmt_out.video.i_aspect =
VOUT_ASPECT_FACTOR * ( av_q2d(p_context->sample_aspect_ratio) * VOUT_ASPECT_FACTOR * ( av_q2d(p_context->sample_aspect_ratio) *
p_context->width / p_context->height ); p_context->width / p_context->height );
p_dec->fmt_out.video.i_sar_num = p_context->sample_aspect_ratio.num; p_dec->fmt_out.video.i_sar_num = p_context->sample_aspect_ratio.num;
p_dec->fmt_out.video.i_sar_den = p_context->sample_aspect_ratio.den; p_dec->fmt_out.video.i_sar_den = p_context->sample_aspect_ratio.den;
#else
p_dec->fmt_out.video.i_aspect =
VOUT_ASPECT_FACTOR * p_context->aspect_ratio;
#endif
if( p_dec->fmt_out.video.i_aspect == 0 ) if( p_dec->fmt_out.video.i_aspect == 0 )
{ {
p_dec->fmt_out.video.i_aspect = p_dec->fmt_out.video.i_aspect =
...@@ -195,31 +193,20 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec, ...@@ -195,31 +193,20 @@ static inline picture_t *ffmpeg_NewPictBuf( decoder_t *p_dec,
p_dec->fmt_out.video.i_frame_rate_base = p_dec->fmt_out.video.i_frame_rate_base =
p_dec->fmt_in.video.i_frame_rate_base; p_dec->fmt_in.video.i_frame_rate_base;
} }
else else if( p_context->time_base.num > 0 && p_context->time_base.den > 0 )
#if LIBAVCODEC_BUILD >= 4754
if( p_context->time_base.num > 0 && p_context->time_base.den > 0 )
{ {
p_dec->fmt_out.video.i_frame_rate = p_context->time_base.den; p_dec->fmt_out.video.i_frame_rate = p_context->time_base.den;
p_dec->fmt_out.video.i_frame_rate_base = p_context->time_base.num; p_dec->fmt_out.video.i_frame_rate_base = p_context->time_base.num;
} }
#else
if( p_context->frame_rate > 0 && p_context->frame_rate_base > 0 )
{
p_dec->fmt_out.video.i_frame_rate = p_context->frame_rate;
p_dec->fmt_out.video.i_frame_rate_base = p_context->frame_rate_base;
}
#endif
p_pic = p_dec->pf_vout_buffer_new( p_dec ); p_pic = p_dec->pf_vout_buffer_new( p_dec );
#ifdef LIBAVCODEC_PP
if( p_sys->p_pp && p_sys->b_pp && !p_sys->b_pp_init ) if( p_sys->p_pp && p_sys->b_pp && !p_sys->b_pp_init )
{ {
E_(InitPostproc)( p_dec, p_sys->p_pp, p_context->width, E_(InitPostproc)( p_dec, p_sys->p_pp, p_context->width,
p_context->height, p_context->pix_fmt ); p_context->height, p_context->pix_fmt );
p_sys->b_pp_init = VLC_TRUE; p_sys->b_pp_init = VLC_TRUE;
} }
#endif
return p_pic; return p_pic;
} }
...@@ -271,25 +258,19 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -271,25 +258,19 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context,
var_Create( p_dec, "ffmpeg-vismv", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_dec, "ffmpeg-vismv", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Get( p_dec, "ffmpeg-vismv", &val ); var_Get( p_dec, "ffmpeg-vismv", &val );
#if LIBAVCODEC_BUILD >= 4698
if( val.i_int ) p_sys->p_context->debug_mv = val.i_int; if( val.i_int ) p_sys->p_context->debug_mv = val.i_int;
#endif
var_Create( p_dec, "ffmpeg-lowres", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_dec, "ffmpeg-lowres", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Get( p_dec, "ffmpeg-lowres", &val ); var_Get( p_dec, "ffmpeg-lowres", &val );
#if LIBAVCODEC_BUILD >= 4723
if( val.i_int > 0 && val.i_int <= 2 ) p_sys->p_context->lowres = val.i_int; if( val.i_int > 0 && val.i_int <= 2 ) p_sys->p_context->lowres = val.i_int;
#endif
var_Create( p_dec, "ffmpeg-skiploopfilter", var_Create( p_dec, "ffmpeg-skiploopfilter",
VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Get( p_dec, "ffmpeg-skiploopfilter", &val ); var_Get( p_dec, "ffmpeg-skiploopfilter", &val );
#if LIBAVCODEC_BUILD >= 4758
if( val.i_int > 0 ) p_sys->p_context->skip_loop_filter = AVDISCARD_NONREF; if( val.i_int > 0 ) p_sys->p_context->skip_loop_filter = AVDISCARD_NONREF;
if( val.i_int > 1 ) p_sys->p_context->skip_loop_filter = AVDISCARD_BIDIR; if( val.i_int > 1 ) p_sys->p_context->skip_loop_filter = AVDISCARD_BIDIR;
if( val.i_int > 2 ) p_sys->p_context->skip_loop_filter = AVDISCARD_NONKEY; if( val.i_int > 2 ) p_sys->p_context->skip_loop_filter = AVDISCARD_NONKEY;
if( val.i_int > 3 ) p_sys->p_context->skip_loop_filter = AVDISCARD_ALL; if( val.i_int > 3 ) p_sys->p_context->skip_loop_filter = AVDISCARD_ALL;
#endif
/* ***** ffmpeg frame skipping ***** */ /* ***** ffmpeg frame skipping ***** */
var_Create( p_dec, "ffmpeg-hurry-up", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_dec, "ffmpeg-hurry-up", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
...@@ -305,22 +286,16 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -305,22 +286,16 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context,
p_sys->p_context->pix_fmt != PIX_FMT_YUV422P && p_sys->p_context->pix_fmt != PIX_FMT_YUV422P &&
/* H264 uses too many reference frames */ /* H264 uses too many reference frames */
p_sys->i_codec_id != CODEC_ID_H264 && p_sys->i_codec_id != CODEC_ID_H264 &&
#if LIBAVCODEC_BUILD >= 4698
!p_sys->p_context->debug_mv ) !p_sys->p_context->debug_mv )
#else
1 )
#endif
{ {
/* Some codecs set pix_fmt only after the 1st frame has been decoded, /* Some codecs set pix_fmt only after the 1st frame has been decoded,
* so we need to do another check in ffmpeg_GetFrameBuf() */ * so we need to do another check in ffmpeg_GetFrameBuf() */
p_sys->b_direct_rendering = 1; p_sys->b_direct_rendering = 1;
} }
#ifdef LIBAVCODEC_PP
p_sys->p_pp = NULL; p_sys->p_pp = NULL;
p_sys->b_pp = p_sys->b_pp_async = p_sys->b_pp_init = VLC_FALSE; p_sys->b_pp = p_sys->b_pp_async = p_sys->b_pp_init = VLC_FALSE;
p_sys->p_pp = E_(OpenPostproc)( p_dec, &p_sys->b_pp_async ); p_sys->p_pp = E_(OpenPostproc)( p_dec, &p_sys->b_pp_async );
#endif
/* ffmpeg doesn't properly release old pictures when frames are skipped */ /* ffmpeg doesn't properly release old pictures when frames are skipped */
//if( p_sys->b_hurry_up ) p_sys->b_direct_rendering = 0; //if( p_sys->b_hurry_up ) p_sys->b_direct_rendering = 0;
...@@ -354,13 +329,11 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -354,13 +329,11 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context,
p_dec->fmt_out.i_codec = ffmpeg_PixFmtToChroma( p_context->pix_fmt ); p_dec->fmt_out.i_codec = ffmpeg_PixFmtToChroma( p_context->pix_fmt );
/* Setup palette */ /* Setup palette */
#if LIBAVCODEC_BUILD >= 4688
if( p_dec->fmt_in.video.p_palette ) if( p_dec->fmt_in.video.p_palette )
p_sys->p_context->palctrl = p_sys->p_context->palctrl =
(AVPaletteControl *)p_dec->fmt_in.video.p_palette; (AVPaletteControl *)p_dec->fmt_in.video.p_palette;
else else
p_sys->p_context->palctrl = &palette_control; p_sys->p_context->palctrl = &palette_control;
#endif
/* ***** Open the codec ***** */ /* ***** Open the codec ***** */
vlc_mutex_lock( lockval.p_address ); vlc_mutex_lock( lockval.p_address );
...@@ -374,7 +347,6 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -374,7 +347,6 @@ int E_(InitVideoDec)( decoder_t *p_dec, AVCodecContext *p_context,
vlc_mutex_unlock( lockval.p_address ); vlc_mutex_unlock( lockval.p_address );
msg_Dbg( p_dec, "ffmpeg codec (%s) started", p_sys->psz_namecodec ); msg_Dbg( p_dec, "ffmpeg codec (%s) started", p_sys->psz_namecodec );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -602,7 +574,6 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block ) ...@@ -602,7 +574,6 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block )
if( !p_dec->fmt_in.video.i_aspect ) if( !p_dec->fmt_in.video.i_aspect )
{ {
/* Fetch again the aspect ratio in case it changed */ /* Fetch again the aspect ratio in case it changed */
#if LIBAVCODEC_BUILD >= 4687
p_dec->fmt_out.video.i_aspect = p_dec->fmt_out.video.i_aspect =
VOUT_ASPECT_FACTOR VOUT_ASPECT_FACTOR
* ( av_q2d(p_sys->p_context->sample_aspect_ratio) * ( av_q2d(p_sys->p_context->sample_aspect_ratio)
...@@ -611,10 +582,7 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block ) ...@@ -611,10 +582,7 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block )
= p_sys->p_context->sample_aspect_ratio.num; = p_sys->p_context->sample_aspect_ratio.num;
p_dec->fmt_out.video.i_sar_den p_dec->fmt_out.video.i_sar_den
= p_sys->p_context->sample_aspect_ratio.den; = p_sys->p_context->sample_aspect_ratio.den;
#else
p_dec->fmt_out.video.i_aspect =
VOUT_ASPECT_FACTOR * p_sys->p_context->aspect_ratio;
#endif
if( p_dec->fmt_out.video.i_aspect == 0 ) if( p_dec->fmt_out.video.i_aspect == 0 )
{ {
p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR
...@@ -628,7 +596,6 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block ) ...@@ -628,7 +596,6 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block )
p_pic->date = p_sys->i_pts; p_pic->date = p_sys->i_pts;
/* interpolate the next PTS */ /* interpolate the next PTS */
#if LIBAVCODEC_BUILD >= 4754
if( p_dec->fmt_in.video.i_frame_rate > 0 && if( p_dec->fmt_in.video.i_frame_rate > 0 &&
p_dec->fmt_in.video.i_frame_rate_base > 0 ) p_dec->fmt_in.video.i_frame_rate_base > 0 )
{ {
...@@ -646,16 +613,6 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block ) ...@@ -646,16 +613,6 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block )
p_block->i_rate / INPUT_RATE_DEFAULT / p_block->i_rate / INPUT_RATE_DEFAULT /
(2 * p_sys->p_context->time_base.den); (2 * p_sys->p_context->time_base.den);
} }
#else
if( p_sys->p_context->frame_rate > 0 )
{
p_sys->i_pts += I64C(1000000) *
(2 + p_sys->p_ff_pic->repeat_pict) *
p_sys->p_context->frame_rate_base *
p_block->i_rate / INPUT_RATE_DEFAULT /
(2 * p_sys->p_context->frame_rate);
}
#endif
if( p_sys->b_first_frame ) if( p_sys->b_first_frame )
{ {
...@@ -665,10 +622,8 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block ) ...@@ -665,10 +622,8 @@ picture_t *E_(DecodeVideo)( decoder_t *p_dec, block_t **pp_block )
} }
p_pic->i_nb_fields = 2 + p_sys->p_ff_pic->repeat_pict; p_pic->i_nb_fields = 2 + p_sys->p_ff_pic->repeat_pict;
#if LIBAVCODEC_BUILD >= 4685
p_pic->b_progressive = !p_sys->p_ff_pic->interlaced_frame; p_pic->b_progressive = !p_sys->p_ff_pic->interlaced_frame;
p_pic->b_top_field_first = p_sys->p_ff_pic->top_field_first; p_pic->b_top_field_first = p_sys->p_ff_pic->top_field_first;
#endif
return p_pic; return p_pic;
} }
...@@ -694,9 +649,7 @@ void E_(EndVideoDec)( decoder_t *p_dec ) ...@@ -694,9 +649,7 @@ void E_(EndVideoDec)( decoder_t *p_dec )
if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic ); if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic );
#ifdef LIBAVCODEC_PP
E_(ClosePostproc)( p_dec, p_sys->p_pp ); E_(ClosePostproc)( p_dec, p_sys->p_pp );
#endif
free( p_sys->p_buffer_orig ); free( p_sys->p_buffer_orig );
} }
...@@ -792,11 +745,9 @@ static void ffmpeg_CopyPicture( decoder_t *p_dec, ...@@ -792,11 +745,9 @@ static void ffmpeg_CopyPicture( decoder_t *p_dec,
uint8_t *p_dst, *p_src; uint8_t *p_dst, *p_src;
int i_src_stride, i_dst_stride; int i_src_stride, i_dst_stride;
#ifdef LIBAVCODEC_PP
if( p_sys->p_pp && p_sys->b_pp ) if( p_sys->p_pp && p_sys->b_pp )
E_(PostprocPict)( p_dec, p_sys->p_pp, p_pic, p_ff_pic ); E_(PostprocPict)( p_dec, p_sys->p_pp, p_pic, p_ff_pic );
else else
#endif
for( i_plane = 0; i_plane < p_pic->i_planes; i_plane++ ) for( i_plane = 0; i_plane < p_pic->i_planes; i_plane++ )
{ {
p_src = p_ff_pic->data[i_plane]; p_src = p_ff_pic->data[i_plane];
...@@ -831,11 +782,13 @@ static void ffmpeg_CopyPicture( decoder_t *p_dec, ...@@ -831,11 +782,13 @@ static void ffmpeg_CopyPicture( decoder_t *p_dec,
dest_pic.data[i] = p_pic->p[i].p_pixels; dest_pic.data[i] = p_pic->p[i].p_pixels;
dest_pic.linesize[i] = p_pic->p[i].i_pitch; dest_pic.linesize[i] = p_pic->p[i].i_pitch;
} }
#if !defined(HAVE_FFMPEG_SWSCALE_H) && !defined(HAVE_LIBSWSCALE_TREE)
img_convert( &dest_pic, PIX_FMT_YUV420P, img_convert( &dest_pic, PIX_FMT_YUV420P,
(AVPicture *)p_ff_pic, (AVPicture *)p_ff_pic,
p_sys->p_context->pix_fmt, p_sys->p_context->pix_fmt,
p_sys->p_context->width, p_sys->p_context->width,
p_sys->p_context->height ); p_sys->p_context->height );
#endif
break; break;
default: default:
msg_Err( p_dec, "don't know how to convert chroma %i", msg_Err( p_dec, "don't know how to convert chroma %i",
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* using the ffmpeg library * using the ffmpeg library
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 the VideoLAN team * Copyright (C) 1999-2001 the VideoLAN team
* $Id$ * $Id: a6d66457c73a31abbe49d51c6f0ef10b6a57234b $
* *
* Authors: Gildas Bazin <gbazin@videolan.org> * Authors: Gildas Bazin <gbazin@videolan.org>
* *
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include "ffmpeg.h" #include "ffmpeg.h"
#if !defined(HAVE_FFMPEG_SWSCALE_H) && !defined(HAVE_LIBSWSCALE_TREE)
void E_(InitLibavcodec) ( vlc_object_t *p_object ); void E_(InitLibavcodec) ( vlc_object_t *p_object );
static int CheckInit( filter_t *p_filter ); static int CheckInit( filter_t *p_filter );
static picture_t *Process( filter_t *p_filter, picture_t *p_pic ); static picture_t *Process( filter_t *p_filter, picture_t *p_pic );
...@@ -691,3 +692,4 @@ static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic ) ...@@ -691,3 +692,4 @@ static picture_t *Deinterlace( filter_t *p_filter, picture_t *p_pic )
p_pic->pf_release( p_pic ); p_pic->pf_release( p_pic );
return p_pic_dst; return p_pic_dst;
} }
#endif
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment