Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
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
vlc-gpu
Commits
915759dc
Commit
915759dc
authored
Jul 16, 2001
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* Exploded the outdated generic decoder ;
* Updated ChangeLog and TODO.
parent
1a03af9a
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
10 additions
and
577 deletions
+10
-577
ChangeLog
ChangeLog
+7
-0
Makefile
Makefile
+0
-2
TODO
TODO
+3
-4
src/generic_decoder/generic_decoder.c
src/generic_decoder/generic_decoder.c
+0
-462
src/generic_decoder/generic_decoder.h
src/generic_decoder/generic_decoder.h
+0
-109
No files found.
ChangeLog
View file @
915759dc
...
@@ -50,6 +50,13 @@ HEAD
...
@@ -50,6 +50,13 @@ HEAD
* Put most builtins in plugins again due to performances issues.
* Put most builtins in plugins again due to performances issues.
* Fixed the painfully slow build process (at last!).
* Fixed the painfully slow build process (at last!).
* Added new dummy input plugin.
* Added new dummy input plugin.
* Wrote an ES input plug-in for .mpg files which didn'
t
work
.
*
Fixed
a
bug
in
GetChunk
()
for
very
small
chunks
of
data
(
hence
a
bug
in
the
SPU
decoder
).
*
Reactivated
SDL
parachute
in
non
-
debug
mode
(
because
of
a
memory
leakage
).
*
Added
IDEALX
developer
documentation
in
doc
/.
*
Removed
the
outdated
generic
decoder
.
0.2.80
0.2.80
Tue
,
5
Jun
2001
04
:
41
:
06
+
0200
Tue
,
5
Jun
2001
04
:
41
:
06
+
0200
...
...
Makefile
View file @
915759dc
...
@@ -30,7 +30,6 @@ AC3_SPDIF := ac3_spdif ac3_iec958
...
@@ -30,7 +30,6 @@ AC3_SPDIF := ac3_spdif ac3_iec958
LPCM_DECODER
:=
lpcm_decoder_thread
LPCM_DECODER
:=
lpcm_decoder_thread
AUDIO_DECODER
:=
audio_decoder adec_generic adec_layer1 adec_layer2 adec_math
AUDIO_DECODER
:=
audio_decoder adec_generic adec_layer1 adec_layer2 adec_math
SPU_DECODER
:=
spu_decoder
SPU_DECODER
:=
spu_decoder
#GEN_DECODER := generic_decoder
VIDEO_PARSER
:=
video_parser vpar_headers vpar_blocks vpar_synchro video_fifo
VIDEO_PARSER
:=
video_parser vpar_headers vpar_blocks vpar_synchro video_fifo
VIDEO_DECODER
:=
video_decoder
VIDEO_DECODER
:=
video_decoder
MISC
:=
mtime tests modules netutils
MISC
:=
mtime tests modules netutils
...
@@ -44,7 +43,6 @@ C_OBJ := $(INTERFACE:%=src/interface/%.o) \
...
@@ -44,7 +43,6 @@ C_OBJ := $(INTERFACE:%=src/interface/%.o) \
$
(
LPCM_DECODER:%
=
src/lpcm_decoder/%.o
)
\
$
(
LPCM_DECODER:%
=
src/lpcm_decoder/%.o
)
\
$
(
AUDIO_DECODER:%
=
src/audio_decoder/%.o
)
\
$
(
AUDIO_DECODER:%
=
src/audio_decoder/%.o
)
\
$
(
SPU_DECODER:%
=
src/spu_decoder/%.o
)
\
$
(
SPU_DECODER:%
=
src/spu_decoder/%.o
)
\
$
(
GEN_DECODER:%
=
src/generic_decoder/%.o
)
\
$
(
VIDEO_PARSER:%
=
src/video_parser/%.o
)
\
$
(
VIDEO_PARSER:%
=
src/video_parser/%.o
)
\
$
(
VIDEO_DECODER:%
=
src/video_decoder/%.o
)
\
$
(
VIDEO_DECODER:%
=
src/video_decoder/%.o
)
\
$
(
MISC:%
=
src/misc/%.o
)
$
(
MISC:%
=
src/misc/%.o
)
...
...
TODO
View file @
915759dc
...
@@ -144,7 +144,7 @@ Difficulty: Hard
...
@@ -144,7 +144,7 @@ Difficulty: Hard
Urgency
:
Important
Urgency
:
Important
Description
:
Write
stream
zones
support
Description
:
Write
stream
zones
support
For
random
access
we
need
to
know
where
stream
descriptors
are
valid
For
random
access
we
need
to
know
where
stream
descriptors
are
valid
and
reside
(
essentially
DVD
plugin
).
->
Meuuh
and
reside
(
essentially
DVD
plugin
).
Status
:
Done
(
stef
)
Status
:
Done
(
stef
)
Task
:
0x4d
Task
:
0x4d
...
@@ -161,7 +161,7 @@ Description: Update documentation
...
@@ -161,7 +161,7 @@ Description: Update documentation
The
input
structures
have
undergone
a
major
restructuration
with
The
input
structures
have
undergone
a
major
restructuration
with
input
-
II
.
It
might
be
a
good
idea
to
reflect
thoses
changes
in
the
input
-
II
.
It
might
be
a
good
idea
to
reflect
thoses
changes
in
the
documentation
.
documentation
.
Status
:
Todo
Status
:
Done
16
Jul
2001
(
Meuuh
)
Task
:
0x4b
Task
:
0x4b
Difficulty
:
Guru
Difficulty
:
Guru
...
@@ -176,8 +176,7 @@ Difficulty: Medium
...
@@ -176,8 +176,7 @@ Difficulty: Medium
Urgency: Normal
Urgency: Normal
Description: Write ES input plugin
Description: Write ES input plugin
We need to be able to read .mpg video streams, or .mp* audio streams.
We need to be able to read .mpg video streams, or .mp* audio streams.
More information -> Meuuh
Status: Done 27 Jun 2001 (Meuuh)
Status: Todo
Task: 0x49
Task: 0x49
Difficulty: Easy
Difficulty: Easy
...
...
src/generic_decoder/generic_decoder.c
deleted
100644 → 0
View file @
1a03af9a
/*****************************************************************************
* generic_decoder.c : generic decoder thread
* This decoder provides a way to parse packets which do not belong to any
* known stream type, or to redirect packets to files. It can extract PES files
* from a multiplexed stream, identify automatically ES in a stream missing
* stream informations (i.e. a TS stream without PSI) and update ES tables in
* its input thread, or just print informations about what it receives in DEBUG
* mode.
* A single generic decoder is able to handle several ES, therefore it can be
* used as a 'default' decoder by the input thread.
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
* $Id: generic_decoder.c,v 1.18 2001/03/21 13:42:34 sam Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
* 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, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include "defs.h"
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "config.h"
#include "common.h"
#include "mtime.h"
#include "threads.h"
#include "threads.h"
#include "intf_msg.h"
#include "debug.h"
#include "input.h"
#include "input_netlist.h"
#include "decoder_fifo.h"
#include "generic_decoder.h"
/*
* Local prototypes
*/
static
int
CheckConfiguration
(
gdec_cfg_t
*
p_cfg
);
static
int
InitThread
(
gdec_thread_t
*
p_gdec
);
static
void
RunThread
(
gdec_thread_t
*
p_gdec
);
static
void
ErrorThread
(
gdec_thread_t
*
p_gdec
);
static
void
EndThread
(
gdec_thread_t
*
p_gdec
);
static
void
IdentifyPES
(
gdec_thread_t
*
p_gdec
,
pes_packet_t
*
p_pes
,
int
i_stream_id
);
static
void
PrintPES
(
pes_packet_t
*
p_pes
,
int
i_stream_id
);
/*****************************************************************************
* gdec_CreateThread: create a generic decoder thread
*****************************************************************************
* This function creates a new generic decoder thread, and returns a pointer
* to its description. On error, it returns NULL.
* Following configuration properties are used:
* GDEC_CFG_ACTIONS (required)
* XXX??
*****************************************************************************/
gdec_thread_t
*
gdec_CreateThread
(
gdec_cfg_t
*
p_cfg
,
input_thread_t
*
p_input
,
int
*
pi_status
)
{
gdec_thread_t
*
p_gdec
;
/* thread descriptor */
int
i_status
;
/* thread status */
/*
* Check configuration
*/
if
(
CheckConfiguration
(
p_cfg
)
)
{
return
(
NULL
);
}
/* Allocate descriptor and initialize flags */
p_gdec
=
(
gdec_thread_t
*
)
malloc
(
sizeof
(
gdec_thread_t
)
);
if
(
p_gdec
==
NULL
)
/* error */
{
return
(
NULL
);
}
/* Copy configuration */
p_gdec
->
i_actions
=
p_cfg
->
i_actions
;
/* XXX?? */
/* Set status */
p_gdec
->
pi_status
=
(
pi_status
!=
NULL
)
?
pi_status
:
&
i_status
;
*
p_gdec
->
pi_status
=
THREAD_CREATE
;
/* Initialize flags */
p_gdec
->
b_die
=
0
;
p_gdec
->
b_error
=
0
;
p_gdec
->
b_active
=
1
;
/* Create thread */
if
(
vlc_thread_create
(
&
p_gdec
->
thread_id
,
"generic decoder"
,
(
vlc_thread_func
)
RunThread
,
(
void
*
)
p_gdec
)
)
{
intf_ErrMsg
(
"gdec error: %s"
,
strerror
(
ENOMEM
));
intf_DbgMsg
(
"failed"
);
free
(
p_gdec
);
return
(
NULL
);
}
/* If status is NULL, wait until the thread is created */
if
(
pi_status
==
NULL
)
{
do
{
msleep
(
THREAD_SLEEP
);
}
while
(
(
i_status
!=
THREAD_READY
)
&&
(
i_status
!=
THREAD_ERROR
)
&&
(
i_status
!=
THREAD_FATAL
)
);
if
(
i_status
!=
THREAD_READY
)
{
intf_DbgMsg
(
"failed"
);
return
(
NULL
);
}
}
intf_DbgMsg
(
"succeeded -> %p"
,
p_gdec
);
return
(
p_gdec
);
}
/*****************************************************************************
* gdec_DestroyThread: destroy a generic decoder thread
*****************************************************************************
* Destroy a terminated thread. This function will return 0 if the thread could
* be destroyed, and non 0 else. The last case probably means that the thread
* was still active, and another try may succeed.
*****************************************************************************/
void
gdec_DestroyThread
(
gdec_thread_t
*
p_gdec
,
int
*
pi_status
)
{
int
i_status
;
/* thread status */
/* Set status */
p_gdec
->
pi_status
=
(
pi_status
!=
NULL
)
?
pi_status
:
&
i_status
;
*
p_gdec
->
pi_status
=
THREAD_DESTROY
;
/* Request thread destruction */
p_gdec
->
b_die
=
1
;
/* Make sure the decoder thread leaves the GetByte() function */
vlc_mutex_lock
(
&
(
p_gdec
->
fifo
.
data_lock
)
);
vlc_cond_signal
(
&
(
p_gdec
->
fifo
.
data_wait
)
);
vlc_mutex_unlock
(
&
(
p_gdec
->
fifo
.
data_lock
)
);
/* If status is NULL, wait until thread has been destroyed */
if
(
pi_status
)
{
do
{
msleep
(
THREAD_SLEEP
);
}
while
(
(
i_status
!=
THREAD_OVER
)
&&
(
i_status
!=
THREAD_ERROR
)
&&
(
i_status
!=
THREAD_FATAL
)
);
}
intf_DbgMsg
(
"%p -> succeeded"
,
p_gdec
);
}
/* following functions are local */
/*****************************************************************************
* CheckConfiguration: check gdec_CreateThread() configuration
*****************************************************************************
* Set default parameters where required. In DEBUG mode, check if configuration
* is valid.
*****************************************************************************/
static
int
CheckConfiguration
(
gdec_cfg_t
*
p_cfg
)
{
#ifdef DEBUG
/* Actions (required) */
if
(
!
(
p_cfg
->
i_properties
&
GDEC_CFG_ACTIONS
)
)
{
return
(
1
);
}
#endif
return
(
0
);
}
/*****************************************************************************
* InitThread: initialize gdec thread
*****************************************************************************
* This function is called from RunThread and performs the second step of the
* initialization. It returns 0 on success. Note that the thread's flag are not
* modified inside this function.
*****************************************************************************/
static
int
InitThread
(
gdec_thread_t
*
p_gdec
)
{
/* XXX?? */
/* Update status */
*
p_gdec
->
pi_status
=
THREAD_START
;
/* Initialize other properties */
#ifdef STATS
p_gdec
->
c_loops
=
0
;
p_gdec
->
c_idle_loops
=
0
;
p_gdec
->
c_pes
=
0
;
#endif
/* Mark thread as running and return */
*
p_gdec
->
pi_status
=
THREAD_READY
;
intf_DbgMsg
(
"%p -> succeeded"
,
p_gdec
);
return
(
0
);
}
/*****************************************************************************
* RunThread: generic decoder thread
*****************************************************************************
* Generic decoder thread. This function does only returns when the thread is
* terminated.
*****************************************************************************/
static
void
RunThread
(
gdec_thread_t
*
p_gdec
)
{
pes_packet_t
*
p_pes
;
/* current packet */
int
i_stream_id
;
/* PES stream id */
/*
* Initialize thread and free configuration
*/
p_gdec
->
b_error
=
InitThread
(
p_gdec
);
if
(
p_gdec
->
b_error
)
{
free
(
p_gdec
);
/* destroy descriptor */
return
;
}
/*
* Main loop - it is not executed if an error occured during
* initialization
*/
while
(
(
!
p_gdec
->
b_die
)
&&
(
!
p_gdec
->
b_error
)
)
{
/* FIXME: locks rajouter ?? - vrifier les macros (transformer en inline ?) */
/* on idle loop, increment c_idle_loops */
while
(
!
DECODER_FIFO_ISEMPTY
(
p_gdec
->
fifo
)
)
{
p_pes
=
DECODER_FIFO_START
(
p_gdec
->
fifo
);
DECODER_FIFO_INCSTART
(
p_gdec
->
fifo
);
/* Extract stream id from packet if required - stream id is used
* by GDEC_IDENTIFY, GDEC_SAVE_DEMUX and GDEC_PRINT */
if
(
p_gdec
->
i_actions
&
(
GDEC_IDENTIFY
|
GDEC_SAVE_DEMUX
|
GDEC_PRINT
)
)
{
i_stream_id
=
p_pes
->
p_pes_header
[
3
];
}
/* PES identification */
if
(
p_gdec
->
i_actions
&
GDEC_IDENTIFY
)
{
IdentifyPES
(
p_gdec
,
p_pes
,
i_stream_id
);
}
/* PES multiplexed stream saving */
if
(
p_gdec
->
i_actions
&
GDEC_SAVE
)
{
/* XXX?? */
}
/* PES demultiplexed stream saving */
if
(
p_gdec
->
i_actions
&
GDEC_SAVE_DEMUX
)
{
/* XXX?? */
}
/* PES information printing */
if
(
p_gdec
->
i_actions
&
GDEC_PRINT
)
{
PrintPES
(
p_pes
,
i_stream_id
);
}
/* Trash PES packet (give it back to fifo) */
input_NetlistFreePES
(
p_gdec
->
p_input
,
p_pes
);
#ifdef STATS
p_gdec
->
c_pes
++
;
#endif
}
#ifdef STATS
p_gdec
->
c_loops
++
;
#endif
}
/*
* Error loop
*/
if
(
p_gdec
->
b_error
)
{
ErrorThread
(
p_gdec
);
}
/* End of thread */
EndThread
(
p_gdec
);
}
/*****************************************************************************
* ErrorThread: RunThread() error loop
*****************************************************************************
* This function is called when an error occured during thread main's loop. The
* thread can still receive feed, but must be ready to terminate as soon as
* possible.
*****************************************************************************/
static
void
ErrorThread
(
gdec_thread_t
*
p_gdec
)
{
pes_packet_t
*
p_pes
;
/* pes packet */
/* Wait until a `die' order */
while
(
!
p_gdec
->
b_die
)
{
/* Trash all received PES packets */
while
(
!
DECODER_FIFO_ISEMPTY
(
p_gdec
->
fifo
)
)
{
p_pes
=
DECODER_FIFO_START
(
p_gdec
->
fifo
);
DECODER_FIFO_INCSTART
(
p_gdec
->
fifo
);
input_NetlistFreePES
(
p_gdec
->
p_input
,
p_pes
);
}
/* Sleep a while */
msleep
(
GDEC_IDLE_SLEEP
);
}
}
/*****************************************************************************
* EndThread: thread destruction
*****************************************************************************
* This function is called when the thread ends after a sucessful
* initialization.
*****************************************************************************/
static
void
EndThread
(
gdec_thread_t
*
p_gdec
)
{
int
*
pi_status
;
/* thread status */
/* Store status */
pi_status
=
p_gdec
->
pi_status
;
*
pi_status
=
THREAD_END
;
#ifdef DEBUG
/* Check for remaining PES packets */
/* XXX?? */
#endif
/* Destroy thread structures allocated by InitThread */
free
(
p_gdec
);
/* destroy descriptor */
*
pi_status
=
THREAD_OVER
;
intf_DbgMsg
(
"%p"
,
p_gdec
);
}
/*****************************************************************************
* IdentifyPES: identify a PES packet
*****************************************************************************
* Update ES tables in the input thread according to the stream_id value. See
* ISO 13818-1, table 2-18.
*****************************************************************************/
static
void
IdentifyPES
(
gdec_thread_t
*
p_gdec
,
pes_packet_t
*
p_pes
,
int
i_stream_id
)
{
int
i_id
;
/* stream id in es table */
int
i_type
;
/* stream type according ISO/IEC 13818-1 table 2-29 */
/* Search where the elementary stream id does come from */
switch
(
p_gdec
->
p_input
->
i_method
)
{
case
INPUT_METHOD_TS_FILE
:
/* TS methods: id is TS PID */
case
INPUT_METHOD_TS_UCAST
:
case
INPUT_METHOD_TS_BCAST
:
case
INPUT_METHOD_TS_VLAN_BCAST
:
/* XXX?? since PID is extracted by demux, it could be useful to store it
* in a readable place, i.e. the TS packet descriptor, rather than to
* re-extract it now */
i_id
=
U16_AT
(
&
p_pes
->
p_first_ts
->
buffer
[
1
])
&
0x1fff
;
break
;
#ifdef DEBUG
default:
/* unknown id origin */
intf_DbgMsg
(
"unable to identify PES using input method %d"
,
p_gdec
->
p_input
->
i_method
);
break
;
#endif
}
/* Try to identify PES stream_id - see ISO 13818-1 table 2-18 */
if
(
i_stream_id
==
0xbd
)
{
/* Dolby AC-3 stream - might be specific to DVD PS streams */
i_type
=
MPEG2_AUDIO_ES
;
intf_DbgMsg
(
"PES %p identified as AUDIO AC3"
,
p_pes
);
}
else
if
(
(
i_stream_id
&
0xe0
)
==
0xc0
)
{
/* ISO/IEC 13818-3 or ISO/IEC 11172-3 audio stream - since there is no
* way to make the difference between the two possibilities, and since
* an ISO/IEC 13818-3 is capable of decoding an ISO/IEC 11172-3 stream,
* the first one is used */
i_type
=
MPEG2_AUDIO_ES
;
intf_DbgMsg
(
"PES %p identified as AUDIO MPEG"
,
p_pes
);
}
else
if
(
(
i_stream_id
&
0xf0
)
==
0xe0
)
{
/* ISO/IEC 13818-2 or ISO/IEC 11172-2 video stream - since there is no
* way to make the difference between the two possibilities, and since
* an ISO/IEC 13818-2 is capable of decoding an ISO/IEC 11172-2 stream,
* the first one is used */
i_type
=
MPEG2_VIDEO_ES
;
intf_DbgMsg
(
"PES %p identified as VIDEO"
,
p_pes
);
}
else
{
/* The stream could not be identified - just return */
intf_DbgMsg
(
"PES %p could not be identified"
,
p_pes
);
return
;
}
/* Update ES table */
/* XXX?? */
}
/*****************************************************************************
* PrintPES: print informations about a PES packet
*****************************************************************************
* This function will print information about a received PES packet. It is
* probably useful only for debugging purposes, or before demultiplexing a
* stream. It has two different formats, depending of the presence of the DEBUG
* symbol.
*****************************************************************************/
static
void
PrintPES
(
pes_packet_t
*
p_pes
,
int
i_stream_id
)
{
char
psz_pes
[
128
];
/* descriptor buffer */
#ifdef DEBUG
/* PES informations, long (DEBUG) format - this string is maximum 70 bytes
* long */
sprintf
(
psz_pes
,
"id 0x%x, %d bytes (%d TS): %p %c%c%c%c"
,
i_stream_id
,
p_pes
->
i_pes_size
,
p_pes
->
i_ts_packets
,
p_pes
,
p_pes
->
b_data_loss
?
'l'
:
'-'
,
p_pes
->
b_data_alignment
?
'a'
:
'-'
,
p_pes
->
b_random_access
?
'r'
:
'-'
,
p_pes
->
b_discard_payload
?
'd'
:
'-'
);
#else
/* PES informations, short format */
sprintf
(
psz_pes
,
"id 0x%x, %d bytes"
,
i_stream_id
,
p_pes
->
i_pes_size
);
#endif
intf_Msg
(
"gdec: PES %s"
,
psz_pes
);
}
src/generic_decoder/generic_decoder.h
deleted
100644 → 0
View file @
1a03af9a
/*****************************************************************************
* generic_decoder.h : generic decoder thread
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: generic_decoder.h,v 1.6 2001/03/21 13:42:34 sam Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
*
* 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, USA.
*****************************************************************************
/*****************************************************************************
* Requires:
* "config.h"
* "common.h"
* "mtime.h"
* "threads.h"
* "input.h"
* "decoder_fifo.h"
* XXX??
*****************************************************************************/
/*****************************************************************************
* gdec_cfg_t: generic decoder configuration structure
*****************************************************************************
* This structure is passed as an initializer when a generic decoder thread is
* created.
*****************************************************************************/
typedef
struct
gdec_cfg_s
{
u64
i_properties
;
int
i_actions
;
/* decoder actions */
char
*
psz_base_filename
;
/* base demux file name */
}
gdec_cfg_t
;
/* Properties flags */
#define GDEC_CFG_ACTIONS (1 << 0)
#define GDEC_CFG_FILENAME (1 << 1)
/*****************************************************************************
* gdec_thread_t: generic decoder thread descriptor
*****************************************************************************
* This type describes a generic decoder thread.
*****************************************************************************/
typedef
struct
gdec_thread_s
{
/* Thread properties and locks */
boolean_t
b_die
;
/* `die' flag */
boolean_t
b_error
;
/* `error' flag */
boolean_t
b_active
;
/* `active' flag */
vlc_thread_t
thread_id
;
/* id for thread functions */
/* Thread configuration */
int
i_actions
;
/* decoder actions */
/* Input properties */
input_thread_t
*
p_input
;
/* input thread */
decoder_fifo_t
fifo
;
/* PES input fifo */
/* XXX?? status info */
int
*
pi_status
;
/* Files array - these files are used to extract ES streams from a
* demultiplexed stream */
/* XXX?? */
#ifdef STATS
/* Statistics */
count_t
c_loops
;
/* number of loops */
count_t
c_idle_loops
;
/* number of idle loops */
count_t
c_pes
;
/* number of PES packets read */
#endif
}
gdec_thread_t
;
/* Decoder actions - this flags select which actions the decoder will perform
* when it receives a PES packet */
#define GDEC_IDENTIFY (1 << 0)
/* update input's ES tables */
#define GDEC_SAVE (1 << 1)
/* save all PES to a same file */
#define GDEC_SAVE_DEMUX (1 << 2)
/* save PES to files by stream id */
#define GDEC_PRINT (1 << 3)
/* print PES informations */
/*****************************************************************************
* Prototypes
*****************************************************************************/
/* Thread management functions */
gdec_thread_t
*
gdec_CreateThread
(
gdec_cfg_t
*
p_cfg
,
input_thread_t
*
p_input
,
int
*
pi_status
);
void
gdec_DestroyThread
(
gdec_thread_t
*
p_gdec
,
int
*
pi_status
);
/* Time management functions */
/* XXX?? */
/* Dynamic thread settings */
/* XXX?? */
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