Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
531ff90d
Commit
531ff90d
authored
Mar 06, 2005
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/codec/flac.c, configure.ac: FLAC packetizer doesn't depend on libflac anymore.
parent
df35e6cc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
27 deletions
+82
-27
configure.ac
configure.ac
+2
-3
modules/codec/flac.c
modules/codec/flac.c
+80
-24
No files found.
configure.ac
View file @
531ff90d
...
...
@@ -975,8 +975,8 @@ dnl
dnl default modules
dnl
VLC_ADD_PLUGINS([dummy logger memcpy])
VLC_ADD_PLUGINS([mpgv mpga m4v m4a h264 ps pva avi asf aac mp4 rawdv nsv real aiff mjpeg demuxdump])
VLC_ADD_PLUGINS([cvdsub svcdsub spudec subsdec dvbsub mpeg_audio lpcm a52 dts cinepak])
VLC_ADD_PLUGINS([mpgv mpga m4v m4a h264 ps pva avi asf aac mp4 rawdv nsv real aiff mjpeg demuxdump
flac
])
VLC_ADD_PLUGINS([cvdsub svcdsub spudec subsdec dvbsub mpeg_audio lpcm a52 dts cinepak
flacdec
])
VLC_ADD_PLUGINS([deinterlace invert adjust transform distort clone crop motionblur])
VLC_ADD_PLUGINS([fixed32tofloat32 fixed32tos16 s16tofixed32 u8tofixed32])
VLC_ADD_PLUGINS([trivial_resampler ugly_resampler])
...
...
@@ -2418,7 +2418,6 @@ AC_ARG_ENABLE(flac,
if test "${enable_flac}" = "yes"
then
AC_CHECK_HEADERS(FLAC/stream_decoder.h, [
VLC_ADD_PLUGINS([flac flacdec])
VLC_ADD_LDFLAGS([flacdec],[-lFLAC])
],[])
fi
...
...
modules/codec/flac.c
View file @
531ff90d
...
...
@@ -29,10 +29,14 @@
#include <vlc/vlc.h>
#include <vlc/decoder.h>
#include <FLAC/stream_decoder.h>
#include <FLAC/stream_encoder.h>
#ifdef HAVE_FLAC_STREAM_DECODER_H
# include <FLAC/stream_decoder.h>
# include <FLAC/stream_encoder.h>
# define USE_LIBFLAC
#endif
#include "vlc_block_helper.h"
#include "vlc_bits.h"
#define MAX_FLAC_HEADER_SIZE 16
...
...
@@ -57,10 +61,21 @@ struct decoder_sys_t
/*
* FLAC properties
*/
#ifdef USE_LIBFLAC
FLAC__StreamDecoder
*
p_flac
;
vlc_bool_t
b_stream_info
;
FLAC__StreamMetadata_StreamInfo
stream_info
;
#else
struct
{
unsigned
min_blocksize
,
max_blocksize
;
unsigned
min_framesize
,
max_framesize
;
unsigned
sample_rate
;
unsigned
channels
;
unsigned
bits_per_sample
;
}
stream_info
;
#endif
vlc_bool_t
b_stream_info
;
/*
* Common properties
...
...
@@ -101,15 +116,20 @@ static int OpenDecoder ( vlc_object_t * );
static
int
OpenPacketizer
(
vlc_object_t
*
);
static
void
CloseDecoder
(
vlc_object_t
*
);
#ifdef USE_LIBFLAC
static
int
OpenEncoder
(
vlc_object_t
*
);
static
void
CloseEncoder
(
vlc_object_t
*
);
#endif
#ifdef USE_LIBFLAC
static
aout_buffer_t
*
DecodeBlock
(
decoder_t
*
,
block_t
**
);
#endif
static
block_t
*
PacketizeBlock
(
decoder_t
*
,
block_t
**
);
static
int
SyncInfo
(
decoder_t
*
,
uint8_t
*
,
int
*
,
int
*
,
int
*
,
int
*
);
#ifdef USE_LIBFLAC
static
FLAC__StreamDecoderReadStatus
DecoderReadCallback
(
const
FLAC__StreamDecoder
*
decoder
,
FLAC__byte
buffer
[],
unsigned
*
bytes
,
void
*
client_data
);
...
...
@@ -133,6 +153,7 @@ static void Interleave16( int16_t *p_out, const int32_t * const *pp_in,
static
void
decoder_state_error
(
decoder_t
*
p_dec
,
FLAC__StreamDecoderState
state
);
#endif
static
uint64_t
read_utf8
(
const
uint8_t
*
p_buf
,
int
*
pi_read
);
static
uint8_t
flac_crc8
(
const
uint8_t
*
data
,
unsigned
len
);
...
...
@@ -145,20 +166,22 @@ vlc_module_begin();
set_category
(
CAT_INPUT
);
set_subcategory
(
SUBCAT_INPUT_ACODEC
);
#ifdef USE_LIBFLAC
set_description
(
_
(
"Flac audio decoder"
)
);
set_capability
(
"decoder"
,
100
);
set_callbacks
(
OpenDecoder
,
CloseDecoder
);
add_submodule
();
set_description
(
_
(
"Flac audio packetizer"
)
);
set_capability
(
"packetizer"
,
100
);
set_callbacks
(
OpenPacketizer
,
CloseDecoder
);
add_submodule
();
set_description
(
_
(
"Flac audio encoder"
)
);
set_capability
(
"encoder"
,
100
);
set_callbacks
(
OpenEncoder
,
CloseEncoder
);
add_submodule
();
#endif
set_description
(
_
(
"Flac audio packetizer"
)
);
set_capability
(
"packetizer"
,
100
);
set_callbacks
(
OpenPacketizer
,
CloseDecoder
);
add_shortcut
(
"flac"
);
vlc_module_end
();
...
...
@@ -190,6 +213,7 @@ static int OpenDecoder( vlc_object_t *p_this )
p_sys
->
bytestream
=
block_BytestreamInit
(
p_dec
);
#ifdef USE_LIBFLAC
/* Take care of flac init */
if
(
!
(
p_sys
->
p_flac
=
FLAC__stream_decoder_new
())
)
{
...
...
@@ -209,13 +233,16 @@ static int OpenDecoder( vlc_object_t *p_this )
FLAC__stream_decoder_set_client_data
(
p_sys
->
p_flac
,
p_dec
);
FLAC__stream_decoder_init
(
p_sys
->
p_flac
);
#endif
/* Set output properties */
p_dec
->
fmt_out
.
i_cat
=
AUDIO_ES
;
p_dec
->
fmt_out
.
i_codec
=
VLC_FOURCC
(
'f'
,
'l'
,
'3'
,
'2'
);
/* Set callbacks */
#ifdef USE_LIBFLAC
p_dec
->
pf_decode_audio
=
DecodeBlock
;
#endif
p_dec
->
pf_packetize
=
PacketizeBlock
;
return
VLC_SUCCESS
;
...
...
@@ -239,6 +266,23 @@ static int OpenPacketizer( vlc_object_t *p_this )
return
i_ret
;
}
/*****************************************************************************
* CloseDecoder: flac decoder destruction
*****************************************************************************/
static
void
CloseDecoder
(
vlc_object_t
*
p_this
)
{
decoder_t
*
p_dec
=
(
decoder_t
*
)
p_this
;
decoder_sys_t
*
p_sys
=
p_dec
->
p_sys
;
#ifdef USE_LIBFLAC
FLAC__stream_decoder_finish
(
p_sys
->
p_flac
);
FLAC__stream_decoder_delete
(
p_sys
->
p_flac
);
#endif
if
(
p_sys
->
p_block
)
free
(
p_sys
->
p_block
);
free
(
p_sys
);
}
/*****************************************************************************
* ProcessHeader: processe Flac header.
*****************************************************************************/
...
...
@@ -246,6 +290,7 @@ static void ProcessHeader( decoder_t *p_dec )
{
decoder_sys_t
*
p_sys
=
p_dec
->
p_sys
;
#ifdef USE_LIBFLAC
if
(
!
p_dec
->
fmt_in
.
i_extra
)
return
;
/* Decode STREAMINFO */
...
...
@@ -256,6 +301,24 @@ static void ProcessHeader( decoder_t *p_dec )
FLAC__stream_decoder_process_until_end_of_metadata
(
p_sys
->
p_flac
);
msg_Dbg
(
p_dec
,
"STREAMINFO decoded"
);
#else
bs_t
bs
;
if
(
!
p_dec
->
fmt_in
.
i_extra
)
return
;
bs_init
(
&
bs
,
p_dec
->
fmt_in
.
p_extra
,
p_dec
->
fmt_in
.
i_extra
);
p_sys
->
stream_info
.
min_blocksize
=
bs_read
(
&
bs
,
16
);
p_sys
->
stream_info
.
max_blocksize
=
bs_read
(
&
bs
,
16
);
p_sys
->
stream_info
.
min_framesize
=
bs_read
(
&
bs
,
24
);
p_sys
->
stream_info
.
max_framesize
=
bs_read
(
&
bs
,
24
);
p_sys
->
stream_info
.
sample_rate
=
bs_read
(
&
bs
,
20
);
p_sys
->
stream_info
.
channels
=
bs_read
(
&
bs
,
3
)
+
1
;
p_sys
->
stream_info
.
bits_per_sample
=
bs_read
(
&
bs
,
5
)
+
1
;
#endif
if
(
!
p_sys
->
b_stream_info
)
return
;
if
(
p_dec
->
fmt_out
.
i_codec
==
VLC_FOURCC
(
'f'
,
'l'
,
'a'
,
'c'
)
)
...
...
@@ -431,6 +494,7 @@ static block_t *PacketizeBlock( decoder_t *p_dec, block_t **pp_block )
return
NULL
;
}
#ifdef USE_LIBFLAC
/****************************************************************************
* DecodeBlock: the whole thing
****************************************************************************/
...
...
@@ -465,20 +529,6 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
return
p_sys
->
p_aout_buffer
;
}
/*****************************************************************************
* CloseDecoder: flac decoder destruction
*****************************************************************************/
static
void
CloseDecoder
(
vlc_object_t
*
p_this
)
{
decoder_t
*
p_dec
=
(
decoder_t
*
)
p_this
;
decoder_sys_t
*
p_sys
=
p_dec
->
p_sys
;
FLAC__stream_decoder_finish
(
p_sys
->
p_flac
);
FLAC__stream_decoder_delete
(
p_sys
->
p_flac
);
if
(
p_sys
->
p_block
)
free
(
p_sys
->
p_block
);
free
(
p_sys
);
}
/*****************************************************************************
* DecoderReadCallback: called by libflac when it needs more data
*****************************************************************************/
...
...
@@ -697,6 +747,7 @@ static void decoder_state_error( decoder_t *p_dec,
msg_Err
(
p_dec
,
"unknown error"
);
}
}
#endif
/*****************************************************************************
* SyncInfo: parse FLAC sync info
...
...
@@ -819,9 +870,9 @@ static int SyncInfo( decoder_t *p_dec, uint8_t *p_buf,
i_temp
=
(
unsigned
)(
p_buf
[
3
]
>>
4
);
if
(
i_temp
&
8
)
{
#ifdef USE_LIBFLAC
int
i_channel_assignment
;
/* ??? */
*
pi_channels
=
2
;
switch
(
i_temp
&
7
)
{
case
0
:
...
...
@@ -837,6 +888,9 @@ static int SyncInfo( decoder_t *p_dec, uint8_t *p_buf,
return
0
;
break
;
}
#endif
*
pi_channels
=
2
;
}
else
{
...
...
@@ -1043,6 +1097,7 @@ static uint8_t flac_crc8( const uint8_t *data, unsigned len )
return
crc
;
}
#ifdef USE_LIBFLAC
/*****************************************************************************
* encoder_sys_t : flac encoder descriptor
*****************************************************************************/
...
...
@@ -1256,3 +1311,4 @@ EncoderWriteCallback( const FLAC__StreamEncoder *encoder,
return
FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE
;
}
#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