From c33fafd6f1bc2a430c114231cecc6e1c56c1f939 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Wed, 20 Apr 2011 02:59:45 +0300 Subject: Update libav API uses Update various code to use newer alternatives instead of deprecated functions/fields that are being dropped at libav API bump. An exception is avcodec_thread_init() which is being dropped even though it's still _necessary_ with fairly recent libav versions, so there's no good alternative which would work with both those recent versions and latest libavcodec. I think there are grounds to consider the drop premature and revert it for now; if that doesn't happen I'll add a version-test #if check around it later. --- av_log.c | 4 ++-- av_opts.c | 2 +- libmpcodecs/ad_ffmpeg.c | 2 +- libmpcodecs/vd_ffmpeg.c | 10 ++++------ libmpcodecs/vf_geq.c | 4 ++-- libmpcodecs/vf_pp.c | 2 +- libmpdemux/demux_lavf.c | 25 ++++++++++++++----------- 7 files changed, 25 insertions(+), 24 deletions(-) diff --git a/av_log.c b/av_log.c index bd42ce3bf1..bcf1a14e09 100644 --- a/av_log.c +++ b/av_log.c @@ -57,10 +57,10 @@ static int extract_msg_type_from_ctx(void *ptr) if (!strcmp(avc->class_name, "AVCodecContext")) { AVCodecContext *s = ptr; if (s->codec) { - if (s->codec->type == CODEC_TYPE_AUDIO) { + if (s->codec->type == AVMEDIA_TYPE_AUDIO) { if (s->codec->decode) return MSGT_DECAUDIO; - } else if (s->codec->type == CODEC_TYPE_VIDEO) { + } else if (s->codec->type == AVMEDIA_TYPE_VIDEO) { if (s->codec->decode) return MSGT_DECVIDEO; } diff --git a/av_opts.c b/av_opts.c index 452253b4de..59f47edf52 100644 --- a/av_opts.c +++ b/av_opts.c @@ -37,7 +37,7 @@ int parse_avopts(void *v, char *str){ arg = strchr(str, '='); if(arg) *arg++= 0; - if(!av_set_string(v, str, arg)){ + if (av_set_string3(v, str, arg, 0, NULL) < 0) { free(start); return -1; } diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c index ec6a2f77ac..8f56e71b5d 100644 --- a/libmpcodecs/ad_ffmpeg.c +++ b/libmpcodecs/ad_ffmpeg.c @@ -127,7 +127,7 @@ static int init(sh_audio_t *sh_audio) } lavc_context->request_channels = opts->audio_output_channels; lavc_context->codec_tag = sh_audio->format; //FOURCC - lavc_context->codec_type = CODEC_TYPE_AUDIO; + lavc_context->codec_type = AVMEDIA_TYPE_AUDIO; lavc_context->codec_id = lavc_codec->id; // not sure if required, imho not --A'rpi /* alloc extra data */ diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c index 2424dda95b..431b5cd340 100644 --- a/libmpcodecs/vd_ffmpeg.c +++ b/libmpcodecs/vd_ffmpeg.c @@ -208,7 +208,7 @@ static int init(sh_video_t *sh){ ctx->avctx = avcodec_alloc_context(); avctx = ctx->avctx; avctx->opaque = sh; - avctx->codec_type = CODEC_TYPE_VIDEO; + avctx->codec_type = AVMEDIA_TYPE_VIDEO; avctx->codec_id = lavc_codec->id; if (lavc_codec->capabilities & CODEC_CAP_HWACCEL // XvMC @@ -541,14 +541,12 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){ type = MP_IMGTYPE_STATIC; flags |= MP_IMGFLAG_PRESERVE; } - flags|=(!avctx->hurry_up && ctx->do_slices) ? - MP_IMGFLAG_DRAW_CALLBACK:0; + flags |= ctx->do_slices ? MP_IMGFLAG_DRAW_CALLBACK : 0; mp_msg(MSGT_DECVIDEO, MSGL_DBG2, type == MP_IMGTYPE_STATIC ? "using STATIC\n" : "using TEMP\n"); } else { if(!pic->reference){ ctx->b_count++; - flags|=(!avctx->hurry_up && ctx->do_slices) ? - MP_IMGFLAG_DRAW_CALLBACK:0; + flags |= ctx->do_slices ? MP_IMGFLAG_DRAW_CALLBACK:0; }else{ ctx->ip_count++; flags|= MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE @@ -787,7 +785,7 @@ static struct mp_image *decode(struct sh_video *sh, void *data, int len, pkt.data = data; pkt.size = len; // HACK: make PNGs decode normally instead of as CorePNG delta frames - pkt.flags = PKT_FLAG_KEY; + pkt.flags = AV_PKT_FLAG_KEY; // The avcodec opaque field stupidly supports only int64_t type *(double *)&avctx->reordered_opaque = *reordered_pts; ret = avcodec_decode_video2(avctx, pic, &got_picture, &pkt); diff --git a/libmpcodecs/vf_geq.c b/libmpcodecs/vf_geq.c index ed855d1b7d..68a9cf780c 100644 --- a/libmpcodecs/vf_geq.c +++ b/libmpcodecs/vf_geq.c @@ -116,7 +116,7 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){ const_values[3]=y; for(x=0; xpriv->e[plane], + dst[x + y * dst_stride] = av_expr_eval(vf->priv->e[plane], const_values, vf); } } @@ -176,7 +176,7 @@ static int vf_open(vf_instance_t *vf, char *args){ plane==0 ? lum : (plane==1 ? cb : cr), NULL }; - res = av_parse_expr(&vf->priv->e[plane], eq[plane], const_names, NULL, NULL, func2_names, func2, 0, NULL); + res = av_expr_parse(&vf->priv->e[plane], eq[plane], const_names, NULL, NULL, func2_names, func2, 0, NULL); if (res < 0) { mp_msg(MSGT_VFILTER, MSGL_ERR, "geq: error loading equation `%s'\n", eq[plane]); diff --git a/libmpcodecs/vf_pp.c b/libmpcodecs/vf_pp.c index f3dc4d9537..10c4edf707 100644 --- a/libmpcodecs/vf_pp.c +++ b/libmpcodecs/vf_pp.c @@ -37,7 +37,7 @@ struct vf_priv_s { int pp; - pp_mode_t *ppMode[PP_QUALITY_MAX+1]; + pp_mode *ppMode[PP_QUALITY_MAX+1]; void *context; unsigned int outfmt; }; diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 3aca4b603c..0c5b6da769 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -289,7 +289,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { codec->codec_tag = override_tag; switch(codec->codec_type){ - case CODEC_TYPE_AUDIO:{ + case AVMEDIA_TYPE_AUDIO:{ WAVEFORMATEX *wf; sh_audio_t* sh_audio; sh_audio = new_sh_audio_aid(demuxer, i, priv->audio_streams); @@ -361,7 +361,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { stream_id = priv->audio_streams++; break; } - case CODEC_TYPE_VIDEO:{ + case AVMEDIA_TYPE_VIDEO:{ sh_video_t* sh_video; BITMAPINFOHEADER *bih; sh_video=new_sh_video_vid(demuxer, i, priv->video_streams); @@ -433,7 +433,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { stream_id = priv->video_streams++; break; } - case CODEC_TYPE_SUBTITLE:{ + case AVMEDIA_TYPE_SUBTITLE:{ sh_sub_t* sh_sub; char type; /* only support text subtitles for now */ @@ -476,9 +476,12 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { stream_id = priv->sub_streams++; break; } - case CODEC_TYPE_ATTACHMENT:{ + case AVMEDIA_TYPE_ATTACHMENT:{ + AVMetadataTag *ftag = av_metadata_get(st->metadata, "filename", + NULL, 0); + char *filename = ftag ? ftag->value : NULL; if (st->codec->codec_id == CODEC_ID_TTF) - demuxer_add_attachment(demuxer, BSTR(st->filename), + demuxer_add_attachment(demuxer, BSTR(filename), BSTR("application/x-truetype-font"), (struct bstr){codec->extradata, codec->extradata_size}); @@ -755,14 +758,14 @@ static int demux_lavf_fill_buffer(demuxer_t *demux, demux_stream_t *dsds){ if(ts != AV_NOPTS_VALUE){ dp->pts = ts * av_q2d(priv->avfc->streams[id]->time_base); priv->last_pts= dp->pts * AV_TIME_BASE; - // always set duration for subtitles, even if PKT_FLAG_KEY is not set, + // always set duration for subtitles, even if AV_PKT_FLAG_KEY isn't set, // otherwise they will stay on screen to long if e.g. ASS is demuxed from mkv - if((ds == demux->sub || (pkt.flags & PKT_FLAG_KEY)) && + if ((ds == demux->sub || (pkt.flags & AV_PKT_FLAG_KEY)) && pkt.convergence_duration > 0) dp->duration = pkt.convergence_duration * av_q2d(priv->avfc->streams[id]->time_base); } dp->pos=demux->filepos; - dp->flags= !!(pkt.flags&PKT_FLAG_KEY); + dp->flags = !!(pkt.flags & AV_PKT_FLAG_KEY); // append packet to DS stream: ds_add_packet(ds,dp); return 1; @@ -922,15 +925,15 @@ redo: { switch(priv->avfc->streams[program->stream_index[i]]->codec->codec_type) { - case CODEC_TYPE_VIDEO: + case AVMEDIA_TYPE_VIDEO: if(prog->vid == -2) prog->vid = program->stream_index[i]; break; - case CODEC_TYPE_AUDIO: + case AVMEDIA_TYPE_AUDIO: if(prog->aid == -2) prog->aid = program->stream_index[i]; break; - case CODEC_TYPE_SUBTITLE: + case AVMEDIA_TYPE_SUBTITLE: if(prog->sid == -2 && priv->avfc->streams[program->stream_index[i]]->codec->codec_id == CODEC_ID_TEXT) prog->sid = program->stream_index[i]; break; -- cgit v1.2.3