cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

vidtv_encoder.h (3843B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Vidtv serves as a reference DVB driver and helps validate the existing APIs
      4 * in the media subsystem. It can also aid developers working on userspace
      5 * applications.
      6 *
      7 * This file contains a generic encoder type that can provide data for a stream
      8 *
      9 * Copyright (C) 2020 Daniel W. S. Almeida
     10 */
     11
     12#ifndef VIDTV_ENCODER_H
     13#define VIDTV_ENCODER_H
     14
     15#include <linux/types.h>
     16
     17enum vidtv_encoder_id {
     18	/* add IDs here when implementing new encoders */
     19	S302M,
     20};
     21
     22struct vidtv_access_unit {
     23	u32 num_samples;
     24	u64 pts;
     25	u64 dts;
     26	u32 nbytes;
     27	u32 offset;
     28	struct vidtv_access_unit *next;
     29};
     30
     31/* Some musical notes, used by a tone generator. Values are in Hz */
     32enum musical_notes {
     33	NOTE_SILENT = 0,
     34
     35	NOTE_C_2 = 65,
     36	NOTE_CS_2 = 69,
     37	NOTE_D_2 = 73,
     38	NOTE_DS_2 = 78,
     39	NOTE_E_2 = 82,
     40	NOTE_F_2 = 87,
     41	NOTE_FS_2 = 93,
     42	NOTE_G_2 = 98,
     43	NOTE_GS_2 = 104,
     44	NOTE_A_2 = 110,
     45	NOTE_AS_2 = 117,
     46	NOTE_B_2 = 123,
     47	NOTE_C_3 = 131,
     48	NOTE_CS_3 = 139,
     49	NOTE_D_3 = 147,
     50	NOTE_DS_3 = 156,
     51	NOTE_E_3 = 165,
     52	NOTE_F_3 = 175,
     53	NOTE_FS_3 = 185,
     54	NOTE_G_3 = 196,
     55	NOTE_GS_3 = 208,
     56	NOTE_A_3 = 220,
     57	NOTE_AS_3 = 233,
     58	NOTE_B_3 = 247,
     59	NOTE_C_4 = 262,
     60	NOTE_CS_4 = 277,
     61	NOTE_D_4 = 294,
     62	NOTE_DS_4 = 311,
     63	NOTE_E_4 = 330,
     64	NOTE_F_4 = 349,
     65	NOTE_FS_4 = 370,
     66	NOTE_G_4 = 392,
     67	NOTE_GS_4 = 415,
     68	NOTE_A_4 = 440,
     69	NOTE_AS_4 = 466,
     70	NOTE_B_4 = 494,
     71	NOTE_C_5 = 523,
     72	NOTE_CS_5 = 554,
     73	NOTE_D_5 = 587,
     74	NOTE_DS_5 = 622,
     75	NOTE_E_5 = 659,
     76	NOTE_F_5 = 698,
     77	NOTE_FS_5 = 740,
     78	NOTE_G_5 = 784,
     79	NOTE_GS_5 = 831,
     80	NOTE_A_5 = 880,
     81	NOTE_AS_5 = 932,
     82	NOTE_B_5 = 988,
     83	NOTE_C_6 = 1047,
     84	NOTE_CS_6 = 1109,
     85	NOTE_D_6 = 1175,
     86	NOTE_DS_6 = 1245,
     87	NOTE_E_6 = 1319,
     88	NOTE_F_6 = 1397,
     89	NOTE_FS_6 = 1480,
     90	NOTE_G_6 = 1568,
     91	NOTE_GS_6 = 1661,
     92	NOTE_A_6 = 1760,
     93	NOTE_AS_6 = 1865,
     94	NOTE_B_6 = 1976,
     95	NOTE_C_7 = 2093
     96};
     97
     98/**
     99 * struct vidtv_encoder - A generic encoder type.
    100 * @id: So we can cast to a concrete implementation when needed.
    101 * @name: Usually the same as the stream name.
    102 * @encoder_buf: The encoder internal buffer for the access units.
    103 * @encoder_buf_sz: The encoder buffer size, in bytes
    104 * @encoder_buf_offset: Our byte position in the encoder buffer.
    105 * @sample_count: How many samples we have encoded in total.
    106 * @access_units: encoder payload units, used for clock references
    107 * @src_buf: The source of raw data to be encoded, encoder might set a
    108 * default if null.
    109 * @src_buf_sz: size of @src_buf.
    110 * @src_buf_offset: Our position in the source buffer.
    111 * @is_video_encoder: Whether this a video encoder (as opposed to audio)
    112 * @ctx: Encoder-specific state.
    113 * @stream_id: Examples: Audio streams (0xc0-0xdf), Video streams
    114 * (0xe0-0xef).
    115 * @es_pid: The TS PID to use for the elementary stream in this encoder.
    116 * @encode: Prepare enough AUs for the given amount of time.
    117 * @clear: Clear the encoder output.
    118 * @sync: Attempt to synchronize with this encoder.
    119 * @sampling_rate_hz: The sampling rate (or fps, if video) used.
    120 * @last_sample_cb: Called when the encoder runs out of data.This is
    121 *		    so the source can read data in a
    122 *		    piecemeal fashion instead of having to
    123 *		    provide it all at once.
    124 * @destroy: Destroy this encoder, freeing allocated resources.
    125 * @next: Next in the chain
    126 */
    127struct vidtv_encoder {
    128	enum vidtv_encoder_id id;
    129	char *name;
    130
    131	u8 *encoder_buf;
    132	u32 encoder_buf_sz;
    133	u32 encoder_buf_offset;
    134
    135	u64 sample_count;
    136
    137	struct vidtv_access_unit *access_units;
    138
    139	void *src_buf;
    140	u32 src_buf_sz;
    141	u32 src_buf_offset;
    142
    143	bool is_video_encoder;
    144	void *ctx;
    145
    146	__be16 stream_id;
    147
    148	__be16 es_pid;
    149
    150	void *(*encode)(struct vidtv_encoder *e);
    151
    152	u32 (*clear)(struct vidtv_encoder *e);
    153
    154	struct vidtv_encoder *sync;
    155
    156	u32 sampling_rate_hz;
    157
    158	void (*last_sample_cb)(u32 sample_no);
    159
    160	void (*destroy)(struct vidtv_encoder *e);
    161
    162	struct vidtv_encoder *next;
    163};
    164
    165#endif /* VIDTV_ENCODER_H */