From owner-svn-ports-head@freebsd.org Fri Nov 18 22:00:58 2016 Return-Path: Delivered-To: svn-ports-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66E51C48EEC; Fri, 18 Nov 2016 22:00:58 +0000 (UTC) (envelope-from jbeich@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 43E30AA1; Fri, 18 Nov 2016 22:00:58 +0000 (UTC) (envelope-from jbeich@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uAIM0vPg005752; Fri, 18 Nov 2016 22:00:57 GMT (envelope-from jbeich@FreeBSD.org) Received: (from jbeich@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uAIM0vn7005751; Fri, 18 Nov 2016 22:00:57 GMT (envelope-from jbeich@FreeBSD.org) Message-Id: <201611182200.uAIM0vn7005751@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jbeich set sender to jbeich@FreeBSD.org using -f From: Jan Beich Date: Fri, 18 Nov 2016 22:00:57 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r426345 - in head/emulators/visualboyadvance-m: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Nov 2016 22:00:58 -0000 Author: jbeich Date: Fri Nov 18 22:00:57 2016 New Revision: 426345 URL: https://svnweb.freebsd.org/changeset/ports/426345 Log: emulators/visualboyadvance-m: unbreak build with ffmpeg 3.x In file included from src/common/ffmpeg.cpp:62: src/common/ffmpeg.h:70:5: error: unknown type name 'PixelFormat'; did you mean 'AVPixelFormat'? priv_PixelFormat pixfmt; ^~~~~~~~~~~~~~~~ AVPixelFormat src/common/ffmpeg.cpp:61:26: note: expanded from macro 'priv_PixelFormat' #define priv_PixelFormat PixelFormat ^ /usr/local/include/libavutil/pixfmt.h:60:6: note: 'AVPixelFormat' declared here enum AVPixelFormat { ^ src/common/ffmpeg.cpp:81:11: error: use of undeclared identifier 'avcodec_alloc_frame' pic = avcodec_alloc_frame(); ^ src/common/ffmpeg.cpp:92:28: error: use of undeclared identifier 'CODEC_ID_NONE'; did you mean 'AV_CODEC_ID_NONE'? if(fmt->audio_codec == CODEC_ID_NONE) ^~~~~~~~~~~~~ AV_CODEC_ID_NONE /usr/local/include/libavcodec/avcodec.h:192:5: note: 'AV_CODEC_ID_NONE' declared here AV_CODEC_ID_NONE, ^ src/common/ffmpeg.cpp:163:11: error: use of undeclared identifier 'PIX_FMT_RGB24'; did you mean 'AV_PIX_FMT_RGB24'? pixfmt = PIX_FMT_RGB24; ^~~~~~~~~~~~~ AV_PIX_FMT_RGB24 /usr/local/include/libavutil/pixfmt.h:64:5: note: 'AV_PIX_FMT_RGB24' declared here AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... ^ src/common/ffmpeg.cpp:416:13: error: use of undeclared identifier 'avcodec_encode_video'; did you mean 'avcodec_encode_video2'? pkt.size = avcodec_encode_video(ctx, video_buf, VIDEO_BUF_LEN, f); ^~~~~~~~~~~~~~~~~~~~ avcodec_encode_video2 /usr/local/include/libavcodec/avcodec.h:5322:5: note: 'avcodec_encode_video2' declared here int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, ^ src/common/ffmpeg.cpp:468:13: error: use of undeclared identifier 'avcodec_encode_audio'; did you mean 'avcodec_encode_audio2'? pkt.size = avcodec_encode_audio(ctx, audio_buf, frame_len, ^~~~~~~~~~~~~~~~~~~~ avcodec_encode_audio2 /usr/local/include/libavcodec/avcodec.h:5283:5: note: 'avcodec_encode_audio2' declared here int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, ^ PR: 214190 Obtained from: upstream Approved by: maintainer timeout (2 weeks) Added: head/emulators/visualboyadvance-m/files/patch-src_common_ffmpeg.cpp (contents, props changed) Modified: head/emulators/visualboyadvance-m/Makefile (contents, props changed) Modified: head/emulators/visualboyadvance-m/Makefile ============================================================================== --- head/emulators/visualboyadvance-m/Makefile Fri Nov 18 22:00:36 2016 (r426344) +++ head/emulators/visualboyadvance-m/Makefile Fri Nov 18 22:00:57 2016 (r426345) @@ -3,6 +3,7 @@ PORTNAME= visualboyadvance-m PORTVERSION= 2.0.0b2 +PORTREVISION= 1 CATEGORIES= emulators MAINTAINER= root@cooltrainer.org Added: head/emulators/visualboyadvance-m/files/patch-src_common_ffmpeg.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/emulators/visualboyadvance-m/files/patch-src_common_ffmpeg.cpp Fri Nov 18 22:00:57 2016 (r426345) @@ -0,0 +1,173 @@ +https://github.com/visualboyadvance-m/visualboyadvance-m/commit/502de18 +https://github.com/visualboyadvance-m/visualboyadvance-m/commit/a3a07d2 +https://github.com/visualboyadvance-m/visualboyadvance-m/commit/029a5fc +https://github.com/visualboyadvance-m/visualboyadvance-m/commit/3f3c385 + +--- src/common/ffmpeg.cpp.orig 2015-09-19 15:58:26 UTC ++++ src/common/ffmpeg.cpp +@@ -53,6 +53,26 @@ static void avformat_free_context(AVFormatContext *ctx) + #endif + } + ++// For compatibility with 3.0+ ffmpeg ++#include ++#ifndef PixelFormat ++#define PixelFormat AVPixelFormat ++#endif ++#if LIBAVCODEC_VERSION_MAJOR > 56 ++#define CODEC_ID_NONE AV_CODEC_ID_NONE ++#define CODEC_ID_PCM_S16LE AV_CODEC_ID_PCM_S16LE ++#define CODEC_ID_PCM_S16BE AV_CODEC_ID_PCM_S16BE ++#define CODEC_ID_PCM_U16LE AV_CODEC_ID_PCM_U16LE ++#define CODEC_ID_PCM_U16BE AV_CODEC_ID_PCM_U16BE ++#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER ++#endif ++#if LIBAVUTIL_VERSION_MAJOR > 54 ++#define avcodec_alloc_frame av_frame_alloc ++#define PIX_FMT_RGB565LE AV_PIX_FMT_RGB565LE ++#define PIX_FMT_RGB24 AV_PIX_FMT_RGB24 ++#define PIX_FMT_RGBA AV_PIX_FMT_RGBA ++#endif ++ + #define priv_AVFormatContext AVFormatContext + #define priv_AVStream AVStream + #define priv_AVOutputFormat AVOutputFormat +@@ -103,10 +123,16 @@ MediaRet MediaRecorder::setup_sound_stream(const char *fname, AVOutputFormat *fm + oc = NULL; + return MRET_ERR_NOMEM; + } ++ ++ AVCodec *codec = avcodec_find_encoder(fmt->audio_codec); ++ + ctx = aud_st->codec; + ctx->codec_id = fmt->audio_codec; + ctx->codec_type = AVMEDIA_TYPE_AUDIO; +- ctx->sample_fmt = AV_SAMPLE_FMT_S16; ++ // Some encoders don't like s16 (SAMPLE_FMT_S16) ++ ctx->sample_fmt = codec->sample_fmts[0]; ++ // This was changed in the initial ffmpeg 3.0 update, ++ // but shouldn't (as far as I'm aware) cause problems with older versions + ctx->bit_rate = 128000; // arbitrary; in case we're generating mp3 + ctx->sample_rate = soundGetSampleRate(); + ctx->channels = 2; +@@ -115,7 +141,6 @@ MediaRet MediaRecorder::setup_sound_stream(const char *fname, AVOutputFormat *fm + if(fmt->flags & AVFMT_GLOBALHEADER) + ctx->flags |= CODEC_FLAG_GLOBAL_HEADER; + +- AVCodec *codec = avcodec_find_encoder(fmt->audio_codec); + #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53,6,0) + if(!codec || avcodec_open(ctx, codec)) { + #else +@@ -369,6 +394,7 @@ MediaRecorder::~MediaRecorder() + Stop(); + } + ++// Still needs updating for avcodec_encode_video2 + MediaRet MediaRecorder::AddFrame(const u8 *vid) + { + if(!oc || !vid_st) +@@ -376,6 +402,9 @@ MediaRet MediaRecorder::AddFrame(const u8 *vid) + + AVCodecContext *ctx = vid_st->codec; + AVPacket pkt; ++#if LIBAVCODEC_VERSION_MAJOR > 56 ++ int ret, got_packet = 0; ++#endif + + // strip borders. inconsistent between depths for some reason + // but fortunately consistent between gb/gba. +@@ -413,7 +442,20 @@ MediaRet MediaRecorder::AddFrame(const u8 *vid) + pkt.data = f->data[0]; + pkt.size = linesize * ctx->height; + } else { ++#if LIBAVCODEC_VERSION_MAJOR > 56 ++ pkt.data = video_buf; ++ pkt.size = VIDEO_BUF_LEN; ++ f->format = ctx->pix_fmt; ++ f->width = ctx->width; ++ f->height = ctx->height; ++ ret = avcodec_encode_video2(ctx, &pkt, f, &got_packet); ++ if(!ret && got_packet && ctx->coded_frame) { ++ ctx->coded_frame->pts = pkt.pts; ++ ctx->coded_frame->key_frame = !!(pkt.flags & AV_PKT_FLAG_KEY); ++ } ++#else + pkt.size = avcodec_encode_video(ctx, video_buf, VIDEO_BUF_LEN, f); ++#endif + if(!pkt.size) + return MRET_OK; + if(ctx->coded_frame && ctx->coded_frame->pts != AV_NOPTS_VALUE) +@@ -438,6 +480,53 @@ MediaRet MediaRecorder::AddFrame(const u8 *vid) + return MRET_OK; + } + ++#if LIBAVCODEC_VERSION_MAJOR > 56 ++/* FFmpeg depricated avcodec_encode_audio. ++ * It was removed completely in 3.0. ++ * This will at least get audio recording *working* ++ */ ++static inline int MediaRecorderEncodeAudio(AVCodecContext *ctx, ++ AVPacket *pkt, ++ uint8_t *buf, int buf_size, ++ const short *samples) ++{ ++ AVFrame *frame; ++ av_init_packet(pkt); ++ int ret, samples_size, got_packet = 0; ++ ++ pkt->data = buf; ++ pkt->size = buf_size; ++ if (samples) { ++ frame = frame = av_frame_alloc(); ++ if (ctx->frame_size) { ++ frame->nb_samples = ctx->frame_size; ++ } else { ++ frame->nb_samples = (int64_t)buf_size * 8 / ++ (av_get_bits_per_sample(ctx->codec_id) * ++ ctx->channels); ++ } ++ frame->format = ctx->sample_fmt; ++ frame->channel_layout = ctx->channel_layout; ++ samples_size = av_samples_get_buffer_size(NULL, ctx->channels, ++ frame->nb_samples, ctx->sample_fmt, 1); ++ avcodec_fill_audio_frame(frame, ctx->channels, ctx->sample_fmt, ++ (const uint8_t *)samples, samples_size, 1); ++ //frame->pts = AV_NOPTS_VALUE; ++ } else { ++ frame = NULL; ++ } ++ ret = avcodec_encode_audio2(ctx, pkt, frame, &got_packet); ++ if (!ret && got_packet && ctx->coded_frame) { ++ ctx->coded_frame->pts = pkt->pts; ++ ctx->coded_frame->key_frame = !!(pkt->flags & AV_PKT_FLAG_KEY); ++ } ++ if (frame && frame->extended_data != frame->data) ++ av_freep(&frame->extended_data); ++ return ret; ++ ++} ++#endif ++ + MediaRet MediaRecorder::AddFrame(const u16 *aud) + { + if(!oc || !aud_st) +@@ -465,13 +554,19 @@ MediaRet MediaRecorder::AddFrame(const u16 *aud) + } + while(len + in_audio_buf2 >= frame_len) { + av_init_packet(&pkt); ++ #if LIBAVCODEC_VERSION_MAJOR > 56 ++ MediaRecorderEncodeAudio(ctx, &pkt, audio_buf, frame_len, ++ #else + pkt.size = avcodec_encode_audio(ctx, audio_buf, frame_len, ++ #endif + (const short *)(in_audio_buf2 ? audio_buf2 : aud)); + if(ctx->coded_frame && ctx->coded_frame->pts != AV_NOPTS_VALUE) + pkt.pts = av_rescale_q(ctx->coded_frame->pts, ctx->time_base, aud_st->time_base); + pkt.flags |= AV_PKT_FLAG_KEY; + pkt.stream_index = aud_st->index; ++ #if LIBAVCODEC_VERSION_MAJOR < 57 + pkt.data = audio_buf; ++ #endif + if(av_interleaved_write_frame(oc, &pkt) < 0) { + avformat_free_context(oc); + oc = NULL;