frontend_scan(3)
πΈ frontend_scan(3) πΈ
okay so bestie, welcome to the frontend_scan(3) glow-up β it's a Library Functions Manual situation and it's literally about Digital TV frontend scan. Grab a strawberry drink, we're doing DVB together ππ
β¨ NAME β¨
frontend_scan β Digital TV frontend scan. that's it, that's the name, short and iconic π
π SYNOPSIS π
π Files
dvb-scan.hβ provides interfaces to scan programs inside MPEG-TS digital TV streams. the little entry point, the moment, the vibe π¦
π§± Data Structures
struct dvb_v5_descriptors_programβ associates PMT with PAT tables. they're besties, they come as a pair π«Άstruct dvb_v5_descriptorsβ contains the descriptors needed to scan the Service ID and other relevant info at a MPEG-TS Digital TV stream. the main character fr πstruct dvb_table_filterβ describes the PES filters used by DVB scan.
π·οΈ Typedefs
typedef int check_frontend_t(void *args, struct dvb_v5_fe_parms *parms)β callback for the application to show the frontend status. it's giving "hey app, tell everyone how the frontend is doing" β¨
π οΈ Functions
dvb_dev_scan()β scans a DVBdvb_add_scaned_transponder.
struct dvb_v5_descriptors * dvb_dev_scan (struct dvb_open_descriptor *open_dev, struct dvb_entry *entry, check_frontend_t *check_frontend, void *args, unsigned other_nit, unsigned timeout_multiply)
dvb_table_filter_free()β deallocates all data associated with a table filter. bye bye, clean up after yourself bestie π§Ή
void dvb_table_filter_free (struct dvb_table_filter *sect)
dvb_read_section()β read MPEG-TS tables that comes from a DTV card.
int dvb_read_section (struct dvb_v5_fe_parms *parms, int dmx_fd, unsigned char tid, uint16_t pid, void **table, unsigned timeout)
dvb_read_section_with_id()β read MPEG-TS tables that comes from a DTV card with an specific table section ID. the β¨pickyβ¨ version, it knows exactly which section ID it wants.
int dvb_read_section_with_id (struct dvb_v5_fe_parms *parms, int dmx_fd, unsigned char tid, uint16_t pid, int ts_id, void **table, unsigned timeout)
dvb_read_sections()β read MPEG-TS tables that comes from a DTV card.
int dvb_read_sections (struct dvb_v5_fe_parms *parms, int dmx_fd, struct dvb_table_filter *sect, unsigned timeout)
dvb_scan_alloc_handler_table()β allocates astruct dvb_v5_descriptors.
struct dvb_v5_descriptors * dvb_scan_alloc_handler_table (uint32_t delivery_system)
dvb_scan_free_handler_table()β frees astruct dvb_v5_descriptors.
void dvb_scan_free_handler_table (struct dvb_v5_descriptors *dvb_scan_handler)
dvb_get_ts_tables()β scans a DVB stream, looking for the tables needed to identify the programs inside a MPEG-TS. it's on a lil scavenger hunt for tables π
struct dvb_v5_descriptors * dvb_get_ts_tables (struct dvb_v5_fe_parms *parms, int dmx_fd, uint32_t delivery_system, unsigned other_nit, unsigned timeout_multiply)
dvb_free_ts_tables()β frees astruct dvb_v5_descriptors.
void dvb_free_ts_tables (struct dvb_v5_descriptors *dvb_desc)
dvb_scan_transponder()β scans a DVBdvb_add_scaned_transponder.
struct dvb_v5_descriptors * dvb_scan_transponder (struct dvb_v5_fe_parms *parms, struct dvb_entry *entry, int dmx_fd, check_frontend_t *check_frontend, void *args, unsigned other_nit, unsigned timeout_multiply)
dvb_add_scaned_transponders()β add new transponders to advb_file.
void dvb_add_scaned_transponders (struct dvb_v5_fe_parms *parms, struct dvb_v5_descriptors *dvb_scan_handler, struct dvb_entry *first_entry, struct dvb_entry *entry)
π Detailed Description π
ngl bestie, this section is literally just a heading in the original β no prose, no lore, nothing. an empty room with great lighting πβ¨ so we move on, no cap.
π Typedef Documentation π
typedef int check_frontend_t(void *args, struct dvb_v5_fe_parms *parms)
Callback for the application to show the frontend status. your app gets to flex and display what the frontend is up to π
Parameters
argsβ a pointer, opaque to libdvbv5, to be used by the application if needed. it's yours, libdvbv5 is literally not looking πparmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is opened.
Definition at line 293 of file dvb-scan.h. β¨
π Function Documentation π
πΈ dvb_add_scaned_transponders
void dvb_add_scaned_transponders (struct dvb_v5_fe_parms * parms, struct
dvb_v5_descriptors * dvb_scan_handler, struct dvb_entry * first_entry,
struct dvb_entry * entry)
okay so this one is literally "add new transponders to a dvb_file" π
Parameters π
parmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is openeddvb_scan_handlerβ pointer to astruct dvb_v5_descriptorscontaining scaned MPEG-TSfirst_entryβ first entry of a DVB file structentryβ current entry on a DVB file struct
So here's the tea: when the NIT table gets parsed, sometimes there are brand new transponders described inside it. This function adds new entries to a dvb_file struct, pointing to those new transponders. It's used inside the scan loop, as shown at the dvb_scan_transponder(), to add new channels. π¦
Example: β¨
for (entry = dvb_file->first_entry; entry != NULL; entry = entry->next) {
struct dvb_v5_descriptors *dvb_scan_handler = NULL;
dvb_scan_handler = dvb_scan_transponder(parms, entry, dmx_fd,
&check_frontend, args,
args->other_nit,
args->timeout_multiply);
if (parms->abort) {
dvb_scan_free_handler_table(dvb_scan_handler);
break;
}
if (dvb_scan_handler) {
dvb_store_channel(&dvb_file_new, parms, dvb_scan_handler,
args->get_detected, args->get_nit);
dvb_scan_free_handler_table(dvb_scan_handler);
dvb_add_scaned_transponders(parms, dvb_scan_handler,
dvb_file->first_entry, entry);
dvb_scan_free_handler_table(dvb_scan_handler);
}
}
π dvb_dev_scan
struct dvb_v5_descriptors * dvb_dev_scan (struct dvb_open_descriptor *
open_dev, struct dvb_entry * entry, check_frontend_t * check_frontend,
void * args, unsigned other_nit, unsigned timeout_multiply)
Scans a DVB dvb_add_scaned_transponder. (yes that's really what the one-liner says, i'm just the messenger π)
Parameters π«Ά
entryβ DVB file entry that corresponds to a transponder to be tunedopen_devβ Points to thestruct dvb_open_descriptorcheck_frontendβ a pointer to a function that will show the frontend status while tuning into a transponderargsβ a pointer, opaque to libdvbv5, that will be used when callingcheck_frontend. It should contain any parameters that could be needed bycheck_frontend.other_nitβ Use alternate table IDs for NIT and other tablestimeout_multiplyβ Improves the timeout for each table reception, by
This is the function that applications should use when doing a transponders scan, bestie. π It does everything needed to fill the entries with DVB programs (virtual channels) and detect the PIDs associated with them.
This is the dvb_device variant of dvb_scan_transponder().
π dvb_free_ts_tables
void dvb_free_ts_tables (struct dvb_v5_descriptors * dvb_desc)
frees a struct dvb_v5_descriptors π§
Parameters
dvb_descβ pointed to the structure to be freed.
This function recursively frees everything that is allocated by dvb_get_ts_tables() and stored at dvb_desc, including dvb_desc itself. so like, full cleanup, nothing left behind, periodt β¨
π dvb_get_ts_tables
struct dvb_v5_descriptors * dvb_get_ts_tables (struct dvb_v5_fe_parms *
parms, int dmx_fd, uint32_t delivery_system, unsigned other_nit,
unsigned timeout_multiply)
Scans a DVB stream, looking for the tables needed to identify the programs inside a MPEG-TS. π₯
Parameters
parmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is openeddmx_fdβ an opened demux file descriptordelivery_systemβ delivery system to be scannedother_nitβ use alternate table IDs for NIT and other tablestimeout_multiplyβ improves the timeout for each table reception by using a value that will multiply the wait time.
Given an opened frontend and demux, this function seeks for all programs available at the transport stream, and parses the following tables: PAT, PMT, NIT, SDT (and VCT, if the delivery system is ATSC). the way it just hoovers up every table it can find π
On sucess, it returns a pointer to a struct dvb_v5_descriptors, that can either be used to tune into a service or to be stored inside a file.
β dvb_read_section
int dvb_read_section (struct dvb_v5_fe_parms * parms, int dmx_fd, unsigned
char tid, uint16_t pid, void ** table, unsigned timeout)
read MPEG-TS tables that comes from a DTV card πΈ
Parameters
parmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is openeddmx_fdβ an opened demux file descriptortidβ Table IDpidβ Program IDtableβ pointer to a pointer for the table struct to be filledtimeoutβ Limit, in seconds, to read a MPEG-TS table
This function is used to read the DVB tables by specifying a table ID and a program ID. The libdvbv5 should have a parser for the descriptors of the table type that should be parsed. The table will be automatically allocated on success. The function will read on the specified demux and return when reading is done or an error has occurred. If table is not NULL after the call, it has to be freed with the apropriate free table function (even if an error has occurred). π«Ά
If the application wants to abort the read operation, it can change the value ofparms->p.abortto1. like, emergency exit button, iykyk π
Returns 0 on success or a negative error code.
Example usage: β¨
struct dvb_table_pat *pat;
int r = dvb_read_section( parms, dmx_fd, DVB_TABLE_PAT, DVB_TABLE_PAT_PID,
(void **) &pat, 5 );
if (r < 0)
dvb_logerr("error reading PAT table");
else {
// do something with pat
}
if (pat)
dvb_table_pat_free( pat );
π¦ dvb_read_section_with_id
int dvb_read_section_with_id (struct dvb_v5_fe_parms * parms, int dmx_fd,
unsigned char tid, uint16_t pid, int ts_id, void ** table, unsigned
timeout)
read MPEG-TS tables that comes from a DTV card with an specific table section ID π
Parameters
parmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is openeddmx_fdβ an opened demux file descriptortidβ Table IDpidβ Program IDts_idβ Table section ID (for multisession filtering). If no specific table section is needed,-1should be usedtableβ pointer to a pointer for the table struct to be filledtimeoutβ limit, in seconds, to read a MPEG-TS table
This is a variant of dvb_read_section() that also seeks for an specific table section ID given by ts_id. so it's the same vibe but with extra targeting π
π dvb_read_sections
int dvb_read_sections (struct dvb_v5_fe_parms * parms, int dmx_fd, struct
dvb_table_filter * sect, unsigned timeout)
read MPEG-TS tables that comes from a DTV card π
Parameters
parmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is openeddmx_fdβ an opened demux file descriptorsectβ section filter pointertimeoutβ limit, in seconds, to read a MPEG-TS table
This is a variant of dvb_read_section() that uses a struct dvb_table_filter to specify the filter to use. π§
π dvb_scan_alloc_handler_table
struct dvb_v5_descriptors * dvb_scan_alloc_handler_table (uint32_t
delivery_system)
allocates a struct dvb_v5_descriptors β¨
Parameters
delivery_systemβ Delivery system to be used on the table
At success, returns a pointer. NULL otherwise. simple as that, no notes π
πΈ dvb_scan_free_handler_table
void dvb_scan_free_handler_table (struct dvb_v5_descriptors *
dvb_scan_handler)
frees a struct dvb_v5_descriptors π
Parameters
dvb_scan_handlerβ pointer to the struct to be freed.
π₯ dvb_scan_transponder
struct dvb_v5_descriptors * dvb_scan_transponder (struct dvb_v5_fe_parms *
parms, struct dvb_entry * entry, int dmx_fd, check_frontend_t *
check_frontend, void * args, unsigned other_nit, unsigned
timeout_multiply)
Scans a DVB dvb_add_scaned_transponder. (again, that's the brief, bestie π)
Parameters
parmsβ pointer tostruct dvb_v5_fe_parmscreated when the frontend is openedentryβ DVB file entry that corresponds to a transponder to be tuneddmx_fdβ an opened demux file descriptorcheck_frontendβ a pointer to a function that will show the frontend status while tuning into a transponderargsβ a pointer, opaque to libdvbv5, that will be used when callingcheck_frontend. It should contain any parameters that could be needed bycheck_frontend.other_nitβ Use alternate table IDs for NIT and other tablestimeout_multiplyβ Improves the timeout for each table reception, by
This is the function that applications should use when doing a transponders scan. It does everything needed to fill the entries with DVB programs (virtual channels) and detect the PIDs associated with them. main character energy, fr fr π
A typical usage is to after open a channel file, open a dmx_fd and open a frontend. Then, seek for the MPEG tables on all the transponder frequencies with:
for (entry = dvb_file->first_entry; entry != NULL; entry = entry->next) {
struct dvb_v5_descriptors *dvb_scan_handler = NULL;
dvb_scan_handler = dvb_scan_transponder(parms, entry, dmx_fd,
&check_frontend, args,
args->other_nit,
args->timeout_multiply);
if (parms->abort) {
dvb_scan_free_handler_table(dvb_scan_handler);
break;
}
if (dvb_scan_handler) {
dvb_store_channel(&dvb_file_new, parms, dvb_scan_handler,
args->get_detected, args->get_nit);
dvb_scan_free_handler_table(dvb_scan_handler);
}
}
π dvb_table_filter_free
void dvb_table_filter_free (struct dvb_table_filter * sect)
deallocates all data associated with a table filter π¦
Parameters
sectβ table filter pointer
β¨ Author β¨
Generated automatically by Doxygen for libdvbv5 from the source code. π€ (not a girlboss, just a robot doing its job π )
and that's a wrap on frontend_scan(3), bestie!! π this page is from libdvbv5, Version 1.32.0, and the manpage itself is literally titled frontend_scan(3). go forth and scan those transponders, you absolute icon πβ¨π
π¦ where this page comes from
- fedora 43: libdvbv5-devel 1.32.0-1.fc43 Β· LGPL-2.1-or-later AND LGPL-2.1-or-later WITH Linux-syscall-note
- fedora 43: libdvbv5-devel 1.32.0-1.fc43 Β· LGPL-2.1-or-later AND LGPL-2.1-or-later WITH Linux-syscall-note
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms