45 if (
ctx->par_in->channels <= 0 ||
ctx->par_in->sample_rate <= 0)
51 if (
s->frame_rate.num) {
54 min_samples =
s->nb_out_samples;
56 if (min_samples <= 0 || min_samples > INT_MAX /
s->sample_size - 1)
61 if (!
s->in_pkt || !
s->out_pkt)
102 if (
s->frame_rate.num) {
106 return s->nb_out_samples;
114 int data_size = nb_samples *
s->sample_size;
118 if (
s->in_pkt->size) {
119 if (
s->out_pkt->size ||
s->in_pkt->size < data_size) {
120 int drain =
FFMIN(
s->in_pkt->size, data_size -
s->out_pkt->size);
121 if (!
s->out_pkt->size) {
130 s->out_pkt->size = 0;
132 memcpy(
s->out_pkt->data +
s->out_pkt->size,
s->in_pkt->data, drain);
133 s->out_pkt->size += drain;
135 if (!
s->in_pkt->size)
137 if (
s->out_pkt->size == data_size) {
141 }
else if (
s->in_pkt->size > data_size) {
158 memset(
s->out_pkt->data +
s->out_pkt->size, 0, data_size -
s->out_pkt->size);
159 s->out_pkt->size = data_size;
161 nb_samples =
s->out_pkt->size /
s->sample_size;
173 #define OFFSET(x) offsetof(PCMContext, x)
174 #define FLAGS (AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_BSF_PARAM)
176 {
"nb_out_samples",
"set the number of per-packet output samples",
OFFSET(nb_out_samples),
AV_OPT_TYPE_INT, {.i64=1024}, 1, INT_MAX,
FLAGS },
177 {
"n",
"set the number of per-packet output samples",
OFFSET(nb_out_samples),
AV_OPT_TYPE_INT, {.i64=1024}, 1, INT_MAX,
FLAGS },
212 .
name =
"pcm_rechunk",
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt)
Called by bitstream filters to get packet for filtering.
static av_always_inline void filter(int16_t *output, ptrdiff_t out_stride, const int16_t *low, ptrdiff_t low_stride, const int16_t *high, ptrdiff_t high_stride, int len, int clip)
AVCodecID
Identify the syntax and semantics of the bitstream.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
Copy only "properties" fields from src to dst.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
void av_packet_rescale_ts(AVPacket *pkt, AVRational src_tb, AVRational dst_tb)
Convert valid timing fields (timestamps / durations) in a packet from one timebase to another.
#define AVERROR_EOF
End of file.
const char * av_default_item_name(void *ptr)
Return the context name.
static AVRational av_make_q(int num, int den)
Create an AVRational.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd)
Rescale a 64-bit integer by 2 rational numbers with specified rounding.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
@ AV_ROUND_DOWN
Round toward -infinity.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define LIBAVUTIL_VERSION_INT
static int init(AVBSFContext *ctx)
static int rechunk_filter(AVBSFContext *ctx, AVPacket *pkt)
static enum AVCodecID codec_ids[]
static const AVClass pcm_rechunk_class
static void flush(AVBSFContext *ctx)
static const AVOption options[]
static int send_packet(PCMContext *s, int nb_samples, AVPacket *pkt)
static void uninit(AVBSFContext *ctx)
static void drain_packet(AVPacket *pkt, int drain_data, int drain_samples)
static int get_next_nb_samples(AVBSFContext *ctx)
const AVBitStreamFilter ff_pcm_rechunk_bsf
The bitstream filter state.
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
void * priv_data
Format private data.
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...
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Rational number (pair of numerator and denominator).