44 const void *out_config;
46 0, &out_config,
NULL);
48 fprintf(stderr,
"Error getting supported sample formats\n");
67 const void *out_config;
69 0, &out_config,
NULL);
71 fprintf(stderr,
"Error getting supported sample rates\n");
74 const int *p = out_config;
75 int best_samplerate = 0;
81 if (!best_samplerate ||
abs(44100 - *p) <
abs(44100 - best_samplerate))
85 return best_samplerate;
91 const void *out_config;
93 0, &out_config,
NULL);
95 fprintf(stderr,
"Error getting supported channel layouts\n");
99 int best_nb_channels = 0;
104 while (p->nb_channels) {
105 int nb_channels = p->nb_channels;
107 if (nb_channels > best_nb_channels) {
109 best_nb_channels = nb_channels;
124 fprintf(stderr,
"Error sending the frame to the encoder\n");
135 fprintf(stderr,
"Error encoding audio frame\n");
139 fwrite(
pkt->data, 1,
pkt->size, output);
146 const char *filename;
157 fprintf(stderr,
"Usage: %s <output file>\n", argv[0]);
165 fprintf(stderr,
"Codec not found\n");
171 fprintf(stderr,
"Could not allocate audio codec context\n");
181 fprintf(stderr,
"Encoder does not support sample format %s",
194 fprintf(stderr,
"Could not open codec\n");
198 f = fopen(filename,
"wb");
200 fprintf(stderr,
"Could not open %s\n", filename);
207 fprintf(stderr,
"could not allocate the packet\n");
214 fprintf(stderr,
"Could not allocate audio frame\n");
218 frame->nb_samples =
c->frame_size;
219 frame->format =
c->sample_fmt;
227 fprintf(stderr,
"Could not allocate audio data buffers\n");
233 tincr = 2 *
M_PI * 440.0 /
c->sample_rate;
234 for (
i = 0;
i < 200;
i++) {
240 samples = (uint16_t*)
frame->data[0];
242 for (j = 0; j <
c->frame_size; j++) {
243 samples[
c->ch_layout.nb_channels*j] = (int)(sin(t) * 10000);
245 for (k = 1; k <
c->ch_layout.nb_channels; k++)
246 samples[
c->ch_layout.nb_channels*j + k] = samples[
c->ch_layout.nb_channels*j];
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static AVFormatContext * ctx
Libavcodec external API header.
#define i(width, name, range_min, range_max)
Public libavutil channel layout APIs header.
common internal and external API header
static int select_channel_layout(const AVCodec *codec, AVChannelLayout *dst)
static void encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt, FILE *output)
static int check_sample_fmt(const AVCodec *codec, enum AVSampleFormat sample_fmt)
static int select_sample_rate(const AVCodec *codec)
reference-counted frame API
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
Read encoded data from the encoder.
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame)
Supply a raw video or audio frame to the encoder.
int avcodec_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, enum AVCodecConfig config, unsigned flags, const void **out, int *out_num)
Retrieve a list of all supported values for a given configuration type.
@ AV_CODEC_CONFIG_SAMPLE_FORMAT
AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE.
@ AV_CODEC_CONFIG_SAMPLE_RATE
int, terminated by 0
@ AV_CODEC_CONFIG_CHANNEL_LAYOUT
AVChannelLayout, terminated by {0}.
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.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
#define AV_CHANNEL_LAYOUT_STEREO
int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src)
Make a copy of a channel layout.
#define AVERROR_EOF
End of file.
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
int av_frame_make_writable(AVFrame *frame)
Ensure that the frame data is writable, avoiding data copy if possible.
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
AVSampleFormat
Audio sample formats.
@ AV_SAMPLE_FMT_S16
signed 16 bits
An AVChannelLayout holds information about the channel layout of audio data.
main external API structure.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.