Date: Fri, 18 Nov 2016 22:01:35 +0000 (UTC) From: Jan Beich <jbeich@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r426347 - in head/multimedia/bino: . files Message-ID: <201611182201.uAIM1Zss008089@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jbeich Date: Fri Nov 18 22:01:35 2016 New Revision: 426347 URL: https://svnweb.freebsd.org/changeset/ports/426347 Log: multimedia/bino: unbreak build with ffmpeg 3.x src/media_object.cpp:435:41: error: use of undeclared identifier 'PIX_FMT_YUV444P'; did you mean 'AV_PIX_FMT_YUV444P'? if (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P ^~~~~~~~~~~~~~~ AV_PIX_FMT_YUV444P /usr/local/include/libavutil/pixfmt.h:67:5: note: 'AV_PIX_FMT_YUV444P' declared here AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) ^ src/media_object.cpp:1943:92: error: use of undeclared identifier 'CODEC_ID_TEXT'; did you mean 'AV_CODEC_ID_TEXT'? if (_ffmpeg->format_ctx->streams[_ffmpeg->subtitle_streams[i]]->codec->codec_id != CODEC_ID_TEXT) ^~~~~~~~~~~~~ AV_CODEC_ID_TEXT /usr/local/include/libavcodec/avcodec.h:606:5: note: 'AV_CODEC_ID_TEXT' declared here AV_CODEC_ID_TEXT, ///< raw UTF-8 text ^ src/media_object.cpp:935:45: error: use of undeclared identifier 'avcodec_alloc_frame' _ffmpeg->video_frames.push_back(avcodec_alloc_frame()); ^ src/media_object.cpp:937:18: error: ISO C++ forbids forward references to 'enum' types enum PixelFormat frame_fmt = (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32 ^ PR: 214192 Obtained from: upstream (based on) Approved by: portmgr blanket Added: head/multimedia/bino/files/patch-src_media__object.cpp (contents, props changed) Deleted: head/multimedia/bino/files/patch-src-media_object.cpp Modified: head/multimedia/bino/Makefile (contents, props changed) Modified: head/multimedia/bino/Makefile ============================================================================== --- head/multimedia/bino/Makefile Fri Nov 18 22:01:15 2016 (r426346) +++ head/multimedia/bino/Makefile Fri Nov 18 22:01:35 2016 (r426347) @@ -3,7 +3,7 @@ PORTNAME= bino PORTVERSION= 1.4.2 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= multimedia MASTER_SITES= http://download.savannah.nongnu.org/releases/bino/ http://levsha.me/ports/distfiles/ Added: head/multimedia/bino/files/patch-src_media__object.cpp ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/multimedia/bino/files/patch-src_media__object.cpp Fri Nov 18 22:01:35 2016 (r426347) @@ -0,0 +1,216 @@ +Some changes are identical to upstream: +http://git.savannah.gnu.org/cgit/bino.git/commit/?id=bcba7045c99f +http://git.savannah.gnu.org/cgit/bino.git/commit/?id=50b7109633fa +http://git.savannah.gnu.org/cgit/bino.git/commit/?id=78023424d4cf + +--- src/media_object.cpp.orig 2013-01-27 21:04:48 UTC ++++ src/media_object.cpp +@@ -56,6 +56,23 @@ extern "C" + + #include "media_object.h" + ++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(51, 42, 0) ++#define AVPixelFormat PixelFormat ++#define AV_PIX_FMT_BGRA PIX_FMT_BGRA ++#define AV_PIX_FMT_YUV420P PIX_FMT_YUV420P ++#define AV_PIX_FMT_YUV420P10 PIX_FMT_YUV420P10 ++#define AV_PIX_FMT_YUV422P PIX_FMT_YUV422P ++#define AV_PIX_FMT_YUV422P10 PIX_FMT_YUV422P10 ++#define AV_PIX_FMT_YUV444P PIX_FMT_YUV444P ++#define AV_PIX_FMT_YUV444P10 PIX_FMT_YUV444P10 ++#define AV_PIX_FMT_YUVJ420P PIX_FMT_YUVJ420P ++#define AV_PIX_FMT_YUVJ422P PIX_FMT_YUVJ422P ++#define AV_PIX_FMT_YUVJ444P PIX_FMT_YUVJ444P ++#endif ++ ++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 25, 0) ++#define AV_CODEC_ID_TEXT CODEC_ID_TEXT ++#endif + + // The read thread. + // This thread reads packets from the AVFormatContext and stores them in the +@@ -150,7 +167,8 @@ public: + // Hide the FFmpeg stuff so that their messy header files cannot cause problems + // in other source files. + +-static const size_t audio_tmpbuf_size = (AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2; ++static const size_t max_audio_frame_size = 19200; // 1 second of 48khz 32bit audio ++static const size_t audio_tmpbuf_size = (max_audio_frame_size * 3) / 2; + + struct ffmpeg_stuff + { +@@ -422,20 +440,20 @@ void media_object::set_video_frame_templ + video_frame_template.value_range = video_frame::u8_full; + video_frame_template.chroma_location = video_frame::center; + if (!_always_convert_to_bgra32 +- && (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV444P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV420P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV420P10)) ++ && (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV420P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV420P10)) + { +- if (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV444P10) ++ if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P10) + { + video_frame_template.layout = video_frame::yuv444p; + } +- else if (video_codec_ctx->pix_fmt == PIX_FMT_YUV422P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P10) ++ else if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P10) + { + video_frame_template.layout = video_frame::yuv422p; + } +@@ -448,9 +466,9 @@ void media_object::set_video_frame_templ + { + video_frame_template.color_space = video_frame::yuv709; + } +- if (video_codec_ctx->pix_fmt == PIX_FMT_YUV444P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV422P10 +- || video_codec_ctx->pix_fmt == PIX_FMT_YUV420P10) ++ if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV444P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV422P10 ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUV420P10) + { + video_frame_template.value_range = video_frame::u10_mpeg; + if (video_codec_ctx->color_range == AVCOL_RANGE_JPEG) +@@ -477,15 +495,15 @@ void media_object::set_video_frame_templ + } + } + else if (!_always_convert_to_bgra32 +- && (video_codec_ctx->pix_fmt == PIX_FMT_YUVJ444P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUVJ422P +- || video_codec_ctx->pix_fmt == PIX_FMT_YUVJ420P)) ++ && (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ444P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ422P ++ || video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ420P)) + { +- if (video_codec_ctx->pix_fmt == PIX_FMT_YUVJ444P) ++ if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ444P) + { + video_frame_template.layout = video_frame::yuv444p; + } +- else if (video_codec_ctx->pix_fmt == PIX_FMT_YUVJ422P) ++ else if (video_codec_ctx->pix_fmt == AV_PIX_FMT_YUVJ422P) + { + video_frame_template.layout = video_frame::yuv422p; + } +@@ -879,7 +897,7 @@ void media_object::open(const std::strin + { + _ffmpeg->format_ctx->streams[i]->discard = AVDISCARD_ALL; // ignore by default; user must activate streams + AVCodecContext *codec_ctx = _ffmpeg->format_ctx->streams[i]->codec; +- AVCodec *codec = (codec_ctx->codec_id == CODEC_ID_TEXT ++ AVCodec *codec = (codec_ctx->codec_id == AV_CODEC_ID_TEXT + ? NULL : avcodec_find_decoder(codec_ctx->codec_id)); + // XXX: Sometimes the reported width and height for a video stream change after avcodec_open(), + // but the original values seem to be correct. This seems to happen mostly with 1920x1080 video +@@ -899,8 +917,8 @@ void media_object::open(const std::strin + if (codec_ctx->lowres || (codec && (codec->capabilities & CODEC_CAP_DR1))) + codec_ctx->flags |= CODEC_FLAG_EMU_EDGE; + } +- // Find and open the codec. CODEC_ID_TEXT is a special case: it has no decoder since it is unencoded raw data. +- if (codec_ctx->codec_id != CODEC_ID_TEXT && (!codec || (e = avcodec_open2(codec_ctx, codec, NULL)) < 0)) ++ // Find and open the codec. AV_CODEC_ID_TEXT is a special case: it has no decoder since it is unencoded raw data. ++ if (codec_ctx->codec_id != AV_CODEC_ID_TEXT && (!codec || (e = avcodec_open2(codec_ctx, codec, NULL)) < 0)) + { + msg::wrn(_("%s stream %d: Cannot open %s: %s"), _url.c_str(), i, + codec_ctx->codec_type == AVMEDIA_TYPE_VIDEO ? _("video codec") +@@ -928,10 +946,15 @@ void media_object::open(const std::strin + _ffmpeg->video_packets.push_back(AVPacket()); + av_init_packet(&(_ffmpeg->video_packets[j])); + _ffmpeg->video_decode_threads.push_back(video_decode_thread(_url, _ffmpeg, j)); ++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 28, 1) + _ffmpeg->video_frames.push_back(avcodec_alloc_frame()); + _ffmpeg->video_buffered_frames.push_back(avcodec_alloc_frame()); +- enum PixelFormat frame_fmt = (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32 +- ? PIX_FMT_BGRA : _ffmpeg->video_codec_ctxs[j]->pix_fmt); ++#else ++ _ffmpeg->video_frames.push_back(av_frame_alloc()); ++ _ffmpeg->video_buffered_frames.push_back(av_frame_alloc()); ++#endif ++ enum AVPixelFormat frame_fmt = (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32 ++ ? AV_PIX_FMT_BGRA : _ffmpeg->video_codec_ctxs[j]->pix_fmt); + int frame_bufsize = (avpicture_get_size(frame_fmt, + _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height)); + _ffmpeg->video_buffers.push_back(static_cast<uint8_t *>(av_malloc(frame_bufsize))); +@@ -944,20 +967,24 @@ void media_object::open(const std::strin + if (_ffmpeg->video_frame_templates[j].layout == video_frame::bgra32) + { + // Initialize things needed for software pixel format conversion +- int sws_bufsize = avpicture_get_size(PIX_FMT_BGRA, ++ int sws_bufsize = avpicture_get_size(AV_PIX_FMT_BGRA, + _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height); ++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 28, 1) + _ffmpeg->video_sws_frames.push_back(avcodec_alloc_frame()); ++#else ++ _ffmpeg->video_sws_frames.push_back(av_frame_alloc()); ++#endif + _ffmpeg->video_sws_buffers.push_back(static_cast<uint8_t *>(av_malloc(sws_bufsize))); + if (!_ffmpeg->video_sws_frames[j] || !_ffmpeg->video_sws_buffers[j]) + { + throw exc(HERE + ": " + strerror(ENOMEM)); + } + avpicture_fill(reinterpret_cast<AVPicture *>(_ffmpeg->video_sws_frames[j]), _ffmpeg->video_sws_buffers[j], +- PIX_FMT_BGRA, _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height); ++ AV_PIX_FMT_BGRA, _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height); + // Call sws_getCachedContext(NULL, ...) instead of sws_getContext(...) just to avoid a deprecation warning. + _ffmpeg->video_sws_ctxs.push_back(sws_getCachedContext(NULL, + _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height, _ffmpeg->video_codec_ctxs[j]->pix_fmt, +- _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height, PIX_FMT_BGRA, ++ _ffmpeg->video_codec_ctxs[j]->width, _ffmpeg->video_codec_ctxs[j]->height, AV_PIX_FMT_BGRA, + SWS_POINT, NULL, NULL, NULL)); + if (!_ffmpeg->video_sws_ctxs[j]) + { +@@ -1000,9 +1027,9 @@ void media_object::open(const std::strin + int j = _ffmpeg->subtitle_streams.size() - 1; + msg::dbg(_url + " stream " + str::from(i) + " is subtitle stream " + str::from(j) + "."); + _ffmpeg->subtitle_codec_ctxs.push_back(codec_ctx); +- // CODEC_ID_TEXT does not have any decoder; it is just UTF-8 text in the packet data. ++ // AV_CODEC_ID_TEXT does not have any decoder; it is just UTF-8 text in the packet data. + _ffmpeg->subtitle_codecs.push_back( +- _ffmpeg->subtitle_codec_ctxs[j]->codec_id == CODEC_ID_TEXT ? NULL : codec); ++ _ffmpeg->subtitle_codec_ctxs[j]->codec_id == AV_CODEC_ID_TEXT ? NULL : codec); + _ffmpeg->subtitle_box_templates.push_back(subtitle_box()); + set_subtitle_box_template(j); + _ffmpeg->subtitle_decode_threads.push_back(subtitle_decode_thread(_url, _ffmpeg, j)); +@@ -1505,7 +1532,7 @@ read_frame: + // We need to buffer the data because FFmpeg will clubber it when decoding the next frame. + av_picture_copy(reinterpret_cast<AVPicture *>(_ffmpeg->video_buffered_frames[_video_stream]), + reinterpret_cast<AVPicture *>(_ffmpeg->video_frames[_video_stream]), +- static_cast<enum PixelFormat>(_ffmpeg->video_codec_ctxs[_video_stream]->pix_fmt), ++ static_cast<enum AVPixelFormat>(_ffmpeg->video_codec_ctxs[_video_stream]->pix_fmt), + _ffmpeg->video_codec_ctxs[_video_stream]->width, + _ffmpeg->video_codec_ctxs[_video_stream]->height); + src_frame = _ffmpeg->video_buffered_frames[_video_stream]; +@@ -1776,8 +1803,8 @@ void subtitle_decode_thread::run() + int got_subtitle; + tmppacket = packet; + +- // CODEC_ID_TEXT does not have any decoder; it is just UTF-8 text in the packet data. +- if (_ffmpeg->subtitle_codec_ctxs[_subtitle_stream]->codec_id == CODEC_ID_TEXT) ++ // AV_CODEC_ID_TEXT does not have any decoder; it is just UTF-8 text in the packet data. ++ if (_ffmpeg->subtitle_codec_ctxs[_subtitle_stream]->codec_id == AV_CODEC_ID_TEXT) + { + int64_t duration = packet.convergence_duration * 1000000 + * _ffmpeg->format_ctx->streams[_ffmpeg->subtitle_streams[_subtitle_stream]]->time_base.num +@@ -1937,9 +1964,9 @@ void media_object::seek(int64_t dest_pos + } + for (size_t i = 0; i < _ffmpeg->subtitle_streams.size(); i++) + { +- if (_ffmpeg->format_ctx->streams[_ffmpeg->subtitle_streams[i]]->codec->codec_id != CODEC_ID_TEXT) ++ if (_ffmpeg->format_ctx->streams[_ffmpeg->subtitle_streams[i]]->codec->codec_id != AV_CODEC_ID_TEXT) + { +- // CODEC_ID_TEXT has no decoder, so we cannot flush its buffers ++ // AV_CODEC_ID_TEXT has no decoder, so we cannot flush its buffers + avcodec_flush_buffers(_ffmpeg->format_ctx->streams[_ffmpeg->subtitle_streams[i]]->codec); + } + _ffmpeg->subtitle_box_buffers[i].clear();
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611182201.uAIM1Zss008089>