| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | | - * Copyright (C) 2010-2013 Bluecherry, LLC <http://www.bluecherrydvr.com> |
|---|
| 3 | + * Copyright (C) 2010-2013 Bluecherry, LLC <https://www.bluecherrydvr.com> |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Original author: |
|---|
| 5 | 6 | * Ben Collins <bcollins@ubuntu.com> |
|---|
| 6 | 7 | * |
|---|
| 7 | 8 | * Additional work by: |
|---|
| 8 | 9 | * John Brooks <john.brooks@bluecherry.net> |
|---|
| 9 | | - * |
|---|
| 10 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 11 | | - * it under the terms of the GNU General Public License as published by |
|---|
| 12 | | - * the Free Software Foundation; either version 2 of the License, or |
|---|
| 13 | | - * (at your option) any later version. |
|---|
| 14 | | - * |
|---|
| 15 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 16 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 17 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 18 | | - * GNU General Public License for more details. |
|---|
| 19 | 10 | */ |
|---|
| 20 | 11 | |
|---|
| 21 | 12 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 775 | 766 | struct solo_enc_dev *solo_enc = video_drvdata(file); |
|---|
| 776 | 767 | struct solo_dev *solo_dev = solo_enc->solo_dev; |
|---|
| 777 | 768 | |
|---|
| 778 | | - strcpy(cap->driver, SOLO6X10_NAME); |
|---|
| 769 | + strscpy(cap->driver, SOLO6X10_NAME, sizeof(cap->driver)); |
|---|
| 779 | 770 | snprintf(cap->card, sizeof(cap->card), "Softlogic 6x10 Enc %d", |
|---|
| 780 | 771 | solo_enc->ch); |
|---|
| 781 | 772 | snprintf(cap->bus_info, sizeof(cap->bus_info), "PCI:%s", |
|---|
| 782 | 773 | pci_name(solo_dev->pdev)); |
|---|
| 783 | | - cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | |
|---|
| 784 | | - V4L2_CAP_READWRITE | V4L2_CAP_STREAMING; |
|---|
| 785 | | - cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS; |
|---|
| 786 | 774 | return 0; |
|---|
| 787 | 775 | } |
|---|
| 788 | 776 | |
|---|
| .. | .. |
|---|
| 834 | 822 | switch (dev_type) { |
|---|
| 835 | 823 | case SOLO_DEV_6010: |
|---|
| 836 | 824 | f->pixelformat = V4L2_PIX_FMT_MPEG4; |
|---|
| 837 | | - strcpy(f->description, "MPEG-4 part 2"); |
|---|
| 838 | 825 | break; |
|---|
| 839 | 826 | case SOLO_DEV_6110: |
|---|
| 840 | 827 | f->pixelformat = V4L2_PIX_FMT_H264; |
|---|
| 841 | | - strcpy(f->description, "H.264"); |
|---|
| 842 | 828 | break; |
|---|
| 843 | 829 | } |
|---|
| 844 | 830 | break; |
|---|
| 845 | 831 | case 1: |
|---|
| 846 | 832 | f->pixelformat = V4L2_PIX_FMT_MJPEG; |
|---|
| 847 | | - strcpy(f->description, "MJPEG"); |
|---|
| 848 | 833 | break; |
|---|
| 849 | 834 | default: |
|---|
| 850 | 835 | return -EINVAL; |
|---|
| 851 | 836 | } |
|---|
| 852 | | - |
|---|
| 853 | | - f->flags = V4L2_FMT_FLAG_COMPRESSED; |
|---|
| 854 | | - |
|---|
| 855 | 837 | return 0; |
|---|
| 856 | 838 | } |
|---|
| 857 | 839 | |
|---|
| .. | .. |
|---|
| 897 | 879 | pix->colorspace = V4L2_COLORSPACE_SMPTE170M; |
|---|
| 898 | 880 | pix->sizeimage = FRAME_BUF_SIZE; |
|---|
| 899 | 881 | pix->bytesperline = 0; |
|---|
| 900 | | - pix->priv = 0; |
|---|
| 901 | 882 | |
|---|
| 902 | 883 | return 0; |
|---|
| 903 | 884 | } |
|---|
| .. | .. |
|---|
| 952 | 933 | V4L2_FIELD_NONE; |
|---|
| 953 | 934 | pix->sizeimage = FRAME_BUF_SIZE; |
|---|
| 954 | 935 | pix->colorspace = V4L2_COLORSPACE_SMPTE170M; |
|---|
| 955 | | - pix->priv = 0; |
|---|
| 956 | 936 | |
|---|
| 957 | 937 | return 0; |
|---|
| 958 | 938 | } |
|---|
| .. | .. |
|---|
| 1126 | 1106 | solo_enc->md_thresholds->p_new.p_u16); |
|---|
| 1127 | 1107 | break; |
|---|
| 1128 | 1108 | case V4L2_CID_OSD_TEXT: |
|---|
| 1129 | | - strcpy(solo_enc->osd_text, ctrl->p_new.p_char); |
|---|
| 1109 | + strscpy(solo_enc->osd_text, ctrl->p_new.p_char, |
|---|
| 1110 | + sizeof(solo_enc->osd_text)); |
|---|
| 1130 | 1111 | return solo_osd_print(solo_enc); |
|---|
| 1131 | 1112 | default: |
|---|
| 1132 | 1113 | return -EINVAL; |
|---|
| .. | .. |
|---|
| 1198 | 1179 | .minor = -1, |
|---|
| 1199 | 1180 | .release = video_device_release, |
|---|
| 1200 | 1181 | .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL, |
|---|
| 1182 | + .device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE | |
|---|
| 1183 | + V4L2_CAP_STREAMING, |
|---|
| 1201 | 1184 | }; |
|---|
| 1202 | 1185 | |
|---|
| 1203 | 1186 | static const struct v4l2_ctrl_ops solo_ctrl_ops = { |
|---|
| .. | .. |
|---|
| 1321 | 1304 | solo_enc->vfd->queue = &solo_enc->vidq; |
|---|
| 1322 | 1305 | solo_enc->vfd->lock = &solo_enc->lock; |
|---|
| 1323 | 1306 | video_set_drvdata(solo_enc->vfd, solo_enc); |
|---|
| 1324 | | - ret = video_register_device(solo_enc->vfd, VFL_TYPE_GRABBER, nr); |
|---|
| 1307 | + ret = video_register_device(solo_enc->vfd, VFL_TYPE_VIDEO, nr); |
|---|
| 1325 | 1308 | if (ret < 0) |
|---|
| 1326 | 1309 | goto vdev_release; |
|---|
| 1327 | 1310 | |
|---|