diff --git a/tvheadend-4.0.10.tar.gz b/tvheadend-4.0.10.tar.gz deleted file mode 100644 index 6ac9c1a..0000000 --- a/tvheadend-4.0.10.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f610e7d9f3bf6cff05cd73830a66ee0c74bc5291c4c9d08369364c4c681ebf23 -size 15825140 diff --git a/tvheadend-4.0.9-ffmpeg_3.0.patch b/tvheadend-4.0.9-ffmpeg_3.0.patch deleted file mode 100644 index de53824..0000000 --- a/tvheadend-4.0.9-ffmpeg_3.0.patch +++ /dev/null @@ -1,436 +0,0 @@ -diff -up ./configure.orig ./configure ---- ./configure.orig 2016-03-14 10:10:57.000000000 +0100 -+++ ./configure 2016-08-09 13:20:27.159342444 +0200 -@@ -395,7 +395,7 @@ else - has_libav=false - fi - -- if $has_libav && ! check_pkg libswscale ">=2.3.100"; then -+ if $has_libav && ! check_pkg libavfilter ">=4.0.0"; then - has_libav=false - fi - -@@ -421,7 +421,7 @@ else - has_libav=false - fi - -- if $has_libav && ! check_pkg libswscale ">=2.1.2"; then -+ if $has_libav && ! check_pkg libacvfilter ">=4.0.0"; then - has_libav=false - fi - -diff -up ./src/libav.c.orig ./src/libav.c ---- ./src/libav.c.orig 2016-03-14 10:10:57.000000000 +0100 -+++ ./src/libav.c 2016-08-09 13:20:27.159342444 +0200 -@@ -186,4 +186,5 @@ libav_init(void) - av_log_set_callback(libav_log_callback); - av_log_set_level(AV_LOG_VERBOSE); - av_register_all(); -+ avfilter_register_all(); - } -diff -up ./src/libav.h.orig ./src/libav.h ---- ./src/libav.h.orig 2016-03-14 10:10:57.000000000 +0100 -+++ ./src/libav.h 2016-08-09 13:20:27.159342444 +0200 -@@ -21,6 +21,7 @@ - - - #include -+#include - #include "tvheadend.h" - - /* -diff -up ./src/plumbing/transcoding.c.orig ./src/plumbing/transcoding.c ---- ./src/plumbing/transcoding.c.orig 2016-08-09 13:20:21.782349916 +0200 -+++ ./src/plumbing/transcoding.c 2016-08-09 13:20:28.686340322 +0200 -@@ -19,12 +19,14 @@ - #include - #include - #include --#include -+#include -+#include -+#include -+#include - #include - #include - #include - #include --#include - - #if LIBAVUTIL_VERSION_MICRO >= 100 /* FFMPEG */ - #define USING_FFMPEG 1 -@@ -91,9 +93,12 @@ typedef struct video_stream { - AVCodec *vid_ocodec; - - AVFrame *vid_dec_frame; -- struct SwsContext *vid_scaler; - AVFrame *vid_enc_frame; - -+ AVFilterGraph *flt_graph; -+ AVFilterContext *flt_bufsrcctx; -+ AVFilterContext *flt_bufsinkctx; -+ - int16_t vid_width; - int16_t vid_height; - -@@ -267,6 +272,125 @@ transcoder_stream_packet(transcoder_t *t - } - - -+/* create a simple deinterlacer-scaler video filter chain */ -+static int -+create_video_filter(video_stream_t *vs, transcoder_t *t, -+ AVCodecContext *ictx, AVCodecContext *octx) -+{ -+ AVFilterInOut *flt_inputs, *flt_outputs; -+ AVFilter *flt_bufsrc, *flt_bufsink; -+ enum AVPixelFormat pix_fmts[] = { 0, AV_PIX_FMT_NONE }; -+ char opt[128]; -+ int err; -+ -+ err = 1; -+ flt_inputs = flt_outputs = NULL; -+ flt_bufsrc = flt_bufsink = NULL; -+ -+ if (vs->flt_graph) -+ avfilter_graph_free(&vs->flt_graph); -+ -+ vs->flt_graph = avfilter_graph_alloc(); -+ if (!vs->flt_graph) -+ return err; -+ -+ flt_inputs = avfilter_inout_alloc(); -+ if (!flt_inputs) -+ goto out_err; -+ -+ flt_outputs = avfilter_inout_alloc(); -+ if (!flt_outputs) -+ goto out_err; -+ -+ flt_bufsrc = avfilter_get_by_name("buffer"); -+ flt_bufsink = avfilter_get_by_name("buffersink"); -+ if (!flt_bufsrc || !flt_bufsink) { -+ tvherror("transcode", "%04X: libav default buffers unknown", shortid(t)); -+ goto out_err; -+ } -+ -+ memset(opt, 0, sizeof(opt)); -+ snprintf(opt, sizeof(opt), "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d", -+ ictx->width, -+ ictx->height, -+ ictx->pix_fmt, -+ ictx->time_base.num, -+ ictx->time_base.den, -+ ictx->sample_aspect_ratio.num, -+ ictx->sample_aspect_ratio.den); -+ -+ err = avfilter_graph_create_filter(&vs->flt_bufsrcctx, flt_bufsrc, "in", -+ opt, NULL, vs->flt_graph); -+ if (err < 0) { -+ tvherror("transcode", "%04X: fltchain IN init error", shortid(t)); -+ goto out_err; -+ } -+ -+ err = avfilter_graph_create_filter(&vs->flt_bufsinkctx, flt_bufsink, -+ "out", NULL, NULL, vs->flt_graph); -+ if (err < 0) { -+ tvherror("transcode", "%04X: fltchain OUT init error", shortid(t)); -+ goto out_err; -+ } -+ -+ pix_fmts[0] = octx->pix_fmt; -+ err = av_opt_set_int_list(vs->flt_bufsinkctx, "pix_fmts", pix_fmts, -+ AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN); -+ if (err < 0) { -+ tvherror("transcode", "%08X: fltchain cannot set output pixfmt", -+ shortid(t)); -+ goto out_err; -+ } -+ -+ flt_outputs->name = av_strdup("in"); -+ flt_outputs->filter_ctx = vs->flt_bufsrcctx; -+ flt_outputs->pad_idx = 0; -+ flt_outputs->next = NULL; -+ flt_inputs->name = av_strdup("out"); -+ flt_inputs->filter_ctx = vs->flt_bufsinkctx; -+ flt_inputs->pad_idx = 0; -+ flt_inputs->next = NULL; -+ -+ /* add filters: yadif to deinterlace and a scaler */ -+ memset(opt, 0, sizeof(opt)); -+ snprintf(opt, sizeof(opt), "yadif,scale=%dx%d", -+ octx->width, -+ octx->height); -+ err = avfilter_graph_parse_ptr(vs->flt_graph, -+ opt, -+ &flt_inputs, -+ &flt_outputs, -+ NULL); -+ if (err < 0) { -+ tvherror("transcode", "%04X: failed to init filter chain", shortid(t)); -+ goto out_err; -+ } -+ -+ err = avfilter_graph_config(vs->flt_graph, NULL); -+ if (err < 0) { -+ tvherror("transcode", "%04X: failed to config filter chain", shortid(t)); -+ goto out_err; -+ } -+ -+ avfilter_inout_free(&flt_inputs); -+ avfilter_inout_free(&flt_outputs); -+ -+ return 0; /* all OK */ -+ -+out_err: -+ if (flt_inputs) -+ avfilter_inout_free(&flt_inputs); -+ if (flt_outputs) -+ avfilter_inout_free(&flt_outputs); -+ if (vs->flt_graph) { -+ avfilter_graph_free(&vs->flt_graph); -+ vs->flt_graph = NULL; -+ } -+ -+ return err; -+} -+ -+ - /** - * - */ -@@ -592,12 +716,12 @@ transcoder_stream_audio(transcoder_t *t, - // Convert audio - tvhtrace("transcode", "%04X: converting audio", shortid(t)); - -- tvhtrace("transcode", "%04X: IN : channels=%d, layout=%" PRIi64 ", rate=%d, fmt=%d, bitrate=%d", -+ tvhtrace("transcode", "%04X: IN : channels=%d, layout=%" PRIi64 ", rate=%d, fmt=%d, bitrate=%"PRId64, - shortid(t), ictx->channels, ictx->channel_layout, ictx->sample_rate, -- ictx->sample_fmt, ictx->bit_rate); -- tvhtrace("transcode", "%04X: OUT: channels=%d, layout=%" PRIi64 ", rate=%d, fmt=%d, bitrate=%d", -+ ictx->sample_fmt, (int64_t)ictx->bit_rate); -+ tvhtrace("transcode", "%04X: OUT: channels=%d, layout=%" PRIi64 ", rate=%d, fmt=%d, bitrate=%"PRId64, - shortid(t), octx->channels, octx->channel_layout, octx->sample_rate, -- octx->sample_fmt, octx->bit_rate); -+ octx->sample_fmt, (int64_t)octx->bit_rate); - - if (transcode_opt_set_int(t, ts, as->resample_context, - "in_channel_layout", ictx->channel_layout, 1)) -@@ -962,9 +1086,7 @@ transcoder_stream_video(transcoder_t *t, - AVCodecContext *ictx, *octx; - AVDictionary *opts; - AVPacket packet, packet2; -- AVPicture deint_pic; -- uint8_t *buf, *deint; -- int length, len, ret, got_picture, got_output, got_ref; -+ int length, ret, got_picture, got_output, got_ref; - video_stream_t *vs = (video_stream_t*)ts; - streaming_message_t *sm; - th_pkt_t *pkt2; -@@ -980,7 +1102,6 @@ transcoder_stream_video(transcoder_t *t, - icodec = vs->vid_icodec; - ocodec = vs->vid_ocodec; - -- buf = deint = NULL; - opts = NULL; - - got_ref = 0; -@@ -1061,7 +1182,7 @@ transcoder_stream_video(transcoder_t *t, - switch (ts->ts_type) { - case SCT_MPEG2VIDEO: - octx->codec_id = AV_CODEC_ID_MPEG2VIDEO; -- octx->pix_fmt = PIX_FMT_YUV420P; -+ octx->pix_fmt = AV_PIX_FMT_YUV420P; - octx->flags |= CODEC_FLAG_GLOBAL_HEADER; - - // Default settings for quantizer. Best quality unless changed by the streaming profile. -@@ -1089,7 +1210,7 @@ transcoder_stream_video(transcoder_t *t, - - case SCT_VP8: - octx->codec_id = AV_CODEC_ID_VP8; -- octx->pix_fmt = PIX_FMT_YUV420P; -+ octx->pix_fmt = AV_PIX_FMT_YUV420P; - - av_dict_set(&opts, "quality", "realtime", 0); - -@@ -1120,7 +1241,7 @@ transcoder_stream_video(transcoder_t *t, - - case SCT_H264: - octx->codec_id = AV_CODEC_ID_H264; -- octx->pix_fmt = PIX_FMT_YUV420P; -+ octx->pix_fmt = AV_PIX_FMT_YUV420P; - octx->flags |= CODEC_FLAG_GLOBAL_HEADER; - - // Qscale difference between I-frames and P-frames. -@@ -1177,79 +1298,53 @@ transcoder_stream_video(transcoder_t *t, - transcoder_stream_invalidate(ts); - goto cleanup; - } -- } -- -- len = avpicture_get_size(ictx->pix_fmt, ictx->width, ictx->height); -- deint = av_malloc(len); - -- avpicture_fill(&deint_pic, -- deint, -- ictx->pix_fmt, -- ictx->width, -- ictx->height); -- -- if (avpicture_deinterlace(&deint_pic, -- (AVPicture *)vs->vid_dec_frame, -- ictx->pix_fmt, -- ictx->width, -- ictx->height) < 0) { -- tvherror("transcode", "%04X: Cannot deinterlace frame", shortid(t)); -- transcoder_stream_invalidate(ts); -- goto cleanup; -+ if (create_video_filter(vs, t, ictx, octx)) { -+ tvherror("transcode", "%04X: Video filter creation failed", -+ shortid(t)); -+ transcoder_stream_invalidate(ts); -+ goto cleanup; -+ } - } - -- len = avpicture_get_size(octx->pix_fmt, octx->width, octx->height); -- buf = av_malloc(len + FF_INPUT_BUFFER_PADDING_SIZE); -- memset(buf, 0, len); -- -- avpicture_fill((AVPicture *)vs->vid_enc_frame, -- buf, -- octx->pix_fmt, -- octx->width, -- octx->height); -- -- vs->vid_scaler = sws_getCachedContext(vs->vid_scaler, -- ictx->width, -- ictx->height, -- ictx->pix_fmt, -- octx->width, -- octx->height, -- octx->pix_fmt, -- 1, -- NULL, -- NULL, -- NULL); -- -- if (sws_scale(vs->vid_scaler, -- (const uint8_t * const*)deint_pic.data, -- deint_pic.linesize, -- 0, -- ictx->height, -- vs->vid_enc_frame->data, -- vs->vid_enc_frame->linesize) < 0) { -- tvherror("transcode", "%04X: Cannot scale frame", shortid(t)); -+ /* push decoded frame into filter chain */ -+ if (av_buffersrc_add_frame(vs->flt_bufsrcctx, vs->vid_dec_frame) < 0) { -+ tvherror("transcode", "%04X: filter input error", shortid(t)); - transcoder_stream_invalidate(ts); - goto cleanup; - } - -- vs->vid_enc_frame->format = octx->pix_fmt; -- vs->vid_enc_frame->width = octx->width; -- vs->vid_enc_frame->height = octx->height; -- -- vs->vid_enc_frame->pkt_pts = vs->vid_dec_frame->pkt_pts; -- vs->vid_enc_frame->pkt_dts = vs->vid_dec_frame->pkt_dts; -- -- if (vs->vid_dec_frame->reordered_opaque != AV_NOPTS_VALUE) -- vs->vid_enc_frame->pts = vs->vid_dec_frame->reordered_opaque; -- -- else if (ictx->coded_frame && ictx->coded_frame->pts != AV_NOPTS_VALUE) -- vs->vid_enc_frame->pts = vs->vid_dec_frame->pts; -- -- ret = avcodec_encode_video2(octx, &packet2, vs->vid_enc_frame, &got_output); -- if (ret < 0) { -- tvherror("transcode", "%04X: Error encoding frame", shortid(t)); -- transcoder_stream_invalidate(ts); -- goto cleanup; -+ /* and pull out a filtered frame */ -+ while (1) { -+ ret = av_buffersink_get_frame(vs->flt_bufsinkctx, vs->vid_enc_frame); -+ if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) -+ break; -+ if (ret < 0) { -+ tvherror("transcode", "%04X: filter output error", shortid(t)); -+ transcoder_stream_invalidate(ts); -+ goto cleanup; -+ } -+ -+ vs->vid_enc_frame->format = octx->pix_fmt; -+ vs->vid_enc_frame->width = octx->width; -+ vs->vid_enc_frame->height = octx->height; -+ -+ vs->vid_enc_frame->pkt_pts = vs->vid_dec_frame->pkt_pts; -+ vs->vid_enc_frame->pkt_dts = vs->vid_dec_frame->pkt_dts; -+ -+ if (vs->vid_dec_frame->reordered_opaque != AV_NOPTS_VALUE) -+ vs->vid_enc_frame->pts = vs->vid_dec_frame->reordered_opaque; -+ -+ else if (ictx->coded_frame && ictx->coded_frame->pts != AV_NOPTS_VALUE) -+ vs->vid_enc_frame->pts = vs->vid_dec_frame->pts; -+ -+ ret = avcodec_encode_video2(octx, &packet2, vs->vid_enc_frame, &got_output); -+ if (ret < 0) { -+ tvherror("transcode", "%04X: Error encoding frame", shortid(t)); -+ transcoder_stream_invalidate(ts); -+ goto cleanup; -+ } -+ av_frame_unref(vs->vid_enc_frame); - } - - if (got_output) -@@ -1263,12 +1358,6 @@ transcoder_stream_video(transcoder_t *t, - - av_free_packet(&packet); - -- if(buf) -- av_free(buf); -- -- if(deint) -- av_free(deint); -- - if(opts) - av_dict_free(&opts); - -@@ -1548,15 +1637,17 @@ transcoder_destroy_video(transcoder_t *t - if(vs->vid_dec_frame) - av_free(vs->vid_dec_frame); - -- if(vs->vid_scaler) -- sws_freeContext(vs->vid_scaler); -- - if(vs->vid_enc_frame) - av_free(vs->vid_enc_frame); - - if (vs->vid_first_pkt) - pkt_ref_dec(vs->vid_first_pkt); - -+ if (vs->flt_graph) { -+ avfilter_graph_free(&vs->flt_graph); -+ vs->flt_graph = NULL; -+ } -+ - free(ts); - } - -@@ -1603,11 +1694,13 @@ transcoder_init_video(transcoder_t *t, s - vs->vid_ictx->thread_count = - vs->vid_octx->thread_count = transcoder_thread_count(t, sct); - -- vs->vid_dec_frame = avcodec_alloc_frame(); -- vs->vid_enc_frame = avcodec_alloc_frame(); -+ vs->vid_dec_frame = av_frame_alloc(); -+ vs->vid_enc_frame = av_frame_alloc(); -+ -+ av_frame_unref(vs->vid_dec_frame); -+ av_frame_unref(vs->vid_enc_frame); - -- avcodec_get_frame_defaults(vs->vid_dec_frame); -- avcodec_get_frame_defaults(vs->vid_enc_frame); -+ vs->flt_graph = NULL; /* allocated in packet processor */ - - LIST_INSERT_HEAD(&t->t_stream_list, (transcoder_stream_t*)vs, ts_link); - diff --git a/tvheadend-4.0_no-werror.patch b/tvheadend-4.0_no-werror.patch deleted file mode 100644 index 9fdce7a..0000000 --- a/tvheadend-4.0_no-werror.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- Makefile.orig 2015-06-27 14:15:57.523222561 +0200 -+++ Makefile 2015-06-27 14:16:38.689192884 +0200 -@@ -27,8 +27,8 @@ PROG := $(BUILDDIR)/tvheadend - # Common compiler flags - # - --CFLAGS += -g -O2 -Wunused-result --CFLAGS += -Wall -Werror -Wwrite-strings -Wno-deprecated-declarations -+CFLAGS += -g -O2 -+CFLAGS += -Wall -Wwrite-strings -Wno-deprecated-declarations - CFLAGS += -Wmissing-prototypes - CFLAGS += -fms-extensions -funsigned-char -fno-strict-aliasing - CFLAGS += -D_FILE_OFFSET_BITS=64 diff --git a/tvheadend-4.2.1.tar.gz b/tvheadend-4.2.1.tar.gz new file mode 100644 index 0000000..be66764 --- /dev/null +++ b/tvheadend-4.2.1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7637c3dfa77638690ef63ac6137155ba786671b9b5b9ba057530b0920a1f32f3 +size 21325502 diff --git a/tvheadend.changes b/tvheadend.changes index 75a02b9..fbe6447 100644 --- a/tvheadend.changes +++ b/tvheadend.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Fri Apr 21 09:00:15 UTC 2017 - aloisio@gmx.com + +- Update to version 4.2.1. For a changelog see + https://github.com/tvheadend/tvheadend/compare/v4.0.10...v4.2.1 +- Replaced tvheadend-4.0_no-werror.patch with a variable + declaration +- Dropped tvheadend-4.0.9-ffmpeg_3.0.patch (merged upstream) + ------------------------------------------------------------------- Mon Apr 10 08:20:53 UTC 2017 - aloisio@gmx.com diff --git a/tvheadend.spec b/tvheadend.spec index 9772f26..62746c3 100644 --- a/tvheadend.spec +++ b/tvheadend.spec @@ -21,7 +21,7 @@ %define htsuser hts %define homedir %{_localstatedir}/lib/tvheadend Name: tvheadend -Version: 4.0.10 +Version: 4.2.1 Release: 0 Summary: A TV Streaming Server # parsers are from FFMpeg project under LGPL-2.1 @@ -33,13 +33,10 @@ Url: https://tvheadend.org/ Source0: http://github.com/%{name}/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Source2: %{name}-rpmlintrc Source3: %{name}_super -# PATCH-FIX-OPENSUSE tvheadend-4.0_no-werror.patch -- Do not treat warnings as errors. -Patch0: %{name}-4.0_no-werror.patch # PATCH-FIX-OPENSUSE tvheadend-fix-service-dependency.patch -- do not wait for or require syslog Patch2: %{name}-fix-service-dependency.patch -# FFMPEG related patches -Patch3: tvheadend-4.0.9-ffmpeg_3.0.patch BuildRequires: fdupes +BuildRequires: gcc-c++ BuildRequires: pkgconfig BuildRequires: python-devel BuildRequires: pkgconfig(avahi-client) @@ -68,18 +65,17 @@ scheduling recordings. %prep %setup -q -%patch0 %patch2 -p1 -%patch3 -p1 sed -e "s/-u \([^ ]*\) -g \([^ ]*\)/-u %{htsuser} -g %{htsgroup}/" -i rpm/%{name}.sysconfig sed -e '/^TVH_ARGS/cTVH_ARGS="-C"' -i debian/%{name}.default +sed -e '/cmake/d' -i configure echo %{version} > rpm/version %build +export CFLAGS_NO_WERROR="yes" %configure --disable-dvbscan \ - --disable-libffmpeg_static \ - --disable-libffmpeg_static_x264 \ + --disable-ffmpeg_static \ --disable-hdhomerun_static make V=1 %{?_smp_mflags}