Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mjpg-streamer for openSUSE:Factory checked in at 2023-03-27 18:17:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mjpg-streamer (Old) and /work/SRC/openSUSE:Factory/.mjpg-streamer.new.31432 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mjpg-streamer" Mon Mar 27 18:17:30 2023 rev:3 rq:1074637 version:1.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/mjpg-streamer/mjpg-streamer.changes 2019-09-16 10:49:41.323177780 +0200 +++ /work/SRC/openSUSE:Factory/.mjpg-streamer.new.31432/mjpg-streamer.changes 2023-03-27 18:17:31.523500822 +0200 @@ -1,0 +2,5 @@ +Tue Feb 14 08:13:46 UTC 2023 - Adrian Schröter <[email protected]> + +- use version 1.0.0 + +------------------------------------------------------------------- Old: ---- mjpg-streamer-1.0~pre.1540449284.ddb69b7.obscpio New: ---- mjpg-streamer-1.0.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mjpg-streamer.spec ++++++ --- /var/tmp/diff_new_pack.tfB8Tw/_old 2023-03-27 18:17:32.139504073 +0200 +++ /var/tmp/diff_new_pack.tfB8Tw/_new 2023-03-27 18:17:32.143504093 +0200 @@ -1,7 +1,7 @@ # # spec file for package mjpg-streamer # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: mjpg-streamer -Version: 1.0~pre.1540449284.ddb69b7 +Version: 1.0.0 Release: 0 Summary: Program for streaming webcam video to HTTP License: GPL-2.0-only @@ -31,12 +31,12 @@ BuildRequires: gcc-c++ BuildRequires: libgphoto2-devel BuildRequires: libjpeg-devel -BuildRequires: pkgconfig(opencv) BuildRequires: protobuf-c BuildRequires: python3-devel BuildRequires: python3-numpy-devel BuildRequires: python3-opencv BuildRequires: zeromq-devel +BuildRequires: pkgconfig(opencv) %description MJPG-streamer takes JPGs from Linux-UVC compatible webcams, from ++++++ _service ++++++ --- /var/tmp/diff_new_pack.tfB8Tw/_old 2023-03-27 18:17:32.179504284 +0200 +++ /var/tmp/diff_new_pack.tfB8Tw/_new 2023-03-27 18:17:32.179504284 +0200 @@ -1,10 +1,11 @@ <services> - <service name="obs_scm" mode="disabled"> + <service name="obs_scm" mode="manual"> <param name="url">https://github.com/jacksonliam/mjpg-streamer.git</param> <param name="scm">git</param> - <param name="versionprefix">1.0~pre</param> + <param name="revision">v1.0.0</param> + <param name="version">1.0.0</param> </service> - <service mode="disabled" name="set_version" /> + <service mode="manual" name="set_version" /> <service mode="buildtime" name="tar" /> <service mode="buildtime" name="recompress"> ++++++ mjpg-streamer-1.0~pre.1540449284.ddb69b7.obscpio -> mjpg-streamer-1.0.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/.gitignore new/mjpg-streamer-1.0.0/.gitignore --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/mjpg-streamer-1.0.0/.gitignore 2020-12-18 18:04:35.000000000 +0100 @@ -0,0 +1,22 @@ +# Compiled Object files +*.slo +*.lo +*.o + +# Compiled Dynamic libraries +*.so + +# Compiled Static libraries +*.lai +*.la +*.a + +# Python +__pycache__ +*.pyc + +/mjpg-streamer-experimental/mjpg_streamer +/mjpg-streamer-experimental/_build +*.deb +_pkg/ +doc/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_opencv/CMakeLists.txt new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_opencv/CMakeLists.txt --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_opencv/CMakeLists.txt 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_opencv/CMakeLists.txt 2020-12-18 18:04:35.000000000 +0100 @@ -4,7 +4,7 @@ find_package(OpenCV COMPONENTS core imgproc highgui videoio) MJPG_STREAMER_PLUGIN_OPTION(input_opencv "OpenCV input plugin" - ONLYIF OpenCV_FOUND) + ONLYIF OpenCV_FOUND ${OpenCV_VERSION_MAJOR} EQUAL 3) if (PLUGIN_INPUT_OPENCV) enable_language(CXX) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_opencv/filters/cvfilter_py/CMakeLists.txt new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_opencv/filters/cvfilter_py/CMakeLists.txt --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_opencv/filters/cvfilter_py/CMakeLists.txt 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_opencv/filters/cvfilter_py/CMakeLists.txt 2020-12-18 18:04:35.000000000 +0100 @@ -9,7 +9,7 @@ find_package(Numpy) MJPG_STREAMER_PLUGIN_OPTION(cvfilter_py "OpenCV python filter" - ONLYIF PYTHONLIBS_FOUND NUMPY_FOUND) + ONLYIF PYTHONLIBS_FOUND NUMPY_FOUND ${PYTHON_VERSION_MAJOR} EQUAL 3) if (PLUGIN_CVFILTER_PY) include_directories(${PYTHON_INCLUDE_DIRS}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_ptp2/input_ptp2.c new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_ptp2/input_ptp2.c --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_ptp2/input_ptp2.c 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_ptp2/input_ptp2.c 2020-12-18 18:04:35.000000000 +0100 @@ -131,12 +131,6 @@ { int res, i; - global->in[id].buf = malloc(256 * 1024); - if(global->in[id].buf == NULL) - { - IPRINT(INPUT_PLUGIN_NAME " - could not allocate memory\n"); - exit(EXIT_FAILURE); - } plugin_id = id; // auto-detect algorithm @@ -229,46 +223,67 @@ int i = 0; CameraFile* file; + int jpeg_buffer_size = 256 * 1024; + global->in[plugin_id].buf = malloc(jpeg_buffer_size); + if(global->in[plugin_id].buf == NULL) + { + IPRINT(INPUT_PLUGIN_NAME " - could not allocate memory\n"); + return NULL; + } + pthread_cleanup_push(cleanup, NULL); - while(!global->stop) - { - unsigned long int xsize; - const char* xdata; - pthread_mutex_lock(&control_mutex); - res = gp_file_new(&file); - CAMERA_CHECK_GP(res, "gp_file_new"); - res = gp_camera_capture_preview(camera, file, context); - CAMERA_CHECK_GP(res, "gp_camera_capture_preview"); - pthread_mutex_lock(&global->in[plugin_id].db); - res = gp_file_get_data_and_size(file, &xdata, &xsize); - if(xsize == 0) - { - if(i++ > 3) - { - IPRINT("Restarted too many times; giving up\n"); - return NULL; - } - int value = 0; - IPRINT("Read 0 bytes from camera; restarting it\n"); - camera_set("capture", &value); - sleep(3); - value = 1; - camera_set("capture", &value); - } - else - i = 0; - CAMERA_CHECK_GP(res, "gp_file_get_data_and_size"); - memcpy(global->in[plugin_id].buf, xdata, xsize); - res = gp_file_unref(file); - pthread_mutex_unlock(&control_mutex); - CAMERA_CHECK_GP(res, "gp_file_unref"); - global->in[plugin_id].size = xsize; - DBG("Read %d bytes from camera.\n", global->in[plugin_id].size); - pthread_cond_broadcast(&global->in[plugin_id].db_update); - pthread_mutex_unlock(&global->in[plugin_id].db); - usleep(delay); - } - pthread_cleanup_pop(1); + while(!global->stop) + { + unsigned long int xsize; + const char* xdata; + pthread_mutex_lock(&control_mutex); + res = gp_file_new(&file); + CAMERA_CHECK_GP(res, "gp_file_new"); + res = gp_camera_capture_preview(camera, file, context); + CAMERA_CHECK_GP(res, "gp_camera_capture_preview"); + pthread_mutex_lock(&global->in[plugin_id].db); + res = gp_file_get_data_and_size(file, &xdata, &xsize); + if(xsize == 0) + { + if(i++ > 3) + { + IPRINT("Restarted too many times; giving up\n"); + return NULL; + } + int value = 0; + IPRINT("Read 0 bytes from camera; restarting it\n"); + camera_set("capture", &value); + sleep(3); + value = 1; + camera_set("capture", &value); + } + else + i = 0; + CAMERA_CHECK_GP(res, "gp_file_get_data_and_size"); + + if(jpeg_buffer_size <= xsize) { + jpeg_buffer_size = xsize + xsize * 10/100; + unsigned char *tmp_buff = realloc(global->in[plugin_id].buf,jpeg_buffer_size); + if(tmp_buff == NULL) + { + IPRINT(INPUT_PLUGIN_NAME " - could not allocate memory\n"); + return NULL; + } + global->in[plugin_id].buf = tmp_buff; + } + + + memcpy(global->in[plugin_id].buf, xdata, xsize); + res = gp_file_unref(file); + pthread_mutex_unlock(&control_mutex); + CAMERA_CHECK_GP(res, "gp_file_unref"); + global->in[plugin_id].size = xsize; + DBG("Read %d bytes from camera.\n", global->in[plugin_id].size); + pthread_cond_broadcast(&global->in[plugin_id].db_update); + pthread_mutex_unlock(&global->in[plugin_id].db); + usleep(delay); + } + pthread_cleanup_pop(1); return NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c 2020-12-18 18:04:35.000000000 +0100 @@ -316,7 +316,9 @@ #ifndef NO_LIBJPEG case 20: DBG("case 20\n"); - if (strcmp(optarg, "RGBP") == 0) { + if (strcmp(optarg, "RGB24") == 0) { + format = V4L2_PIX_FMT_RGB24; + } else if (strcmp(optarg, "RGBP") == 0) { format = V4L2_PIX_FMT_RGB565; } else { fprintf(stderr," i: FOURCC codec '%s' not supported\n", optarg); @@ -420,6 +422,9 @@ case V4L2_PIX_FMT_UYVY: fmtString = "UYVY"; break; + case V4L2_PIX_FMT_RGB24: + fmtString = "RGB24"; + break; case V4L2_PIX_FMT_RGB565: fmtString = "RGB565"; break; @@ -540,7 +545,7 @@ " [-u | --uyvy ] ........: Use UYVY format, default: MJPEG (uses more cpu power)\n" \ " [-y | --yuv ] ........: Use YUV format, default: MJPEG (uses more cpu power)\n" \ " [-fourcc ] ............: Use FOURCC codec 'argopt', \n" \ - " currently supported codecs are: RGBP \n" \ + " currently supported codecs are: RGB24, RGBP \n" \ " [-timestamp ]..........: Populate frame timestamp with system time\n" \ " [-softfps] ............: Drop frames to try and achieve this fps\n" \ " set your camera to its maximum fps to avoid stuttering\n" \ @@ -776,6 +781,7 @@ #ifndef NO_LIBJPEG if ((pcontext->videoIn->formatIn == V4L2_PIX_FMT_YUYV) || (pcontext->videoIn->formatIn == V4L2_PIX_FMT_UYVY) || + (pcontext->videoIn->formatIn == V4L2_PIX_FMT_RGB24) || (pcontext->videoIn->formatIn == V4L2_PIX_FMT_RGB565) ) { DBG("compressing frame from input: %d\n", (int)pcontext->id); pglobal->in[pcontext->id].size = compress_image_to_jpeg(pcontext->videoIn, pglobal->in[pcontext->id].buf, pcontext->videoIn->framesizeIn, quality); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_uvc/jpeg_utils.c new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_uvc/jpeg_utils.c --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_uvc/jpeg_utils.c 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_uvc/jpeg_utils.c 2020-12-18 18:04:35.000000000 +0100 @@ -200,6 +200,21 @@ row_pointer[0] = line_buffer; jpeg_write_scanlines(&cinfo, row_pointer, 1); } + } else if (vd->formatIn == V4L2_PIX_FMT_RGB24) { + while(cinfo.next_scanline < vd->height) { + int x; + unsigned char *ptr = line_buffer; + + for(x = 0; x < vd->width; x++) { + *(ptr++) = yuyv[0]; + *(ptr++) = yuyv[1]; + *(ptr++) = yuyv[2]; + yuyv += 3; + } + + row_pointer[0] = line_buffer; + jpeg_write_scanlines(&cinfo, row_pointer, 1); + } } else if (vd->formatIn == V4L2_PIX_FMT_RGB565) { while(cinfo.next_scanline < vd->height) { int x; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_uvc/v4l2uvc.c new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_uvc/v4l2uvc.c --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/input_uvc/v4l2uvc.c 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/input_uvc/v4l2uvc.c 2020-12-18 18:04:35.000000000 +0100 @@ -240,6 +240,11 @@ vd->framebuffer = (unsigned char *) calloc(1, (size_t) vd->width * (vd->height + 8) * 2); break; + case V4L2_PIX_FMT_RGB24: + vd->framesizeIn = (vd->width * vd->height) * 3; + vd->framebuffer = + (unsigned char *) calloc(1, (size_t) vd->framesizeIn); + break; case V4L2_PIX_FMT_RGB565: // buffer allocation for non varies on frame size formats case V4L2_PIX_FMT_YUYV: case V4L2_PIX_FMT_UYVY: @@ -247,7 +252,7 @@ (unsigned char *) calloc(1, (size_t) vd->framesizeIn); break; default: - fprintf(stderr, " Unknow vd->formatIn\n"); + fprintf(stderr, "Unknown vd->formatIn\n"); return -1; } return -!vd->framebuffer; @@ -367,8 +372,12 @@ fprintf(stderr, " ... Falling back to UYVY mode (consider using -uyvy option). Note that this requires much more CPU power\n"); vd->formatIn = vd->fmt.fmt.pix.pixelformat; break; + case V4L2_PIX_FMT_RGB24: + fprintf(stderr, " ... Falling back to RGB24 mode (consider using -fourcc RGB24 option). Note that this requires much more CPU power\n"); + vd->formatIn = vd->fmt.fmt.pix.pixelformat; + break; case V4L2_PIX_FMT_RGB565: - fprintf(stderr, " ... Falling back to RGB565 mode (consider using -fourcc option). Note that this requires much more CPU power\n"); + fprintf(stderr, " ... Falling back to RGB565 mode (consider using -fourcc RGBP option). Note that this requires much more CPU power\n"); vd->formatIn = vd->fmt.fmt.pix.pixelformat; break; default: @@ -650,6 +659,7 @@ fprintf(stderr, "bytes in used %d \n", vd->buf.bytesused); } break; + case V4L2_PIX_FMT_RGB24: case V4L2_PIX_FMT_RGB565: case V4L2_PIX_FMT_YUYV: case V4L2_PIX_FMT_UYVY: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/output_http/httpd.c new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/output_http/httpd.c --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/plugins/output_http/httpd.c 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/plugins/output_http/httpd.c 2020-12-18 18:04:35.000000000 +0100 @@ -835,15 +835,23 @@ if(f == NULL) { DBG("Unable to execute the requested CGI script\n"); send_error(fd, 403, "CGI script cannot be executed"); + free(buffer); + close(lfd); return; } while((i = fread(buffer, 1, sizeof(buffer), f)) > 0) { if (write(fd, buffer, i) < 0) { fclose(f); + free(buffer); + close(lfd); return; } } + + fclose(f); + free(buffer); + close(lfd); } @@ -1222,6 +1230,7 @@ req.query_string = malloc(len + 1); if (req.query_string == NULL) exit(EXIT_FAILURE); + memset(req.query_string, 0, len + 1); strncpy(req.query_string, pb, len); } else { req.query_string = malloc(2); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/README.md new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/README.md --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/README.md 1970-01-01 01:00:00.000000000 +0100 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/README.md 2020-12-18 18:04:35.000000000 +0100 @@ -0,0 +1,35 @@ +# Script files for mjpg-streamer. + +Assumes mjpg-streamer is installed at /usr/local/bin/mjpg_streamer and +that there is a user account `webcam` for running these scripts. + +If you have a different setup you'll need to adjust +mjpg-streamer.default (init) or mjpg-streamer.service (systemd) +accordingly. + +The `webcam` user will need access to /dev/video*. To add this run: + +```sh +sudo adduser webcam video +sudo usermod -a -G video webcam +``` + +## init + +``` +mjpg-streamer.default => /etc/default/mjpg-streamer +mjpg-streamer.init => /etc/init.d/mjpg-streamer +``` + +After copying the above files run: + +```sh +sudo update-rc.d mjpg-streamer defaults +sudo systemctl daemon-reload +``` + +## systemd + +``` +mjpg-streamer.service => /etc/systemd/system/mjpg-streamer.service +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/mjpg-streamer.default new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/mjpg-streamer.default --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/mjpg-streamer.default 1970-01-01 01:00:00.000000000 +0100 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/mjpg-streamer.default 2020-12-18 18:04:35.000000000 +0100 @@ -0,0 +1,37 @@ +# Configuration for /etc/init.d/mjpg-streamer + +# The init.d script will only run if this variable non-empty. +MJPG_STREAMER_USER=webcam + +# base directory to use. This is where mjpg-streamer's `make install` +# copies files by default. +BASEDIR=/usr/local + +# The directory where the mjpg-streamer shared libraries reside. +LIB_DIR=${BASEDIR}/lib/mjpg-streamer + +# https://github.com/OctoPrint/OctoPrint/wiki/Webcams-known-to-work +CAMERA_OPTIONS="-r 1280x720 -f 30" + +# Document this. +WWW_ROOT=/var/local/www + +# Path to the mjpg-streamer executable. Make sure this matches your +# installation. +DAEMON=${BASEDIR}/bin/mjpg_streamer + +# The input library. +INPUT_UVC_LIB=${LIB_DIR}/input_uvc.so + +# The output library. +OUTPUT_HTTP_LIB=${LIB_DIR}/output_http.so + +# WWW directory. +WWW_ROOT=/var/local/www + +# Umask of files mjpg-streamer generates, Change this to 022 if *not* running +# mjpg-streamer as its own, separate user. +UMASK=000 + +# Should we run at startup? +START=yes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/mjpg-streamer.init new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/mjpg-streamer.init --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/mjpg-streamer.init 1970-01-01 01:00:00.000000000 +0100 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/mjpg-streamer.init 2020-12-18 18:04:35.000000000 +0100 @@ -0,0 +1,174 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: mjpg-streamer +# Required-Start: $local_fs networking +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: mjpg-streamer daemon +# Description: Starts the mjpg-streamer daemon with the user specified in +# /etc/default/mjpg-streamer. +### END INIT INFO + +# Author: Sami Olmari & Gina HäuÃge + +# Set to true to aid in debugging with this script fails to +# start. +debug_me=false + +if [[ $debug_me == true ]]; then + + # Close STDOUT + exec 1<&- + # Close STDERR + exec 2<&- + + LOG_FILE=/home/webcam/mjpg_streamer.log + + # Open STDOUT as $LOG_FILE file for read and write. + exec 1<>$LOG_FILE + + # Redirect STDERR to STDOUT + exec 2>&1 + + # Display shell commands with expanded args + set -x +fi + +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +DESC="mjpg-streamer Daemon" +NAME="mjpg-streamer" +PKGNAME=mjpg-streamer +PIDFILE=/var/run/$PKGNAME.pid +SCRIPTNAME=/etc/init.d/$PKGNAME +DEFAULTS=/etc/default/$PKGNAME + +# Read configuration variable file if it is present +[ -r $DEFAULTS ] && . $DEFAULTS + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +# Exit if the DAEMON is not set +if [ -z "$DAEMON" ] +then + log_warning_msg "Not starting $PKGNAME, DAEMON not set in $DEFAULTS." + exit 0 +fi + +# Exit if the DAEMON is not installed +[ -x "$DAEMON" ] || exit 0 + +# Load the VERBOSE setting and other rcS variables +[ -f /etc/default/rcS ] && . /etc/default/rcS + +if [ -z "$START" -o "$START" != "yes" ] +then + log_warning_msg "Not starting $PKGNAME, edit $DEFAULTS to start it." + exit 0 +fi + +if [ -z "$MJPG_STREAMER_USER" ] +then + log_warning_msg "Not starting $PKGNAME, MJPG_STREAMER_USER not set in $DEFAULTS." + exit 0 +fi + +# +# Function to verify if a pid is alive +# +is_alive() +{ + pid=`cat $1` > /dev/null 2>&1 + kill -0 $pid > /dev/null 2>&1 + return $? +} + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + + is_alive $PIDFILE + RETVAL="$?" + + if [ $RETVAL != 0 ]; then + start-stop-daemon --verbose --start --background --pidfile $PIDFILE --make-pidfile \ + --exec $DAEMON --chuid $MJPG_STREAMER_USER --user $MJPG_STREAMER_USER \ + --umask $UMASK -- -i "${INPUT_UVC_LIB} ${CAMERA_OPTIONS}" -o "${OUTPUT_HTTP_LIB} -w ${WWW_ROOT}" + RETVAL="$?" + fi +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $MJPG_STREAMER_USER --pidfile $PIDFILE + RETVAL="$?" + [ "$RETVAL" = "2" ] && return 2 + + rm -f $PIDFILE + + [ "$RETVAL" = "0" ] && return 0 || return 1 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? + ;; + restart) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2 + exit 3 + ;; +esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/mjpg-streamer.service new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/mjpg-streamer.service --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/scripts/mjpg-streamer.service 1970-01-01 01:00:00.000000000 +0100 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/scripts/mjpg-streamer.service 2020-12-18 18:04:35.000000000 +0100 @@ -0,0 +1,12 @@ +[Unit] +Description=A Linux-UVC streaming application with Pan/Tilt +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=webcam +ExecStart=/usr/local/bin/mjpg_streamer + +[Install] +WantedBy=multi-user.target diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/utils.h new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/utils.h --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/utils.h 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/utils.h 2020-12-18 18:04:35.000000000 +0100 @@ -86,6 +86,7 @@ settings->v = 1; \ } else if (strcasecmp("false", optarg) == 0) { \ settings->v = 0; \ + } else { \ fprintf(stderr, "Invalid value '%s' for -" #v " (true/false accepted)\n", optarg); \ exit(EXIT_FAILURE); \ } \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/www/style.css new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/www/style.css --- old/mjpg-streamer-1.0~pre.1540449284.ddb69b7/mjpg-streamer-experimental/www/style.css 2018-10-25 08:34:44.000000000 +0200 +++ new/mjpg-streamer-1.0.0/mjpg-streamer-experimental/www/style.css 2020-12-18 18:04:35.000000000 +0100 @@ -20,7 +20,7 @@ {color:#505050; text-decoration:underline;} img -{float:left; margin:0 15px 15px 0; padding:1px; background:#ffffff; border:1px solid #d0d0d0;} +{float:left; margin:0 15px 15px 0; padding:1px; border:1px solid #d0d0d0;} a img {border-color:#d85d5d;} ++++++ mjpg-streamer.obsinfo ++++++ --- /var/tmp/diff_new_pack.tfB8Tw/_old 2023-03-27 18:17:32.467505804 +0200 +++ /var/tmp/diff_new_pack.tfB8Tw/_new 2023-03-27 18:17:32.471505825 +0200 @@ -1,6 +1,5 @@ name: mjpg-streamer -version: 1.0~pre.1540449284.ddb69b7 -mtime: 1540449284 -commit: ddb69b7b4f114f3c2ca01adf55712792ca8aed43 - +version: 1.0.0 +mtime: 1608311075 +commit: 5554f42c352ecfa7edaec6fc51e507afce605a34
