Go to the documentation of this file.
91 const uint8_t codes_counts[16],
92 const uint8_t **syms,
int offset)
101 for (
int i = 16;
i > 0;
i--)
102 for (
unsigned tmp = num + codes_counts[
i - 1]; num <
tmp; num++)
123 for (
int i = 0;
i < 2;
i++){
132 &q_syms, -48 - 16 *
i);
133 for (
int j = 0; j < 4; j++)
135 &q_syms, -((8 << j) - 1));
151 memset(
c->oldDSCF, 0,
sizeof(
c->oldDSCF));
159 if (
c->maxbands >=
BANDS) {
181 int *got_frame_ptr,
AVPacket *avpkt)
184 const uint8_t *buf = avpkt->
data;
185 int buf_size = avpkt->
size;
188 int i, j, k, ch, cnt, res, t;
191 int maxband, keyframe;
194 keyframe =
c->cur_frame == 0;
197 memset(
c->Q, 0,
sizeof(
c->Q));
198 c->last_bits_used = 0;
209 if(maxband > 32) maxband -= 33;
217 if(maxband >
c->maxbands + 1) {
221 c->last_max_band = maxband;
225 last[0] = last[1] = 0;
226 for(
i = maxband - 1;
i >= 0;
i--){
227 for(ch = 0; ch < 2; ch++){
229 if(last[ch] > 15) last[ch] -= 17;
230 bands[
i].res[ch] = last[ch];
237 for(
i = 0;
i < maxband;
i++)
242 for(
i = maxband - 1;
i >= 0;
i--)
249 for(
i = maxband;
i <
c->maxbands;
i++)
253 for(
i = 0;
i < 32;
i++)
254 c->oldDSCF[0][
i] =
c->oldDSCF[1][
i] = 1;
257 for(
i = 0;
i < maxband;
i++){
268 for(
i = 0;
i < maxband;
i++){
269 for(ch = 0; ch < 2; ch++){
270 if(!
bands[
i].res[ch])
continue;
272 if(
c->oldDSCF[ch][
i]){
274 c->oldDSCF[ch][
i] = 0;
279 bands[
i].scf_idx[ch][0] = ((
bands[
i].scf_idx[ch][2] + t - 25) & 0x7F) - 6;
281 for(j = 0; j < 2; j++){
282 if((
bands[
i].scfi[ch] << j) & 2)
288 bands[
i].scf_idx[ch][j + 1] = ((
bands[
i].scf_idx[ch][j] + t - 25) & 0x7F) - 6;
295 for(ch = 0; ch < 2; ch++){
300 c->Q[ch][off + j] = (
av_lfg_get(&
c->rnd) & 0x3FC) - 510;
327 c->Q[ch][off + j + 1] = t >> 4;
339 cnt = (cnt >> 1) +
FFABS(
c->Q[ch][off + j]);
346 c->Q[ch][off + j] <<= res - 9;
347 c->Q[ch][off + j] |=
get_bits(gb, res - 9);
349 c->Q[ch][off + j] -= (1 << (res - 2)) - 1;
360 (int16_t **)
frame->extended_data,
366 if(
c->cur_frame >=
c->frames)
370 c->last_bits_used = buf_size << 3;
372 c->last_bits_used = buf_size << 3;
377 return c->cur_frame ?
c->last_bits_used >> 3 : buf_size;
static av_cold void mpc8_init_static(void)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
static int get_bits_left(GetBitContext *gb)
uint64_t channel_layout
Audio channel layout.
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
static enum AVSampleFormat sample_fmts[]
static av_cold void mpc8_decode_flush(AVCodecContext *avctx)
#define AV_CH_LAYOUT_MONO
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static const uint8_t mpc8_dscf_len_counts[2][16]
static int get_bits_count(const GetBitContext *s)
av_cold void ff_mpadsp_init(MPADSPContext *s)
static int mpc8_dec_base(GetBitContext *gb, int k, int n)
This structure describes decoded (raw) audio or video data.
static const uint16_t table[]
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold void build_vlc(VLC *vlc, unsigned *buf_offset, const uint8_t codes_counts[16], const uint8_t **syms, int offset)
static int mpc8_get_mod_golomb(GetBitContext *gb, int m)
static int mpc8_get_mask(GetBitContext *gb, int size, int t)
void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, int16_t **out, int channels)
const AVCodec ff_mpc8_decoder
static const uint8_t mpc8_q2_len_counts[2][16]
static const uint8_t mpc8_scfi_len_counts[2][16]
#define AV_CH_LAYOUT_STEREO
static const uint32_t mpc8_cnk_lost[16][33]
static const uint8_t mpc8_cnk_len[16][33]
int ff_init_vlc_from_lengths(VLC *vlc_arg, int nb_bits, int nb_codes, const int8_t *lens, int lens_wrap, const void *symbols, int symbols_wrap, int symbols_size, int offset, int flags, void *logctx)
Build VLC decoding tables suitable for use with get_vlc2()
s EdgeDetect Foobar g libavfilter vf_edgedetect c libavfilter vf_foobar c edit libavfilter and add an entry for foobar following the pattern of the other filters edit libavfilter allfilters and add an entry for foobar following the pattern of the other filters configure make j< whatever > ffmpeg ffmpeg i you should get a foobar png with Lena edge detected That s your new playground is ready Some little details about what s going which in turn will define variables for the build system and the C
static const uint8_t mpc8_q5_8_len_counts[2][4][16]
static int ff_thread_once(char *control, void(*routine)(void))
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static const uint16_t mask[17]
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
static const int8_t mpc8_idx52[125]
static int mpc8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static const float bands[]
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static const uint8_t mpc8_bands_len_counts[16]
static const uint8_t mpc8_q1_len_counts[16]
static void flush(AVCodecContext *avctx)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
void ff_mpa_synth_init_fixed(void)
static unsigned int get_bits1(GetBitContext *s)
static const int8_t mpc8_huffq2[5 *5 *5]
static VLC quant_vlc[4][2]
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
static const uint8_t mpc8_q34_len_counts[2][16]
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static const unsigned int mpc8_thres[]
static const uint8_t mpc8_bands_syms[MPC8_BANDS_SIZE]
static const uint8_t mpc8_q_syms[]
enum AVSampleFormat sample_fmt
audio sample format
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
static const uint32_t mpc8_cnk[16][32]
@ AV_SAMPLE_FMT_S16P
signed 16 bits, planar
int channels
number of audio channels
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static const uint8_t mpc8_res_syms[]
AVSampleFormat
Audio sample formats.
static int mpc8_dec_enum(GetBitContext *gb, int k, int n)
static const uint8_t mpc8_dscf_syms[]
const char * name
Name of the codec implementation.
#define INIT_VLC_STATIC_OVERLONG
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
static av_cold int mpc8_decode_init(AVCodecContext *avctx)
static VLC_TYPE vlc_buf[16716][2]
main external API structure.
static const uint8_t mpc8_res_len_counts[2][16]
Subband structure - hold all variables for each subband.
static const int8_t mpc8_idx50[125]
static av_const int sign_extend(int val, unsigned bits)
static const uint8_t mpc8_q9up_len_counts[16]
#define avpriv_request_sample(...)
This structure stores compressed data.
#define MPC8_MAX_VLC_SIZE
static const uint8_t mpc8_scfi_syms[]
static const int8_t mpc8_idx51[125]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
VLC_TYPE(* table)[2]
code, bits