Commit 5a8df6b0 authored by Laurent Aimar's avatar Laurent Aimar

* all: removed old encoding way.

parent ecc97852
......@@ -71,7 +71,6 @@ HEADERS_include = \
include/darwin_specific.h \
include/charset.h \
include/codecs.h \
include/encoder.h \
include/ninput.h \
include/input_ext-dec.h \
include/input_ext-intf.h \
......
dnl Autoconf settings for vlc
dnl $Id: configure.ac,v 1.69 2003/08/27 08:27:52 gbazin Exp $
dnl $Id: configure.ac,v 1.70 2003/08/29 19:50:12 fenrir Exp $
AC_INIT(vlc,0.6.3-cvs)
......@@ -1621,11 +1621,6 @@ then
fi
fi
dnl Duplicate the ffmpeg CPPFLAGS and LDFLAGS for the encoder
AX_ADD_CPPFLAGS([encoder_ffmpeg],[${CPPFLAGS_ffmpeg}])
dnl XXX: we don't link with -lavcodec blah blah blah
dnl AX_ADD_LDFLAGS([encoder_ffmpeg],[${LDFLAGS_ffmpeg}])
ac_have_vorbis_headers=yes
AC_CHECK_HEADERS(vorbis/vorbisenc.h vorbis/codec.h,,
ac_have_vorbis_headers=no)
......@@ -1743,10 +1738,6 @@ then
LDFLAGS="${LDFLAGS_save}"
CPPFLAGS="${CPPFLAGS_save}"
fi
dnl Duplicate the xvid CPPFLAGS and LDFLAGS for the encoder
AX_ADD_LDFLAGS([encoder_xvid],[${LDFLAGS_xvid}])
AX_ADD_CPPFLAGS([encoder_xvid],[${CPPFLAGS_xvid}])
fi
dnl
......@@ -3318,8 +3309,6 @@ AC_OUTPUT([
modules/demux/mp4/Makefile
modules/demux/mpeg/Makefile
modules/demux/util/Makefile
modules/encoder/Makefile
modules/encoder/ffmpeg/Makefile
modules/gui/Makefile
modules/gui/beos/Makefile
modules/gui/pda/Makefile
......
/*****************************************************************************
* encoder.h :
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: encoder.h,v 1.1 2003/01/22 10:41:57 fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#ifndef _ENCODER_H
#define _ENCODER_H
typedef struct encoder_sys_t encoder_sys_t;
typedef struct video_encoder_s
{
VLC_COMMON_MEMBERS
module_t * p_module;
vlc_fourcc_t i_codec; /* in */
vlc_fourcc_t i_chroma; /* in/out */
int i_width; /* in/out */
int i_height; /* in/out */
int i_aspect; /* in/out */
size_t i_buffer_size; /* in/out */
encoder_sys_t *p_sys;
int (*pf_init) ( struct video_encoder_s *p_enc );
int (*pf_encode) ( struct video_encoder_s *p_enc, picture_t *p_pic, void *p_data, size_t *pi_data );
void (*pf_end) ( struct video_encoder_s *p_enc );
} video_encoder_t;
/*
* Video decoder:
*
* = at loading a video decoder must
* * see if i_codec is supporte, if not => failling
* * modify i_width/i_height/i_chroma/i_aspect if required (for example,
* if a video codec required %8 size)
* * init/check the library
* * set pf_init, pf_encode and pf_end
* * set i_buffer_size to the max buffer size required to output a single frame
*
* = pf_init must
* * start encoding processing
* * doesn't change any parameters (i_chroma/i_width/i_height/i_aspect)
* * check for passed parameters (no one for the moment)
*
* = pf_encode must
* * encode a single frame
* * doesn't change any parameters (...)
* * doesn't look for passed paramters
*
* = pf_end must
* * end the encoding process
* * revert all that pf_init (and pf_encode) has done (memory...)
*
* = at unloading, a video decoder must revert all that was done while loading
*
* XXX: pf_init/pf_end could be called multiple time without the plugin unloaded.
* XXX: all memory allocated by video encoder MUST be unallocated by video encoder
*
*/
#endif
.deps
.dirstamp
*.lo
*.la
*.dll
*.dylib
*.sl
*.so
Makefile.am
Makefile.in
Makefile
SOURCES_encoder_xvid = xvid.c
.deps
.dirstamp
*.lo
*.la
*.dll
*.dylib
*.sl
*.so
Makefile.am
Makefile.in
Makefile
SOURCES_encoder_ffmpeg = \
encoder.c \
video.c \
audio.c \
$(NULL)
/*****************************************************************************
* audio.c : audio encoder using ffmpeg library
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: audio.c,v 1.2 2003/04/20 11:57:13 gbazin Exp $
*
* Authors: Laurent Aimar
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc/input.h>
#include <vlc/decoder.h>
#include <stdlib.h>
#include "codecs.h"
/* ffmpeg header */
#ifdef HAVE_FFMPEG_AVCODEC_H
# include <ffmpeg/avcodec.h>
#else
# include <avcodec.h>
#endif
/*****************************************************************************
* Local prototypes
*****************************************************************************/
int E_( OpenEncoderAudio ) ( vlc_object_t * );
void E_( CloseEncoderAudio )( vlc_object_t * );
struct encoder_sys_t
{
void *audio_handle;
};
int E_( OpenEncoderAudio ) ( vlc_object_t *p_this )
{
return VLC_EGENERIC;
}
void E_( CloseEncoderAudio )( vlc_object_t *p_this )
{
;
}
/*****************************************************************************
* encoder.c : audio/video encoder using ffmpeg library
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: encoder.c,v 1.4 2003/04/27 23:16:35 gbazin Exp $
*
* Authors: Laurent Aimar
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc/input.h>
#include <vlc/decoder.h>
#include <stdlib.h>
#include "codecs.h"
#include "encoder.h"
/*****************************************************************************
* Local prototypes
*****************************************************************************/
int E_( OpenEncoderVideo )( vlc_object_t * );
void E_( CloseEncoderVideo )( vlc_object_t * );
int E_( OpenEncoderAudio ) ( vlc_object_t * );
void E_( CloseEncoderAudio )( vlc_object_t * );
/*****************************************************************************
* Module descriptor
*****************************************************************************/
vlc_module_begin();
set_description( _("ffmpeg video encoder") );
add_shortcut( "ffmpeg" );
set_capability( "video encoder", 100 );
set_callbacks( E_( OpenEncoderVideo ), E_( CloseEncoderVideo ) );
add_category_hint( "video setting", NULL, VLC_TRUE );
add_integer( "encoder-ffmpeg-video-bitrate", 1000, NULL, "bitrate (kb/s)", "bitrate (kb/s)", VLC_TRUE );
add_integer( "encoder-ffmpeg-video-max-key-interval", 10, NULL, "max key interval", "maximum value of frames between two keyframes", VLC_TRUE );
add_integer( "encoder-ffmpeg-video-min-quant", 2, NULL, "min quantizer", "range 1-31", VLC_TRUE );
add_integer( "encoder-ffmpeg-video-max-quant", 31, NULL, "max quantizer", "range 1-31", VLC_TRUE );
add_submodule();
set_description( _("ffmpeg audio encoder") );
set_capability( "audio encoder", 50 );
set_callbacks( E_( OpenEncoderAudio ), E_( CloseEncoderAudio ) );
add_category_hint( "audio setting", NULL, VLC_TRUE );
add_integer( "encoder-ffmpeg-audio-bitrate", 64, NULL, "bitrate (kb/s)", "bitrate (kb/s)", VLC_TRUE );
vlc_module_end();
/*****************************************************************************
* video.c : video encoder using ffmpeg library
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: video.c,v 1.5 2003/07/28 20:25:30 jpsaman Exp $
*
* Authors: Laurent Aimar
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc/input.h>
#include <vlc/decoder.h>
#include <stdlib.h>
#include "codecs.h"
#include "encoder.h"
/* ffmpeg header */
#ifdef HAVE_FFMPEG_AVCODEC_H
# include <ffmpeg/avcodec.h>
#else
# include <avcodec.h>
#endif
int E_( OpenEncoderVideo ) ( vlc_object_t * );
void E_( CloseEncoderVideo )( vlc_object_t * );
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static int Init ( video_encoder_t *p_encoder );
static int Encode ( video_encoder_t *p_encoder,
picture_t *p_pic, void *p_data, size_t *pi_data );
static void End ( video_encoder_t *p_encoder );
/*****************************************************************************
* Local definitions
*****************************************************************************/
struct encoder_sys_t
{
char *psz_codec;
AVCodecContext *p_context;
AVCodec *p_codec;
AVFrame *p_frame;
};
/*****************************************************************************
* OpenEncoderVideo:
*****************************************************************************
*
*****************************************************************************/
int E_( OpenEncoderVideo ) ( vlc_object_t *p_this )
{
video_encoder_t *p_encoder = (video_encoder_t*)p_this;
/* *** check supported codec *** */
switch( p_encoder->i_codec )
{
case VLC_FOURCC( 'm', 'p', '1', 'v' ):
case VLC_FOURCC( 'm', 'p', 'g', 'v' ):
case VLC_FOURCC( 'm', 'p', '4', 'v' ):
case VLC_FOURCC( 'h', 'u', 'f', 'f' ):
break;
default:
return VLC_EGENERIC;
}
/* *** init library */
avcodec_init();
avcodec_register_all();
/* *** fix parameters *** */
switch( p_encoder->i_chroma )
{
/* Planar YUV formats */
case VLC_FOURCC('I','4','4','4'):
case VLC_FOURCC('I','4','2','2'):
case VLC_FOURCC('Y','V','1','2'):
case VLC_FOURCC('I','4','2','0'):
case VLC_FOURCC('I','Y','U','V'):
case VLC_FOURCC('I','4','1','1'):
case VLC_FOURCC('I','4','1','0'):
/* Packed YUV formats */
case VLC_FOURCC('Y','U','Y','2'):
case VLC_FOURCC('U','Y','V','Y'):
/* Packed RGB formats */
case VLC_FOURCC('R','V','3','2'):
case VLC_FOURCC('R','V','2','4'):
case VLC_FOURCC('R','V','1','6'):
case VLC_FOURCC('R','V','1','5'):
case VLC_FOURCC('R','G','B','2'):
break;
default:
return VLC_EGENERIC;
}
#if 0
p_encoder->i_width = ( p_encoder->i_width + 15 )&0xfffff8;
p_encoder->i_height = ( p_encoder->i_height + 15 )&0xfffff8;
#endif
/* *** set exported functions *** */
p_encoder->pf_init = Init;
p_encoder->pf_encode = Encode;
p_encoder->pf_end = End;
return VLC_SUCCESS;
}
/*****************************************************************************
* CloseEncoderVideo:
*****************************************************************************
*
*****************************************************************************/
void E_( CloseEncoderVideo )( vlc_object_t *p_this )
{
;
}
/*****************************************************************************
* Init:
*****************************************************************************
*
*****************************************************************************/
static int Init ( video_encoder_t *p_encoder )
{
encoder_sys_t *p_sys;
int i_codec;
/* *** allocate memory *** */
if( !( p_encoder->p_sys = p_sys = malloc( sizeof( encoder_sys_t ) ) ) )
{
msg_Err( p_encoder, "out of memory" );
return VLC_EGENERIC;
}
memset( p_sys, 0, sizeof( encoder_sys_t ) );
/* *** ask for the codec *** */
switch( p_encoder->i_codec )
{
case VLC_FOURCC( 'm', 'p', '1', 'v' ):
case VLC_FOURCC( 'm', 'p', 'g', 'v' ):
p_encoder->p_sys->psz_codec = "MPEG I";
i_codec = CODEC_ID_MPEG1VIDEO;
break;
case VLC_FOURCC( 'm', 'p', '4', 'v' ):
p_encoder->p_sys->psz_codec = "MPEG-4";
i_codec = CODEC_ID_MPEG4;
break;
case VLC_FOURCC( 'h', 'u', 'f', 'f' ):
p_encoder->p_sys->psz_codec = "Huff YUV";
i_codec = CODEC_ID_HUFFYUV;
break;
default:
return VLC_EGENERIC;
}
if( ( p_sys->p_codec = avcodec_find_encoder( i_codec ) ) == NULL )
{
msg_Err( p_encoder, "cannot find encoder for %s",
p_encoder->p_sys->psz_codec );
return VLC_EGENERIC;
}
msg_Dbg( p_encoder, "encoding with %s", p_encoder->p_sys->psz_codec );
#define p_frame p_sys->p_frame
#define p_context p_sys->p_context
/* *** set context properties *** */
p_context = avcodec_alloc_context();
p_context->bit_rate = config_GetInt( p_encoder, "encoder-ffmpeg-video-bitrate" ) * 1000;
p_context->width = p_encoder->i_width;
p_context->height= p_encoder->i_height;
#if LIBAVCODEC_BUILD >= 4662
p_context->frame_rate = 25 * DEFAULT_FRAME_RATE_BASE;
#else
p_context->frame_rate = 25 * FRAME_RATE_BASE;
#endif
p_context->gop_size = config_GetInt( p_encoder, "encoder-ffmpeg-video-max-key-interval" );
p_context->qmin = __MAX( __MIN( config_GetInt( p_encoder, "encoder-ffmpeg-video-min-quant" ), 31 ), 1 );
p_context->qmax = __MAX( __MIN( config_GetInt( p_encoder, "encoder-ffmpeg-video-max-quant" ), 31 ), 1 );
if( avcodec_open( p_context, p_encoder->p_sys->p_codec ) < 0 )
{
msg_Err( p_encoder, "failed to open %s codec",
p_encoder->p_sys->psz_codec );
return VLC_EGENERIC;
}
p_frame = avcodec_alloc_frame();
switch( p_encoder->i_chroma )
{
/* Planar YUV formats */
case VLC_FOURCC('I','4','4','4'):
p_frame->pict_type = PIX_FMT_YUV444P;
break;
case VLC_FOURCC('I','4','2','2'):
p_frame->pict_type = PIX_FMT_YUV422P;
break;
case VLC_FOURCC('Y','V','1','2'):
case VLC_FOURCC('I','4','2','0'):
case VLC_FOURCC('I','Y','U','V'):
p_frame->pict_type = PIX_FMT_YUV420P;
break;
case VLC_FOURCC('I','4','1','1'):
p_frame->pict_type = PIX_FMT_YUV411P;
break;
case VLC_FOURCC('I','4','1','0'):
p_frame->pict_type = PIX_FMT_YUV410P;
break;
/* Packed YUV formats */
case VLC_FOURCC('Y','U','Y','2'):
case VLC_FOURCC('U','Y','V','Y'):
p_frame->pict_type = PIX_FMT_YUV422;
break;
/* Packed RGB formats */
case VLC_FOURCC('R','V','3','2'):
p_frame->pict_type = PIX_FMT_RGBA32;
break;
case VLC_FOURCC('R','V','2','4'):
p_frame->pict_type = PIX_FMT_RGB24;
//p_frame->pict_type = PIX_FMT_BGR24;
break;
case VLC_FOURCC('R','V','1','6'):
p_frame->pict_type = PIX_FMT_RGB565;
break;
case VLC_FOURCC('R','V','1','5'):
p_frame->pict_type = PIX_FMT_RGB555;
break;
case VLC_FOURCC('R','G','B','2'):
p_frame->pict_type = PIX_FMT_GRAY8;
break;
default:
return VLC_EGENERIC;
}
return VLC_SUCCESS;
#undef p_context
#undef p_frame
}
/*****************************************************************************
* Encode:
*****************************************************************************
*
*****************************************************************************/
static int Encode( video_encoder_t *p_encoder,
picture_t *p_pic, void *p_data, size_t *pi_data )
{
#define p_frame p_encoder->p_sys->p_frame
#define p_context p_encoder->p_sys->p_context
int i;
for( i = 0; i < p_pic->i_planes; i++ )
{
p_frame->linesize[i] = p_pic->p[i].i_pitch;
p_frame->data[i] = p_pic->p[i].p_pixels;
}
*pi_data = avcodec_encode_video( p_context, p_data, *pi_data, p_frame );
return VLC_SUCCESS;
#undef p_context
#undef p_frame
}
/*****************************************************************************
* End:
*****************************************************************************
*
*****************************************************************************/
static void End( video_encoder_t *p_encoder )
{
avcodec_close( p_encoder->p_sys->p_context );
free( p_encoder->p_sys->p_context );
p_encoder->p_sys->p_context = NULL;
p_encoder->p_sys->p_codec = NULL;
}
/*****************************************************************************
* xvid.c: an encoder for libxvidcore, the Xvid video codec
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: xvid.c,v 1.3 2003/02/22 16:10:31 fenrir Exp $
*
* Authors: Laurent Aimar
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc/input.h>
#include <vlc/decoder.h>
#include <stdlib.h>
#include "codecs.h"
#include "encoder.h"
#include <xvid.h>
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static int OpenEncoder ( vlc_object_t * );
static void CloseEncoder