Note that libavcodec only handles codecs (mpeg, mpeg4, etc...), not file formats (avi, vob, mp4, mov, mkv, mxf, flv, mpegts, mpegps, etc...). See library 'libavformat' for the format handling
#include <math.h>
#define INBUF_SIZE 4096
#define AUDIO_INBUF_SIZE 20480
#define AUDIO_REFILL_THRESH 4096
{
if (*p == sample_fmt)
return 1;
p++;
}
return 0;
}
{
const int *p;
int best_samplerate = 0;
return 44100;
while (*p) {
best_samplerate =
FFMAX(*p, best_samplerate);
p++;
}
return best_samplerate;
}
{
const uint64_t *p;
uint64_t best_ch_layout = 0;
int best_nb_channels = 0;
while (*p) {
if (nb_channels > best_nb_channels) {
best_ch_layout = *p;
}
p++;
}
return best_ch_layout;
}
{
int i, j, k, ret, got_output;
int buffer_size;
FILE *f;
uint16_t *samples;
float t, tincr;
printf("Encode audio file %s\n", filename);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
if (!c) {
fprintf(stderr, "Could not allocate audio codec context\n");
exit(1);
}
fprintf(stderr, "Encoder does not support sample format %s",
exit(1);
}
fprintf(stderr, "Could not open codec\n");
exit(1);
}
f = fopen(filename, "wb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
exit(1);
}
if (!frame) {
fprintf(stderr, "Could not allocate audio frame\n");
exit(1);
}
if (buffer_size < 0) {
fprintf(stderr, "Could not get sample buffer size\n");
exit(1);
}
if (!samples) {
fprintf(stderr, "Could not allocate %d bytes for samples buffer\n",
buffer_size);
exit(1);
}
(
const uint8_t*)samples, buffer_size, 0);
if (ret < 0) {
fprintf(stderr, "Could not setup audio frame\n");
exit(1);
}
t = 0;
for (i = 0; i < 200; i++) {
samples[2*j] = (int)(sin(t) * 10000);
samples[2*j + k] = samples[2*j];
t += tincr;
}
if (ret < 0) {
fprintf(stderr, "Error encoding audio frame\n");
exit(1);
}
if (got_output) {
}
}
for (got_output = 1; got_output; i++) {
if (ret < 0) {
fprintf(stderr, "Error encoding frame\n");
exit(1);
}
if (got_output) {
}
}
fclose(f);
}
{
printf("Decode audio file %s to %s\n", filename, outfilename);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
if (!c) {
fprintf(stderr, "Could not allocate audio codec context\n");
exit(1);
}
fprintf(stderr, "Could not open codec\n");
exit(1);
}
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
exit(1);
}
outfile = fopen(outfilename, "wb");
if (!outfile) {
exit(1);
}
int i, ch;
int got_frame = 0;
if (!decoded_frame) {
fprintf(stderr, "Could not allocate audio frame\n");
exit(1);
}
}
if (len < 0) {
fprintf(stderr, "Error while decoding\n");
exit(1);
}
if (got_frame) {
if (data_size < 0) {
fprintf(stderr, "Failed to calculate data size\n");
exit(1);
}
fwrite(decoded_frame->
data[ch] + data_size*i, 1, data_size, outfile);
}
if (len > 0)
}
}
fclose(outfile);
fclose(f);
}
{
int i, ret, x, y, got_output;
FILE *f;
uint8_t endcode[] = { 0, 0, 1, 0xb7 };
printf("Encode video file %s\n", filename);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
if (!c) {
fprintf(stderr, "Could not allocate video codec context\n");
exit(1);
}
fprintf(stderr, "Could not open codec\n");
exit(1);
}
f = fopen(filename, "wb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
exit(1);
}
if (!frame) {
fprintf(stderr, "Could not allocate video frame\n");
exit(1);
}
if (ret < 0) {
fprintf(stderr, "Could not allocate raw picture buffer\n");
exit(1);
}
for (i = 0; i < 25; i++) {
fflush(stdout);
for (y = 0; y < c->
height; y++) {
for (x = 0; x < c->
width; x++) {
}
}
for (y = 0; y < c->
height/2; y++) {
for (x = 0; x < c->
width/2; x++) {
frame->
data[1][y * frame->
linesize[1] + x] = 128 + y + i * 2;
frame->
data[2][y * frame->
linesize[2] + x] = 64 + x + i * 5;
}
}
if (ret < 0) {
fprintf(stderr, "Error encoding frame\n");
exit(1);
}
if (got_output) {
printf(
"Write frame %3d (size=%5d)\n", i, pkt.
size);
}
}
for (got_output = 1; got_output; i++) {
fflush(stdout);
if (ret < 0) {
fprintf(stderr, "Error encoding frame\n");
exit(1);
}
if (got_output) {
printf(
"Write frame %3d (size=%5d)\n", i, pkt.
size);
}
}
fwrite(endcode, 1, sizeof(endcode), f);
fclose(f);
printf("\n");
}
char *filename)
{
FILE *f;
int i;
f = fopen(filename,"w");
fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);
for (i = 0; i < ysize; i++)
fwrite(buf + i * wrap, 1, xsize, f);
fclose(f);
}
{
char buf[1024];
if (len < 0) {
fprintf(stderr, "Error while decoding frame %d\n", *frame_count);
}
if (got_frame) {
printf("Saving %sframe %3d\n", last ? "last " : "", *frame_count);
fflush(stdout);
snprintf(buf,
sizeof(buf), outfilename, *frame_count);
(*frame_count)++;
}
}
return 0;
}
{
int frame_count;
FILE *f;
printf("Decode video file %s to %s\n", filename, outfilename);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
if (!c) {
fprintf(stderr, "Could not allocate video codec context\n");
exit(1);
}
fprintf(stderr, "Could not open codec\n");
exit(1);
}
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
exit(1);
}
if (!frame) {
fprintf(stderr, "Could not allocate video frame\n");
exit(1);
}
frame_count = 0;
for (;;) {
break;
exit(1);
}
fclose(f);
printf("\n");
}
int main(
int argc,
char **argv)
{
const char *output_type;
if (argc < 2) {
printf("usage: %s output_type\n"
"API example program to decode/encode a media stream with libavcodec.\n"
"This program generates a synthetic stream and encodes it to a file\n"
"named test.h264, test.mp2 or test.mpg depending on output_type.\n"
"The encoded stream is then decoded and written to a raw data output.\n"
"output_type must be chosen between 'h264', 'mp2', 'mpg'.\n",
argv[0]);
return 1;
}
output_type = argv[1];
if (!strcmp(output_type, "h264")) {
} else if (!strcmp(output_type, "mp2")) {
} else if (!strcmp(output_type, "mpg")) {
} else {
fprintf(stderr, "Invalid output type '%s', choose between 'h264', 'mp2', or 'mpg'\n",
output_type);
return 1;
}
return 0;
}