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
bc634f6f
Commit
bc634f6f
authored
Jun 05, 2003
by
Zdenek Kabelac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* 3gp patch by Joca
Originally committed as revision 1931 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
67f7f316
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
398 additions
and
38 deletions
+398
-38
Makefile
Makefile
+1
-13
configure
configure
+22
-4
Makefile
libavcodec/Makefile
+21
-4
allcodecs.c
libavcodec/allcodecs.c
+1
-0
amr.c
libavcodec/amr.c
+314
-17
avcodec.h
libavcodec/avcodec.h
+1
-0
Makefile
libavformat/Makefile
+4
-0
allformats.c
libavformat/allformats.c
+3
-0
avformat.h
libavformat/avformat.h
+3
-0
mov.c
libavformat/mov.c
+28
-0
No files found.
Makefile
View file @
bc634f6f
...
...
@@ -43,12 +43,6 @@ EXTRALIBS+=-lmp3lame
endif
endif
ifeq
($(AMR_NB),yes)
EXTRALIBS
+=
libavcodec/amr/spc.a libavcodec/amr/fipop.a
AMRLIBS
=
amrlibs
CLEANAMR
=
cleanamr
endif
ifeq
($(CONFIG_VORBIS),yes)
EXTRALIBS
+=
-logg
-lvorbis
-lvorbisenc
endif
...
...
@@ -83,9 +77,6 @@ lib: $(AMRLIBS)
$(MAKE)
-C
libavcodec all
$(MAKE)
-C
libavformat all
#make sure you have added -DMMS_IO to CFLAGS in libavcodec/amr/makefile!!
amrlibs
:
$(MAKE)
-C
libavcodec/amr spclib fipoplib
ffmpeg_g$(EXE)
:
ffmpeg.o .libs
$(CC)
$(LDFLAGS)
-o
$@
ffmpeg.o
$(FFLIBS)
$(EXTRALIBS)
...
...
@@ -138,7 +129,7 @@ endif
@
test
-f
.libs
||
touch
.libs
@
for
i
in
$(DEP_LIBS)
;
do if
$(TEST)
$$
i
-nt
.libs
;
then
touch
.libs
;
fi
;
done
clean
:
$(CLEANVHOOK)
$(CLEANAMR)
clean
:
$(CLEANVHOOK)
$(MAKE)
-C
libavcodec clean
$(MAKE)
-C
libavformat clean
$(MAKE)
-C
tests clean
...
...
@@ -151,9 +142,6 @@ distclean: clean
$(MAKE)
-C
libavcodec distclean
rm
-f
config.mak config.h
cleanamr
:
$(MAKE)
-C
libavcodec/amr clean
TAGS
:
etags
*
.[ch] libavformat/
*
.[ch] libavcodec/
*
.[ch]
...
...
configure
View file @
bc634f6f
...
...
@@ -92,6 +92,7 @@ SLIBSUF=".so"
risky
=
"yes"
small
=
"no"
amr_nb
=
"no"
amr_nb_fixed
=
"no"
# OS specific
targetos
=
`
uname
-s
`
...
...
@@ -322,6 +323,8 @@ for opt do
;;
--enable-amr_nb
)
amr_nb
=
"yes"
;;
--enable-amr_nb-fixed
)
amr_nb_fixed
=
"yes"
;;
esac
done
...
...
@@ -636,7 +639,8 @@ echo " --enable-a52bin open liba52.so.0 at runtime [default=no]"
echo
" --disable-pp disable GPL'ed post processing support [default=no]"
echo
" --enable-shared-pp use libpostproc.so [default=no]"
echo
" --enable-shared build shared libraries [default=no]"
echo
" --enable-amr_nb enable amr_nb audio codec"
echo
" --enable-amr_nb enable amr_nb float audio codec"
echo
" --enable-amr_nb-fixed use fixed point for amr-nb codec"
echo
""
echo
"Advanced options (experts only):"
echo
" --source-path=PATH path of source code [
$source_path
]"
...
...
@@ -702,7 +706,8 @@ if test "$vhook" = "yes" ; then
echo
"Imlib2 support
$imlib2
"
echo
"freetype support
$freetype2
"
fi
echo
"AMR-NB support"
$amr_nb
echo
"AMR-NB float support"
$amr_nb
echo
"AMR-NB fixed support"
$amr_nb_fixed
echo
"Creating config.mak and config.h"
...
...
@@ -984,13 +989,26 @@ if test "$amr_nb" = "yes" ; then
echo
"#define AMR_NB 1"
>>
$TMPH
echo
"AMR_NB=yes"
>>
config.mak
echo
echo
"AMR NB NOTICE! Make sure you have downloaded TS26.073 from "
if
test
"
$amr_nb_fixed
"
=
"yes"
;
then
echo
"AMR_NB_FIXED=yes"
>>
config.mak
echo
"#define AMR_NB_FIXED 1"
>>
$TMPH
echo
"AMR NB FIXED POINT NOTICE! Make sure you have downloaded TS26.073 "
echo
"REL-5 version 5.1.0 from "
echo
"http://www.3gpp.org/ftp/Specs/latest/Rel-5/26_series/26073-510.zip"
echo
"and extracted src to libavcodec/amr"
echo
"You must also add -DMMS_IO to CFLAGS in libavcodec/amr/makefile."
echo
"You must also add -DMMS_IO and remove -pedantic-errors to/from CFLAGS in libavcodec/amr/makefile."
echo
"i.e. CFLAGS = -Wall -I.
\$
(CFLAGS_
\$
(MODE)) -D
\$
(VAD) -DMMS_IO"
echo
else
echo
"AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104"
echo
"REL-5 V5.1.0 from "
echo
"http://www.3gpp.org/ftp/Specs/latest/Rel-5/26_series/26104-510.zip"
echo
"and extracted the source to libavcodec/amr_float"
echo
fi
fi
diff
$TMPH
config.h
>
/dev/null 2>&1
if
test
$?
-ne
0
;
then
mv
-f
$TMPH
config.h
...
...
libavcodec/Makefile
View file @
bc634f6f
...
...
@@ -20,7 +20,15 @@ OBJS= common.o utils.o mem.o allcodecs.o \
vp3.o asv1.o 4xm.o cabac.o
ifeq
($(AMR_NB),yes)
ifeq
($(AMR_NB_FIXED),yes)
OBJS
+=
amr.o
AMREXTRALIBS
+=
amr/
*
.o
AMRLIBS
=
amrlibs
CLEANAMR
=
cleanamr
else
OBJS
+=
amr.o amr_float/sp_dec.o amr_float/sp_enc.o amr_float/interf_dec.o amr_float/interf_enc.o
CLEANAMR
=
cleanamrfloat
endif
endif
ASM_OBJS
=
...
...
@@ -140,15 +148,18 @@ TESTS= imgresample-test dct-test motion-test fft-test
all
:
$(LIB) $(SLIB)
amrlibs
:
$(MAKE)
-C
amr spclib fipoplib
tests
:
apiexample cpuid_test $(TESTS)
$(LIB)
:
$(OBJS)
$(LIB)
:
$(OBJS)
$(AMRLIBS)
rm
-f
$@
$(AR)
rc
$@
$(OBJS)
$(AR)
rc
$@
$(OBJS)
$(AMREXTRALIBS)
$(RANLIB)
$@
$(SLIB)
:
$(OBJS)
$(CC)
$(SHFLAGS)
-o
$@
$(OBJS)
$(EXTRALIBS)
$(CC)
$(SHFLAGS)
-o
$@
$(OBJS)
$(EXTRALIBS)
$(AMREXTRALIBS)
dsputil.o
:
dsputil.c dsputil.h
...
...
@@ -177,7 +188,7 @@ depend: $(SRCS)
dep
:
depend
clean
:
clean
:
$(CLEANAMR)
rm
-f
*
.o
*
.d
*
~ .depend
$(LIB)
$(SLIB)
*
.so i386/
*
.o i386/
*
~
\
armv4l/
*
.o armv4l/
*
~
\
mlib/
*
.o mlib/
*
~
\
...
...
@@ -192,6 +203,12 @@ clean:
distclean
:
clean
rm
-f
Makefile.bak .depend
cleanamr
:
$(MAKE)
-C
amr clean
cleanamrfloat
:
rm
-f
amr_float/
*
.o
# api example program
apiexample
:
apiexample.c $(LIB)
$(CC)
$(CFLAGS)
-o
$@
$<
$(LIB)
$(EXTRALIBS)
-lm
...
...
libavcodec/allcodecs.c
View file @
bc634f6f
...
...
@@ -113,6 +113,7 @@ void avcodec_register_all(void)
#ifdef AMR_NB
register_avcodec
(
&
amr_nb_decoder
);
register_avcodec
(
&
amr_nb_encoder
);
#endif
/* AMR_NB */
/* pcm codecs */
...
...
libavcodec/amr.c
View file @
bc634f6f
...
...
@@ -16,18 +16,93 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
//#define DEBUG
#define MMS_IO
/*
This code implements amr-nb audio encoder/decoder through external reference
code from www.3gpp.org. The licence of the code from 3gpp is unclear so you
have to download the code separately. Two versions exists: One fixed-point
and one with floats. For some reason the float-encoder is significant faster
atleast on a P4 1.5GHz (0.9s instead of 9.9s on a 30s audio clip at MR102).
The fixed-point (TS26.073) can be downloaded from:
http://www.3gpp.org/ftp/Specs/latest/Rel-5/26_series/26073-510.zip
Extract the soure into ffmpeg/libavcodec/amr
To use the float version run "./configure" with "--enable-amr-nb-fixed"
The float version (default) can be downloaded from:
http://www.3gpp.org/ftp/Specs/latest/Rel-5/26_series/26104-510.zip
Extract the soure into ffmpeg/libavcodec/amr_float
The specification for amr-nb can be found in TS 26.071
(http://www.3gpp.org/ftp/Specs/html-info/26071.htm) and some other
info at http://www.3gpp.org/ftp/Specs/html-info/26-series.htm
In the future support for AMR-WB might also be included here.
Reference code exist in TS26.173 and TS 26.204.
*/
#define DEBUG
//#define AMR_NB_FIXED
#include "../config.h"
#include "avcodec.h"
#ifdef AMR_NB_FIXED
#define MMS_IO
#include "amr/sp_dec.h"
#include "amr/d_homing.h"
#include "amr/typedef.h"
#include "amr/sp_enc.h"
#include "amr/sid_sync.h"
#include "amr/e_homing.h"
#else
#include "amr_float/interf_dec.h"
#include "amr_float/interf_enc.h"
#endif
/* Common code for fixed and float version*/
typedef
struct
AMR_bitrates
{
int
startrate
;
int
stoprate
;
enum
Mode
mode
;
}
AMR_bitrates
;
/* Match desired bitrate with closest one*/
static
enum
Mode
getBitrateMode
(
int
bitrate
)
{
/* Adjusted so that all bitrates can be used from commandline where
only a multiple of 1000 can be specified*/
AMR_bitrates
rates
[]
=
{
{
0
,
4999
,
MR475
},
//4
{
5000
,
5899
,
MR515
},
//5
{
5900
,
6699
,
MR59
},
//6
{
6700
,
7000
,
MR67
},
//7
{
7001
,
7949
,
MR74
},
//8
{
7950
,
9999
,
MR795
},
//9
{
10000
,
11999
,
MR102
},
//10
{
12000
,
64000
,
MR122
},
//12
};
int
i
;
for
(
i
=
0
;
i
<
sizeof
(
rates
);
i
++
)
{
if
(
rates
[
i
].
startrate
<=
bitrate
&&
rates
[
i
].
stoprate
>=
bitrate
)
{
return
(
rates
[
i
].
mode
);
}
}
/*Return highest possible*/
return
(
MR122
);
}
#ifdef AMR_NB_FIXED
/* fixed point version*/
/* frame size in serial bitstream file (frame type + serial stream + flags) */
#define SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)
typedef
struct
AMR
Decode
Context
{
typedef
struct
AMRContext
{
int
frameCount
;
Speech_Decode_FrameState
*
speech_decoder_state
;
enum
RXFrameType
rx_type
;
...
...
@@ -35,11 +110,17 @@ typedef struct AMRDecodeContext {
Word16
reset_flag
;
Word16
reset_flag_old
;
}
AMRDecodeContext
;
enum
Mode
enc_bitrate
;
Speech_Encode_FrameState
*
enstate
;
sid_syncState
*
sidstate
;
enum
TXFrameType
tx_frametype
;
}
AMRContext
;
static
int
amr_nb_decode_init
(
AVCodecContext
*
avctx
)
{
AMR
Decode
Context
*
s
=
avctx
->
priv_data
;
AMRContext
*
s
=
avctx
->
priv_data
;
s
->
frameCount
=
0
;
s
->
speech_decoder_state
=
NULL
;
s
->
rx_type
=
(
enum
RXFrameType
)
0
;
...
...
@@ -49,23 +130,75 @@ static int amr_nb_decode_init(AVCodecContext * avctx)
if
(
Speech_Decode_Frame_init
(
&
s
->
speech_decoder_state
,
"Decoder"
))
{
printf
(
"
error
\
r\n
"
);
printf
(
"
Speech_Decode_Frame_init erro
r
\n
"
);
return
-
1
;
}
return
0
;
}
static
int
amr_
decode_close
(
AVCodecContext
*
avctx
)
static
int
amr_
nb_encode_init
(
AVCodecContext
*
avctx
)
{
AMRDecodeContext
*
s
=
avctx
->
priv_data
;
AMRContext
*
s
=
avctx
->
priv_data
;
s
->
frameCount
=
0
;
s
->
speech_decoder_state
=
NULL
;
s
->
rx_type
=
(
enum
RXFrameType
)
0
;
s
->
mode
=
(
enum
Mode
)
0
;
s
->
reset_flag
=
0
;
s
->
reset_flag_old
=
1
;
if
(
avctx
->
sample_rate
!=
8000
)
{
#ifdef DEBUG
printf
(
"Only 8000Hz sample rate supported
\n
"
);
#endif
return
-
1
;
}
if
(
avctx
->
channels
!=
1
)
{
#ifdef DEBUG
printf
(
"Only mono supported
\n
"
);
#endif
return
-
1
;
}
avctx
->
frame_size
=
160
;
avctx
->
coded_frame
=
avcodec_alloc_frame
();
if
(
Speech_Encode_Frame_init
(
&
s
->
enstate
,
0
,
"encoder"
)
||
sid_sync_init
(
&
s
->
sidstate
))
{
#ifdef DEBUG
printf
(
"Speech_Encode_Frame_init error
\n
"
);
#endif
return
-
1
;
}
s
->
enc_bitrate
=
getBitrateMode
(
avctx
->
bit_rate
);
return
0
;
}
static
int
amr_nb_encode_close
(
AVCodecContext
*
avctx
)
{
AMRContext
*
s
=
avctx
->
priv_data
;
Speech_Encode_Frame_exit
(
&
s
->
enstate
);
sid_sync_exit
(
&
s
->
sidstate
);
av_freep
(
&
avctx
->
coded_frame
);
return
0
;
}
static
int
amr_nb_decode_close
(
AVCodecContext
*
avctx
)
{
AMRContext
*
s
=
avctx
->
priv_data
;
Speech_Decode_Frame_exit
(
&
s
->
speech_decoder_state
);
return
0
;
}
static
int
amr_nb_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
uint8_t
*
buf
,
int
buf_size
)
{
AMR
Decode
Context
*
s
=
avctx
->
priv_data
;
AMRContext
*
s
=
avctx
->
priv_data
;
uint8_t
*
amrData
=
buf
;
int
offset
=
0
;
...
...
@@ -75,29 +208,34 @@ static int amr_nb_decode_frame(AVCodecContext * avctx,
Word16
serial
[
SERIAL_FRAMESIZE
];
/* coded bits */
Word16
*
synth
;
UWord8
*
packed_bits
;
*
data_size
=
0
;
static
Word16
packed_size
[
16
]
=
{
12
,
13
,
15
,
17
,
19
,
20
,
26
,
31
,
5
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
int
i
;
//printf("amr_decode_frame data
=0x%X data_size=%i buf=0x%X buf_size=%d frameCount=%d!!\n",data,&
data_size,buf,buf_size,s->frameCount);
//printf("amr_decode_frame data
_size=%i buf=0x%X buf_size=%d frameCount=%d!!\n",*
data_size,buf,buf_size,s->frameCount);
synth
=
data
;
while
(
offset
<
buf_size
)
//
while(offset<buf_size)
{
toc
=
amrData
[
offset
++
];
toc
=
amrData
[
offset
];
/* read rest of the frame based on ToC byte */
q
=
(
toc
>>
2
)
&
0x01
;
ft
=
(
toc
>>
3
)
&
0x0F
;
//printf("offset=%d, packet_size=%d amrData= 0x%X %X %X %X\n",offset,packed_size[ft],amrData[offset],amrData[offset+1],amrData[offset+2],amrData[offset+3]);
offset
++
;
packed_bits
=
amrData
+
offset
;
offset
+=
packed_size
[
ft
];
//Unsort and unpack bits
//Unsort and unpack bits
s
->
rx_type
=
UnpackBits
(
q
,
ft
,
packed_bits
,
&
s
->
mode
,
&
serial
[
1
]);
//We have a new frame
//We have a new frame
s
->
frameCount
++
;
if
(
s
->
rx_type
==
RX_NO_DATA
)
...
...
@@ -128,7 +266,7 @@ static int amr_nb_decode_frame(AVCodecContext * avctx,
Speech_Decode_Frame
(
s
->
speech_decoder_state
,
s
->
mode
,
&
serial
[
1
],
s
->
rx_type
,
synth
);
}
//Each AMR-frame results in 160 16-bit samples
//Each AMR-frame results in 160 16-bit samples
*
data_size
+=
160
*
2
;
synth
+=
160
;
...
...
@@ -146,18 +284,177 @@ static int amr_nb_decode_frame(AVCodecContext * avctx,
s
->
reset_flag_old
=
s
->
reset_flag
;
}
return
offset
;
}
static
int
amr_nb_encode_frame
(
AVCodecContext
*
avctx
,
unsigned
char
*
frame
/*out*/
,
int
buf_size
,
void
*
data
/*in*/
)
{
short
serial_data
[
250
]
=
{
0
};
AMRContext
*
s
=
avctx
->
priv_data
;
int
written
;
s
->
reset_flag
=
encoder_homing_frame_test
(
data
);
Speech_Encode_Frame
(
s
->
enstate
,
s
->
enc_bitrate
,
data
,
&
serial_data
[
1
],
&
s
->
mode
);
/* add frame type and mode */
sid_sync
(
s
->
sidstate
,
s
->
mode
,
&
s
->
tx_frametype
);
written
=
PackBits
(
s
->
mode
,
s
->
enc_bitrate
,
s
->
tx_frametype
,
&
serial_data
[
1
],
frame
);
if
(
s
->
reset_flag
!=
0
)
{
Speech_Encode_Frame_reset
(
s
->
enstate
);
sid_sync_reset
(
s
->
sidstate
);
}
return
written
;
}
#else
/* Float point version*/
typedef
struct
AMRContext
{
int
frameCount
;
void
*
decState
;
int
*
enstate
;
enum
Mode
enc_bitrate
;
}
AMRContext
;
static
int
amr_nb_decode_init
(
AVCodecContext
*
avctx
)
{
AMRContext
*
s
=
avctx
->
priv_data
;
s
->
frameCount
=
0
;
s
->
decState
=
Decoder_Interface_init
();
if
(
!
s
->
decState
)
{
printf
(
"Decoder_Interface_init error
\r\n
"
);
return
-
1
;
}
return
0
;
}
static
int
amr_nb_encode_init
(
AVCodecContext
*
avctx
)
{
AMRContext
*
s
=
avctx
->
priv_data
;
s
->
frameCount
=
0
;
if
(
avctx
->
sample_rate
!=
8000
)
{
#ifdef DEBUG
printf
(
"Only 8000Hz sample rate supported
\n
"
);
#endif
return
-
1
;
}
if
(
avctx
->
channels
!=
1
)
{
#ifdef DEBUG
printf
(
"Only mono supported
\n
"
);
#endif
return
-
1
;
}
avctx
->
frame_size
=
160
;
avctx
->
coded_frame
=
avcodec_alloc_frame
();
s
->
enstate
=
Encoder_Interface_init
(
0
);
if
(
!
s
->
enstate
)
{
printf
(
"Encoder_Interface_init error
\n
"
);
return
-
1
;
}
s
->
enc_bitrate
=
getBitrateMode
(
avctx
->
bit_rate
);
return
0
;
}
static
int
amr_nb_decode_close
(
AVCodecContext
*
avctx
)
{
AMRContext
*
s
=
avctx
->
priv_data
;
Decoder_Interface_exit
(
s
->
decState
);
return
0
;
}
static
int
amr_nb_encode_close
(
AVCodecContext
*
avctx
)
{
AMRContext
*
s
=
avctx
->
priv_data
;
Encoder_Interface_exit
(
s
->
enstate
);
av_freep
(
&
avctx
->
coded_frame
);
return
0
;
}
static
int
amr_nb_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
data_size
,
uint8_t
*
buf
,
int
buf_size
)
{
AMRContext
*
s
=
(
AMRContext
*
)
avctx
->
priv_data
;
uint8_t
*
amrData
=
buf
;
int
offset
=
0
;
static
short
block_size
[
16
]
=
{
12
,
13
,
15
,
17
,
19
,
20
,
26
,
31
,
5
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
enum
Mode
dec_mode
;
int
packet_size
;
*
data_size
=
0
;
//printf("amr_decode_frame data_size=%i buf=0x%X buf_size=%d frameCount=%d!!\n",*data_size,buf,buf_size,s->frameCount);
while
(
offset
<
buf_size
)
{
dec_mode
=
(
amrData
[
offset
]
>>
3
)
&
0x000F
;
packet_size
=
block_size
[
dec_mode
];
s
->
frameCount
++
;
//printf("offset=%d, packet_size=%d amrData= 0x%X %X %X %X\n",offset,packet_size,amrData[offset],amrData[offset+1],amrData[offset+2],amrData[offset+3]);
/* call decoder */
Decoder_Interface_Decode
(
s
->
decState
,
&
amrData
[
offset
],
data
+*
data_size
,
0
);
*
data_size
+=
160
*
2
;
offset
+=
packet_size
+
1
;
}
return
buf_size
;
}
static
int
amr_nb_encode_frame
(
AVCodecContext
*
avctx
,
unsigned
char
*
frame
/*out*/
,
int
buf_size
,
void
*
data
/*in*/
)
{
AMRContext
*
s
=
(
AMRContext
*
)
avctx
->
priv_data
;
int
written
;
written
=
Encoder_Interface_Encode
(
s
->
enstate
,
s
->
enc_bitrate
,
data
,
frame
,
0
);
return
written
;
}
#endif
AVCodec
amr_nb_decoder
=
{
"amr_nb"
,
CODEC_TYPE_AUDIO
,
CODEC_ID_AMR_NB
,
sizeof
(
AMR
Decode
Context
),
sizeof
(
AMRContext
),
amr_nb_decode_init
,
NULL
,
amr_decode_close
,
amr_
nb_
decode_close
,
amr_nb_decode_frame
,
};
AVCodec
amr_nb_encoder
=
{
"amr_nb"
,
CODEC_TYPE_AUDIO
,
CODEC_ID_AMR_NB
,
sizeof
(
AMRContext
),
amr_nb_encode_init
,
amr_nb_encode_frame
,
amr_nb_encode_close
,
NULL
,
};
libavcodec/avcodec.h
View file @
bc634f6f
...
...
@@ -1245,6 +1245,7 @@ extern AVCodec h264_decoder;
extern
AVCodec
indeo3_decoder
;
extern
AVCodec
vp3_decoder
;
extern
AVCodec
amr_nb_decoder
;
extern
AVCodec
amr_nb_encoder
;
extern
AVCodec
aac_decoder
;
extern
AVCodec
mpeg4aac_decoder
;
extern
AVCodec
asv1_decoder
;
...
...
libavformat/Makefile
View file @
bc634f6f
...
...
@@ -20,6 +20,10 @@ ifeq ($(CONFIG_RISKY),yes)
OBJS
+=
asf.o
endif
ifeq
($(AMR_NB),yes)
OBJS
+=
amr.o
endif
# image formats
OBJS
+=
pnm.o yuv.o png.o jpeg.o gifdec.o
# file I/O
...
...
libavformat/allformats.c
View file @
bc634f6f
...
...
@@ -49,6 +49,9 @@ void av_register_all(void)
dv_init
();
fourxm_init
();
#ifdef AMR_NB
amr_init
();
#endif
av_register_output_format
(
&
yuv4mpegpipe_oformat
);
#ifdef CONFIG_VORBIS
...
...
libavformat/avformat.h
View file @
bc634f6f
...
...
@@ -310,6 +310,9 @@ int gif_init(void);
/* au.c */
int
au_init
(
void
);
/* amr.c */
int
amr_init
(
void
);
/* wav.c */
int
wav_init
(
void
);
...
...
libavformat/mov.c
View file @
bc634f6f
...
...
@@ -1330,6 +1330,7 @@ static int mov_probe(AVProbeData *p)
case
MKTAG
(
'f'
,
'r'
,
'e'
,
'e'
):
case
MKTAG
(
'm'
,
'd'
,
'a'
,
't'
):
case
MKTAG
(
'p'
,
'n'
,
'o'
,
't'
):
/* detect movs with preview pics like ew.mov and april.mov */
case
MKTAG
(
'u'
,
'd'
,
't'
,
'a'
):
/* Packet Video PVAuthor adds this and a lot of more junk */
return
AVPROBE_SCORE_MAX
;
case
MKTAG
(
'f'
,
't'
,
'y'
,
'p'
):
case
MKTAG
(
's'
,
'k'
,
'i'
,
'p'
):
...
...
@@ -1486,6 +1487,33 @@ again:
&&
((
msc
->
chunk_offsets
[
msc
->
next_chunk
]
-
offset
)
<
size
))
size
=
msc
->
chunk_offsets
[
msc
->
next_chunk
]
-
offset
;
}
#ifdef MOV_MINOLTA_FIX
//Make sure that size is according to sample_size (Needed by .mov files
//created on a Minolta Dimage Xi where audio chunks contains waste data in the end)
//Maybe we should really not only check sc->sample_size, but also sc->sample_sizes
//but I have no such movies
if
(
sc
->
sample_size
>
0
)
{
int
foundsize
=
0
;
for
(
i
=
0
;
i
<
(
sc
->
sample_to_chunk_sz
);
i
++
)
{
if
(
(
sc
->
sample_to_chunk
[
i
].
first
)
<=
(
sc
->
next_chunk
)
&&
(
sc
->
sample_size
>
0
)
)
{
foundsize
=
sc
->
sample_to_chunk
[
i
].
count
*
sc
->
sample_size
;
}
#ifdef DEBUG
/*printf("sample_to_chunk first=%ld count=%ld, id=%ld\n", sc->sample_to_chunk[i].first, sc->sample_to_chunk[i].count, sc->sample_to_chunk[i].id);*/
#endif
}
if
(
(
foundsize
>
0
)
&&
(
foundsize
<
size
)
)
{
#ifdef DEBUG
/*printf("this size should actually be %d\n",foundsize);*/
#endif
size
=
foundsize
;
}
}
#endif //MOV_MINOLTA_FIX
#ifdef MOV_SPLIT_CHUNKS
/* split chunks into samples */
if
(
sc
->
sample_size
==
0
)
{
...
...
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