64 av_log(avctx,
AV_LOG_ERROR,
"Too big bitrate: reduce sample rate, bitdepth or channels.\n");
69 s->samples_per_block = 1;
79 s->samples_per_block = 4 / avctx->
channels;
80 s->groups_per_block = 1;
85 s->samples_per_block = 1;
86 s->groups_per_block = 2;
92 s->samples_per_block = 4;
101 s->header[1] = (
quant << 6) | (freq << 4) | (avctx->
channels - 1);
116 int blocks = (pkt_size - 3) /
s->block_size;
117 const int16_t *src16;
125 memcpy(avpkt->
data,
s->header, 3);
135 bytestream2_put_be16(&pb, *src16++);
141 for (
int i = 2;
i;
i--) {
142 bytestream2_put_be16(&pb, src32[0] >> 16);
143 bytestream2_put_be16(&pb, src32[1] >> 16);
144 bytestream2_put_byte(&pb, (*src32++) >> 24);
145 bytestream2_put_byte(&pb, (*src32++) >> 24);
150 for (
int i =
s->groups_per_block;
i;
i--) {
151 bytestream2_put_be16(&pb, src32[0] >> 16);
152 bytestream2_put_be16(&pb, src32[1] >> 16);
153 bytestream2_put_be16(&pb, src32[2] >> 16);
154 bytestream2_put_be16(&pb, src32[3] >> 16);
155 bytestream2_put_byte(&pb, (*src32++) >> 24);
156 bytestream2_put_byte(&pb, (*src32++) >> 24);
157 bytestream2_put_byte(&pb, (*src32++) >> 24);
158 bytestream2_put_byte(&pb, (*src32++) >> 24);
166 avpkt->
size = pkt_size;
182 .supported_samplerates = (
const int[]) { 48000, 96000, 0},
Libavcodec external API header.
static av_cold int init(AVCodecContext *avctx)
static av_always_inline void bytestream2_init_writer(PutByteContext *p, uint8_t *buf, int buf_size)
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
#define AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_5POINT1
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVSampleFormat
Audio sample formats.
@ AV_SAMPLE_FMT_S32
signed 32 bits
@ AV_SAMPLE_FMT_S16
signed 16 bits
#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 av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static av_cold int pcm_dvd_encode_init(AVCodecContext *avctx)
AVCodec ff_pcm_dvd_encoder
static int pcm_dvd_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
main external API structure.
enum AVSampleFormat sample_fmt
audio sample format
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
int64_t bit_rate
the average bitrate
int sample_rate
samples per second
int channels
number of audio channels
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs.
int frame_size
Number of samples per channel in an audio frame.
const char * name
Name of the codec implementation.
This structure describes decoded (raw) audio or video data.
int nb_samples
number of audio samples (per channel) described by this frame
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
This structure stores compressed data.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...