You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
Merge commit 'f76698e759a08e8d3b629c06edb0439f474e7fee'
* commit 'f76698e759a08e8d3b629c06edb0439f474e7fee': examples/encode_audio: use the AVFrame API for allocating the data Merged-by: Clément Bœsch <u@pkh.me>
This commit is contained in:
@@ -99,7 +99,6 @@ int main(int argc, char **argv)
|
|||||||
AVFrame *frame;
|
AVFrame *frame;
|
||||||
AVPacket pkt;
|
AVPacket pkt;
|
||||||
int i, j, k, ret, got_output;
|
int i, j, k, ret, got_output;
|
||||||
int buffer_size;
|
|
||||||
FILE *f;
|
FILE *f;
|
||||||
uint16_t *samples;
|
uint16_t *samples;
|
||||||
float t, tincr;
|
float t, tincr;
|
||||||
@@ -165,25 +164,10 @@ int main(int argc, char **argv)
|
|||||||
frame->format = c->sample_fmt;
|
frame->format = c->sample_fmt;
|
||||||
frame->channel_layout = c->channel_layout;
|
frame->channel_layout = c->channel_layout;
|
||||||
|
|
||||||
/* the codec gives us the frame size, in samples,
|
/* allocate the data buffers */
|
||||||
* we calculate the size of the samples buffer in bytes */
|
ret = av_frame_get_buffer(frame, 0);
|
||||||
buffer_size = av_samples_get_buffer_size(NULL, c->channels, c->frame_size,
|
|
||||||
c->sample_fmt, 0);
|
|
||||||
if (buffer_size < 0) {
|
|
||||||
fprintf(stderr, "Could not get sample buffer size\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
samples = av_malloc(buffer_size);
|
|
||||||
if (!samples) {
|
|
||||||
fprintf(stderr, "Could not allocate %d bytes for samples buffer\n",
|
|
||||||
buffer_size);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
/* setup the data pointers in the AVFrame */
|
|
||||||
ret = avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt,
|
|
||||||
(const uint8_t*)samples, buffer_size, 0);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
fprintf(stderr, "Could not setup audio frame\n");
|
fprintf(stderr, "Could not allocate audio data buffers\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,6 +179,13 @@ int main(int argc, char **argv)
|
|||||||
pkt.data = NULL; // packet data will be allocated by the encoder
|
pkt.data = NULL; // packet data will be allocated by the encoder
|
||||||
pkt.size = 0;
|
pkt.size = 0;
|
||||||
|
|
||||||
|
/* make sure the frame is writable -- makes a copy if the encoder
|
||||||
|
* kept a reference internally */
|
||||||
|
ret = av_frame_make_writable(frame);
|
||||||
|
if (ret < 0)
|
||||||
|
exit(1);
|
||||||
|
samples = (uint16_t*)frame->data[0];
|
||||||
|
|
||||||
for (j = 0; j < c->frame_size; j++) {
|
for (j = 0; j < c->frame_size; j++) {
|
||||||
samples[2*j] = (int)(sin(t) * 10000);
|
samples[2*j] = (int)(sin(t) * 10000);
|
||||||
|
|
||||||
@@ -229,7 +220,6 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
av_freep(&samples);
|
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
avcodec_free_context(&c);
|
avcodec_free_context(&c);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user