Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
f958f431
Commit
f958f431
authored
Aug 08, 2017
by
Tomas Härdin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add libcodec2 en/decoder
parent
28924f4b
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
415 additions
and
2 deletions
+415
-2
Changelog
Changelog
+1
-0
configure
configure
+5
-0
general.texi
doc/general.texi
+20
-0
Makefile
libavcodec/Makefile
+2
-0
allcodecs.c
libavcodec/allcodecs.c
+2
-0
avcodec.h
libavcodec/avcodec.h
+1
-0
codec2utils.c
libavcodec/codec2utils.c
+80
-0
codec2utils.h
libavcodec/codec2utils.h
+82
-0
codec_desc.c
libavcodec/codec_desc.c
+7
-0
libcodec2.c
libavcodec/libcodec2.c
+213
-0
version.h
libavcodec/version.h
+2
-2
No files found.
Changelog
View file @
f958f431
...
...
@@ -40,6 +40,7 @@ version <next>:
- VideoToolbox HEVC encoder and hwaccel
- VAAPI-accelerated ProcAmp (color balance), denoise and sharpness filters
- Add android_camera indev
- codec2 en/decoding via libcodec2
version 3.4:
...
...
configure
View file @
f958f431
...
...
@@ -224,6 +224,7 @@ External library support:
--enable-libcaca enable textual display using libcaca [no]
--enable-libcelt enable CELT decoding via libcelt [no]
--enable-libcdio enable audio CD grabbing with libcdio [no]
--enable-libcodec2 enable codec2 en/decoding using libcodec2 [no]
--enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
and libraw1394 [no]
--enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
...
...
@@ -1603,6 +1604,7 @@ EXTERNAL_LIBRARY_LIST="
libbs2b
libcaca
libcelt
libcodec2
libdc1394
libdrm
libflite
...
...
@@ -2944,6 +2946,8 @@ h264_videotoolbox_encoder_select="videotoolbox_encoder"
hevc_videotoolbox_encoder_deps
=
"pthreads"
hevc_videotoolbox_encoder_select
=
"videotoolbox_encoder"
libcelt_decoder_deps
=
"libcelt"
libcodec2_decoder_deps
=
"libcodec2"
libcodec2_encoder_deps
=
"libcodec2"
libfdk_aac_decoder_deps
=
"libfdk_aac"
libfdk_aac_encoder_deps
=
"libfdk_aac"
libfdk_aac_encoder_select
=
"audio_frame_queue"
...
...
@@ -5891,6 +5895,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
{
check_lib libcelt celt/celt.h celt_decoder_create_custom
-lcelt0
||
die
"ERROR: libcelt must be installed and version must be >= 0.11.0."
;
}
enabled libcaca
&&
require_pkg_config libcaca caca caca.h caca_create_canvas
enabled libcodec2
&&
require libcodec2 codec2/codec2.h codec2_create
-lcodec2
enabled libdc1394
&&
require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new
enabled libdrm
&&
require_pkg_config libdrm libdrm xf86drm.h drmGetVersion
enabled libfdk_aac
&&
{
check_pkg_config libfdk_aac fdk-aac
"fdk-aac/aacenc_lib.h"
aacEncOpen
||
...
...
doc/general.texi
View file @
f958f431
...
...
@@ -85,6 +85,24 @@ Go to @url{http://www.twolame.org/} and follow the
instructions for installing the library.
Then pass @code
{
--enable-libtwolame
}
to configure to enable it.
@section libcodec2 / codec2 general
FFmpeg can make use of libcodec2 for codec2 encoding and decoding.
There is currently no native decoder, so libcodec2 must be used for decoding.
Go to @url
{
http://freedv.org/
}
, download "Codec 2 source archive".
Build and install using CMake. Debian users can install the libcodec2-dev package instead.
Once libcodec2 is installed you can pass @code
{
--enable-libcodec2
}
to configure to enable it.
The easiest way to use codec2 is with .c2 files, since they contain the mode information required for decoding.
To encode such a file, use a .c2 file extension and give the libcodec2 encoder the -mode option:
@code
{
ffmpeg -i input.wav -mode 700C output.c2
}
.
Playback is as simple as @code
{
ffplay output.c2
}
.
For a list of supported modes, run @code
{
ffmpeg -h encoder=libcodec2
}
.
Raw codec2 files are also supported.
To make sense of them the mode in use needs to be specified as a format option:
@code
{
ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav
}
.
@section libvpx
FFmpeg can make use of the libvpx library for VP8/VP9 encoding.
...
...
@@ -1019,6 +1037,8 @@ following image formats are supported:
@tab Used in Bink and Smacker files in many games.
@item CELT @tab @tab E
@tab decoding supported through external library libcelt
@item codec2 @tab E @tab E
@tab en/decoding supported through external library libcodec2
@item Delphine Software International CIN audio @tab @tab X
@tab Codec used in Delphine Software International games.
@item Digital Speech Standard - Standard Play mode (DSS SP) @tab @tab X
...
...
libavcodec/Makefile
View file @
f958f431
...
...
@@ -935,6 +935,8 @@ OBJS-$(CONFIG_ILBC_AT_ENCODER) += audiotoolboxenc.o
OBJS-$(CONFIG_PCM_ALAW_AT_ENCODER)
+=
audiotoolboxenc.o
OBJS-$(CONFIG_PCM_MULAW_AT_ENCODER)
+=
audiotoolboxenc.o
OBJS-$(CONFIG_LIBCELT_DECODER)
+=
libcelt_dec.o
OBJS-$(CONFIG_LIBCODEC2_DECODER)
+=
libcodec2.o
codec2utils.o
OBJS-$(CONFIG_LIBCODEC2_ENCODER)
+=
libcodec2.o
codec2utils.o
OBJS-$(CONFIG_LIBFDK_AAC_DECODER)
+=
libfdk-aacdec.o
OBJS-$(CONFIG_LIBFDK_AAC_ENCODER)
+=
libfdk-aacenc.o
OBJS-$(CONFIG_LIBGSM_DECODER)
+=
libgsmdec.o
...
...
libavcodec/allcodecs.c
View file @
f958f431
...
...
@@ -662,6 +662,8 @@ extern AVCodec ff_pcm_mulaw_at_decoder;
extern
AVCodec
ff_qdmc_at_decoder
;
extern
AVCodec
ff_qdm2_at_decoder
;
extern
AVCodec
ff_libcelt_decoder
;
extern
AVCodec
ff_libcodec2_encoder
;
extern
AVCodec
ff_libcodec2_decoder
;
extern
AVCodec
ff_libfdk_aac_encoder
;
extern
AVCodec
ff_libfdk_aac_decoder
;
extern
AVCodec
ff_libgsm_encoder
;
...
...
libavcodec/avcodec.h
View file @
f958f431
...
...
@@ -615,6 +615,7 @@ enum AVCodecID {
AV_CODEC_ID_PAF_AUDIO
,
AV_CODEC_ID_ON2AVC
,
AV_CODEC_ID_DSS_SP
,
AV_CODEC_ID_CODEC2
,
AV_CODEC_ID_FFWAVESYNTH
=
0x15800
,
AV_CODEC_ID_SONIC
,
...
...
libavcodec/codec2utils.c
0 → 100644
View file @
f958f431
/*
* codec2 utility functions
* Copyright (c) 2017 Tomas Härdin
*
* 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 <string.h>
#include "internal.h"
#include "libavcodec/codec2utils.h"
int
avpriv_codec2_mode_bit_rate
(
void
*
logctx
,
int
mode
)
{
int
frame_size
=
avpriv_codec2_mode_frame_size
(
logctx
,
mode
);
int
block_align
=
avpriv_codec2_mode_block_align
(
logctx
,
mode
);
if
(
frame_size
<=
0
||
block_align
<=
0
)
{
return
0
;
}
return
8
*
8000
*
block_align
/
frame_size
;
}
int
avpriv_codec2_mode_frame_size
(
void
*
logctx
,
int
mode
)
{
int
frame_size_table
[
AVPRIV_CODEC2_MODE_MAX
+
1
]
=
{
160
,
// 3200
160
,
// 2400
320
,
// 1600
320
,
// 1400
320
,
// 1300
320
,
// 1200
320
,
// 700
320
,
// 700B
320
,
// 700C
};
if
(
mode
<
0
||
mode
>
AVPRIV_CODEC2_MODE_MAX
)
{
av_log
(
logctx
,
AV_LOG_ERROR
,
"unknown codec2 mode %i, can't find frame_size
\n
"
,
mode
);
return
0
;
}
else
{
return
frame_size_table
[
mode
];
}
}
int
avpriv_codec2_mode_block_align
(
void
*
logctx
,
int
mode
)
{
int
block_align_table
[
AVPRIV_CODEC2_MODE_MAX
+
1
]
=
{
8
,
// 3200
6
,
// 2400
8
,
// 1600
7
,
// 1400
7
,
// 1300
6
,
// 1200
4
,
// 700
4
,
// 700B
4
,
// 700C
};
if
(
mode
<
0
||
mode
>
AVPRIV_CODEC2_MODE_MAX
)
{
av_log
(
logctx
,
AV_LOG_ERROR
,
"unknown codec2 mode %i, can't find block_align
\n
"
,
mode
);
return
0
;
}
else
{
return
block_align_table
[
mode
];
}
}
libavcodec/codec2utils.h
0 → 100644
View file @
f958f431
/*
* codec2 utility functions
* Copyright (c) 2017 Tomas Härdin
*
* 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
*/
#ifndef AVCODEC_CODEC2UTILS_H
#define AVCODEC_CODEC2UTILS_H
#include <stdint.h>
//Highest mode we're willing to use.
//Don't want to let users accidentally produce files that can't be decoded in the future.
//CODEC2_MODE_WB (9) is experimental/unstable as of 2017-11-23.
#define AVPRIV_CODEC2_MODE_MAX 8 //CODEC2_MODE_700C
//Used by both codec2raw demuxer and libcodec2 encoder.
//The integers match the values in codec2.h, so "3200" -> CODEC2_MODE_3000 = 0 and so on.
//It is possible that we're linked to a version of libcodec2 that lacks some of these modes.
//For example Debian stretch ships with libcodec2.so.0.4 which lacks CODEC2_MODE_700C.
#define AVPRIV_CODEC2_AVOPTIONS(desc, classname, min_val, default_val, option_flags) \
{ "mode", desc, offsetof(classname, mode), AV_OPT_TYPE_INT, {.i64 = default_val}, min_val, AVPRIV_CODEC2_MODE_MAX, .flags=option_flags, .unit="codec2_mode"},\
{ "3200", "3200", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, .flags=option_flags, .unit="codec2_mode"},\
{ "2400", "2400", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, .flags=option_flags, .unit="codec2_mode"},\
{ "1600", "1600", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, .flags=option_flags, .unit="codec2_mode"},\
{ "1400", "1400", 0, AV_OPT_TYPE_CONST, {.i64 = 3}, .flags=option_flags, .unit="codec2_mode"},\
{ "1300", "1300", 0, AV_OPT_TYPE_CONST, {.i64 = 4}, .flags=option_flags, .unit="codec2_mode"},\
{ "1200", "1200", 0, AV_OPT_TYPE_CONST, {.i64 = 5}, .flags=option_flags, .unit="codec2_mode"},\
{ "700", "700", 0, AV_OPT_TYPE_CONST, {.i64 = 6}, .flags=option_flags, .unit="codec2_mode"},\
{ "700B", "700B", 0, AV_OPT_TYPE_CONST, {.i64 = 7}, .flags=option_flags, .unit="codec2_mode"},\
{ "700C", "700C", 0, AV_OPT_TYPE_CONST, {.i64 = 8}, .flags=option_flags, .unit="codec2_mode"}
//The three following functions are here to avoid needing libavformat/codec2.c to depend on libcodec2
//Computes bitrate from mode, with frames rounded up to the nearest octet.
//So 700 bit/s (28 bits/frame) becomes 800 bits/s (32 bits/frame).
//logctx is used for av_log()
//Returns <0 if mode is invalid
int
avpriv_codec2_mode_bit_rate
(
void
*
logctx
,
int
mode
);
//Mimics codec2_samples_per_frame()
int
avpriv_codec2_mode_frame_size
(
void
*
logctx
,
int
mode
);
//Mimics (codec2_bits_per_frame()+7)/8
int
avpriv_codec2_mode_block_align
(
void
*
logctx
,
int
mode
);
#define AVPRIV_CODEC2_EXTRADATA_SIZE 4
//Used in codec2raw demuxer and libcodec2 encoder
static
inline
void
avpriv_codec2_make_extradata
(
uint8_t
*
ptr
,
int
mode
)
{
//version 0.8 as of 2017-12-23 (r3386)
ptr
[
0
]
=
0
;
//major
ptr
[
1
]
=
8
;
//minor
ptr
[
2
]
=
mode
;
//mode
ptr
[
3
]
=
0
;
//flags
}
//Returns version as a 16-bit value. 0.8 -> 0x0008
static
inline
uint16_t
avpriv_codec2_version_from_extradata
(
uint8_t
*
ptr
)
{
return
(
ptr
[
0
]
<<
8
)
+
ptr
[
1
];
}
static
inline
uint8_t
avpriv_codec2_mode_from_extradata
(
uint8_t
*
ptr
)
{
return
ptr
[
2
];
}
#endif
/* AVCODEC_CODEC2UTILS_H */
libavcodec/codec_desc.c
View file @
f958f431
...
...
@@ -2733,6 +2733,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"Digital Speech Standard - Standard Play mode (DSS SP)"
),
.
props
=
AV_CODEC_PROP_LOSSY
,
},
{
.
id
=
AV_CODEC_ID_CODEC2
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
name
=
"codec2"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"codec2 (very low bitrate speech codec)"
),
.
props
=
AV_CODEC_PROP_LOSSY
,
},
{
.
id
=
AV_CODEC_ID_FFWAVESYNTH
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
...
...
libavcodec/libcodec2.c
0 → 100644
View file @
f958f431
/*
* codec2 encoder/decoder using libcodec2
* Copyright (c) 2017 Tomas Härdin
*
* 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 <codec2/codec2.h>
#include "avcodec.h"
#include "libavutil/opt.h"
#include "internal.h"
#include "codec2utils.h"
typedef
struct
{
const
AVClass
*
class
;
struct
CODEC2
*
codec
;
int
mode
;
}
LibCodec2Context
;
static
const
AVOption
options
[]
=
{
//not AV_OPT_FLAG_DECODING_PARAM since mode should come from the demuxer
//1300 (aka FreeDV 1600) is the most common mode on-the-air, default to it here as well
AVPRIV_CODEC2_AVOPTIONS
(
"codec2 mode"
,
LibCodec2Context
,
0
,
4
/*CODEC2_MODE_1300*/
,
AV_OPT_FLAG_AUDIO_PARAM
|
AV_OPT_FLAG_ENCODING_PARAM
),
{
NULL
},
};
static
const
AVClass
libcodec2_enc_class
=
{
.
class_name
=
"libcodec2 encoder"
,
.
item_name
=
av_default_item_name
,
.
option
=
options
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
const
AVClass
libcodec2_dec_class
=
{
.
class_name
=
"libcodec2 decoder"
,
.
item_name
=
av_default_item_name
,
.
version
=
LIBAVUTIL_VERSION_INT
,
};
static
av_cold
int
libcodec2_init_common
(
AVCodecContext
*
avctx
,
int
mode
)
{
LibCodec2Context
*
c2
=
avctx
->
priv_data
;
//Grab mode name from options, unless it's some weird number.
const
char
*
modename
=
mode
>=
0
&&
mode
<=
AVPRIV_CODEC2_MODE_MAX
?
options
[
mode
+
1
].
name
:
"?"
;
c2
->
codec
=
codec2_create
(
mode
);
if
(
!
c2
->
codec
)
{
//Out of memory or unsupported mode. The latter seems most likely,
//but we can't tell for sure with the current API.
goto
libcodec2_init_common_error
;
}
avctx
->
frame_size
=
codec2_samples_per_frame
(
c2
->
codec
);
avctx
->
block_align
=
(
codec2_bits_per_frame
(
c2
->
codec
)
+
7
)
/
8
;
if
(
avctx
->
frame_size
<=
0
||
avctx
->
block_align
<=
0
)
{
//codec2_create() may succeed for some modes but still fail at codec2_samples_per_frame()
//example is -mode 700C on libcodec2 0.4
codec2_destroy
(
c2
->
codec
);
c2
->
codec
=
NULL
;
goto
libcodec2_init_common_error
;
}
codec2_set_natural_or_gray
(
c2
->
codec
,
1
);
return
0
;
libcodec2_init_common_error:
av_log
(
avctx
,
AV_LOG_ERROR
,
"Mode %i (%s) not supported with the linked version of libcodec2
\n
"
,
mode
,
modename
);
return
AVERROR
(
EINVAL
);
}
static
av_cold
int
libcodec2_init_decoder
(
AVCodecContext
*
avctx
)
{
avctx
->
sample_rate
=
8000
;
avctx
->
channels
=
1
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_S16
;
avctx
->
channel_layout
=
AV_CH_LAYOUT_MONO
;
if
(
avctx
->
extradata_size
!=
AVPRIV_CODEC2_EXTRADATA_SIZE
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"must have exactly %i bytes of extradata (got %i)
\n
"
,
AVPRIV_CODEC2_EXTRADATA_SIZE
,
avctx
->
extradata_size
);
return
AVERROR_INVALIDDATA
;
}
return
libcodec2_init_common
(
avctx
,
avpriv_codec2_mode_from_extradata
(
avctx
->
extradata
));
}
static
av_cold
int
libcodec2_init_encoder
(
AVCodecContext
*
avctx
)
{
LibCodec2Context
*
c2
=
avctx
->
priv_data
;
//will need to be smarter once we get wideband support
if
(
avctx
->
sample_rate
!=
8000
||
avctx
->
channels
!=
1
||
avctx
->
sample_fmt
!=
AV_SAMPLE_FMT_S16
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"only 8 kHz 16-bit mono allowed
\n
"
);
return
AVERROR
(
EINVAL
);
}
avctx
->
extradata
=
av_mallocz
(
AVPRIV_CODEC2_EXTRADATA_SIZE
+
AV_INPUT_BUFFER_PADDING_SIZE
);
if
(
!
avctx
->
extradata
)
{
return
AVERROR
(
ENOMEM
);
}
avctx
->
extradata_size
=
AVPRIV_CODEC2_EXTRADATA_SIZE
;
avpriv_codec2_make_extradata
(
avctx
->
extradata
,
c2
->
mode
);
return
libcodec2_init_common
(
avctx
,
c2
->
mode
);
}
static
av_cold
int
libcodec2_close
(
AVCodecContext
*
avctx
)
{
LibCodec2Context
*
c2
=
avctx
->
priv_data
;
codec2_destroy
(
c2
->
codec
);
return
0
;
}
static
int
libcodec2_decode
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
got_frame_ptr
,
AVPacket
*
pkt
)
{
LibCodec2Context
*
c2
=
avctx
->
priv_data
;
AVFrame
*
frame
=
data
;
int
ret
,
nframes
,
i
;
uint8_t
*
input
;
int16_t
*
output
;
nframes
=
pkt
->
size
/
avctx
->
block_align
;
frame
->
nb_samples
=
avctx
->
frame_size
*
nframes
;
ret
=
ff_get_buffer
(
avctx
,
frame
,
0
);
if
(
ret
<
0
)
{
return
ret
;
}
input
=
pkt
->
data
;
output
=
(
int16_t
*
)
frame
->
data
[
0
];
for
(
i
=
0
;
i
<
nframes
;
i
++
)
{
codec2_decode
(
c2
->
codec
,
output
,
input
);
input
+=
avctx
->
block_align
;
output
+=
avctx
->
frame_size
;
}
*
got_frame_ptr
=
nframes
>
0
;
return
nframes
*
avctx
->
block_align
;
}
static
int
libcodec2_encode
(
AVCodecContext
*
avctx
,
AVPacket
*
avpkt
,
const
AVFrame
*
frame
,
int
*
got_packet_ptr
)
{
LibCodec2Context
*
c2
=
avctx
->
priv_data
;
int16_t
*
samples
=
(
int16_t
*
)
frame
->
data
[
0
];
int
ret
=
ff_alloc_packet2
(
avctx
,
avpkt
,
avctx
->
block_align
,
0
);
if
(
ret
<
0
)
{
return
ret
;
}
codec2_encode
(
c2
->
codec
,
avpkt
->
data
,
samples
);
*
got_packet_ptr
=
1
;
return
0
;
}
AVCodec
ff_libcodec2_decoder
=
{
.
name
=
"libcodec2"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"codec2 decoder using libcodec2"
),
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
id
=
AV_CODEC_ID_CODEC2
,
.
priv_data_size
=
sizeof
(
LibCodec2Context
),
.
init
=
libcodec2_init_decoder
,
.
close
=
libcodec2_close
,
.
decode
=
libcodec2_decode
,
.
capabilities
=
0
,
.
supported_samplerates
=
(
const
int
[]){
8000
,
0
},
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
.
channel_layouts
=
(
const
uint64_t
[])
{
AV_CH_LAYOUT_MONO
,
0
},
.
priv_class
=
&
libcodec2_dec_class
,
};
AVCodec
ff_libcodec2_encoder
=
{
.
name
=
"libcodec2"
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"codec2 encoder using libcodec2"
),
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
id
=
AV_CODEC_ID_CODEC2
,
.
priv_data_size
=
sizeof
(
LibCodec2Context
),
.
init
=
libcodec2_init_encoder
,
.
close
=
libcodec2_close
,
.
encode2
=
libcodec2_encode
,
.
capabilities
=
0
,
.
supported_samplerates
=
(
const
int
[]){
8000
,
0
},
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_S16
,
AV_SAMPLE_FMT_NONE
},
.
channel_layouts
=
(
const
uint64_t
[])
{
AV_CH_LAYOUT_MONO
,
0
},
.
priv_class
=
&
libcodec2_enc_class
,
};
libavcodec/version.h
View file @
f958f431
...
...
@@ -28,8 +28,8 @@
#include "libavutil/version.h"
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 1
2
#define LIBAVCODEC_VERSION_MICRO 10
2
#define LIBAVCODEC_VERSION_MINOR 1
3
#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