#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_codec.h>
-#include <vlc_vout.h>
#include <vlc_sout.h>
#include <vlc_input.h>
#include <ogg/ogg.h>
set_description( N_("Theora video packetizer") )
set_capability( "packetizer", 100 )
set_callbacks( OpenPacketizer, CloseDecoder )
+ add_shortcut( "theora" )
add_submodule ()
set_description( N_("Theora video encoder") )
set_capability( "encoder", 150 )
set_callbacks( OpenEncoder, CloseEncoder )
+ add_shortcut( "theora" )
# define ENC_CFG_PREFIX "sout-theora-"
add_integer( ENC_CFG_PREFIX "quality", 2, NULL, ENC_QUALITY_TEXT,
- ENC_QUALITY_LONGTEXT, false );
+ ENC_QUALITY_LONGTEXT, false )
vlc_module_end ()
static const char *const ppsz_enc_options[] = {
decoder_t *p_dec = (decoder_t*)p_this;
decoder_sys_t *p_sys;
- if( p_dec->fmt_in.i_codec != VLC_FOURCC('t','h','e','o') )
+ if( p_dec->fmt_in.i_codec != VLC_CODEC_THEORA )
{
return VLC_EGENERIC;
}
/* Allocate the memory needed to store the decoder's structure */
- if( ( p_dec->p_sys = p_sys =
- (decoder_sys_t *)malloc(sizeof(decoder_sys_t)) ) == NULL )
+ if( ( p_dec->p_sys = p_sys = malloc(sizeof(*p_sys)) ) == NULL )
return VLC_ENOMEM;
p_dec->p_sys->b_packetizer = false;
/* Set output properties */
p_dec->fmt_out.i_cat = VIDEO_ES;
- p_dec->fmt_out.i_codec = VLC_FOURCC('I','4','2','0');
+ p_dec->fmt_out.i_codec = VLC_CODEC_I420;
/* Set callbacks */
p_dec->pf_decode_video = (picture_t *(*)(decoder_t *, block_t **))
if( i_ret == VLC_SUCCESS )
{
p_dec->p_sys->b_packetizer = true;
- p_dec->fmt_out.i_codec = VLC_FOURCC( 't', 'h', 'e', 'o' );
+ p_dec->fmt_out.i_codec = VLC_CODEC_THEORA;
}
return i_ret;
switch( p_sys->ti.pixelformat )
{
case OC_PF_420:
- p_dec->fmt_out.i_codec = VLC_FOURCC( 'I','4','2','0' );
+ p_dec->fmt_out.i_codec = VLC_CODEC_I420;
break;
case OC_PF_422:
- p_dec->fmt_out.i_codec = VLC_FOURCC( 'I','4','2','2' );
+ p_dec->fmt_out.i_codec = VLC_CODEC_I422;
break;
case OC_PF_444:
- p_dec->fmt_out.i_codec = VLC_FOURCC( 'I','4','4','4' );
+ p_dec->fmt_out.i_codec = VLC_CODEC_I444;
break;
case OC_PF_RSVD:
default:
static int OpenEncoder( vlc_object_t *p_this )
{
encoder_t *p_enc = (encoder_t *)p_this;
- encoder_sys_t *p_sys = p_enc->p_sys;
+ encoder_sys_t *p_sys;
ogg_packet header;
uint8_t *p_extra;
vlc_value_t val;
int i_quality, i;
- if( p_enc->fmt_out.i_codec != VLC_FOURCC('t','h','e','o') &&
+ if( p_enc->fmt_out.i_codec != VLC_CODEC_THEORA &&
!p_enc->b_force )
{
return VLC_EGENERIC;
}
/* Allocate the memory needed to store the decoder's structure */
- if( ( p_sys = (encoder_sys_t *)malloc(sizeof(encoder_sys_t)) ) == NULL )
+ if( ( p_sys = malloc(sizeof(encoder_sys_t)) ) == NULL )
return VLC_ENOMEM;
p_enc->p_sys = p_sys;
p_enc->pf_encode_video = Encode;
- p_enc->fmt_in.i_codec = VLC_FOURCC('I','4','2','0');
- p_enc->fmt_out.i_codec = VLC_FOURCC('t','h','e','o');
+ p_enc->fmt_in.i_codec = VLC_CODEC_I420;
+ p_enc->fmt_out.i_codec = VLC_CODEC_THEORA;
config_ChainParse( p_enc, ENC_CFG_PREFIX, ppsz_enc_options, p_enc->p_cfg );
p_sys->ti.noise_sensitivity = 1;
theora_encode_init( &p_sys->td, &p_sys->ti );
- theora_info_clear( &p_sys->ti );
theora_comment_init( &p_sys->tc );
/* Create and store headers */
memcpy( p_block->p_buffer, oggpacket.packet, oggpacket.bytes );
p_block->i_dts = p_block->i_pts = p_pict->date;
+ if( theora_packet_iskeyframe( &oggpacket ) )
+ {
+ p_block->i_flags |= BLOCK_FLAG_TYPE_I;
+ }
+
return p_block;
}