Commit 72845f74 authored by Zhao Zhili's avatar Zhao Zhili Committed by Thomas Guillem

codec: theora: prepare to put pf_packetize and pf_decode into a union

Signed-off-by: Thomas Guillem's avatarThomas Guillem <thomas@gllm.fr>
parent ff948736
......@@ -143,10 +143,7 @@ static const char *const ppsz_enc_options[] = {
"quality", NULL
};
/*****************************************************************************
* OpenDecoder: probe the decoder and return score
*****************************************************************************/
static int OpenDecoder( vlc_object_t *p_this )
static int OpenCommon( vlc_object_t *p_this, bool b_packetizer )
{
decoder_t *p_dec = (decoder_t*)p_this;
decoder_sys_t *p_sys;
......@@ -159,19 +156,23 @@ static int OpenDecoder( vlc_object_t *p_this )
/* Allocate the memory needed to store the decoder's structure */
if( ( p_dec->p_sys = p_sys = malloc(sizeof(*p_sys)) ) == NULL )
return VLC_ENOMEM;
p_sys->b_packetizer = false;
p_sys->b_packetizer = b_packetizer;
p_sys->b_has_headers = false;
p_sys->i_pts = VLC_TS_INVALID;
p_sys->b_decoded_first_keyframe = false;
p_sys->tcx = NULL;
/* Set output properties */
p_dec->fmt_out.i_codec = VLC_CODEC_I420;
/* Set callbacks */
p_dec->pf_decode = DecodeVideo;
p_dec->pf_packetize = Packetize;
p_dec->pf_flush = Flush;
if( b_packetizer )
{
p_dec->fmt_out.i_codec = VLC_CODEC_THEORA;
p_dec->pf_packetize = Packetize;
}
else
{
p_dec->fmt_out.i_codec = VLC_CODEC_I420;
p_dec->pf_decode = DecodeVideo;
}
p_dec->pf_flush = Flush;
/* Init supporting Theora structures needed in header parsing */
th_comment_init( &p_sys->tc );
......@@ -180,20 +181,17 @@ static int OpenDecoder( vlc_object_t *p_this )
return VLC_SUCCESS;
}
static int OpenPacketizer( vlc_object_t *p_this )
/*****************************************************************************
* OpenDecoder: probe the decoder and return score
*****************************************************************************/
static int OpenDecoder( vlc_object_t *p_this )
{
decoder_t *p_dec = (decoder_t*)p_this;
decoder_sys_t *p_sys = p_dec->p_sys;
int i_ret = OpenDecoder( p_this );
if( i_ret == VLC_SUCCESS )
{
p_sys->b_packetizer = true;
p_dec->fmt_out.i_codec = VLC_CODEC_THEORA;
}
return OpenCommon( p_this, false );
}
return i_ret;
static int OpenPacketizer( vlc_object_t *p_this )
{
return OpenCommon( p_this, true );
}
/****************************************************************************
......
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