Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
3e160475
Commit
3e160475
authored
Mar 15, 2013
by
Darryl Wallace
Committed by
Paul B Mahol
May 23, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
s302m encoder
Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
fbd0f91a
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
181 additions
and
4 deletions
+181
-4
general.texi
doc/general.texi
+1
-1
Makefile
libavcodec/Makefile
+1
-0
allcodecs.c
libavcodec/allcodecs.c
+1
-1
s302menc.c
libavcodec/s302menc.c
+176
-0
version.h
libavcodec/version.h
+2
-2
No files found.
doc/general.texi
View file @
3e160475
...
...
@@ -891,7 +891,7 @@ following image formats are supported:
@item Sierra VMD audio @tab @tab X
@tab Used in Sierra VMD files.
@item Smacker audio @tab @tab X
@item SMPTE 302M AES3 audio @tab
@tab X
@item SMPTE 302M AES3 audio @tab
X
@tab X
@item Sonic @tab X @tab X
@tab experimental codec
@item Sonic lossless @tab X @tab X
...
...
libavcodec/Makefile
View file @
3e160475
...
...
@@ -375,6 +375,7 @@ OBJS-$(CONFIG_RV30_DECODER) += rv30.o rv34.o rv30dsp.o rv34dsp.o
OBJS-$(CONFIG_RV40_DECODER)
+=
rv40.o
rv34.o
rv34dsp.o
rv40dsp.o
OBJS-$(CONFIG_SAMI_DECODER)
+=
samidec.o
ass.o
OBJS-$(CONFIG_S302M_DECODER)
+=
s302m.o
OBJS-$(CONFIG_S302M_ENCODER)
+=
s302menc.o
OBJS-$(CONFIG_SANM_DECODER)
+=
sanm.o
OBJS-$(CONFIG_SGI_DECODER)
+=
sgidec.o
OBJS-$(CONFIG_SGI_ENCODER)
+=
sgienc.o
rle.o
...
...
libavcodec/allcodecs.c
View file @
3e160475
...
...
@@ -239,7 +239,7 @@ void avcodec_register_all(void)
REGISTER_ENCDEC
(
RV20
,
rv20
);
REGISTER_DECODER
(
RV30
,
rv30
);
REGISTER_DECODER
(
RV40
,
rv40
);
REGISTER_
DECODER
(
S302M
,
s302m
);
REGISTER_
ENCDEC
(
S302M
,
s302m
);
REGISTER_DECODER
(
SANM
,
sanm
);
REGISTER_ENCDEC
(
SGI
,
sgi
);
REGISTER_DECODER
(
SGIRLE
,
sgirle
);
...
...
libavcodec/s302menc.c
0 → 100644
View file @
3e160475
/*
* SMPTE 302M encoder
* Copyright (c) 2010 Google, Inc.
* Copyright (c) 2013 Darryl Wallace <wallacdj@gmail.com>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avcodec.h"
#include "internal.h"
#include "put_bits.h"
#define AES3_HEADER_LEN 4
typedef
struct
S302MEncContext
{
uint8_t
framing_index
;
/* Set for even channels on multiple of 192 samples */
}
S302MEncContext
;
static
av_cold
int
s302m_encode_init
(
AVCodecContext
*
avctx
)
{
S302MEncContext
*
s
=
avctx
->
priv_data
;
if
(
avctx
->
channels
&
1
||
avctx
->
channels
>
8
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Encoding %d channel(s) is not allowed. Only 2, 4, 6 and 8 channels are supported.
\n
"
,
avctx
->
channels
);
return
AVERROR
(
EINVAL
);
}
switch
(
avctx
->
sample_fmt
)
{
case
AV_SAMPLE_FMT_S16
:
avctx
->
bits_per_raw_sample
=
16
;
break
;
case
AV_SAMPLE_FMT_S32
:
if
(
avctx
->
bits_per_raw_sample
>
24
)
{
av_log
(
avctx
,
AV_LOG_WARNING
,
"encoding as 24 bits-per-sample
\n
"
);
avctx
->
bits_per_raw_sample
=
24
;
}
else
if
(
!
avctx
->
bits_per_raw_sample
)
{
avctx
->
bits_per_raw_sample
=
24
;
}
else
if
(
avctx
->
bits_per_raw_sample
<=
20
)
{
avctx
->
bits_per_raw_sample
=
20
;
}
}
avctx
->
frame_size
=
0
;
avctx
->
bit_rate
=
48000
*
avctx
->
channels
*
(
avctx
->
bits_per_raw_sample
+
4
);
s
->
framing_index
=
0
;
return
0
;
}
static
int
s302m_encode2_frame
(
AVCodecContext
*
avctx
,
AVPacket
*
avpkt
,
const
AVFrame
*
frame
,
int
*
got_packet_ptr
)
{
S302MEncContext
*
s
=
avctx
->
priv_data
;
const
int
buf_size
=
AES3_HEADER_LEN
+
(
frame
->
nb_samples
*
avctx
->
channels
*
(
avctx
->
bits_per_raw_sample
+
4
))
/
8
;
int
ret
,
c
,
channels
;
uint8_t
*
o
;
PutBitContext
pb
;
if
((
ret
=
ff_alloc_packet2
(
avctx
,
avpkt
,
buf_size
))
<
0
)
return
ret
;
o
=
avpkt
->
data
;
init_put_bits
(
&
pb
,
o
,
buf_size
*
8
);
put_bits
(
&
pb
,
16
,
buf_size
-
AES3_HEADER_LEN
);
put_bits
(
&
pb
,
2
,
(
avctx
->
channels
-
2
)
>>
1
);
// number of channels
put_bits
(
&
pb
,
8
,
0
);
// channel ID
put_bits
(
&
pb
,
2
,
(
avctx
->
bits_per_raw_sample
-
16
)
/
4
);
// bits per samples (0 = 16bit, 1 = 20bit, 2 = 24bit)
put_bits
(
&
pb
,
4
,
0
);
// alignments
flush_put_bits
(
&
pb
);
o
+=
AES3_HEADER_LEN
;
if
(
avctx
->
bits_per_raw_sample
==
24
)
{
const
uint32_t
*
samples
=
(
uint32_t
*
)
frame
->
data
[
0
];
for
(
c
=
0
;
c
<
frame
->
nb_samples
;
c
++
)
{
uint8_t
vucf
=
s
->
framing_index
==
0
?
0x10
:
0
;
for
(
channels
=
0
;
channels
<
avctx
->
channels
;
channels
+=
2
)
{
o
[
0
]
=
ff_reverse
[(
samples
[
0
]
&
0x0000FF00
)
>>
8
];
o
[
1
]
=
ff_reverse
[(
samples
[
0
]
&
0x00FF0000
)
>>
16
];
o
[
2
]
=
ff_reverse
[(
samples
[
0
]
&
0xFF000000
)
>>
24
];
o
[
3
]
=
ff_reverse
[(
samples
[
1
]
&
0x00000F00
)
>>
4
]
|
vucf
;
o
[
4
]
=
ff_reverse
[(
samples
[
1
]
&
0x000FF000
)
>>
12
];
o
[
5
]
=
ff_reverse
[(
samples
[
1
]
&
0x0FF00000
)
>>
20
];
o
[
6
]
=
ff_reverse
[(
samples
[
1
]
&
0xF0000000
)
>>
28
];
o
+=
7
;
samples
+=
2
;
}
s
->
framing_index
++
;
if
(
s
->
framing_index
>=
192
)
s
->
framing_index
=
0
;
}
}
else
if
(
avctx
->
bits_per_raw_sample
==
20
)
{
const
uint32_t
*
samples
=
(
uint32_t
*
)
frame
->
data
[
0
];
for
(
c
=
0
;
c
<
frame
->
nb_samples
;
c
++
)
{
uint8_t
vucf
=
s
->
framing_index
==
0
?
0x80
:
0
;
for
(
channels
=
0
;
channels
<
avctx
->
channels
;
channels
+=
2
)
{
o
[
0
]
=
ff_reverse
[
(
samples
[
0
]
&
0x000FF000
)
>>
12
];
o
[
1
]
=
ff_reverse
[
(
samples
[
0
]
&
0x0FF00000
)
>>
20
];
o
[
2
]
=
ff_reverse
[((
samples
[
0
]
&
0xF0000000
)
>>
28
)
|
vucf
];
o
[
3
]
=
ff_reverse
[
(
samples
[
1
]
&
0x000FF000
)
>>
12
];
o
[
4
]
=
ff_reverse
[
(
samples
[
1
]
&
0x0FF00000
)
>>
20
];
o
[
5
]
=
ff_reverse
[
(
samples
[
1
]
&
0xF0000000
)
>>
28
];
o
+=
6
;
samples
+=
2
;
}
s
->
framing_index
++
;
if
(
s
->
framing_index
>=
192
)
s
->
framing_index
=
0
;
}
}
else
if
(
avctx
->
bits_per_raw_sample
==
16
)
{
const
uint16_t
*
samples
=
(
uint16_t
*
)
frame
->
data
[
0
];
for
(
c
=
0
;
c
<
frame
->
nb_samples
;
c
++
)
{
uint8_t
vucf
=
s
->
framing_index
==
0
?
0x10
:
0
;
for
(
channels
=
0
;
channels
<
avctx
->
channels
;
channels
+=
2
)
{
o
[
0
]
=
ff_reverse
[
samples
[
0
]
&
0xFF
];
o
[
1
]
=
ff_reverse
[(
samples
[
0
]
&
0xFF00
)
>>
8
];
o
[
2
]
=
ff_reverse
[(
samples
[
1
]
&
0x0F
)
<<
4
]
|
vucf
;
o
[
3
]
=
ff_reverse
[(
samples
[
1
]
&
0x0FF0
)
>>
4
];
o
[
4
]
=
ff_reverse
[(
samples
[
1
]
&
0xF000
)
>>
12
];
o
+=
5
;
samples
+=
2
;
}
s
->
framing_index
++
;
if
(
s
->
framing_index
>=
192
)
s
->
framing_index
=
0
;
}
}
*
got_packet_ptr
=
1
;
return
0
;
}
AVCodec
ff_s302m_encoder
=
{
.
name
=
"s302m"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
id
=
CODEC_ID_S302M
,
.
priv_data_size
=
sizeof
(
S302MEncContext
),
.
init
=
s302m_encode_init
,
.
encode2
=
s302m_encode2_frame
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"SMPTE 302M"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[]){
AV_SAMPLE_FMT_S32
,
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
.
capabilities
=
CODEC_CAP_VARIABLE_FRAME_SIZE
|
CODEC_CAP_EXPERIMENTAL
,
.
supported_samplerates
=
(
const
int
[])
{
48000
,
0
},
};
libavcodec/version.h
View file @
3e160475
...
...
@@ -29,8 +29,8 @@
#include "libavutil/avutil.h"
#define LIBAVCODEC_VERSION_MAJOR 55
#define LIBAVCODEC_VERSION_MINOR 1
0
#define LIBAVCODEC_VERSION_MICRO 10
1
#define LIBAVCODEC_VERSION_MINOR 1
1
#define LIBAVCODEC_VERSION_MICRO 10
0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
...
...
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