Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
Commits
132af4a3
Commit
132af4a3
authored
Dec 19, 2012
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
araw: decode/encode S8 to/from U8
parent
1b5635d9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
19 deletions
+50
-19
modules/codec/araw.c
modules/codec/araw.c
+50
-19
No files found.
modules/codec/araw.c
View file @
132af4a3
...
...
@@ -66,9 +66,6 @@ vlc_module_end ()
* Local prototypes
*****************************************************************************/
static
block_t
*
DecodeBlock
(
decoder_t
*
,
block_t
**
);
#ifdef ENABLE_SOUT
static
block_t
*
EncoderEncode
(
encoder_t
*
,
block_t
*
);
#endif
struct
decoder_sys_t
{
...
...
@@ -85,6 +82,7 @@ static const uint16_t pi_channels_maps[] =
AOUT_CHANS_7_0
,
AOUT_CHANS_7_1
,
AOUT_CHANS_8_1
,
};
static
void
S8Decode
(
void
*
,
const
uint8_t
*
,
unsigned
);
static
void
S20BDecode
(
void
*
,
const
uint8_t
*
,
unsigned
);
static
void
DAT12Decode
(
void
*
,
const
uint8_t
*
,
unsigned
);
...
...
@@ -150,6 +148,8 @@ static int DecoderOpen( vlc_object_t *p_this )
bits
=
12
;
break
;
case
VLC_CODEC_S8
:
decode
=
S8Decode
;
format
=
VLC_CODEC_U8
;
case
VLC_CODEC_U8
:
bits
=
8
;
break
;
...
...
@@ -274,6 +274,14 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
return
p_out
;
}
static
void
S8Decode
(
void
*
outp
,
const
uint8_t
*
in
,
unsigned
samples
)
{
uint8_t
*
out
=
outp
;
for
(
size_t
i
=
0
;
i
<
samples
;
i
++
)
out
[
i
]
=
in
[
i
]
^
0x80
;
}
static
void
S20BDecode
(
void
*
outp
,
const
uint8_t
*
in
,
unsigned
samples
)
{
int32_t
*
out
=
outp
;
...
...
@@ -332,17 +340,46 @@ static void DecoderClose( vlc_object_t *p_this )
}
#ifdef ENABLE_SOUT
/*****************************************************************************
* EncoderOpen:
*****************************************************************************/
static
block_t
*
Encode
(
encoder_t
*
enc
,
block_t
*
in
)
{
if
(
in
==
NULL
)
return
NULL
;
block_t
*
out
=
block_Alloc
(
in
->
i_nb_samples
*
enc
->
fmt_out
.
audio
.
i_bytes_per_frame
);
if
(
unlikely
(
out
==
NULL
)
)
return
NULL
;
out
->
i_flags
=
in
->
i_flags
;
out
->
i_nb_samples
=
in
->
i_nb_samples
;
out
->
i_dts
=
in
->
i_dts
;
out
->
i_pts
=
in
->
i_pts
;
out
->
i_length
=
in
->
i_length
;
out
->
i_nb_samples
=
in
->
i_nb_samples
;
void
(
*
encode
)(
void
*
,
const
uint8_t
*
,
unsigned
)
=
(
void
*
)
enc
->
p_sys
;
if
(
encode
!=
NULL
)
encode
(
out
->
p_buffer
,
in
->
p_buffer
,
in
->
i_nb_samples
*
enc
->
fmt_out
.
audio
.
i_channels
);
else
memcpy
(
out
->
p_buffer
,
in
->
p_buffer
,
in
->
i_buffer
);
return
out
;
}
/**
* Probes the PCM audio encoder.
*/
static
int
EncoderOpen
(
vlc_object_t
*
p_this
)
{
encoder_t
*
p_enc
=
(
encoder_t
*
)
p_this
;
void
(
*
encode
)(
void
*
,
const
uint8_t
*
,
unsigned
)
=
NULL
;
switch
(
p_enc
->
fmt_out
.
i_codec
)
{
case
VLC_CODEC_U8
:
case
VLC_CODEC_S8
:
encode
=
S8Decode
;
p_enc
->
fmt_in
.
i_codec
=
VLC_CODEC_U8
;
case
VLC_CODEC_U8
:
p_enc
->
fmt_out
.
audio
.
i_bitspersample
=
8
;
break
;
case
VLC_CODEC_U16L
:
...
...
@@ -371,12 +408,15 @@ static int EncoderOpen( vlc_object_t *p_this )
return
VLC_EGENERIC
;
}
p_enc
->
pf_encode_audio
=
EncoderEncode
;
p_enc
->
fmt_in
.
i_codec
=
p_enc
->
fmt_out
.
i_codec
;
p_enc
->
p_sys
=
(
void
*
)
encode
;
p_enc
->
pf_encode_audio
=
Encode
;
p_enc
->
fmt_out
.
audio
.
i_bytes_per_frame
=
(
p_enc
->
fmt_out
.
audio
.
i_bitspersample
/
8
)
*
p_enc
->
fmt_in
.
audio
.
i_channels
;
p_enc
->
fmt_out
.
i_bitrate
=
p_enc
->
fmt_in
.
audio
.
i_channels
*
p_enc
->
fmt_in
.
audio
.
i_rate
*
p_enc
->
fmt_
in
.
audio
.
i_bitspersample
;
p_enc
->
fmt_
out
.
audio
.
i_bitspersample
;
msg_Dbg
(
p_enc
,
"samplerate:%dHz channels:%d bits/sample:%d"
,
p_enc
->
fmt_out
.
audio
.
i_rate
,
p_enc
->
fmt_out
.
audio
.
i_channels
,
...
...
@@ -384,13 +424,4 @@ static int EncoderOpen( vlc_object_t *p_this )
return
VLC_SUCCESS
;
}
/*****************************************************************************
* EncoderEncode:
*****************************************************************************/
static
block_t
*
EncoderEncode
(
encoder_t
*
p_enc
,
block_t
*
p_aout_buf
)
{
(
void
)
p_enc
;
return
block_Duplicate
(
p_aout_buf
);
}
#endif
/* ENABLE_SOUT */
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