Commit 8f24e725 authored by Rafaël Carré's avatar Rafaël Carré

avcodec: update to libavcodec 54

parent 4c3037ac
...@@ -41,6 +41,8 @@ ...@@ -41,6 +41,8 @@
# include <avcodec.h> # include <avcodec.h>
#endif #endif
#include "libavutil/audioconvert.h"
#include "avcodec.h" #include "avcodec.h"
/***************************************************************************** /*****************************************************************************
...@@ -415,24 +417,24 @@ void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_ ...@@ -415,24 +417,24 @@ void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_
{ {
switch( i_sample_fmt ) switch( i_sample_fmt )
{ {
case SAMPLE_FMT_U8: case AV_SAMPLE_FMT_U8:
*pi_codec = VLC_CODEC_U8; *pi_codec = VLC_CODEC_U8;
*pi_bits = 8; *pi_bits = 8;
break; break;
case SAMPLE_FMT_S32: case AV_SAMPLE_FMT_S32:
*pi_codec = VLC_CODEC_S32N; *pi_codec = VLC_CODEC_S32N;
*pi_bits = 32; *pi_bits = 32;
break; break;
case SAMPLE_FMT_FLT: case AV_SAMPLE_FMT_FLT:
*pi_codec = VLC_CODEC_FL32; *pi_codec = VLC_CODEC_FL32;
*pi_bits = 32; *pi_bits = 32;
break; break;
case SAMPLE_FMT_DBL: case AV_SAMPLE_FMT_DBL:
*pi_codec = VLC_CODEC_FL64; *pi_codec = VLC_CODEC_FL64;
*pi_bits = 64; *pi_bits = 64;
break; break;
case SAMPLE_FMT_S16: case AV_SAMPLE_FMT_S16:
default: default:
*pi_codec = VLC_CODEC_S16N; *pi_codec = VLC_CODEC_S16N;
*pi_bits = 16; *pi_bits = 16;
...@@ -442,26 +444,26 @@ void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_ ...@@ -442,26 +444,26 @@ void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_
static const uint64_t pi_channels_map[][2] = static const uint64_t pi_channels_map[][2] =
{ {
{ CH_FRONT_LEFT, AOUT_CHAN_LEFT }, { AV_CH_FRONT_LEFT, AOUT_CHAN_LEFT },
{ CH_FRONT_RIGHT, AOUT_CHAN_RIGHT }, { AV_CH_FRONT_RIGHT, AOUT_CHAN_RIGHT },
{ CH_FRONT_CENTER, AOUT_CHAN_CENTER }, { AV_CH_FRONT_CENTER, AOUT_CHAN_CENTER },
{ CH_LOW_FREQUENCY, AOUT_CHAN_LFE }, { AV_CH_LOW_FREQUENCY, AOUT_CHAN_LFE },
{ CH_BACK_LEFT, AOUT_CHAN_REARLEFT }, { AV_CH_BACK_LEFT, AOUT_CHAN_REARLEFT },
{ CH_BACK_RIGHT, AOUT_CHAN_REARRIGHT }, { AV_CH_BACK_RIGHT, AOUT_CHAN_REARRIGHT },
{ CH_FRONT_LEFT_OF_CENTER, 0 }, { AV_CH_FRONT_LEFT_OF_CENTER, 0 },
{ CH_FRONT_RIGHT_OF_CENTER, 0 }, { AV_CH_FRONT_RIGHT_OF_CENTER, 0 },
{ CH_BACK_CENTER, AOUT_CHAN_REARCENTER }, { AV_CH_BACK_CENTER, AOUT_CHAN_REARCENTER },
{ CH_SIDE_LEFT, AOUT_CHAN_MIDDLELEFT }, { AV_CH_SIDE_LEFT, AOUT_CHAN_MIDDLELEFT },
{ CH_SIDE_RIGHT, AOUT_CHAN_MIDDLERIGHT }, { AV_CH_SIDE_RIGHT, AOUT_CHAN_MIDDLERIGHT },
{ CH_TOP_CENTER, 0 }, { AV_CH_TOP_CENTER, 0 },
{ CH_TOP_FRONT_LEFT, 0 }, { AV_CH_TOP_FRONT_LEFT, 0 },
{ CH_TOP_FRONT_CENTER, 0 }, { AV_CH_TOP_FRONT_CENTER, 0 },
{ CH_TOP_FRONT_RIGHT, 0 }, { AV_CH_TOP_FRONT_RIGHT, 0 },
{ CH_TOP_BACK_LEFT, 0 }, { AV_CH_TOP_BACK_LEFT, 0 },
{ CH_TOP_BACK_CENTER, 0 }, { AV_CH_TOP_BACK_CENTER, 0 },
{ CH_TOP_BACK_RIGHT, 0 }, { AV_CH_TOP_BACK_RIGHT, 0 },
{ CH_STEREO_LEFT, 0 }, { AV_CH_STEREO_LEFT, 0 },
{ CH_STEREO_RIGHT, 0 }, { AV_CH_STEREO_RIGHT, 0 },
}; };
static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
......
...@@ -262,7 +262,11 @@ static int OpenDecoder( vlc_object_t *p_this ) ...@@ -262,7 +262,11 @@ static int OpenDecoder( vlc_object_t *p_this )
} }
/* *** get a p_context *** */ /* *** get a p_context *** */
#if LIBAVCODEC_VERSION_MAJOR >= 54
p_context = avcodec_alloc_context3(p_codec);
#else
p_context = avcodec_alloc_context(); p_context = avcodec_alloc_context();
#endif
if( !p_context ) if( !p_context )
return VLC_ENOMEM; return VLC_ENOMEM;
p_context->debug = var_InheritInteger( p_dec, "ffmpeg-debug" ); p_context->debug = var_InheritInteger( p_dec, "ffmpeg-debug" );
...@@ -390,7 +394,9 @@ void InitLibavcodec( vlc_object_t *p_object ) ...@@ -390,7 +394,9 @@ void InitLibavcodec( vlc_object_t *p_object )
/* *** init ffmpeg library (libavcodec) *** */ /* *** init ffmpeg library (libavcodec) *** */
if( !b_ffmpeginit ) if( !b_ffmpeginit )
{ {
#if LIBAVCODEC_VERSION_MAJOR < 54
avcodec_init(); avcodec_init();
#endif
avcodec_register_all(); avcodec_register_all();
av_log_set_callback( LibavutilCallback ); av_log_set_callback( LibavutilCallback );
b_ffmpeginit = true; b_ffmpeginit = true;
...@@ -442,7 +448,11 @@ int ffmpeg_OpenCodec( decoder_t *p_dec ) ...@@ -442,7 +448,11 @@ int ffmpeg_OpenCodec( decoder_t *p_dec )
} }
int ret; int ret;
vlc_avcodec_lock(); vlc_avcodec_lock();
#if LIBAVCODEC_VERSION_MAJOR >= 54
ret = avcodec_open2( p_sys->p_context, p_sys->p_codec, NULL /* options */ );
#else
ret = avcodec_open( p_sys->p_context, p_sys->p_codec ); ret = avcodec_open( p_sys->p_context, p_sys->p_codec );
#endif
vlc_avcodec_unlock(); vlc_avcodec_unlock();
if( ret < 0 ) if( ret < 0 )
return VLC_EGENERIC; return VLC_EGENERIC;
......
...@@ -309,6 +309,42 @@ int ffmpeg_OpenCodec( decoder_t *p_dec ); ...@@ -309,6 +309,42 @@ int ffmpeg_OpenCodec( decoder_t *p_dec );
# define AVMEDIA_TYPE_ATTACHMENT CODEC_TYPE_ATTACHMENT # define AVMEDIA_TYPE_ATTACHMENT CODEC_TYPE_ATTACHMENT
#endif #endif
#if LIBAVCODEC_VERSION_MAJOR < 54
# define AV_PICTURE_TYPE_B FF_B_TYPE
# define AV_PICTURE_TYPE_I FF_I_TYPE
# define AV_PICTURE_TYPE_P FF_P_TYPE
# define SAMPLE_FMT_NONE AV_SAMPLE_FMT_NONE
# define SAMPLE_FMT_U8 AV_SAMPLE_FMT_U8
# define SAMPLE_FMT_S16 AV_SAMPLE_FMT_S16
# define SAMPLE_FMT_S32 AV_SAMPLE_FMT_S32
# define SAMPLE_FMT_FLT AV_SAMPLE_FMT_FLT
# define SAMPLE_FMT_DBL AV_SAMPLE_FMT_DBL
# define CH_FRONT_LEFT AV_CH_FRONT_LEFT
# define CH_FRONT_RIGHT AV_CH_FRONT_RIGHT
# define CH_FRONT_CENTER AV_CH_FRONT_CENTER
# define CH_LOW_FREQUENCY AV_CH_LOW_FREQUENCY
# define CH_BACK_LEFT AV_CH_BACK_LEFT
# define CH_BACK_RIGHT AV_CH_BACK_RIGHT
# define CH_FRONT_LEFT_OF_CENTER AV_CH_FRONT_LEFT_OF_CENTER
# define CH_FRONT_RIGHT_OF_CENTER AV_CH_FRONT_RIGHT_OF_CENTER
# define CH_BACK_CENTER AV_CH_BACK_CENTER
# define CH_SIDE_LEFT AV_CH_SIDE_LEFT
# define CH_SIDE_RIGHT AV_CH_SIDE_RIGHT
# define CH_TOP_CENTER AV_CH_TOP_CENTER
# define CH_TOP_FRONT_LEFT AV_CH_TOP_FRONT_LEFT
# define CH_TOP_FRONT_CENTER AV_CH_TOP_FRONT_CENTER
# define CH_TOP_FRONT_RIGHT AV_CH_TOP_FRONT_RIGHT
# define CH_TOP_BACK_LEFT AV_CH_TOP_BACK_LEFT
# define CH_TOP_BACK_CENTER AV_CH_TOP_BACK_CENTER
# define CH_TOP_BACK_RIGHT AV_CH_TOP_BACK_RIGHT
# define CH_STEREO_LEFT AV_CH_STEREO_LEFT
# define CH_STEREO_RIGHT AV_CH_STEREO_RIGHT
#endif
#ifndef AV_PKT_FLAG_KEY #ifndef AV_PKT_FLAG_KEY
# define AV_PKT_FLAG_KEY PKT_FLAG_KEY # define AV_PKT_FLAG_KEY PKT_FLAG_KEY
#endif #endif
...@@ -304,7 +304,12 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -304,7 +304,12 @@ int OpenEncoder( vlc_object_t *p_this )
p_sys->p_buffer_out = NULL; p_sys->p_buffer_out = NULL;
p_sys->i_buffer_out = 0; p_sys->i_buffer_out = 0;
p_sys->p_context = p_context = avcodec_alloc_context(); #if LIBAVCODEC_VERSION_MAJOR < 54
p_context = avcodec_alloc_context();
#else
p_context = avcodec_alloc_context3(p_codec);
#endif
p_sys->p_context = p_context;
p_sys->p_context->codec_id = p_sys->p_codec->id; p_sys->p_context->codec_id = p_sys->p_codec->id;
p_context->debug = var_InheritInteger( p_enc, "ffmpeg-debug" ); p_context->debug = var_InheritInteger( p_enc, "ffmpeg-debug" );
p_context->opaque = (void *)p_this; p_context->opaque = (void *)p_this;
...@@ -604,7 +609,7 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -604,7 +609,7 @@ int OpenEncoder( vlc_object_t *p_this )
p_context->codec_type = AVMEDIA_TYPE_AUDIO; p_context->codec_type = AVMEDIA_TYPE_AUDIO;
p_context->sample_fmt = p_codec->sample_fmts ? p_context->sample_fmt = p_codec->sample_fmts ?
p_codec->sample_fmts[0] : p_codec->sample_fmts[0] :
SAMPLE_FMT_S16; AV_SAMPLE_FMT_S16;
p_enc->fmt_in.i_codec = VLC_CODEC_S16N; p_enc->fmt_in.i_codec = VLC_CODEC_S16N;
p_context->sample_rate = p_enc->fmt_out.audio.i_rate; p_context->sample_rate = p_enc->fmt_out.audio.i_rate;
p_context->time_base.num = 1; p_context->time_base.num = 1;
...@@ -694,7 +699,11 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -694,7 +699,11 @@ int OpenEncoder( vlc_object_t *p_this )
int ret; int ret;
vlc_avcodec_lock(); vlc_avcodec_lock();
#if LIBAVCODEC_VERSION_MAJOR < 54
ret = avcodec_open( p_context, p_codec ); ret = avcodec_open( p_context, p_codec );
#else
ret = avcodec_open2( p_context, p_codec, NULL /* options */ );
#endif
vlc_avcodec_unlock(); vlc_avcodec_unlock();
if( ret ) if( ret )
{ {
...@@ -748,7 +757,11 @@ int OpenEncoder( vlc_object_t *p_this ) ...@@ -748,7 +757,11 @@ int OpenEncoder( vlc_object_t *p_this )
p_context->codec = NULL; p_context->codec = NULL;
vlc_avcodec_lock(); vlc_avcodec_lock();
#if LIBAVCODEC_VERSION_MAJOR < 54
ret = avcodec_open( p_context, p_codec ); ret = avcodec_open( p_context, p_codec );
#else
ret = avcodec_open2( p_context, p_codec, NULL /* options */ );
#endif
vlc_avcodec_unlock(); vlc_avcodec_unlock();
if( ret ) if( ret )
{ {
...@@ -929,7 +942,7 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict ) ...@@ -929,7 +942,7 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )
if ( current_date + HURRY_UP_GUARD1 > frame.pts ) if ( current_date + HURRY_UP_GUARD1 > frame.pts )
{ {
frame.pict_type = FF_P_TYPE; frame.pict_type = AV_PICTURE_TYPE_P;
/* msg_Dbg( p_enc, "hurry up mode 1 %lld", current_date + HURRY_UP_GUARD1 - frame.pts ); */ /* msg_Dbg( p_enc, "hurry up mode 1 %lld", current_date + HURRY_UP_GUARD1 - frame.pts ); */
} }
} }
...@@ -1015,8 +1028,8 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict ) ...@@ -1015,8 +1028,8 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )
} }
/* End work-around */ /* End work-around */
if( p_sys->p_context->coded_frame->pict_type != FF_I_TYPE && if( p_sys->p_context->coded_frame->pict_type != AV_PICTURE_TYPE_I &&
p_sys->p_context->coded_frame->pict_type != FF_P_TYPE ) p_sys->p_context->coded_frame->pict_type != AV_PICTURE_TYPE_P )
{ {
p_block->i_dts = p_block->i_pts; p_block->i_dts = p_block->i_pts;
} }
...@@ -1044,15 +1057,16 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict ) ...@@ -1044,15 +1057,16 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )
switch ( p_sys->p_context->coded_frame->pict_type ) switch ( p_sys->p_context->coded_frame->pict_type )
{ {
case FF_I_TYPE: case AV_PICTURE_TYPE_I:
p_block->i_flags |= BLOCK_FLAG_TYPE_I; p_block->i_flags |= BLOCK_FLAG_TYPE_I;
break; break;
case FF_P_TYPE: case AV_PICTURE_TYPE_P:
p_block->i_flags |= BLOCK_FLAG_TYPE_P; p_block->i_flags |= BLOCK_FLAG_TYPE_P;
break; break;
case FF_B_TYPE: case AV_PICTURE_TYPE_B:
p_block->i_flags |= BLOCK_FLAG_TYPE_B; p_block->i_flags |= BLOCK_FLAG_TYPE_B;
break; break;
} }
return p_block; return p_block;
......
...@@ -90,8 +90,14 @@ int InitSubtitleDec(decoder_t *dec, AVCodecContext *context, ...@@ -90,8 +90,14 @@ int InitSubtitleDec(decoder_t *dec, AVCodecContext *context,
context->extradata = NULL; context->extradata = NULL;
/* */ /* */
int ret;
vlc_avcodec_lock(); vlc_avcodec_lock();
if (avcodec_open(context, codec) < 0) { #if LIBAVCODEC_VERSION_MAJOR < 54
ret = avcodec_open(context, codec);
#else
ret = avcodec_open2(context, codec, NULL /* options */);
#endif
if (ret < 0) {
vlc_avcodec_unlock(); vlc_avcodec_unlock();
msg_Err(dec, "cannot open codec (%s)", namecodec); msg_Err(dec, "cannot open codec (%s)", namecodec);
free(context->extradata); free(context->extradata);
......
...@@ -94,8 +94,13 @@ struct decoder_sys_t ...@@ -94,8 +94,13 @@ struct decoder_sys_t
/* Hack to force display of still pictures */ /* Hack to force display of still pictures */
bool b_first_frame; bool b_first_frame;
/* */ /* */
#if LIBAVCODEC_VERSION_MAJOR < 54
AVPaletteControl palette; AVPaletteControl palette;
#else
# warning FIXME
#endif
/* */ /* */
bool b_flush; bool b_flush;
...@@ -114,9 +119,6 @@ struct decoder_sys_t ...@@ -114,9 +119,6 @@ struct decoder_sys_t
# define post_mt(s) # define post_mt(s)
#endif #endif
/* FIXME (dummy palette for now) */
static const AVPaletteControl palette_control;
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
...@@ -233,8 +235,12 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -233,8 +235,12 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
/* ***** Get configuration of ffmpeg plugin ***** */ /* ***** Get configuration of ffmpeg plugin ***** */
p_sys->p_context->workaround_bugs = p_sys->p_context->workaround_bugs =
var_InheritInteger( p_dec, "ffmpeg-workaround-bugs" ); var_InheritInteger( p_dec, "ffmpeg-workaround-bugs" );
#if LIBAVCODEC_VERSION_MAJOR < 54
p_sys->p_context->error_recognition = p_sys->p_context->error_recognition =
var_InheritInteger( p_dec, "ffmpeg-error-resilience" ); var_InheritInteger( p_dec, "ffmpeg-error-resilience" );
#else
# warning FIXME (moved to AVFormat)
#endif
if( var_CreateGetBool( p_dec, "grayscale" ) ) if( var_CreateGetBool( p_dec, "grayscale" ) )
p_sys->p_context->flags |= CODEC_FLAG_GRAY; p_sys->p_context->flags |= CODEC_FLAG_GRAY;
...@@ -400,6 +406,7 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -400,6 +406,7 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
} }
p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma; p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma;
#if LIBAVCODEC_VERSION_MAJOR < 54
/* Setup palette */ /* Setup palette */
memset( &p_sys->palette, 0, sizeof(p_sys->palette) ); memset( &p_sys->palette, 0, sizeof(p_sys->palette) );
if( p_dec->fmt_in.video.p_palette ) if( p_dec->fmt_in.video.p_palette )
...@@ -429,6 +436,9 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context, ...@@ -429,6 +436,9 @@ int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
{ {
p_sys->p_context->palctrl = &p_sys->palette; p_sys->p_context->palctrl = &p_sys->palette;
} }
#else
# warning FIXME
#endif
/* ***** init this codec with special data ***** */ /* ***** init this codec with special data ***** */
ffmpeg_InitCodec( p_dec ); ffmpeg_InitCodec( p_dec );
...@@ -650,7 +660,7 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) ...@@ -650,7 +660,7 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block )
} }
/* Sanity check (seems to be needed for some streams) */ /* Sanity check (seems to be needed for some streams) */
if( p_sys->p_ff_pic->pict_type == FF_B_TYPE ) if( p_sys->p_ff_pic->pict_type == AV_PICTURE_TYPE_B)
{ {
p_sys->b_has_b_frames = true; p_sys->b_has_b_frames = true;
} }
...@@ -983,8 +993,10 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context, ...@@ -983,8 +993,10 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context,
/* */ /* */
p_ff_pic->type = FF_BUFFER_TYPE_USER; p_ff_pic->type = FF_BUFFER_TYPE_USER;
/* FIXME what is that, should give good value */
p_ff_pic->age = 256*256*256*64; // FIXME FIXME from ffmpeg #if LIBAVCODEC_VERSION_MAJOR < 54
p_ff_pic->age = 256*256*256*64;
#endif
if( vlc_va_Get( p_sys->p_va, p_ff_pic ) ) if( vlc_va_Get( p_sys->p_va, p_ff_pic ) )
{ {
...@@ -1074,8 +1086,9 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context, ...@@ -1074,8 +1086,9 @@ static int ffmpeg_GetFrameBuf( struct AVCodecContext *p_context,
p_ff_pic->linesize[2] = p_pic->p[2].i_pitch; p_ff_pic->linesize[2] = p_pic->p[2].i_pitch;
p_ff_pic->linesize[3] = 0; p_ff_pic->linesize[3] = 0;
/* FIXME what is that, should give good value */ #if LIBAVCODEC_VERSION_MAJOR < 54
p_ff_pic->age = 256*256*256*64; // FIXME FIXME from ffmpeg p_ff_pic->age = 256*256*256*64;
#endif
post_mt( p_sys ); post_mt( p_sys );
return 0; return 0;
......
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