diff options
author | Bernhard Froehlich <decke@FreeBSD.org> | 2017-09-11 09:27:04 +0000 |
---|---|---|
committer | Bernhard Froehlich <decke@FreeBSD.org> | 2017-09-11 09:27:04 +0000 |
commit | cd52421acd332abe17bf46177e8bce0358687af4 (patch) | |
tree | 153695618fd0ffbff1ba273282111dcd42873f7a | |
parent | fa335f26e3255fa5cd7d0374b6abe0c51234ef1a (diff) | |
download | ports-cd52421acd332abe17bf46177e8bce0358687af4.tar.gz ports-cd52421acd332abe17bf46177e8bce0358687af4.zip |
Notes
-rw-r--r-- | multimedia/tvheadend/Makefile | 34 | ||||
-rw-r--r-- | multimedia/tvheadend/distinfo | 6 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-Makefile.webui | 8 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-ffmpeg30 | 425 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-src_http.c | 10 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-src_main.c | 62 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-src_satip_server.c | 11 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-src_spawn.c | 10 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-src_tcp.c | 64 | ||||
-rw-r--r-- | multimedia/tvheadend/files/patch-src_wrappers.c | 30 | ||||
-rw-r--r-- | multimedia/tvheadend/pkg-descr | 7 | ||||
-rw-r--r-- | multimedia/tvheadend/pkg-message | 5 | ||||
-rw-r--r-- | multimedia/tvheadend/pkg-plist | 310 |
13 files changed, 413 insertions, 569 deletions
diff --git a/multimedia/tvheadend/Makefile b/multimedia/tvheadend/Makefile index d11dfe41fdc2..428274f938d0 100644 --- a/multimedia/tvheadend/Makefile +++ b/multimedia/tvheadend/Makefile @@ -2,17 +2,18 @@ # $FreeBSD$ PORTNAME= tvheadend -PORTVERSION= 4.0.8 +PORTVERSION= 4.2.3 DISTVERSIONPREFIX= v -PORTREVISION= 5 CATEGORIES= multimedia MAINTAINER= decke@FreeBSD.org -COMMENT= TV streaming server supporting DVB, IPTV and V4L +COMMENT= TV streaming server supporting DVB, IPTV, SAT>IP and more LICENSE= GPLv3 +LICENSE_FILE= ${WRKSRC}/LICENSE.md BUILD_DEPENDS= bash:shells/bash \ + cmake:devel/cmake \ ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat LIB_DEPENDS= libcurl.so:ftp/curl \ liburiparser.so:net/uriparser @@ -22,9 +23,9 @@ BROKEN_mips= fails to configure: No C compiler found BROKEN_mips64= fails to configure: No C compiler found BROKEN_powerpc64= fails to configure: No C compiler found +USES= execinfo gettext gmake pkgconfig python shebangfix ssl USE_GITHUB= yes -USES= execinfo gmake pkgconfig python shebangfix GNU_CONFIGURE= yes MAKE_JOBS_UNSAFE= yes USE_RC_SUBR= ${PORTNAME} @@ -45,7 +46,8 @@ SUB_LIST+= TVHUSER="${TVHUSER}" \ TVHGROUP="${TVHGROUP}" CONFIGURE_ENV+= PLATFORM=freebsd -CONFIGURE_ARGS+=--disable-dvbscan --disable-zlib +CONFIGURE_ARGS+=--disable-dvbscan --disable-zlib --disable-hdhomerun_static \ + --disable-bintray_cache --disable-ffmpeg_static --disable-pie CFLAGS+= -I${LOCALBASE}/include -Wno-conversion -Wno-int-to-pointer-cast LDFLAGS+= -L${LOCALBASE}/lib -lexecinfo -lssl -lcrypto -lz @@ -73,27 +75,15 @@ TRANSCODING_CONFIGURE_ENABLE= libav XMLTV_RUN_DEPENDS= p5-xmltv>=0:textproc/p5-xmltv -# CLANG also needs -Wno-microsoft which GCC 4.2 does not know -CFLAGS+= -Wno-microsoft \ - -Wno-tautological-constant-out-of-range-compare +.include <bsd.port.pre.mk> post-patch: - @${REINPLACE_CMD} 's|0.0.0~unknown|${PORTVERSION}-${GH_TAGNAME}|' \ - ${WRKSRC}/support/version - @${REINPLACE_CMD} 's|-g||' \ - ${WRKSRC}/Makefile @${REINPLACE_CMD} 's|-ldl||' \ ${WRKSRC}/Makefile - # ignore gcc warnings on FreeBSD 9.X, and clang warnings on FreeBSD 10+ @${REINPLACE_CMD} 's|-Werror||' \ ${WRKSRC}/Makefile - # Remove -Wunused-result because gcc 4.2 on FreeBSD 9.x does not know it - @${REINPLACE_CMD} 's|-Wunused-result||' \ - ${WRKSRC}/Makefile - # to suppress clang CC flags on FreeBSD 10+ - # @${REINPLACE_CMD} 's|clang|clang-options-disabled|' \ - # to enable clang CC flags, because clang is identified as 'cc' on FreeBSD 10+ - @${REINPLACE_CMD} 's|clang|cc|' \ - ${WRKSRC}/Makefile -.include <bsd.port.mk> +post-install: + ${STRIP_CMD} ${STAGEDIR}/${PREFIX}/bin/tvheadend + +.include <bsd.port.post.mk> diff --git a/multimedia/tvheadend/distinfo b/multimedia/tvheadend/distinfo index f98a5e03de79..e89ae6a24ab3 100644 --- a/multimedia/tvheadend/distinfo +++ b/multimedia/tvheadend/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1464777173 -SHA256 (tvheadend-tvheadend-v4.0.8_GH0.tar.gz) = 04f485c25fcca604165622679e9e7be7aee7575d67f326f5ed8b4ceff63d8f4c -SIZE (tvheadend-tvheadend-v4.0.8_GH0.tar.gz) = 15826229 +TIMESTAMP = 1501062908 +SHA256 (tvheadend-tvheadend-v4.2.3_GH0.tar.gz) = 2d289a1a8a0a960feba1da2da97c977a2b714d87adfdfaf00a53142e39d808e6 +SIZE (tvheadend-tvheadend-v4.2.3_GH0.tar.gz) = 21518785 diff --git a/multimedia/tvheadend/files/patch-Makefile.webui b/multimedia/tvheadend/files/patch-Makefile.webui index a0306169e1c0..d0d4b7b7b136 100644 --- a/multimedia/tvheadend/files/patch-Makefile.webui +++ b/multimedia/tvheadend/files/patch-Makefile.webui @@ -1,6 +1,6 @@ ---- Makefile.webui.orig 2015-09-25 13:57:59 UTC -+++ Makefile.webui -@@ -153,22 +153,22 @@ define GO_JS +--- Makefile.webui.orig 2017-01-20 19:41:51.000000000 +0100 ++++ Makefile.webui 2017-02-08 10:35:04.215801000 +0100 +@@ -189,22 +189,22 @@ $(VV)$(CSS_PY) --in="$^" utf-check $(VV)cat $^ > $@.tmp $(VV)$(RUN_JS) < $@.tmp > $@.tmp2 @@ -26,4 +26,4 @@ + @stat -f "%-35N %7b" $@ endef - all: + define merge-po diff --git a/multimedia/tvheadend/files/patch-ffmpeg30 b/multimedia/tvheadend/files/patch-ffmpeg30 deleted file mode 100644 index 8c49fd0e7aa7..000000000000 --- a/multimedia/tvheadend/files/patch-ffmpeg30 +++ /dev/null @@ -1,425 +0,0 @@ -https://github.com/tvheadend/tvheadend/commit/ea02889c149e3d2b80dcaed3d9ad976145bb92b0 -https://github.com/tvheadend/tvheadend/commit/c63371c8bf51928a6c965bdf17dd73555b7b9d54 - ---- Makefile.orig 2015-12-16 17:33:33 UTC -+++ Makefile -@@ -60,7 +60,7 @@ CFLAGS += -I${ROOTDIR}/libav_static/bui - LDFLAGS_FFDIR = ${ROOTDIR}/libav_static/build/ffmpeg/lib - LDFLAGS += ${LDFLAGS_FFDIR}/libavresample.a - LDFLAGS += ${LDFLAGS_FFDIR}/libswresample.a --LDFLAGS += ${LDFLAGS_FFDIR}/libswscale.a -+LDFLAGS += ${LDFLAGS_FFDIR}/libavfilter.a - LDFLAGS += ${LDFLAGS_FFDIR}/libavutil.a - LDFLAGS += ${LDFLAGS_FFDIR}/libavformat.a - LDFLAGS += ${LDFLAGS_FFDIR}/libavcodec.a ---- Makefile.ffmpeg.orig 2015-12-16 17:33:33 UTC -+++ Makefile.ffmpeg -@@ -60,7 +60,7 @@ FFMPEG_URL = http://ffmpeg.org/rele - FFMPEG_SHA1 = 65470c9b967485f72f81758a7bad44cf7a1763db - - EXTLIBS = libx264 libvorbis libvpx --COMPONENTS = avutil avformat avcodec swresample swscale avresample -+COMPONENTS = avutil avformat avcodec swresample avfilter avresample - PROTOCOLS = file - DECODERS = mpeg2video mp2 ac3 eac3 h264 h264_vdpau aac aac_latm vorbis libvorbis - ENCODERS = mpeg2video mp2 libx264 libvpx_vp8 libvpx_vp9 aac libaacplus vorbis libvorbis ---- configure.orig 2015-12-16 17:33:33 UTC -+++ configure -@@ -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 libavfilter ">=4.0.0"; then - has_libav=false - fi - ---- src/libav.c.orig 2015-12-16 17:33:33 UTC -+++ src/libav.c -@@ -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(); - } ---- src/libav.h.orig 2015-12-16 17:33:33 UTC -+++ src/libav.h -@@ -21,6 +21,7 @@ - - - #include <libavformat/avformat.h> -+#include <libavfilter/avfilter.h> - #include "tvheadend.h" - - /* ---- src/plumbing/transcoding.c.orig 2015-12-16 17:33:33 UTC -+++ src/plumbing/transcoding.c -@@ -19,12 +19,14 @@ - #include <unistd.h> - #include <libavformat/avformat.h> - #include <libavcodec/avcodec.h> --#include <libswscale/swscale.h> -+#include <libavfilter/avfiltergraph.h> -+#include <libavfilter/buffersink.h> -+#include <libavfilter/buffersrc.h> -+#include <libavutil/opt.h> - #include <libavresample/avresample.h> - #include <libavutil/opt.h> - #include <libavutil/audio_fifo.h> - #include <libavutil/dict.h> --#include <libavutil/audioconvert.h> - - #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; - -@@ -952,6 +957,114 @@ send_video_packet(transcoder_t *t, trans - - } - -+/* 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; -+ 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; -+ } -+ -+ 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; -+} -+ - /** - * - */ -@@ -962,9 +1075,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 +1091,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 +1171,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 +1199,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 +1230,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 +1287,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; -+ /* 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->pkt_pts = vs->vid_dec_frame->pkt_pts; -- vs->vid_enc_frame->pkt_dts = vs->vid_dec_frame->pkt_dts; -+ vs->vid_enc_frame->format = octx->pix_fmt; -+ vs->vid_enc_frame->width = octx->width; -+ vs->vid_enc_frame->height = octx->height; - -- if (vs->vid_dec_frame->reordered_opaque != AV_NOPTS_VALUE) -- vs->vid_enc_frame->pts = vs->vid_dec_frame->reordered_opaque; -+ vs->vid_enc_frame->pkt_pts = vs->vid_dec_frame->pkt_pts; -+ vs->vid_enc_frame->pkt_dts = vs->vid_dec_frame->pkt_dts; - -- else if (ictx->coded_frame && ictx->coded_frame->pts != AV_NOPTS_VALUE) -- vs->vid_enc_frame->pts = vs->vid_dec_frame->pts; -+ if (vs->vid_dec_frame->reordered_opaque != AV_NOPTS_VALUE) -+ vs->vid_enc_frame->pts = vs->vid_dec_frame->reordered_opaque; - -- 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; -+ 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 +1347,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 +1626,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 +1683,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(); - -- avcodec_get_frame_defaults(vs->vid_dec_frame); -- avcodec_get_frame_defaults(vs->vid_enc_frame); -+ av_frame_unref(vs->vid_dec_frame); -+ av_frame_unref(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/multimedia/tvheadend/files/patch-src_http.c b/multimedia/tvheadend/files/patch-src_http.c deleted file mode 100644 index 0dd6f568c038..000000000000 --- a/multimedia/tvheadend/files/patch-src_http.c +++ /dev/null @@ -1,10 +0,0 @@ ---- src/http.c.orig 2015-09-25 13:57:59 UTC -+++ src/http.c -@@ -30,6 +30,7 @@ - #include <netinet/in.h> - #include <netinet/tcp.h> - #include <arpa/inet.h> -+#include <sys/socket.h> - - #include "tvheadend.h" - #include "tcp.h" diff --git a/multimedia/tvheadend/files/patch-src_main.c b/multimedia/tvheadend/files/patch-src_main.c new file mode 100644 index 000000000000..48f8d7644e6b --- /dev/null +++ b/multimedia/tvheadend/files/patch-src_main.c @@ -0,0 +1,62 @@ +Avoid build error with recent clang on FreeBSD 12-CURRENT. + +CC src/main.o +In file included from src/main.c:51: +In file included from +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/dvr/dvr.h:27: +/usr/local/include/profile.h:24:28: error: typedef redefinition with +different types ('struct _profile_t *' vs + 'struct profile') +typedef struct _profile_t *profile_t; + ^ +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/profile.h:148:3: +note: previous definition is here +} profile_t; + ^ +In file included from src/main.c:51: +In file included from +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/dvr/dvr.h:27: +/usr/local/include/profile.h:45:20: error: conflicting types for +'profile_init' +long KRB5_CALLCONV profile_init + ^ +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/profile.h:197:6: +note: previous declaration is here +void profile_init(void); + ^ +In file included from src/main.c:51: +In file included from +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/dvr/dvr.h:27: +/usr/local/include/profile.h:71:20: error: conflicting types for +'profile_release' +void KRB5_CALLCONV profile_release + ^ +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/src/profile.h:159:20: +note: previous definition is here +static inline void profile_release( profile_t *pro ) + ^ +3 errors generated. +gmake[2]: *** [Makefile:631: +/usr/ports/multimedia/tvheadend/work/tvheadend-4.2.2/build.freebsd/src/main.o] +Error 1 +gmake[2]: Leaving directory + +Reported by: Rainer Hurling <rhurlin@gwdg.de> +--- src/main.c.orig 2017-07-01 07:22:23.000000000 +0000 ++++ src/main.c 2017-08-23 15:27:26.427162000 +0000 +@@ -48,6 +48,7 @@ + #include "subscriptions.h" + #include "service_mapper.h" + #include "descrambler.h" ++#include "profile.h" + #include "dvr/dvr.h" + #include "htsp_server.h" + #include "satip/server.h" +@@ -68,7 +69,6 @@ + #include "intlconv.h" + #include "dbus.h" + #include "libav.h" +-#include "profile.h" + #include "bouquet.h" + #include "tvhtime.h" + #include "packet.h" diff --git a/multimedia/tvheadend/files/patch-src_satip_server.c b/multimedia/tvheadend/files/patch-src_satip_server.c deleted file mode 100644 index 2fde225c1256..000000000000 --- a/multimedia/tvheadend/files/patch-src_satip_server.c +++ /dev/null @@ -1,11 +0,0 @@ ---- src/satip/server.c.orig 2015-09-25 13:57:59 UTC -+++ src/satip/server.c -@@ -17,6 +17,8 @@ - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -+#include <sys/socket.h> -+ - #include "tvheadend.h" - #include "upnp.h" - #include "settings.h" diff --git a/multimedia/tvheadend/files/patch-src_spawn.c b/multimedia/tvheadend/files/patch-src_spawn.c deleted file mode 100644 index 53f4e59bcb65..000000000000 --- a/multimedia/tvheadend/files/patch-src_spawn.c +++ /dev/null @@ -1,10 +0,0 @@ ---- src/spawn.c.orig 2015-09-25 13:57:59 UTC -+++ src/spawn.c -@@ -28,6 +28,7 @@ - #include <syslog.h> - #include <fcntl.h> - #include <dirent.h> -+#include <signal.h> - - #include "tvheadend.h" - #include "tvhpoll.h" diff --git a/multimedia/tvheadend/files/patch-src_tcp.c b/multimedia/tvheadend/files/patch-src_tcp.c new file mode 100644 index 000000000000..ff2c9f9c4ea1 --- /dev/null +++ b/multimedia/tvheadend/files/patch-src_tcp.c @@ -0,0 +1,64 @@ +- DSCP cannot be modified on FreeBSD yet +src/tcp.c:61:14: error: use of undeclared identifier 'IPTOS_DSCP_MASK' + v = dscp & IPTOS_DSCP_MASK; + +- Change include order for FreeBSD +In file included from src/tcp.c:33: +/usr/include/netinet/ip.h:69:17: error: field has incomplete type 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +/usr/include/netinet/ip.h:69:9: note: forward declaration of 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +/usr/include/netinet/ip.h:69:24: error: field has incomplete type 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +/usr/include/netinet/ip.h:69:9: note: forward declaration of 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +/usr/include/netinet/ip.h:181:19: error: field has incomplete type 'struct in_addr' + struct in_addr ipt_addr; + ^ +/usr/include/netinet/ip.h:69:9: note: forward declaration of 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +/usr/include/netinet/ip.h:216:17: error: field has incomplete type 'struct in_addr' + struct in_addr ippseudo_src; /* source internet address */ + ^ +/usr/include/netinet/ip.h:69:9: note: forward declaration of 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +/usr/include/netinet/ip.h:217:17: error: field has incomplete type 'struct in_addr' + struct in_addr ippseudo_dst; /* destination internet address */ + ^ +/usr/include/netinet/ip.h:69:9: note: forward declaration of 'struct in_addr' + struct in_addr ip_src,ip_dst; /* source and dest address */ + ^ +--- src/tcp.c.orig 2017-01-20 19:41:51.000000000 +0100 ++++ src/tcp.c 2017-02-08 11:15:26.836727000 +0100 +@@ -30,8 +30,8 @@ + #include <fcntl.h> + #include <errno.h> + #include <signal.h> +-#include <netinet/ip.h> + #include <netinet/in.h> ++#include <netinet/ip.h> + #include <netinet/tcp.h> + #include <arpa/inet.h> + +@@ -56,6 +56,7 @@ + int + socket_set_dscp(int sockfd, uint32_t dscp, char *errbuf, size_t errbufsize) + { ++#ifdef IPTOS_DSCP_MASK + int r, v; + + v = dscp & IPTOS_DSCP_MASK; +@@ -65,6 +66,7 @@ + snprintf(errbuf, errbufsize, "IP_TOS failed: %s", strerror(errno)); + return -1; + } ++#endif + return 0; + } + diff --git a/multimedia/tvheadend/files/patch-src_wrappers.c b/multimedia/tvheadend/files/patch-src_wrappers.c new file mode 100644 index 000000000000..5aca192cf560 --- /dev/null +++ b/multimedia/tvheadend/files/patch-src_wrappers.c @@ -0,0 +1,30 @@ +--- src/wrappers.c.orig 2017-05-16 11:15:24.000000000 +0000 ++++ src/wrappers.c 2017-06-21 18:00:42.352871000 +0000 +@@ -290,6 +290,19 @@ + } while (r > 0); + } + ++#ifdef PLATFORM_FREEBSD ++int64_t ++tvh_usleep(int64_t us) ++{ ++ return usleep(us); ++} ++ ++int64_t ++tvh_usleep_abs(int64_t us) ++{ ++ return usleep(us - getfastmonoclock()); ++} ++#else + int64_t + tvh_usleep(int64_t us) + { +@@ -323,6 +336,7 @@ + return val; + return r ? -r : 0; + } ++#endif + + /* + * qsort diff --git a/multimedia/tvheadend/pkg-descr b/multimedia/tvheadend/pkg-descr index 26672c58139f..e6bd4ea7cd60 100644 --- a/multimedia/tvheadend/pkg-descr +++ b/multimedia/tvheadend/pkg-descr @@ -1,5 +1,6 @@ -A TV streaming server for Linux and FreeBSD supporting -DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV, and Analog video -(V4L) as input sources. +A TV streaming server and recorder for Linux, FreeBSD and +Android supporting DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, ISDB-T, +IPTV, SAT>IP, HDHomeRune and other formats through the unix +pipe as input sources. WWW: https://tvheadend.org/ diff --git a/multimedia/tvheadend/pkg-message b/multimedia/tvheadend/pkg-message index 690fd5c24bce..df2cfb153c02 100644 --- a/multimedia/tvheadend/pkg-message +++ b/multimedia/tvheadend/pkg-message @@ -2,9 +2,10 @@ For the first start in your /etc/rc.conf: tvheadend_enable="YES" - tvheadend_flags="-C" -The second line can be removed after the first start. +If you plan to use webcamd you need to add tvheadend to the webcamd group. + + pw usermod tvheadend -G webcamd Patches, feedback and help are always welcome! diff --git a/multimedia/tvheadend/pkg-plist b/multimedia/tvheadend/pkg-plist index d78c9b9174ff..b3925c61daf6 100644 --- a/multimedia/tvheadend/pkg-plist +++ b/multimedia/tvheadend/pkg-plist @@ -1,5 +1,6 @@ bin/tvheadend man/man1/tvheadend.1.gz +%%DATADIR%%/data/conf/descrambler %%DATADIR%%/data/conf/epggrab/opentv/dict/skyeng %%DATADIR%%/data/conf/epggrab/opentv/dict/skyit %%DATADIR%%/data/conf/epggrab/opentv/dict/skynz @@ -13,81 +14,6 @@ man/man1/tvheadend.1.gz %%DATADIR%%/data/conf/epggrab/opentv/prov/skyuk %%DATADIR%%/data/conf/fastscan %%DATADIR%%/data/conf/satellites -%%DATADIR%%/docs/docresources/accessconfig.png -%%DATADIR%%/docs/docresources/accessconfigexample.png -%%DATADIR%%/docs/docresources/autorec.png -%%DATADIR%%/docs/docresources/autorecpopup.png -%%DATADIR%%/docs/docresources/channeltab.png -%%DATADIR%%/docs/docresources/configcapmt.png -%%DATADIR%%/docs/docresources/configcwc.png -%%DATADIR%%/docs/docresources/configdvbmux.png -%%DATADIR%%/docs/docresources/configdvbmuxsched.png -%%DATADIR%%/docs/docresources/configdvbnetwork.png -%%DATADIR%%/docs/docresources/configdvbservices.png -%%DATADIR%%/docs/docresources/configdvbtab.png -%%DATADIR%%/docs/docresources/configdvrtab1.png -%%DATADIR%%/docs/docresources/configdvrtab2.png -%%DATADIR%%/docs/docresources/configdvrtab3.png -%%DATADIR%%/docs/docresources/configgeneraltab1.png -%%DATADIR%%/docs/docresources/configgeneraltab2.png -%%DATADIR%%/docs/docresources/configtabs.png -%%DATADIR%%/docs/docresources/configtimeshifttab.png -%%DATADIR%%/docs/docresources/configtvadapters.png -%%DATADIR%%/docs/docresources/configtvhlog.png -%%DATADIR%%/docs/docresources/dvrautorecentries.png -%%DATADIR%%/docs/docresources/dvrlog.png -%%DATADIR%%/docs/docresources/dvrlog2.png -%%DATADIR%%/docs/docresources/dvrlog3.png -%%DATADIR%%/docs/docresources/dvrlog4.png -%%DATADIR%%/docs/docresources/dvrlogentry.png -%%DATADIR%%/docs/docresources/epg.png -%%DATADIR%%/docs/docresources/epg2.png -%%DATADIR%%/docs/docresources/epg3.png -%%DATADIR%%/docs/docresources/failedrecordings1.png -%%DATADIR%%/docs/docresources/failedrecordings2.png -%%DATADIR%%/docs/docresources/finishedrecordings1.png -%%DATADIR%%/docs/docresources/finishedrecordings2.png -%%DATADIR%%/docs/docresources/muxbylocation.png -%%DATADIR%%/docs/docresources/tagstab.png -%%DATADIR%%/docs/docresources/timeschedules.png -%%DATADIR%%/docs/docresources/tvheadendlogo.png -%%DATADIR%%/docs/docresources/upcomingrecordings1.png -%%DATADIR%%/docs/docresources/upcomingrecordings2.png -%%DATADIR%%/docs/docresources/xmltvtab.png -%%DATADIR%%/docs/html/autorec.html -%%DATADIR%%/docs/html/config.html -%%DATADIR%%/docs/html/config_access.html -%%DATADIR%%/docs/html/config_bouquet.html -%%DATADIR%%/docs/html/config_caclient.html -%%DATADIR%%/docs/html/config_channels.html -%%DATADIR%%/docs/html/config_dvb.html -%%DATADIR%%/docs/html/config_dvr.html -%%DATADIR%%/docs/html/config_epggrab.html -%%DATADIR%%/docs/html/config_esfilter.html -%%DATADIR%%/docs/html/config_iptv.html -%%DATADIR%%/docs/html/config_misc.html -%%DATADIR%%/docs/html/config_muxes.html -%%DATADIR%%/docs/html/config_muxsched.html -%%DATADIR%%/docs/html/config_networks.html -%%DATADIR%%/docs/html/config_services.html -%%DATADIR%%/docs/html/config_streamprofile.html -%%DATADIR%%/docs/html/config_tags.html -%%DATADIR%%/docs/html/config_timeshift.html -%%DATADIR%%/docs/html/config_tvadapters.html -%%DATADIR%%/docs/html/config_tvhlog.html -%%DATADIR%%/docs/html/dvr.html -%%DATADIR%%/docs/html/dvr_autorec.html -%%DATADIR%%/docs/html/dvr_failed.html -%%DATADIR%%/docs/html/dvr_finished.html -%%DATADIR%%/docs/html/dvr_timerec.html -%%DATADIR%%/docs/html/dvr_upcoming.html -%%DATADIR%%/docs/html/dvrlog.html -%%DATADIR%%/docs/html/epg.html -%%DATADIR%%/docs/html/faq.html -%%DATADIR%%/docs/html/features.html -%%DATADIR%%/docs/html/install.html -%%DATADIR%%/docs/html/overview.html -%%DATADIR%%/docs/html/sysreq.html %%DATADIR%%/src/webui/static/app/acleditor.js %%DATADIR%%/src/webui/static/app/caclient.js %%DATADIR%%/src/webui/static/app/chconf.js @@ -98,21 +24,30 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/app/epg.js %%DATADIR%%/src/webui/static/app/epggrab.js %%DATADIR%%/src/webui/static/app/esfilter.js +%%DATADIR%%/src/webui/static/app/ext-access.css +%%DATADIR%%/src/webui/static/app/ext-blue.css +%%DATADIR%%/src/webui/static/app/ext-gray.css %%DATADIR%%/src/webui/static/app/ext.css %%DATADIR%%/src/webui/static/app/extensions.js +%%DATADIR%%/src/webui/static/app/i18n-post.js +%%DATADIR%%/src/webui/static/app/i18n.js %%DATADIR%%/src/webui/static/app/idnode.js +%%DATADIR%%/src/webui/static/app/marked.js %%DATADIR%%/src/webui/static/app/mpegts.js %%DATADIR%%/src/webui/static/app/namespace.js %%DATADIR%%/src/webui/static/app/servicemapper.js %%DATADIR%%/src/webui/static/app/status.js -%%DATADIR%%/src/webui/static/app/tableeditor.js %%DATADIR%%/src/webui/static/app/timeshift.js %%DATADIR%%/src/webui/static/app/tvadapters.js %%DATADIR%%/src/webui/static/app/tvheadend.js %%DATADIR%%/src/webui/static/app/tvhlog.js +%%DATADIR%%/src/webui/static/app/wizard.js %%DATADIR%%/src/webui/static/checkcolumn/CheckColumn.js %%DATADIR%%/src/webui/static/extjs/adapter/ext/ext-base-debug.js %%DATADIR%%/src/webui/static/extjs/adapter/ext/ext-base.js +%%DATADIR%%/src/webui/static/extjs/examples/ux/Spinner.js +%%DATADIR%%/src/webui/static/extjs/examples/ux/SpinnerField.js +%%DATADIR%%/src/webui/static/extjs/examples/ux/css/Spinner.css %%DATADIR%%/src/webui/static/extjs/examples/ux/gridfilters/GridFilters.js %%DATADIR%%/src/webui/static/extjs/examples/ux/gridfilters/css/GridFilters.css %%DATADIR%%/src/webui/static/extjs/examples/ux/gridfilters/css/RangeMenu.css @@ -130,6 +65,8 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/extjs/examples/ux/gridfilters/images/sort_filtered_desc.gif %%DATADIR%%/src/webui/static/extjs/examples/ux/gridfilters/menu/ListMenu.js %%DATADIR%%/src/webui/static/extjs/examples/ux/gridfilters/menu/RangeMenu.js +%%DATADIR%%/src/webui/static/extjs/examples/ux/images/spinner-split.gif +%%DATADIR%%/src/webui/static/extjs/examples/ux/images/spinner.gif %%DATADIR%%/src/webui/static/extjs/ext-all-debug.js %%DATADIR%%/src/webui/static/extjs/ext-all.js %%DATADIR%%/src/webui/static/extjs/resources/css/debug.css @@ -1018,19 +955,28 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/extjs/resources/images/yourtheme/window/right-corners.psd %%DATADIR%%/src/webui/static/extjs/resources/images/yourtheme/window/top-bottom.png %%DATADIR%%/src/webui/static/extjs/resources/images/yourtheme/window/top-bottom.psd -%%DATADIR%%/src/webui/static/htslogo.png %%DATADIR%%/src/webui/static/icons/abort.png %%DATADIR%%/src/webui/static/icons/accept.png +%%DATADIR%%/src/webui/static/icons/acl.png %%DATADIR%%/src/webui/static/icons/add.png +%%DATADIR%%/src/webui/static/icons/application_form.png +%%DATADIR%%/src/webui/static/icons/arrow_branch.png %%DATADIR%%/src/webui/static/icons/arrow_down.png %%DATADIR%%/src/webui/static/icons/arrow_join.png +%%DATADIR%%/src/webui/static/icons/arrow_left.png %%DATADIR%%/src/webui/static/icons/arrow_out.png +%%DATADIR%%/src/webui/static/icons/arrow_right.png %%DATADIR%%/src/webui/static/icons/arrow_switch.png %%DATADIR%%/src/webui/static/icons/arrow_up.png %%DATADIR%%/src/webui/static/icons/auto_rec.png +%%DATADIR%%/src/webui/static/icons/award_star_bronze_3.png +%%DATADIR%%/src/webui/static/icons/award_star_gold_3.png +%%DATADIR%%/src/webui/static/icons/award_star_silver_3.png +%%DATADIR%%/src/webui/static/icons/baseconf.png +%%DATADIR%%/src/webui/static/icons/bell.png %%DATADIR%%/src/webui/static/icons/bouquets.png +%%DATADIR%%/src/webui/static/icons/brick.png %%DATADIR%%/src/webui/static/icons/broadcast_details.png -%%DATADIR%%/src/webui/static/icons/bullet_add.png %%DATADIR%%/src/webui/static/icons/cancel.png %%DATADIR%%/src/webui/static/icons/cancel_button.png %%DATADIR%%/src/webui/static/icons/channel_tags.png @@ -1051,6 +997,7 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/icons/epg.png %%DATADIR%%/src/webui/static/icons/exclamation.png %%DATADIR%%/src/webui/static/icons/eye.png +%%DATADIR%%/src/webui/static/icons/fetch_images.png %%DATADIR%%/src/webui/static/icons/film.png %%DATADIR%%/src/webui/static/icons/film_edit.png %%DATADIR%%/src/webui/static/icons/film_key.png @@ -1059,7 +1006,10 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/icons/general.png %%DATADIR%%/src/webui/static/icons/group.png %%DATADIR%%/src/webui/static/icons/help.png +%%DATADIR%%/src/webui/static/icons/imdb.png +%%DATADIR%%/src/webui/static/icons/imgcacheconf.png %%DATADIR%%/src/webui/static/icons/information.png +%%DATADIR%%/src/webui/static/icons/ip_block.png %%DATADIR%%/src/webui/static/icons/key.png %%DATADIR%%/src/webui/static/icons/layers.png %%DATADIR%%/src/webui/static/icons/linked.gif @@ -1068,6 +1018,7 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/icons/networks.png %%DATADIR%%/src/webui/static/icons/newspaper.png %%DATADIR%%/src/webui/static/icons/other_filters.png +%%DATADIR%%/src/webui/static/icons/pass.png %%DATADIR%%/src/webui/static/icons/pci.png %%DATADIR%%/src/webui/static/icons/plugin.png %%DATADIR%%/src/webui/static/icons/progress-bg-green.gif @@ -1076,11 +1027,13 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/icons/rec.png %%DATADIR%%/src/webui/static/icons/recordingtab.png %%DATADIR%%/src/webui/static/icons/reseticon.png +%%DATADIR%%/src/webui/static/icons/satipsrvconf.png %%DATADIR%%/src/webui/static/icons/save.png %%DATADIR%%/src/webui/static/icons/scheduled.png %%DATADIR%%/src/webui/static/icons/service_mapper.png %%DATADIR%%/src/webui/static/icons/services.png %%DATADIR%%/src/webui/static/icons/sound.png +%%DATADIR%%/src/webui/static/icons/sound_mute.png %%DATADIR%%/src/webui/static/icons/stop.png %%DATADIR%%/src/webui/static/icons/stop_rec.png %%DATADIR%%/src/webui/static/icons/stream.png @@ -1090,6 +1043,7 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/icons/tag_blue.png %%DATADIR%%/src/webui/static/icons/teletext.png %%DATADIR%%/src/webui/static/icons/television.png +%%DATADIR%%/src/webui/static/icons/thetvdb.png %%DATADIR%%/src/webui/static/icons/tick.png %%DATADIR%%/src/webui/static/icons/time_schedules.png %%DATADIR%%/src/webui/static/icons/timeshift.png @@ -1099,11 +1053,207 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/icons/wand.png %%DATADIR%%/src/webui/static/icons/watch_tv.png %%DATADIR%%/src/webui/static/icons/world.png +%%DATADIR%%/src/webui/static/icons/world_add.png %%DATADIR%%/src/webui/static/icons/wrench.png %%DATADIR%%/src/webui/static/img/bg-header.png +%%DATADIR%%/src/webui/static/img/doc/access_entry/new.png +%%DATADIR%%/src/webui/static/img/doc/access_entry/tab.png +%%DATADIR%%/src/webui/static/img/doc/before_begin/schematic.png +%%DATADIR%%/src/webui/static/img/doc/bouquet/add.png +%%DATADIR%%/src/webui/static/img/doc/bouquet/detach.png +%%DATADIR%%/src/webui/static/img/doc/bouquet/tab.png +%%DATADIR%%/src/webui/static/img/doc/caclient/tab.png +%%DATADIR%%/src/webui/static/img/doc/caclient_capmt/tab.png +%%DATADIR%%/src/webui/static/img/doc/channel/add.png +%%DATADIR%%/src/webui/static/img/doc/channel/tab.png +%%DATADIR%%/src/webui/static/img/doc/channeltag/tab.png +%%DATADIR%%/src/webui/static/img/doc/config/tab.png +%%DATADIR%%/src/webui/static/img/doc/debugging/tab.png +%%DATADIR%%/src/webui/static/img/doc/dvrautorec/add.png +%%DATADIR%%/src/webui/static/img/doc/dvrautorec/tab.png +%%DATADIR%%/src/webui/static/img/doc/dvrconfig/tab.png +%%DATADIR%%/src/webui/static/img/doc/dvrentry/add.png +%%DATADIR%%/src/webui/static/img/doc/dvrentry/tab.png +%%DATADIR%%/src/webui/static/img/doc/dvrtimerec/add.png +%%DATADIR%%/src/webui/static/img/doc/dvrtimerec/tab.png +%%DATADIR%%/src/webui/static/img/doc/epg/autorec.png +%%DATADIR%%/src/webui/static/img/doc/epg/series_link.png +%%DATADIR%%/src/webui/static/img/doc/epg/tab.png +%%DATADIR%%/src/webui/static/img/doc/epgconf/tab.png +%%DATADIR%%/src/webui/static/img/doc/epggrabber_channel/tab.png +%%DATADIR%%/src/webui/static/img/doc/epggrabber_modules/tab.png +%%DATADIR%%/src/webui/static/img/doc/filters/example.png +%%DATADIR%%/src/webui/static/img/doc/filters/tab.png +%%DATADIR%%/src/webui/static/img/doc/icons/abort.png +%%DATADIR%%/src/webui/static/img/doc/icons/accept.png +%%DATADIR%%/src/webui/static/img/doc/icons/acl.png +%%DATADIR%%/src/webui/static/img/doc/icons/add.png +%%DATADIR%%/src/webui/static/img/doc/icons/application_form.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_branch.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_down.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_join.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_left.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_out.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_right.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_switch.png +%%DATADIR%%/src/webui/static/img/doc/icons/arrow_up.png +%%DATADIR%%/src/webui/static/img/doc/icons/auto_rec.png +%%DATADIR%%/src/webui/static/img/doc/icons/award_star_bronze_3.png +%%DATADIR%%/src/webui/static/img/doc/icons/award_star_gold_3.png +%%DATADIR%%/src/webui/static/img/doc/icons/award_star_silver_3.png +%%DATADIR%%/src/webui/static/img/doc/icons/baseconf.png +%%DATADIR%%/src/webui/static/img/doc/icons/bell.png +%%DATADIR%%/src/webui/static/img/doc/icons/bouquets.png +%%DATADIR%%/src/webui/static/img/doc/icons/brick.png +%%DATADIR%%/src/webui/static/img/doc/icons/broadcast_details.png +%%DATADIR%%/src/webui/static/img/doc/icons/cancel.png +%%DATADIR%%/src/webui/static/img/doc/icons/cancel_button.png +%%DATADIR%%/src/webui/static/img/doc/icons/channel_tags.png +%%DATADIR%%/src/webui/static/img/doc/icons/channels.png +%%DATADIR%%/src/webui/static/img/doc/icons/clean.png +%%DATADIR%%/src/webui/static/img/doc/icons/clock.png +%%DATADIR%%/src/webui/static/img/doc/icons/connections.png +%%DATADIR%%/src/webui/static/img/doc/icons/control_pause.png +%%DATADIR%%/src/webui/static/img/doc/icons/control_play.png +%%DATADIR%%/src/webui/static/img/doc/icons/control_stop.png +%%DATADIR%%/src/webui/static/img/doc/icons/debug.png +%%DATADIR%%/src/webui/static/img/doc/icons/delete.png +%%DATADIR%%/src/webui/static/img/doc/icons/download.png +%%DATADIR%%/src/webui/static/img/doc/icons/drive.png +%%DATADIR%%/src/webui/static/img/doc/icons/dvr.png +%%DATADIR%%/src/webui/static/img/doc/icons/dvrprofiles.png +%%DATADIR%%/src/webui/static/img/doc/icons/edit.png +%%DATADIR%%/src/webui/static/img/doc/icons/epg.png +%%DATADIR%%/src/webui/static/img/doc/icons/exclamation.png +%%DATADIR%%/src/webui/static/img/doc/icons/eye.png +%%DATADIR%%/src/webui/static/img/doc/icons/fetch_images.png +%%DATADIR%%/src/webui/static/img/doc/icons/film.png +%%DATADIR%%/src/webui/static/img/doc/icons/film_edit.png +%%DATADIR%%/src/webui/static/img/doc/icons/film_key.png +%%DATADIR%%/src/webui/static/img/doc/icons/find.png +%%DATADIR%%/src/webui/static/img/doc/icons/full_screen.png +%%DATADIR%%/src/webui/static/img/doc/icons/general.png +%%DATADIR%%/src/webui/static/img/doc/icons/group.png +%%DATADIR%%/src/webui/static/img/doc/icons/help.png +%%DATADIR%%/src/webui/static/img/doc/icons/imdb.png +%%DATADIR%%/src/webui/static/img/doc/icons/imgcacheconf.png +%%DATADIR%%/src/webui/static/img/doc/icons/information.png +%%DATADIR%%/src/webui/static/img/doc/icons/ip_block.png +%%DATADIR%%/src/webui/static/img/doc/icons/key.png +%%DATADIR%%/src/webui/static/img/doc/icons/layers.png +%%DATADIR%%/src/webui/static/img/doc/icons/linked.gif +%%DATADIR%%/src/webui/static/img/doc/icons/mux_schedulers.png +%%DATADIR%%/src/webui/static/img/doc/icons/muxes.png +%%DATADIR%%/src/webui/static/img/doc/icons/networks.png +%%DATADIR%%/src/webui/static/img/doc/icons/newspaper.png +%%DATADIR%%/src/webui/static/img/doc/icons/other_filters.png +%%DATADIR%%/src/webui/static/img/doc/icons/pass.png +%%DATADIR%%/src/webui/static/img/doc/icons/pci.png +%%DATADIR%%/src/webui/static/img/doc/icons/plugin.png +%%DATADIR%%/src/webui/static/img/doc/icons/progress-bg-green.gif +%%DATADIR%%/src/webui/static/img/doc/icons/progress-bg-orange.gif +%%DATADIR%%/src/webui/static/img/doc/icons/progress-bg-red.gif +%%DATADIR%%/src/webui/static/img/doc/icons/rec.png +%%DATADIR%%/src/webui/static/img/doc/icons/recordingtab.png +%%DATADIR%%/src/webui/static/img/doc/icons/reseticon.png +%%DATADIR%%/src/webui/static/img/doc/icons/satipsrvconf.png +%%DATADIR%%/src/webui/static/img/doc/icons/save.png +%%DATADIR%%/src/webui/static/img/doc/icons/scheduled.png +%%DATADIR%%/src/webui/static/img/doc/icons/service_mapper.png +%%DATADIR%%/src/webui/static/img/doc/icons/services.png +%%DATADIR%%/src/webui/static/img/doc/icons/sound.png +%%DATADIR%%/src/webui/static/img/doc/icons/sound_mute.png +%%DATADIR%%/src/webui/static/img/doc/icons/stop.png +%%DATADIR%%/src/webui/static/img/doc/icons/stop_rec.png +%%DATADIR%%/src/webui/static/img/doc/icons/stream.png +%%DATADIR%%/src/webui/static/img/doc/icons/subscriptions.png +%%DATADIR%%/src/webui/static/img/doc/icons/subtitle.png +%%DATADIR%%/src/webui/static/img/doc/icons/tag.png +%%DATADIR%%/src/webui/static/img/doc/icons/tag_blue.png +%%DATADIR%%/src/webui/static/img/doc/icons/teletext.png +%%DATADIR%%/src/webui/static/img/doc/icons/television.png +%%DATADIR%%/src/webui/static/img/doc/icons/thetvdb.png +%%DATADIR%%/src/webui/static/img/doc/icons/tick.png +%%DATADIR%%/src/webui/static/img/doc/icons/time_schedules.png +%%DATADIR%%/src/webui/static/img/doc/icons/timeshift.png +%%DATADIR%%/src/webui/static/img/doc/icons/tv_cards.png +%%DATADIR%%/src/webui/static/img/doc/icons/undo.png +%%DATADIR%%/src/webui/static/img/doc/icons/upcoming_rec.png +%%DATADIR%%/src/webui/static/img/doc/icons/wand.png +%%DATADIR%%/src/webui/static/img/doc/icons/watch_tv.png +%%DATADIR%%/src/webui/static/img/doc/icons/world.png +%%DATADIR%%/src/webui/static/img/doc/icons/world_add.png +%%DATADIR%%/src/webui/static/img/doc/icons/wrench.png +%%DATADIR%%/src/webui/static/img/doc/imagecache/tab.png +%%DATADIR%%/src/webui/static/img/doc/index/logo.png +%%DATADIR%%/src/webui/static/img/doc/ipblocking/tab.png +%%DATADIR%%/src/webui/static/img/doc/linuxdvb_frontend_dvbc/tab.png +%%DATADIR%%/src/webui/static/img/doc/linuxdvb_frontend_dvbs/tab.png +%%DATADIR%%/src/webui/static/img/doc/linuxdvb_frontend_dvbt/tab.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_mux/tab.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_mux_sched/tab.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_network/tab.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_service/add_service.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_service/map_all.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_service/map_selected.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_service/service_filter.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_service/service_info.png +%%DATADIR%%/src/webui/static/img/doc/mpegts_service/tab.png +%%DATADIR%%/src/webui/static/img/doc/overview/screenshot.png +%%DATADIR%%/src/webui/static/img/doc/passwd/add.png +%%DATADIR%%/src/webui/static/img/doc/passwd/tab.png +%%DATADIR%%/src/webui/static/img/doc/profile/tab.png +%%DATADIR%%/src/webui/static/img/doc/satip_client/tab.png +%%DATADIR%%/src/webui/static/img/doc/satip_server/tab.png +%%DATADIR%%/src/webui/static/img/doc/service_mapper/dialog.png +%%DATADIR%%/src/webui/static/img/doc/status_connections/tab.png +%%DATADIR%%/src/webui/static/img/doc/status_service_mapper/tab.png +%%DATADIR%%/src/webui/static/img/doc/status_stream/tab.png +%%DATADIR%%/src/webui/static/img/doc/status_subscriptions/tab.png +%%DATADIR%%/src/webui/static/img/doc/timeshift/tab.png +%%DATADIR%%/src/webui/static/img/doc/tv_adapters/params.png +%%DATADIR%%/src/webui/static/img/doc/tv_adapters/tree.png +%%DATADIR%%/src/webui/static/img/epg.png %%DATADIR%%/src/webui/static/img/error.png %%DATADIR%%/src/webui/static/img/logo.png +%%DATADIR%%/src/webui/static/img/logobig.png +%%DATADIR%%/src/webui/static/img/logomid.png %%DATADIR%%/src/webui/static/img/spinner_black_bg.gif +%%DATADIR%%/src/webui/static/intl/tvh.ach.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.ady.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.ar.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.bg.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.cs.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.da.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.de.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.en_GB.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.en_US.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.es.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.et.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.fa.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.fi.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.fr.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.he.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.hr.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.hu.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.it.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.ko.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.lt.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.lv.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.nl.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.no.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.pl.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.pt.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.ro.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.ru.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.sk.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.sl.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.sq.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.sv.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.tr.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.uk.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.zh-Hans.js.gz +%%DATADIR%%/src/webui/static/intl/tvh.zh.js.gz %%DATADIR%%/src/webui/static/livegrid/livegrid-all.js %%DATADIR%%/src/webui/static/livegrid/resources/css/ext-ux-livegrid.css %%DATADIR%%/src/webui/static/livegrid/resources/images/loading.gif @@ -1126,7 +1276,9 @@ man/man1/tvheadend.1.gz %%DATADIR%%/src/webui/static/tv.js %%DATADIR%%/src/webui/static/tvh-tv.css.gz %%DATADIR%%/src/webui/static/tvh-tv.js.gz -%%DATADIR%%/src/webui/static/tvh.css.gz +%%DATADIR%%/src/webui/static/tvh.access.css.gz +%%DATADIR%%/src/webui/static/tvh.blue.css.gz +%%DATADIR%%/src/webui/static/tvh.gray.css.gz %%DATADIR%%/src/webui/static/tvh.js.gz %%DATADIR%%/src/webui/static/xcheckbox/xcheckbox.css %%DATADIR%%/src/webui/static/xcheckbox/xcheckbox.js |