1 /*
2 * TTA (The Lossless True Audio) encoder
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21 #define BITSTREAM_WRITER_LE
28
35
37 {
39
41
45 break;
48 break;
53 }
54
57
61
63
64 return 0;
65 }
66
69 {
71
75 const int16_t *ptr = (
const int16_t *)frame->
data[0];
76 ret = ptr[sample];
77 } else {
79 ret = ptr[sample] >> 8;
80 }
81
82 return ret;
83 }
84
87 {
90 int ret, i, out_bytes, cur_chan, res, samples;
92
93 pkt_alloc:
94 cur_chan = 0, res = 0, samples = 0;
96 return ret;
98
99 // init per channel states
100 for (i = 0; i < avctx->
channels; i++) {
104 }
105
110 uint32_t k, unary, outval;
112
114
118 else
119 value -= res / 2;
120 }
121
123 #define PRED(x, k) (int32_t)((((uint64_t)(x) << (k)) - (x)) >> (k))
126 case 2:
128 }
130
133 outval = (value > 0) ? (value << 1) - 1: -value << 1;
134
136
137 rice->
sum0 += outval - (rice->
sum0 >> 4);
142
146
147 rice->
sum1 += outval - (rice->
sum1 >> 4);
152
153 unary = 1 + (outval >> k);
155 if (pkt_size < INT_MAX/2) {
156 pkt_size *= 2;
158 goto pkt_alloc;
159 } else
161 }
162 do {
163 if (unary > 31) {
165 unary -= 31;
166 } else {
167 put_bits(&pb, unary, (1 << unary) - 1);
168 unary = 0;
169 }
170 } while (unary);
171 }
172
174
175 if (k)
177
179 cur_chan++;
180 else
181 cur_chan = 0;
182 }
183
188
190 avpkt->
size = out_bytes + 4;
192 *got_packet_ptr = 1;
193 return 0;
194 }
195
197 {
200 return 0;
201 }
202
217 };
static void av_unused put_bits32(PutBitContext *s, uint32_t value)
Write exactly 32 bits into a bitstream.
static const char * format[]
This structure describes decoded (raw) audio or video data.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define AV_LOG_WARNING
Something somehow does not look correct.
static av_cold int init(AVCodecContext *avctx)
static int32_t get_sample(const AVFrame *frame, int sample, enum AVSampleFormat format)
void ff_tta_rice_init(TTARice *c, uint32_t k0, uint32_t k1)
void(* filter_process)(int32_t *qm, int32_t *dx, int32_t *dl, int32_t *error, int32_t *in, int32_t shift, int32_t round)
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
static void filter(int16_t *output, ptrdiff_t out_stride, int16_t *low, ptrdiff_t low_stride, int16_t *high, ptrdiff_t high_stride, int len, int clip)
enum AVSampleFormat sample_fmt
audio sample format
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Public header for CRC hash function implementation.
av_cold void ff_ttaencdsp_init(TTAEncDSPContext *c)
static int put_bits_left(PutBitContext *s)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
const char * name
Name of the codec implementation.
static int put_bits_count(PutBitContext *s)
static av_cold int tta_encode_close(AVCodecContext *avctx)
const uint32_t ff_tta_shift_1[]
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
GLsizei GLboolean const GLfloat * value
const uint32_t *const ff_tta_shift_16
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
int frame_size
Number of samples per channel in an audio frame.
Libavcodec external API header.
AVSampleFormat
Audio sample formats.
int sample_rate
samples per second
const uint8_t ff_tta_filter_configs[]
main external API structure.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
common internal api header.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static av_cold int tta_encode_init(AVCodecContext *avctx)
#define AV_CODEC_CAP_LOSSLESS
Codec is lossless.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
int channels
number of audio channels
static enum AVSampleFormat sample_fmts[]
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
#define av_malloc_array(a, b)
void ff_tta_filter_init(TTAFilter *c, int32_t shift)
static int tta_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...