1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-12-14 03:10:47 +00:00

- Update to 4.2.3

- Fix various portlint warnings
- Add missing LICENSE_FILE
- Update pkg-descr to match recent upstream development

The update was postponed a few times because early 4.2 releases
had some serious regressions on FreeBSD. I know that there are
still a few issues in the current release especially around IPTV
and SAT>IP but they do not seem to be FreeBSD specific. If you
run into regressions please let me know then we can still decide
if we need to keep tvheadend 4.0 around.

Thanks to all people for their patience and the people which helped
during the testing phase especially Rainer and Heiko!

Thanks to:	Rainer Hurling <rhurlin@gwdg.de>,
		Heiko Kirschke <heiko.kirschke@posteo.de>
This commit is contained in:
Bernhard Froehlich 2017-09-11 09:27:04 +00:00
parent fa335f26e3
commit cd52421acd
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=449622
13 changed files with 413 additions and 569 deletions

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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;
}

View File

@ -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

View File

@ -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/

View File

@ -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!

View File

@ -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