// SPDX-License-Identifier: GPL-2.0
/*
* The Virtual DVB test driver serves as a reference DVB driver and helps
* validate the existing APIs in the media subsystem . It can also aid
* developers working on userspace applications .
*
* Copyright ( C ) 2020 Daniel W . S . Almeida
*/
#define pr_fmt(fmt) KBUILD_MODNAME ":%s, %d: " fmt, __func__, __LINE__
#include <linux/printk.h>
#include <linux/ratelimit.h>
#include <linux/string.h>
#include <linux/types.h>
#include "vidtv_common.h"
/**
* vidtv_memcpy ( ) - wrapper routine to be used by MPEG - TS
* generator , in order to avoid going past the
* output buffer .
* @ to : Starting element to where a MPEG - TS packet will
* be copied .
* @ to_offset : Starting position of the @ to buffer to be filled .
* @ to_size : Size of the @ to buffer .
* @ from : Starting element of the buffer to be copied .
* @ len : Number of elements to be copy from @ from buffer
* into @ to + @ to_offset buffer .
*
* Note :
* Real digital TV demod drivers should not have memcpy
* wrappers . We use it here because emulating MPEG - TS
* generation at kernelspace requires some extra care .
*
* Return :
* Returns the number of bytes written
*/
u32 vidtv_memcpy(void *to,
size_t to_offset,
size_t to_size,
const void *from,
size_t len)
{
if (unlikely(to_offset + len > to_size)) {
pr_err_ratelimited("overflow detected, skipping. Try increasing the buffer size. Needed %zu, had %zu\n" ,
to_offset + len,
to_size);
return 0 ;
}
memcpy(to + to_offset, from, len);
return len;
}
/**
* vidtv_memset ( ) - wrapper routine to be used by MPEG - TS
* generator , in order to avoid going past the
* output buffer .
* @ to : Starting element to set
* @ to_offset : Starting position of the @ to buffer to be filled .
* @ to_size : Size of the @ to buffer .
* @ c : The value to set the memory to .
* @ len : Number of elements to be copy from @ from buffer
* into @ to + @ to_offset buffer .
*
* Note :
* Real digital TV demod drivers should not have memset
* wrappers . We use it here because emulating MPEG - TS
* generation at kernelspace requires some extra care .
*
* Return :
* Returns the number of bytes written
*/
u32 vidtv_memset(void *to,
size_t to_offset,
size_t to_size,
const int c,
size_t len)
{
if (unlikely(to_offset + len > to_size)) {
pr_err_ratelimited("overflow detected, skipping. Try increasing the buffer size. Needed %zu, had %zu\n" ,
to_offset + len,
to_size);
return 0 ;
}
memset(to + to_offset, c, len);
return len;
}
Messung V0.5 in Prozent C=96 H=90 G=93
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland