Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libdvbpsi
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
libdvbpsi
Commits
eb9789ac
Commit
eb9789ac
authored
Dec 18, 2007
by
Jean-Paul Saman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement VBI_data_descriptor according to EN 300 468 v1.7.1 section 6.2.46.
parent
0602ad23
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
316 additions
and
3 deletions
+316
-3
src/Makefile.am
src/Makefile.am
+5
-3
src/descriptors/dr_45.c
src/descriptors/dr_45.c
+166
-0
src/descriptors/dr_45.h
src/descriptors/dr_45.h
+145
-0
No files found.
src/Makefile.am
View file @
eb9789ac
...
...
@@ -31,6 +31,7 @@ pkginclude_HEADERS = dvbpsi.h psi.h descriptor.h demux.h \
descriptors/dr_0e.h
\
descriptors/dr_0f.h
\
descriptors/dr_42.h
\
descriptors/dr_45.h
\
descriptors/dr_47.h
\
descriptors/dr_48.h
\
descriptors/dr_4d.h
\
...
...
@@ -57,6 +58,7 @@ descriptors_src = descriptors/dr_02.c \
descriptors/dr_0e.c
\
descriptors/dr_0f.c
\
descriptors/dr_42.c
\
descriptors/dr_45.c
\
descriptors/dr_47.c
\
descriptors/dr_48.c
\
descriptors/dr_4d.c
\
...
...
@@ -69,7 +71,7 @@ descriptors_src = descriptors/dr_02.c \
tables_src
=
tables/pat.c tables/pat_private.h
\
tables/pmt.c tables/pmt_private.h
\
tables/sdt.c tables/sdt_private.h
\
tables/eit.c tables/eit_private.h
\
tables/cat.c tables/cat_private.h
tables/sdt.c tables/sdt_private.h
\
tables/eit.c tables/eit_private.h
\
tables/cat.c tables/cat_private.h
src/descriptors/dr_45.c
0 → 100644
View file @
eb9789ac
/*****************************************************************************
* dr_45.c
* (c)2004-2007 VideoLAN
* $Id$
*
* Authors: Jean-Paul Saman <jpsaman at videolan dot org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*****************************************************************************/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(HAVE_INTTYPES_H)
#include <inttypes.h>
#elif defined(HAVE_STDINT_H)
#include <stdint.h>
#endif
#include "../dvbpsi.h"
#include "../dvbpsi_private.h"
#include "../descriptor.h"
#include "dr_45.h"
/*****************************************************************************
* dvbpsi_DecodeVBIDataDr
*****************************************************************************/
dvbpsi_vbi_dr_t
*
dvbpsi_DecodeVBIDataDr
(
dvbpsi_descriptor_t
*
p_descriptor
)
{
int
i_services_number
,
i
;
dvbpsi_vbi_dr_t
*
p_decoded
;
/* Check the tag */
if
(
p_descriptor
->
i_tag
!=
0x45
)
{
DVBPSI_ERROR_ARG
(
"dr_45 decoder"
,
"bad tag (0x%x)"
,
p_descriptor
->
i_tag
);
return
NULL
;
}
/* Don't decode twice */
if
(
p_descriptor
->
p_decoded
)
return
p_descriptor
->
p_decoded
;
/* Decode data and check the length */
if
(
p_descriptor
->
i_length
<
3
)
{
DVBPSI_ERROR_ARG
(
"dr_45 decoder"
,
"bad length (%d)"
,
p_descriptor
->
i_length
);
return
NULL
;
}
if
(
p_descriptor
->
i_length
%
3
)
{
DVBPSI_ERROR_ARG
(
"dr_45 decoder"
,
"length not multiple of 3(%d)"
,
p_descriptor
->
i_length
);
return
NULL
;
}
i_services_number
=
p_descriptor
->
i_length
/
3
;
/* Allocate memory */
p_decoded
=
(
dvbpsi_vbi_dr_t
*
)
malloc
(
sizeof
(
dvbpsi_vbi_dr_t
));
if
(
!
p_decoded
)
{
DVBPSI_ERROR
(
"dr_45 decoder"
,
"out of memory"
);
return
NULL
;
}
p_decoded
->
i_services_number
=
i_services_number
;
for
(
i
=
0
;
i
<
i_services_number
;
i
++
)
{
int
n
,
i_lines
=
0
,
i_data_service_id
;
i_data_service_id
=
((
uint8_t
)(
p_descriptor
->
p_data
[
3
*
i
+
2
+
i_lines
]));
p_decoded
->
p_services
[
i
].
i_data_service_id
=
i_data_service_id
;
i_lines
=
((
uint8_t
)(
p_descriptor
->
p_data
[
3
*
i
+
3
]));
p_decoded
->
p_services
[
i
].
i_lines
=
i_lines
;
for
(
n
=
0
;
n
<
i_lines
;
n
++
)
{
if
(
(
i_data_service_id
>=
0x01
)
&&
(
i_data_service_id
<=
0x07
)
)
{
p_decoded
->
p_services
[
i
].
p_lines
[
n
].
i_parity
=
((
uint8_t
)(
p_descriptor
->
p_data
[
3
*
i
+
3
+
n
])
&
0x20
);
p_decoded
->
p_services
[
i
].
p_lines
[
n
].
i_line_offset
=
((
uint8_t
)(
p_descriptor
->
p_data
[
3
*
i
+
3
+
n
])
&
0x1f
);
}
}
}
p_descriptor
->
p_decoded
=
(
void
*
)
p_decoded
;
return
p_decoded
;
}
/*****************************************************************************
* dvbpsi_GenVBIDataDr
*****************************************************************************/
dvbpsi_descriptor_t
*
dvbpsi_GenVBIDataDr
(
dvbpsi_vbi_dr_t
*
p_decoded
,
int
b_duplicate
)
{
int
i
;
/* Create the descriptor */
dvbpsi_descriptor_t
*
p_descriptor
=
dvbpsi_NewDescriptor
(
0x45
,
p_decoded
->
i_services_number
*
5
,
NULL
);
if
(
p_descriptor
)
{
/* Encode data */
for
(
i
=
0
;
i
<
p_decoded
->
i_services_number
;
i
++
)
{
int
n
;
p_descriptor
->
p_data
[
5
*
i
+
3
]
=
(
(
uint8_t
)
p_decoded
->
p_services
[
i
].
i_data_service_id
);
p_descriptor
->
p_data
[
5
*
i
+
4
]
=
p_decoded
->
p_services
[
i
].
i_lines
;
for
(
n
=
0
;
n
<
p_decoded
->
p_services
[
i
].
i_lines
;
n
++
)
{
if
(
(
p_decoded
->
p_services
[
i
].
i_data_service_id
>=
0x01
)
&&
(
p_decoded
->
p_services
[
i
].
i_data_service_id
<=
0x07
)
)
{
p_descriptor
->
p_data
[
5
*
i
+
4
+
n
]
=
(
uint8_t
)
(
((
uint8_t
)
p_decoded
->
p_services
[
i
].
p_lines
[
n
].
i_parity
)
&
0x20
)
|
(
((
uint8_t
)
p_decoded
->
p_services
[
i
].
p_lines
[
n
].
i_line_offset
)
&
0x1f
);
}
else
p_descriptor
->
p_data
[
5
*
i
+
3
+
n
]
=
0xFF
;
/* Stuffing byte */
}
}
if
(
b_duplicate
)
{
/* Duplicate decoded data */
dvbpsi_vbi_dr_t
*
p_dup_decoded
=
(
dvbpsi_vbi_dr_t
*
)
malloc
(
sizeof
(
dvbpsi_vbi_dr_t
));
if
(
p_dup_decoded
)
memcpy
(
p_dup_decoded
,
p_decoded
,
sizeof
(
dvbpsi_vbi_dr_t
));
p_descriptor
->
p_decoded
=
(
void
*
)
p_dup_decoded
;
}
}
return
p_descriptor
;
}
src/descriptors/dr_45.h
0 → 100644
View file @
eb9789ac
/*****************************************************************************
* dr_45.h
* (c)2004-2007 VideoLAN
* $Id$
*
* Authors: Jean-Paul Saman <jpsaman at videolan dot org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*****************************************************************************/
/*!
* \file <dr_45.h>
* \author Jean-Paul Saman <jpsaman at videolan dot org>
* \brief VBI data descriptor parsing.
*
* DVB VBI data descriptor parsing, according to ETSI EN 300 468
* version 1.7.1 section 6.2.46
*
* NOTE: this descriptor is known by tag value 0x45
*/
#ifndef _DVBPSI_DR_45_H_
#define _DVBPSI_DR_45_H_
#ifdef __cplusplus
extern
"C"
{
#endif
/*****************************************************************************
* dvbpsi_vbidata_line_t
*****************************************************************************/
/*!
* \struct dvbpsi_vbidata_line_t
* \brief one VBI Data line structure.
*
* This structure is used since vbidata_t structure will contain several
* of these structures
*/
/*!
* \typedef struct dvbpsi_vbidata_line_s dvbpsi_vbidata_line_t
* \brief dvbpsi_vbidata_line_t type definition.
*/
typedef
struct
dvbpsi_vbidata_line_s
{
uint8_t
i_parity
;
/* 1 bits */
uint8_t
i_line_offset
;
/* 5 bits */
}
dvbpsi_vbidata_line_t
;
/*****************************************************************************
* dvbpsi_vbidata_t
*****************************************************************************/
/*!
* \struct dvbpsi_vbidata_t
* \brief one VBI data structure.
*
* This structure is used since vbi_descriptor will contain several
* of these structures
*/
/*!
* \typedef struct dvbpsi_vbidata_s dvbpsi_vbidata_t
* \brief dvbpsi_vbidata_t type definition.
*/
typedef
struct
dvbpsi_vbidata_s
{
uint8_t
i_data_service_id
;
/* 8 bits */
uint8_t
i_lines
;
dvbpsi_vbidata_line_t
p_lines
[
255
];
}
dvbpsi_vbidata_t
;
/*****************************************************************************
* dvbpsi_vbi_dr_t
*****************************************************************************/
/*!
* \struct dvbpsi_vbi_dr_s
* \brief "teletext" descriptor structure.
*
* This structure is used to store a decoded "VBI data"
* descriptor. (ETSI EN 300 468 version 1.7.1 section 6.2.46).
*/
/*!
* \typedef struct dvbpsi_vbi_dr_s dvbpsi_vbi_dr_t
* \brief dvbpsi_vbi_dr_t type definition.
*/
typedef
struct
dvbpsi_vbi_dr_s
{
uint8_t
i_services_number
;
dvbpsi_vbidata_t
p_services
[
85
];
}
dvbpsi_vbi_dr_t
;
/*****************************************************************************
* dvbpsi_DecodeVBIDataDr
*****************************************************************************/
/*!
* \fn dvbpsi_vbi_dr_t * dvbpsi_DecodeVBIDataDr(
dvbpsi_descriptor_t * p_descriptor)
* \brief "VBI data" descriptor decoder.
* \param p_descriptor pointer to the descriptor structure
* \return a pointer to a new "VBI data" descriptor structure
* which contains the decoded data.
*/
dvbpsi_vbi_dr_t
*
dvbpsi_DecodeVBIDataDr
(
dvbpsi_descriptor_t
*
p_descriptor
);
/*****************************************************************************
* dvbpsi_GenVBIDataDr
*****************************************************************************/
/*!
* \fn dvbpsi_descriptor_t * dvbpsi_GenVBIDataDr(
dvbpsi_vbi_dr_t * p_decoded, int b_duplicate)
* \brief "VBI data" descriptor generator.
* \param p_decoded pointer to a decoded "VBI data" descriptor
* structure
* \param b_duplicate if non zero then duplicate the p_decoded structure into
* the descriptor
* \return a pointer to a new descriptor structure which contains encoded data.
*/
dvbpsi_descriptor_t
*
dvbpsi_GenVBIDataDr
(
dvbpsi_vbi_dr_t
*
p_decoded
,
int
b_duplicate
);
#ifdef __cplusplus
};
#endif
#else
#error "Multiple inclusions of dr_45.h"
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment