summaryrefslogtreecommitdiff
path: root/ffmpeg1/doc/examples
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-09-05 17:55:35 +0100
committerTim Redfern <tim@eclectronics.org>2013-09-05 17:55:35 +0100
commit741fb4b9e135cfb161a749db88713229038577bb (patch)
tree08bc9925659cbcac45162bacf31dc6336d4f60b4 /ffmpeg1/doc/examples
parenta2e1bf3495b7bfefdaedb8fc737e969ab06df079 (diff)
making act segmenter
Diffstat (limited to 'ffmpeg1/doc/examples')
-rw-r--r--ffmpeg1/doc/examples/Makefile37
-rw-r--r--ffmpeg1/doc/examples/README18
-rw-r--r--ffmpeg1/doc/examples/decoding_encoding.c650
-rw-r--r--ffmpeg1/doc/examples/demuxing.c342
-rw-r--r--ffmpeg1/doc/examples/filtering_audio.c244
-rw-r--r--ffmpeg1/doc/examples/filtering_video.c251
-rw-r--r--ffmpeg1/doc/examples/metadata.c56
-rw-r--r--ffmpeg1/doc/examples/muxing.c508
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libavcodec.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libavdevice.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libavfilter.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libavformat.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libavutil.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libpostproc.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libswresample.pc12
-rw-r--r--ffmpeg1/doc/examples/pc-uninstalled/libswscale.pc12
-rw-r--r--ffmpeg1/doc/examples/resampling_audio.c223
-rw-r--r--ffmpeg1/doc/examples/scaling_video.c141
18 files changed, 0 insertions, 2566 deletions
diff --git a/ffmpeg1/doc/examples/Makefile b/ffmpeg1/doc/examples/Makefile
deleted file mode 100644
index c849daa..0000000
--- a/ffmpeg1/doc/examples/Makefile
+++ /dev/null
@@ -1,37 +0,0 @@
-# use pkg-config for getting CFLAGS and LDLIBS
-FFMPEG_LIBS= libavdevice \
- libavformat \
- libavfilter \
- libavcodec \
- libswresample \
- libswscale \
- libavutil \
-
-CFLAGS += -Wall -O2 -g
-CFLAGS := $(shell pkg-config --cflags $(FFMPEG_LIBS)) $(CFLAGS)
-LDLIBS := $(shell pkg-config --libs $(FFMPEG_LIBS)) $(LDLIBS)
-
-EXAMPLES= decoding_encoding \
- demuxing \
- filtering_video \
- filtering_audio \
- metadata \
- muxing \
- resampling_audio \
- scaling_video \
-
-OBJS=$(addsuffix .o,$(EXAMPLES))
-
-# the following examples make explicit use of the math library
-decoding_encoding: LDLIBS += -lm
-muxing: LDLIBS += -lm
-
-.phony: all clean-test clean
-
-all: $(OBJS) $(EXAMPLES)
-
-clean-test:
- $(RM) test*.pgm test.h264 test.mp2 test.sw test.mpg
-
-clean: clean-test
- $(RM) $(EXAMPLES) $(OBJS)
diff --git a/ffmpeg1/doc/examples/README b/ffmpeg1/doc/examples/README
deleted file mode 100644
index a461813..0000000
--- a/ffmpeg1/doc/examples/README
+++ /dev/null
@@ -1,18 +0,0 @@
-FFmpeg examples README
-----------------------
-
-Both following use cases rely on pkg-config and make, thus make sure
-that you have them installed and working on your system.
-
-
-1) Build the installed examples in a generic read/write user directory
-
-Copy to a read/write user directory and just use "make", it will link
-to the libraries on your system, assuming the PKG_CONFIG_PATH is
-correctly configured.
-
-2) Build the examples in-tree
-
-Assuming you are in the source FFmpeg checkout directory, you need to build
-FFmpeg (no need to make install in any prefix). Then you can go into the
-doc/examples and run a command such as PKG_CONFIG_PATH=pc-uninstalled make.
diff --git a/ffmpeg1/doc/examples/decoding_encoding.c b/ffmpeg1/doc/examples/decoding_encoding.c
deleted file mode 100644
index ae1057c..0000000
--- a/ffmpeg1/doc/examples/decoding_encoding.c
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * Copyright (c) 2001 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * libavcodec API use example.
- *
- * 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
- * @example doc/examples/decoding_encoding.c
- */
-
-#include <math.h>
-
-#include <libavutil/opt.h>
-#include <libavcodec/avcodec.h>
-#include <libavutil/channel_layout.h>
-#include <libavutil/common.h>
-#include <libavutil/imgutils.h>
-#include <libavutil/mathematics.h>
-#include <libavutil/samplefmt.h>
-
-#define INBUF_SIZE 4096
-#define AUDIO_INBUF_SIZE 20480
-#define AUDIO_REFILL_THRESH 4096
-
-/* check that a given sample format is supported by the encoder */
-static int check_sample_fmt(AVCodec *codec, enum AVSampleFormat sample_fmt)
-{
- const enum AVSampleFormat *p = codec->sample_fmts;
-
- while (*p != AV_SAMPLE_FMT_NONE) {
- if (*p == sample_fmt)
- return 1;
- p++;
- }
- return 0;
-}
-
-/* just pick the highest supported samplerate */
-static int select_sample_rate(AVCodec *codec)
-{
- const int *p;
- int best_samplerate = 0;
-
- if (!codec->supported_samplerates)
- return 44100;
-
- p = codec->supported_samplerates;
- while (*p) {
- best_samplerate = FFMAX(*p, best_samplerate);
- p++;
- }
- return best_samplerate;
-}
-
-/* select layout with the highest channel count */
-static int select_channel_layout(AVCodec *codec)
-{
- const uint64_t *p;
- uint64_t best_ch_layout = 0;
- int best_nb_channells = 0;
-
- if (!codec->channel_layouts)
- return AV_CH_LAYOUT_STEREO;
-
- p = codec->channel_layouts;
- while (*p) {
- int nb_channels = av_get_channel_layout_nb_channels(*p);
-
- if (nb_channels > best_nb_channells) {
- best_ch_layout = *p;
- best_nb_channells = nb_channels;
- }
- p++;
- }
- return best_ch_layout;
-}
-
-/*
- * Audio encoding example
- */
-static void audio_encode_example(const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- AVFrame *frame;
- AVPacket pkt;
- 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);
-
- /* find the MP2 encoder */
- codec = avcodec_find_encoder(AV_CODEC_ID_MP2);
- if (!codec) {
- fprintf(stderr, "Codec not found\n");
- exit(1);
- }
-
- c = avcodec_alloc_context3(codec);
- if (!c) {
- fprintf(stderr, "Could not allocate audio codec context\n");
- exit(1);
- }
-
- /* put sample parameters */
- c->bit_rate = 64000;
-
- /* check that the encoder supports s16 pcm input */
- c->sample_fmt = AV_SAMPLE_FMT_S16;
- if (!check_sample_fmt(codec, c->sample_fmt)) {
- fprintf(stderr, "Encoder does not support sample format %s",
- av_get_sample_fmt_name(c->sample_fmt));
- exit(1);
- }
-
- /* select other audio parameters supported by the encoder */
- c->sample_rate = select_sample_rate(codec);
- c->channel_layout = select_channel_layout(codec);
- c->channels = av_get_channel_layout_nb_channels(c->channel_layout);
-
- /* open it */
- if (avcodec_open2(c, codec, NULL) < 0) {
- 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);
- }
-
- /* frame containing input raw audio */
- frame = avcodec_alloc_frame();
- if (!frame) {
- fprintf(stderr, "Could not allocate audio frame\n");
- exit(1);
- }
-
- frame->nb_samples = c->frame_size;
- frame->format = c->sample_fmt;
- frame->channel_layout = c->channel_layout;
-
- /* the codec gives us the frame size, in samples,
- * we calculate the size of the samples buffer in bytes */
- buffer_size = av_samples_get_buffer_size(NULL, c->channels, c->frame_size,
- c->sample_fmt, 0);
- 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) {
- fprintf(stderr, "Could not setup audio frame\n");
- exit(1);
- }
-
- /* encode a single tone sound */
- t = 0;
- tincr = 2 * M_PI * 440.0 / c->sample_rate;
- for(i=0;i<200;i++) {
- av_init_packet(&pkt);
- pkt.data = NULL; // packet data will be allocated by the encoder
- pkt.size = 0;
-
- for (j = 0; j < c->frame_size; j++) {
- samples[2*j] = (int)(sin(t) * 10000);
-
- for (k = 1; k < c->channels; k++)
- samples[2*j + k] = samples[2*j];
- t += tincr;
- }
- /* encode the samples */
- ret = avcodec_encode_audio2(c, &pkt, frame, &got_output);
- if (ret < 0) {
- fprintf(stderr, "Error encoding audio frame\n");
- exit(1);
- }
- if (got_output) {
- fwrite(pkt.data, 1, pkt.size, f);
- av_free_packet(&pkt);
- }
- }
-
- /* get the delayed frames */
- for (got_output = 1; got_output; i++) {
- ret = avcodec_encode_audio2(c, &pkt, NULL, &got_output);
- if (ret < 0) {
- fprintf(stderr, "Error encoding frame\n");
- exit(1);
- }
-
- if (got_output) {
- fwrite(pkt.data, 1, pkt.size, f);
- av_free_packet(&pkt);
- }
- }
- fclose(f);
-
- av_freep(&samples);
- avcodec_free_frame(&frame);
- avcodec_close(c);
- av_free(c);
-}
-
-/*
- * Audio decoding.
- */
-static void audio_decode_example(const char *outfilename, const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int len;
- FILE *f, *outfile;
- uint8_t inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
- AVPacket avpkt;
- AVFrame *decoded_frame = NULL;
-
- av_init_packet(&avpkt);
-
- printf("Decode audio file %s to %s\n", filename, outfilename);
-
- /* find the mpeg audio decoder */
- codec = avcodec_find_decoder(AV_CODEC_ID_MP2);
- if (!codec) {
- fprintf(stderr, "Codec not found\n");
- exit(1);
- }
-
- c = avcodec_alloc_context3(codec);
- if (!c) {
- fprintf(stderr, "Could not allocate audio codec context\n");
- exit(1);
- }
-
- /* open it */
- if (avcodec_open2(c, codec, NULL) < 0) {
- 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) {
- av_free(c);
- exit(1);
- }
-
- /* decode until eof */
- avpkt.data = inbuf;
- avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, f);
-
- while (avpkt.size > 0) {
- int got_frame = 0;
-
- if (!decoded_frame) {
- if (!(decoded_frame = avcodec_alloc_frame())) {
- fprintf(stderr, "Could not allocate audio frame\n");
- exit(1);
- }
- } else
- avcodec_get_frame_defaults(decoded_frame);
-
- len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &avpkt);
- if (len < 0) {
- fprintf(stderr, "Error while decoding\n");
- exit(1);
- }
- if (got_frame) {
- /* if a frame has been decoded, output it */
- int data_size = av_samples_get_buffer_size(NULL, c->channels,
- decoded_frame->nb_samples,
- c->sample_fmt, 1);
- fwrite(decoded_frame->data[0], 1, data_size, outfile);
- }
- avpkt.size -= len;
- avpkt.data += len;
- avpkt.dts =
- avpkt.pts = AV_NOPTS_VALUE;
- if (avpkt.size < AUDIO_REFILL_THRESH) {
- /* Refill the input buffer, to avoid trying to decode
- * incomplete frames. Instead of this, one could also use
- * a parser, or use a proper container format through
- * libavformat. */
- memmove(inbuf, avpkt.data, avpkt.size);
- avpkt.data = inbuf;
- len = fread(avpkt.data + avpkt.size, 1,
- AUDIO_INBUF_SIZE - avpkt.size, f);
- if (len > 0)
- avpkt.size += len;
- }
- }
-
- fclose(outfile);
- fclose(f);
-
- avcodec_close(c);
- av_free(c);
- avcodec_free_frame(&decoded_frame);
-}
-
-/*
- * Video encoding example
- */
-static void video_encode_example(const char *filename, int codec_id)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int i, ret, x, y, got_output;
- FILE *f;
- AVFrame *frame;
- AVPacket pkt;
- uint8_t endcode[] = { 0, 0, 1, 0xb7 };
-
- printf("Encode video file %s\n", filename);
-
- /* find the mpeg1 video encoder */
- codec = avcodec_find_encoder(codec_id);
- if (!codec) {
- fprintf(stderr, "Codec not found\n");
- exit(1);
- }
-
- c = avcodec_alloc_context3(codec);
- if (!c) {
- fprintf(stderr, "Could not allocate video codec context\n");
- exit(1);
- }
-
- /* put sample parameters */
- c->bit_rate = 400000;
- /* resolution must be a multiple of two */
- c->width = 352;
- c->height = 288;
- /* frames per second */
- c->time_base= (AVRational){1,25};
- c->gop_size = 10; /* emit one intra frame every ten frames */
- c->max_b_frames=1;
- c->pix_fmt = AV_PIX_FMT_YUV420P;
-
- if(codec_id == AV_CODEC_ID_H264)
- av_opt_set(c->priv_data, "preset", "slow", 0);
-
- /* open it */
- if (avcodec_open2(c, codec, NULL) < 0) {
- 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);
- }
-
- frame = avcodec_alloc_frame();
- if (!frame) {
- fprintf(stderr, "Could not allocate video frame\n");
- exit(1);
- }
- frame->format = c->pix_fmt;
- frame->width = c->width;
- frame->height = c->height;
-
- /* the image can be allocated by any means and av_image_alloc() is
- * just the most convenient way if av_malloc() is to be used */
- ret = av_image_alloc(frame->data, frame->linesize, c->width, c->height,
- c->pix_fmt, 32);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate raw picture buffer\n");
- exit(1);
- }
-
- /* encode 1 second of video */
- for(i=0;i<25;i++) {
- av_init_packet(&pkt);
- pkt.data = NULL; // packet data will be allocated by the encoder
- pkt.size = 0;
-
- fflush(stdout);
- /* prepare a dummy image */
- /* Y */
- for(y=0;y<c->height;y++) {
- for(x=0;x<c->width;x++) {
- frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3;
- }
- }
-
- /* Cb and Cr */
- 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;
- }
- }
-
- frame->pts = i;
-
- /* encode the image */
- ret = avcodec_encode_video2(c, &pkt, frame, &got_output);
- 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(pkt.data, 1, pkt.size, f);
- av_free_packet(&pkt);
- }
- }
-
- /* get the delayed frames */
- for (got_output = 1; got_output; i++) {
- fflush(stdout);
-
- ret = avcodec_encode_video2(c, &pkt, NULL, &got_output);
- 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(pkt.data, 1, pkt.size, f);
- av_free_packet(&pkt);
- }
- }
-
- /* add sequence end code to have a real mpeg file */
- fwrite(endcode, 1, sizeof(endcode), f);
- fclose(f);
-
- avcodec_close(c);
- av_free(c);
- av_freep(&frame->data[0]);
- avcodec_free_frame(&frame);
- printf("\n");
-}
-
-/*
- * Video decoding example
- */
-
-static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,
- 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);
-}
-
-static int decode_write_frame(const char *outfilename, AVCodecContext *avctx,
- AVFrame *frame, int *frame_count, AVPacket *pkt, int last)
-{
- int len, got_frame;
- char buf[1024];
-
- len = avcodec_decode_video2(avctx, frame, &got_frame, pkt);
- if (len < 0) {
- fprintf(stderr, "Error while decoding frame %d\n", *frame_count);
- return len;
- }
- if (got_frame) {
- printf("Saving %sframe %3d\n", last ? "last " : "", *frame_count);
- fflush(stdout);
-
- /* the picture is allocated by the decoder, no need to free it */
- snprintf(buf, sizeof(buf), outfilename, *frame_count);
- pgm_save(frame->data[0], frame->linesize[0],
- avctx->width, avctx->height, buf);
- (*frame_count)++;
- }
- if (pkt->data) {
- pkt->size -= len;
- pkt->data += len;
- }
- return 0;
-}
-
-static void video_decode_example(const char *outfilename, const char *filename)
-{
- AVCodec *codec;
- AVCodecContext *c= NULL;
- int frame_count;
- FILE *f;
- AVFrame *frame;
- uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
- AVPacket avpkt;
-
- av_init_packet(&avpkt);
-
- /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
- memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-
- printf("Decode video file %s to %s\n", filename, outfilename);
-
- /* find the mpeg1 video decoder */
- codec = avcodec_find_decoder(AV_CODEC_ID_MPEG1VIDEO);
- if (!codec) {
- fprintf(stderr, "Codec not found\n");
- exit(1);
- }
-
- c = avcodec_alloc_context3(codec);
- if (!c) {
- fprintf(stderr, "Could not allocate video codec context\n");
- exit(1);
- }
-
- if(codec->capabilities&CODEC_CAP_TRUNCATED)
- c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */
-
- /* For some codecs, such as msmpeg4 and mpeg4, width and height
- MUST be initialized there because this information is not
- available in the bitstream. */
-
- /* open it */
- if (avcodec_open2(c, codec, NULL) < 0) {
- 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);
- }
-
- frame = avcodec_alloc_frame();
- if (!frame) {
- fprintf(stderr, "Could not allocate video frame\n");
- exit(1);
- }
-
- frame_count = 0;
- for(;;) {
- avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);
- if (avpkt.size == 0)
- break;
-
- /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
- and this is the only method to use them because you cannot
- know the compressed data size before analysing it.
-
- BUT some other codecs (msmpeg4, mpeg4) are inherently frame
- based, so you must call them with all the data for one
- frame exactly. You must also initialize 'width' and
- 'height' before initializing them. */
-
- /* NOTE2: some codecs allow the raw parameters (frame size,
- sample rate) to be changed at any frame. We handle this, so
- you should also take care of it */
-
- /* here, we use a stream based decoder (mpeg1video), so we
- feed decoder and see if it could decode a frame */
- avpkt.data = inbuf;
- while (avpkt.size > 0)
- if (decode_write_frame(outfilename, c, frame, &frame_count, &avpkt, 0) < 0)
- exit(1);
- }
-
- /* some codecs, such as MPEG, transmit the I and P frame with a
- latency of one frame. You must do the following to have a
- chance to get the last frame of the video */
- avpkt.data = NULL;
- avpkt.size = 0;
- decode_write_frame(outfilename, c, frame, &frame_count, &avpkt, 1);
-
- fclose(f);
-
- avcodec_close(c);
- av_free(c);
- avcodec_free_frame(&frame);
- printf("\n");
-}
-
-int main(int argc, char **argv)
-{
- const char *output_type;
-
- /* register all the codecs */
- avcodec_register_all();
-
- 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 choosen between 'h264', 'mp2', 'mpg'.\n",
- argv[0]);
- return 1;
- }
- output_type = argv[1];
-
- if (!strcmp(output_type, "h264")) {
- video_encode_example("test.h264", AV_CODEC_ID_H264);
- } else if (!strcmp(output_type, "mp2")) {
- audio_encode_example("test.mp2");
- audio_decode_example("test.sw", "test.mp2");
- } else if (!strcmp(output_type, "mpg")) {
- video_encode_example("test.mpg", AV_CODEC_ID_MPEG1VIDEO);
- video_decode_example("test%02d.pgm", "test.mpg");
- } else {
- fprintf(stderr, "Invalid output type '%s', choose between 'h264', 'mp2', or 'mpg'\n",
- output_type);
- return 1;
- }
-
- return 0;
-}
diff --git a/ffmpeg1/doc/examples/demuxing.c b/ffmpeg1/doc/examples/demuxing.c
deleted file mode 100644
index 8a1b69b..0000000
--- a/ffmpeg1/doc/examples/demuxing.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright (c) 2012 Stefano Sabatini
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * libavformat demuxing API use example.
- *
- * Show how to use the libavformat and libavcodec API to demux and
- * decode audio and video data.
- * @example doc/examples/demuxing.c
- */
-
-#include <libavutil/imgutils.h>
-#include <libavutil/samplefmt.h>
-#include <libavutil/timestamp.h>
-#include <libavformat/avformat.h>
-
-static AVFormatContext *fmt_ctx = NULL;
-static AVCodecContext *video_dec_ctx = NULL, *audio_dec_ctx;
-static AVStream *video_stream = NULL, *audio_stream = NULL;
-static const char *src_filename = NULL;
-static const char *video_dst_filename = NULL;
-static const char *audio_dst_filename = NULL;
-static FILE *video_dst_file = NULL;
-static FILE *audio_dst_file = NULL;
-
-static uint8_t *video_dst_data[4] = {NULL};
-static int video_dst_linesize[4];
-static int video_dst_bufsize;
-
-static uint8_t **audio_dst_data = NULL;
-static int audio_dst_linesize;
-static int audio_dst_bufsize;
-
-static int video_stream_idx = -1, audio_stream_idx = -1;
-static AVFrame *frame = NULL;
-static AVPacket pkt;
-static int video_frame_count = 0;
-static int audio_frame_count = 0;
-
-static int decode_packet(int *got_frame, int cached)
-{
- int ret = 0;
-
- if (pkt.stream_index == video_stream_idx) {
- /* decode video frame */
- ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
- if (ret < 0) {
- fprintf(stderr, "Error decoding video frame\n");
- return ret;
- }
-
- if (*got_frame) {
- printf("video_frame%s n:%d coded_n:%d pts:%s\n",
- cached ? "(cached)" : "",
- video_frame_count++, frame->coded_picture_number,
- av_ts2timestr(frame->pts, &video_dec_ctx->time_base));
-
- /* copy decoded frame to destination buffer:
- * this is required since rawvideo expects non aligned data */
- av_image_copy(video_dst_data, video_dst_linesize,
- (const uint8_t **)(frame->data), frame->linesize,
- video_dec_ctx->pix_fmt, video_dec_ctx->width, video_dec_ctx->height);
-
- /* write to rawvideo file */
- fwrite(video_dst_data[0], 1, video_dst_bufsize, video_dst_file);
- }
- } else if (pkt.stream_index == audio_stream_idx) {
- /* decode audio frame */
- ret = avcodec_decode_audio4(audio_dec_ctx, frame, got_frame, &pkt);
- if (ret < 0) {
- fprintf(stderr, "Error decoding audio frame\n");
- return ret;
- }
-
- if (*got_frame) {
- printf("audio_frame%s n:%d nb_samples:%d pts:%s\n",
- cached ? "(cached)" : "",
- audio_frame_count++, frame->nb_samples,
- av_ts2timestr(frame->pts, &audio_dec_ctx->time_base));
-
- ret = av_samples_alloc(audio_dst_data, &audio_dst_linesize, av_frame_get_channels(frame),
- frame->nb_samples, frame->format, 1);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate audio buffer\n");
- return AVERROR(ENOMEM);
- }
-
- /* TODO: extend return code of the av_samples_* functions so that this call is not needed */
- audio_dst_bufsize =
- av_samples_get_buffer_size(NULL, av_frame_get_channels(frame),
- frame->nb_samples, frame->format, 1);
-
- /* copy audio data to destination buffer:
- * this is required since rawaudio expects non aligned data */
- av_samples_copy(audio_dst_data, frame->data, 0, 0,
- frame->nb_samples, av_frame_get_channels(frame), frame->format);
-
- /* write to rawaudio file */
- fwrite(audio_dst_data[0], 1, audio_dst_bufsize, audio_dst_file);
- av_freep(&audio_dst_data[0]);
- }
- }
-
- return ret;
-}
-
-static int open_codec_context(int *stream_idx,
- AVFormatContext *fmt_ctx, enum AVMediaType type)
-{
- int ret;
- AVStream *st;
- AVCodecContext *dec_ctx = NULL;
- AVCodec *dec = NULL;
-
- ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0);
- if (ret < 0) {
- fprintf(stderr, "Could not find %s stream in input file '%s'\n",
- av_get_media_type_string(type), src_filename);
- return ret;
- } else {
- *stream_idx = ret;
- st = fmt_ctx->streams[*stream_idx];
-
- /* find decoder for the stream */
- dec_ctx = st->codec;
- dec = avcodec_find_decoder(dec_ctx->codec_id);
- if (!dec) {
- fprintf(stderr, "Failed to find %s codec\n",
- av_get_media_type_string(type));
- return ret;
- }
-
- if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
- fprintf(stderr, "Failed to open %s codec\n",
- av_get_media_type_string(type));
- return ret;
- }
- }
-
- return 0;
-}
-
-static int get_format_from_sample_fmt(const char **fmt,
- enum AVSampleFormat sample_fmt)
-{
- int i;
- struct sample_fmt_entry {
- enum AVSampleFormat sample_fmt; const char *fmt_be, *fmt_le;
- } sample_fmt_entries[] = {
- { AV_SAMPLE_FMT_U8, "u8", "u8" },
- { AV_SAMPLE_FMT_S16, "s16be", "s16le" },
- { AV_SAMPLE_FMT_S32, "s32be", "s32le" },
- { AV_SAMPLE_FMT_FLT, "f32be", "f32le" },
- { AV_SAMPLE_FMT_DBL, "f64be", "f64le" },
- };
- *fmt = NULL;
-
- for (i = 0; i < FF_ARRAY_ELEMS(sample_fmt_entries); i++) {
- struct sample_fmt_entry *entry = &sample_fmt_entries[i];
- if (sample_fmt == entry->sample_fmt) {
- *fmt = AV_NE(entry->fmt_be, entry->fmt_le);
- return 0;
- }
- }
-
- fprintf(stderr,
- "sample format %s is not supported as output format\n",
- av_get_sample_fmt_name(sample_fmt));
- return -1;
-}
-
-int main (int argc, char **argv)
-{
- int ret = 0, got_frame;
-
- if (argc != 4) {
- fprintf(stderr, "usage: %s input_file video_output_file audio_output_file\n"
- "API example program to show how to read frames from an input file.\n"
- "This program reads frames from a file, decodes them, and writes decoded\n"
- "video frames to a rawvideo file named video_output_file, and decoded\n"
- "audio frames to a rawaudio file named audio_output_file.\n"
- "\n", argv[0]);
- exit(1);
- }
- src_filename = argv[1];
- video_dst_filename = argv[2];
- audio_dst_filename = argv[3];
-
- /* register all formats and codecs */
- av_register_all();
-
- /* open input file, and allocate format context */
- if (avformat_open_input(&fmt_ctx, src_filename, NULL, NULL) < 0) {
- fprintf(stderr, "Could not open source file %s\n", src_filename);
- exit(1);
- }
-
- /* retrieve stream information */
- if (avformat_find_stream_info(fmt_ctx, NULL) < 0) {
- fprintf(stderr, "Could not find stream information\n");
- exit(1);
- }
-
- if (open_codec_context(&video_stream_idx, fmt_ctx, AVMEDIA_TYPE_VIDEO) >= 0) {
- video_stream = fmt_ctx->streams[video_stream_idx];
- video_dec_ctx = video_stream->codec;
-
- video_dst_file = fopen(video_dst_filename, "wb");
- if (!video_dst_file) {
- fprintf(stderr, "Could not open destination file %s\n", video_dst_filename);
- ret = 1;
- goto end;
- }
-
- /* allocate image where the decoded image will be put */
- ret = av_image_alloc(video_dst_data, video_dst_linesize,
- video_dec_ctx->width, video_dec_ctx->height,
- video_dec_ctx->pix_fmt, 1);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate raw video buffer\n");
- goto end;
- }
- video_dst_bufsize = ret;
- }
-
- if (open_codec_context(&audio_stream_idx, fmt_ctx, AVMEDIA_TYPE_AUDIO) >= 0) {
- int nb_planes;
-
- audio_stream = fmt_ctx->streams[audio_stream_idx];
- audio_dec_ctx = audio_stream->codec;
- audio_dst_file = fopen(audio_dst_filename, "wb");
- if (!audio_dst_file) {
- fprintf(stderr, "Could not open destination file %s\n", video_dst_filename);
- ret = 1;
- goto end;
- }
-
- nb_planes = av_sample_fmt_is_planar(audio_dec_ctx->sample_fmt) ?
- audio_dec_ctx->channels : 1;
- audio_dst_data = av_mallocz(sizeof(uint8_t *) * nb_planes);
- if (!audio_dst_data) {
- fprintf(stderr, "Could not allocate audio data buffers\n");
- ret = AVERROR(ENOMEM);
- goto end;
- }
- }
-
- /* dump input information to stderr */
- av_dump_format(fmt_ctx, 0, src_filename, 0);
-
- if (!audio_stream && !video_stream) {
- fprintf(stderr, "Could not find audio or video stream in the input, aborting\n");
- ret = 1;
- goto end;
- }
-
- frame = avcodec_alloc_frame();
- if (!frame) {
- fprintf(stderr, "Could not allocate frame\n");
- ret = AVERROR(ENOMEM);
- goto end;
- }
-
- /* initialize packet, set data to NULL, let the demuxer fill it */
- av_init_packet(&pkt);
- pkt.data = NULL;
- pkt.size = 0;
-
- if (video_stream)
- printf("Demuxing video from file '%s' into '%s'\n", src_filename, video_dst_filename);
- if (audio_stream)
- printf("Demuxing audio from file '%s' into '%s'\n", src_filename, audio_dst_filename);
-
- /* read frames from the file */
- while (av_read_frame(fmt_ctx, &pkt) >= 0) {
- decode_packet(&got_frame, 0);
- av_free_packet(&pkt);
- }
-
- /* flush cached frames */
- pkt.data = NULL;
- pkt.size = 0;
- do {
- decode_packet(&got_frame, 1);
- } while (got_frame);
-
- printf("Demuxing succeeded.\n");
-
- if (video_stream) {
- printf("Play the output video file with the command:\n"
- "ffplay -f rawvideo -pix_fmt %s -video_size %dx%d %s\n",
- av_get_pix_fmt_name(video_dec_ctx->pix_fmt), video_dec_ctx->width, video_dec_ctx->height,
- video_dst_filename);
- }
-
- if (audio_stream) {
- const char *fmt;
-
- if ((ret = get_format_from_sample_fmt(&fmt, audio_dec_ctx->sample_fmt)) < 0)
- goto end;
- printf("Play the output audio file with the command:\n"
- "ffplay -f %s -ac %d -ar %d %s\n",
- fmt, audio_dec_ctx->channels, audio_dec_ctx->sample_rate,
- audio_dst_filename);
- }
-
-end:
- if (video_dec_ctx)
- avcodec_close(video_dec_ctx);
- if (audio_dec_ctx)
- avcodec_close(audio_dec_ctx);
- avformat_close_input(&fmt_ctx);
- if (video_dst_file)
- fclose(video_dst_file);
- if (audio_dst_file)
- fclose(audio_dst_file);
- av_free(frame);
- av_free(video_dst_data[0]);
- av_free(audio_dst_data);
-
- return ret < 0;
-}
diff --git a/ffmpeg1/doc/examples/filtering_audio.c b/ffmpeg1/doc/examples/filtering_audio.c
deleted file mode 100644
index 456a1c9..0000000
--- a/ffmpeg1/doc/examples/filtering_audio.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (c) 2010 Nicolas George
- * Copyright (c) 2011 Stefano Sabatini
- * Copyright (c) 2012 Clément Bœsch
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * API example for audio decoding and filtering
- * @example doc/examples/filtering_audio.c
- */
-
-#include <unistd.h>
-
-#include <libavcodec/avcodec.h>
-#include <libavformat/avformat.h>
-#include <libavfilter/avfiltergraph.h>
-#include <libavfilter/avcodec.h>
-#include <libavfilter/buffersink.h>
-#include <libavfilter/buffersrc.h>
-
-const char *filter_descr = "aresample=8000,aconvert=s16:mono";
-const char *player = "ffplay -f s16le -ar 8000 -ac 1 -";
-
-static AVFormatContext *fmt_ctx;
-static AVCodecContext *dec_ctx;
-AVFilterContext *buffersink_ctx;
-AVFilterContext *buffersrc_ctx;
-AVFilterGraph *filter_graph;
-static int audio_stream_index = -1;
-
-static int open_input_file(const char *filename)
-{
- int ret;
- AVCodec *dec;
-
- if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
- return ret;
- }
-
- if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
- return ret;
- }
-
- /* select the audio stream */
- ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot find a audio stream in the input file\n");
- return ret;
- }
- audio_stream_index = ret;
- dec_ctx = fmt_ctx->streams[audio_stream_index]->codec;
-
- /* init the audio decoder */
- if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
- return ret;
- }
-
- return 0;
-}
-
-static int init_filters(const char *filters_descr)
-{
- char args[512];
- int ret;
- AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
- AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
- AVFilterInOut *outputs = avfilter_inout_alloc();
- AVFilterInOut *inputs = avfilter_inout_alloc();
- const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_S16, -1 };
- AVABufferSinkParams *abuffersink_params;
- const AVFilterLink *outlink;
- AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
-
- filter_graph = avfilter_graph_alloc();
-
- /* buffer audio source: the decoded frames from the decoder will be inserted here. */
- if (!dec_ctx->channel_layout)
- dec_ctx->channel_layout = av_get_default_channel_layout(dec_ctx->channels);
- snprintf(args, sizeof(args),
- "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%"PRIx64,
- time_base.num, time_base.den, dec_ctx->sample_rate,
- av_get_sample_fmt_name(dec_ctx->sample_fmt), dec_ctx->channel_layout);
- ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
- args, NULL, filter_graph);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
- return ret;
- }
-
- /* buffer audio sink: to terminate the filter chain. */
- abuffersink_params = av_abuffersink_params_alloc();
- abuffersink_params->sample_fmts = sample_fmts;
- ret = avfilter_graph_create_filter(&buffersink_ctx, abuffersink, "out",
- NULL, abuffersink_params, filter_graph);
- av_free(abuffersink_params);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
- return ret;
- }
-
- /* Endpoints for the filter graph. */
- outputs->name = av_strdup("in");
- outputs->filter_ctx = buffersrc_ctx;
- outputs->pad_idx = 0;
- outputs->next = NULL;
-
- inputs->name = av_strdup("out");
- inputs->filter_ctx = buffersink_ctx;
- inputs->pad_idx = 0;
- inputs->next = NULL;
-
- if ((ret = avfilter_graph_parse(filter_graph, filters_descr,
- &inputs, &outputs, NULL)) < 0)
- return ret;
-
- if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
- return ret;
-
- /* Print summary of the sink buffer
- * Note: args buffer is reused to store channel layout string */
- outlink = buffersink_ctx->inputs[0];
- av_get_channel_layout_string(args, sizeof(args), -1, outlink->channel_layout);
- av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
- (int)outlink->sample_rate,
- (char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
- args);
-
- return 0;
-}
-
-static void print_frame(const AVFrame *frame)
-{
- const int n = frame->nb_samples * av_get_channel_layout_nb_channels(av_frame_get_channel_layout(frame));
- const uint16_t *p = (uint16_t*)frame->data[0];
- const uint16_t *p_end = p + n;
-
- while (p < p_end) {
- fputc(*p & 0xff, stdout);
- fputc(*p>>8 & 0xff, stdout);
- p++;
- }
- fflush(stdout);
-}
-
-int main(int argc, char **argv)
-{
- int ret;
- AVPacket packet;
- AVFrame *frame = av_frame_alloc();
- AVFrame *filt_frame = av_frame_alloc();
- int got_frame;
-
- if (!frame || !filt_frame) {
- perror("Could not allocate frame");
- exit(1);
- }
- if (argc != 2) {
- fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
- exit(1);
- }
-
- avcodec_register_all();
- av_register_all();
- avfilter_register_all();
-
- if ((ret = open_input_file(argv[1])) < 0)
- goto end;
- if ((ret = init_filters(filter_descr)) < 0)
- goto end;
-
- /* read all packets */
- while (1) {
- if ((ret = av_read_frame(fmt_ctx, &packet)) < 0)
- break;
-
- if (packet.stream_index == audio_stream_index) {
- avcodec_get_frame_defaults(frame);
- got_frame = 0;
- ret = avcodec_decode_audio4(dec_ctx, frame, &got_frame, &packet);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error decoding audio\n");
- continue;
- }
-
- if (got_frame) {
- /* push the audio data from decoded frame into the filtergraph */
- if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
- break;
- }
-
- /* pull filtered audio from the filtergraph */
- while (1) {
- ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
- if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
- break;
- if(ret < 0)
- goto end;
- print_frame(filt_frame);
- av_frame_unref(filt_frame);
- }
- }
- }
- av_free_packet(&packet);
- }
-end:
- avfilter_graph_free(&filter_graph);
- if (dec_ctx)
- avcodec_close(dec_ctx);
- avformat_close_input(&fmt_ctx);
- av_frame_free(&frame);
- av_frame_free(&filt_frame);
-
- if (ret < 0 && ret != AVERROR_EOF) {
- char buf[1024];
- av_strerror(ret, buf, sizeof(buf));
- fprintf(stderr, "Error occurred: %s\n", buf);
- exit(1);
- }
-
- exit(0);
-}
diff --git a/ffmpeg1/doc/examples/filtering_video.c b/ffmpeg1/doc/examples/filtering_video.c
deleted file mode 100644
index daa3966..0000000
--- a/ffmpeg1/doc/examples/filtering_video.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2010 Nicolas George
- * Copyright (c) 2011 Stefano Sabatini
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * API example for decoding and filtering
- * @example doc/examples/filtering_video.c
- */
-
-#define _XOPEN_SOURCE 600 /* for usleep */
-#include <unistd.h>
-
-#include <libavcodec/avcodec.h>
-#include <libavformat/avformat.h>
-#include <libavfilter/avfiltergraph.h>
-#include <libavfilter/avcodec.h>
-#include <libavfilter/buffersink.h>
-#include <libavfilter/buffersrc.h>
-
-const char *filter_descr = "scale=78:24";
-
-static AVFormatContext *fmt_ctx;
-static AVCodecContext *dec_ctx;
-AVFilterContext *buffersink_ctx;
-AVFilterContext *buffersrc_ctx;
-AVFilterGraph *filter_graph;
-static int video_stream_index = -1;
-static int64_t last_pts = AV_NOPTS_VALUE;
-
-static int open_input_file(const char *filename)
-{
- int ret;
- AVCodec *dec;
-
- if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
- return ret;
- }
-
- if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
- return ret;
- }
-
- /* select the video stream */
- ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");
- return ret;
- }
- video_stream_index = ret;
- dec_ctx = fmt_ctx->streams[video_stream_index]->codec;
-
- /* init the video decoder */
- if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");
- return ret;
- }
-
- return 0;
-}
-
-static int init_filters(const char *filters_descr)
-{
- char args[512];
- int ret;
- AVFilter *buffersrc = avfilter_get_by_name("buffer");
- AVFilter *buffersink = avfilter_get_by_name("buffersink");
- AVFilterInOut *outputs = avfilter_inout_alloc();
- AVFilterInOut *inputs = avfilter_inout_alloc();
- enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE };
- AVBufferSinkParams *buffersink_params;
-
- filter_graph = avfilter_graph_alloc();
-
- /* buffer video source: the decoded frames from the decoder will be inserted here. */
- snprintf(args, sizeof(args),
- "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
- dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,
- dec_ctx->time_base.num, dec_ctx->time_base.den,
- dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
-
- ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in",
- args, NULL, filter_graph);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");
- return ret;
- }
-
- /* buffer video sink: to terminate the filter chain. */
- buffersink_params = av_buffersink_params_alloc();
- buffersink_params->pixel_fmts = pix_fmts;
- ret = avfilter_graph_create_filter(&buffersink_ctx, buffersink, "out",
- NULL, buffersink_params, filter_graph);
- av_free(buffersink_params);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");
- return ret;
- }
-
- /* Endpoints for the filter graph. */
- outputs->name = av_strdup("in");
- outputs->filter_ctx = buffersrc_ctx;
- outputs->pad_idx = 0;
- outputs->next = NULL;
-
- inputs->name = av_strdup("out");
- inputs->filter_ctx = buffersink_ctx;
- inputs->pad_idx = 0;
- inputs->next = NULL;
-
- if ((ret = avfilter_graph_parse(filter_graph, filters_descr,
- &inputs, &outputs, NULL)) < 0)
- return ret;
-
- if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
- return ret;
- return 0;
-}
-
-static void display_frame(const AVFrame *frame, AVRational time_base)
-{
- int x, y;
- uint8_t *p0, *p;
- int64_t delay;
-
- if (frame->pts != AV_NOPTS_VALUE) {
- if (last_pts != AV_NOPTS_VALUE) {
- /* sleep roughly the right amount of time;
- * usleep is in microseconds, just like AV_TIME_BASE. */
- delay = av_rescale_q(frame->pts - last_pts,
- time_base, AV_TIME_BASE_Q);
- if (delay > 0 && delay < 1000000)
- usleep(delay);
- }
- last_pts = frame->pts;
- }
-
- /* Trivial ASCII grayscale display. */
- p0 = frame->data[0];
- puts("\033c");
- for (y = 0; y < frame->height; y++) {
- p = p0;
- for (x = 0; x < frame->width; x++)
- putchar(" .-+#"[*(p++) / 52]);
- putchar('\n');
- p0 += frame->linesize[0];
- }
- fflush(stdout);
-}
-
-int main(int argc, char **argv)
-{
- int ret;
- AVPacket packet;
- AVFrame *frame = av_frame_alloc();
- AVFrame *filt_frame = av_frame_alloc();
- int got_frame;
-
- if (!frame || !filt_frame) {
- perror("Could not allocate frame");
- exit(1);
- }
- if (argc != 2) {
- fprintf(stderr, "Usage: %s file\n", argv[0]);
- exit(1);
- }
-
- avcodec_register_all();
- av_register_all();
- avfilter_register_all();
-
- if ((ret = open_input_file(argv[1])) < 0)
- goto end;
- if ((ret = init_filters(filter_descr)) < 0)
- goto end;
-
- /* read all packets */
- while (1) {
- if ((ret = av_read_frame(fmt_ctx, &packet)) < 0)
- break;
-
- if (packet.stream_index == video_stream_index) {
- avcodec_get_frame_defaults(frame);
- got_frame = 0;
- ret = avcodec_decode_video2(dec_ctx, frame, &got_frame, &packet);
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error decoding video\n");
- break;
- }
-
- if (got_frame) {
- frame->pts = av_frame_get_best_effort_timestamp(frame);
-
- /* push the decoded frame into the filtergraph */
- if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n");
- break;
- }
-
- /* pull filtered frames from the filtergraph */
- while (1) {
- ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
- break;
- if (ret < 0)
- goto end;
- display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
- av_frame_unref(filt_frame);
- }
- }
- }
- av_free_packet(&packet);
- }
-end:
- avfilter_graph_free(&filter_graph);
- if (dec_ctx)
- avcodec_close(dec_ctx);
- avformat_close_input(&fmt_ctx);
- av_frame_free(&frame);
- av_frame_free(&filt_frame);
-
- if (ret < 0 && ret != AVERROR_EOF) {
- char buf[1024];
- av_strerror(ret, buf, sizeof(buf));
- fprintf(stderr, "Error occurred: %s\n", buf);
- exit(1);
- }
-
- exit(0);
-}
diff --git a/ffmpeg1/doc/examples/metadata.c b/ffmpeg1/doc/examples/metadata.c
deleted file mode 100644
index 9c1bcd7..0000000
--- a/ffmpeg1/doc/examples/metadata.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2011 Reinhard Tartler
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * Shows how the metadata API can be used in application programs.
- * @example doc/examples/metadata.c
- */
-
-#include <stdio.h>
-
-#include <libavformat/avformat.h>
-#include <libavutil/dict.h>
-
-int main (int argc, char **argv)
-{
- AVFormatContext *fmt_ctx = NULL;
- AVDictionaryEntry *tag = NULL;
- int ret;
-
- if (argc != 2) {
- printf("usage: %s <input_file>\n"
- "example program to demonstrate the use of the libavformat metadata API.\n"
- "\n", argv[0]);
- return 1;
- }
-
- av_register_all();
- if ((ret = avformat_open_input(&fmt_ctx, argv[1], NULL, NULL)))
- return ret;
-
- while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
- printf("%s=%s\n", tag->key, tag->value);
-
- avformat_close_input(&fmt_ctx);
- return 0;
-}
diff --git a/ffmpeg1/doc/examples/muxing.c b/ffmpeg1/doc/examples/muxing.c
deleted file mode 100644
index 7305cc6..0000000
--- a/ffmpeg1/doc/examples/muxing.c
+++ /dev/null
@@ -1,508 +0,0 @@
-/*
- * Copyright (c) 2003 Fabrice Bellard
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * libavformat API example.
- *
- * Output a media file in any supported libavformat format.
- * The default codecs are used.
- * @example doc/examples/muxing.c
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-
-#include <libavutil/mathematics.h>
-#include <libavformat/avformat.h>
-#include <libswscale/swscale.h>
-
-/* 5 seconds stream duration */
-#define STREAM_DURATION 200.0
-#define STREAM_FRAME_RATE 25 /* 25 images/s */
-#define STREAM_NB_FRAMES ((int)(STREAM_DURATION * STREAM_FRAME_RATE))
-#define STREAM_PIX_FMT AV_PIX_FMT_YUV420P /* default pix_fmt */
-
-static int sws_flags = SWS_BICUBIC;
-
-/**************************************************************/
-/* audio output */
-
-static float t, tincr, tincr2;
-static int16_t *samples;
-static int audio_input_frame_size;
-
-/* Add an output stream. */
-static AVStream *add_stream(AVFormatContext *oc, AVCodec **codec,
- enum AVCodecID codec_id)
-{
- AVCodecContext *c;
- AVStream *st;
-
- /* find the encoder */
- *codec = avcodec_find_encoder(codec_id);
- if (!(*codec)) {
- fprintf(stderr, "Could not find encoder for '%s'\n",
- avcodec_get_name(codec_id));
- exit(1);
- }
-
- st = avformat_new_stream(oc, *codec);
- if (!st) {
- fprintf(stderr, "Could not allocate stream\n");
- exit(1);
- }
- st->id = oc->nb_streams-1;
- c = st->codec;
-
- switch ((*codec)->type) {
- case AVMEDIA_TYPE_AUDIO:
- st->id = 1;
- c->sample_fmt = AV_SAMPLE_FMT_S16;
- c->bit_rate = 64000;
- c->sample_rate = 44100;
- c->channels = 2;
- break;
-
- case AVMEDIA_TYPE_VIDEO:
- c->codec_id = codec_id;
-
- c->bit_rate = 400000;
- /* Resolution must be a multiple of two. */
- c->width = 352;
- c->height = 288;
- /* timebase: This is the fundamental unit of time (in seconds) in terms
- * of which frame timestamps are represented. For fixed-fps content,
- * timebase should be 1/framerate and timestamp increments should be
- * identical to 1. */
- c->time_base.den = STREAM_FRAME_RATE;
- c->time_base.num = 1;
- c->gop_size = 12; /* emit one intra frame every twelve frames at most */
- c->pix_fmt = STREAM_PIX_FMT;
- if (c->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
- /* just for testing, we also add B frames */
- c->max_b_frames = 2;
- }
- if (c->codec_id == AV_CODEC_ID_MPEG1VIDEO) {
- /* Needed to avoid using macroblocks in which some coeffs overflow.
- * This does not happen with normal video, it just happens here as
- * the motion of the chroma plane does not match the luma plane. */
- c->mb_decision = 2;
- }
- break;
-
- default:
- break;
- }
-
- /* Some formats want stream headers to be separate. */
- if (oc->oformat->flags & AVFMT_GLOBALHEADER)
- c->flags |= CODEC_FLAG_GLOBAL_HEADER;
-
- return st;
-}
-
-/**************************************************************/
-/* audio output */
-
-static float t, tincr, tincr2;
-static int16_t *samples;
-static int audio_input_frame_size;
-
-static void open_audio(AVFormatContext *oc, AVCodec *codec, AVStream *st)
-{
- AVCodecContext *c;
- int ret;
-
- c = st->codec;
-
- /* open it */
- ret = avcodec_open2(c, codec, NULL);
- if (ret < 0) {
- fprintf(stderr, "Could not open audio codec: %s\n", av_err2str(ret));
- exit(1);
- }
-
- /* init signal generator */
- t = 0;
- tincr = 2 * M_PI * 110.0 / c->sample_rate;
- /* increment frequency by 110 Hz per second */
- tincr2 = 2 * M_PI * 110.0 / c->sample_rate / c->sample_rate;
-
- if (c->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE)
- audio_input_frame_size = 10000;
- else
- audio_input_frame_size = c->frame_size;
- samples = av_malloc(audio_input_frame_size *
- av_get_bytes_per_sample(c->sample_fmt) *
- c->channels);
- if (!samples) {
- fprintf(stderr, "Could not allocate audio samples buffer\n");
- exit(1);
- }
-}
-
-/* Prepare a 16 bit dummy audio frame of 'frame_size' samples and
- * 'nb_channels' channels. */
-static void get_audio_frame(int16_t *samples, int frame_size, int nb_channels)
-{
- int j, i, v;
- int16_t *q;
-
- q = samples;
- for (j = 0; j < frame_size; j++) {
- v = (int)(sin(t) * 10000);
- for (i = 0; i < nb_channels; i++)
- *q++ = v;
- t += tincr;
- tincr += tincr2;
- }
-}
-
-static void write_audio_frame(AVFormatContext *oc, AVStream *st)
-{
- AVCodecContext *c;
- AVPacket pkt = { 0 }; // data and size must be 0;
- AVFrame *frame = avcodec_alloc_frame();
- int got_packet, ret;
-
- av_init_packet(&pkt);
- c = st->codec;
-
- get_audio_frame(samples, audio_input_frame_size, c->channels);
- frame->nb_samples = audio_input_frame_size;
- avcodec_fill_audio_frame(frame, c->channels, c->sample_fmt,
- (uint8_t *)samples,
- audio_input_frame_size *
- av_get_bytes_per_sample(c->sample_fmt) *
- c->channels, 1);
-
- ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet);
- if (ret < 0) {
- fprintf(stderr, "Error encoding audio frame: %s\n", av_err2str(ret));
- exit(1);
- }
-
- if (!got_packet)
- return;
-
- pkt.stream_index = st->index;
-
- /* Write the compressed frame to the media file. */
- ret = av_interleaved_write_frame(oc, &pkt);
- if (ret != 0) {
- fprintf(stderr, "Error while writing audio frame: %s\n",
- av_err2str(ret));
- exit(1);
- }
- avcodec_free_frame(&frame);
-}
-
-static void close_audio(AVFormatContext *oc, AVStream *st)
-{
- avcodec_close(st->codec);
-
- av_free(samples);
-}
-
-/**************************************************************/
-/* video output */
-
-static AVFrame *frame;
-static AVPicture src_picture, dst_picture;
-static int frame_count;
-
-static void open_video(AVFormatContext *oc, AVCodec *codec, AVStream *st)
-{
- int ret;
- AVCodecContext *c = st->codec;
-
- /* open the codec */
- ret = avcodec_open2(c, codec, NULL);
- if (ret < 0) {
- fprintf(stderr, "Could not open video codec: %s\n", av_err2str(ret));
- exit(1);
- }
-
- /* allocate and init a re-usable frame */
- frame = avcodec_alloc_frame();
- if (!frame) {
- fprintf(stderr, "Could not allocate video frame\n");
- exit(1);
- }
-
- /* Allocate the encoded raw picture. */
- ret = avpicture_alloc(&dst_picture, c->pix_fmt, c->width, c->height);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate picture: %s\n", av_err2str(ret));
- exit(1);
- }
-
- /* If the output format is not YUV420P, then a temporary YUV420P
- * picture is needed too. It is then converted to the required
- * output format. */
- if (c->pix_fmt != AV_PIX_FMT_YUV420P) {
- ret = avpicture_alloc(&src_picture, AV_PIX_FMT_YUV420P, c->width, c->height);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate temporary picture: %s\n",
- av_err2str(ret));
- exit(1);
- }
- }
-
- /* copy data and linesize picture pointers to frame */
- *((AVPicture *)frame) = dst_picture;
-}
-
-/* Prepare a dummy image. */
-static void fill_yuv_image(AVPicture *pict, int frame_index,
- int width, int height)
-{
- int x, y, i;
-
- i = frame_index;
-
- /* Y */
- for (y = 0; y < height; y++)
- for (x = 0; x < width; x++)
- pict->data[0][y * pict->linesize[0] + x] = x + y + i * 3;
-
- /* Cb and Cr */
- for (y = 0; y < height / 2; y++) {
- for (x = 0; x < width / 2; x++) {
- pict->data[1][y * pict->linesize[1] + x] = 128 + y + i * 2;
- pict->data[2][y * pict->linesize[2] + x] = 64 + x + i * 5;
- }
- }
-}
-
-static void write_video_frame(AVFormatContext *oc, AVStream *st)
-{
- int ret;
- static struct SwsContext *sws_ctx;
- AVCodecContext *c = st->codec;
-
- if (frame_count >= STREAM_NB_FRAMES) {
- /* No more frames to compress. The codec has a latency of a few
- * frames if using B-frames, so we get the last frames by
- * passing the same picture again. */
- } else {
- if (c->pix_fmt != AV_PIX_FMT_YUV420P) {
- /* as we only generate a YUV420P picture, we must convert it
- * to the codec pixel format if needed */
- if (!sws_ctx) {
- sws_ctx = sws_getContext(c->width, c->height, AV_PIX_FMT_YUV420P,
- c->width, c->height, c->pix_fmt,
- sws_flags, NULL, NULL, NULL);
- if (!sws_ctx) {
- fprintf(stderr,
- "Could not initialize the conversion context\n");
- exit(1);
- }
- }
- fill_yuv_image(&src_picture, frame_count, c->width, c->height);
- sws_scale(sws_ctx,
- (const uint8_t * const *)src_picture.data, src_picture.linesize,
- 0, c->height, dst_picture.data, dst_picture.linesize);
- } else {
- fill_yuv_image(&dst_picture, frame_count, c->width, c->height);
- }
- }
-
- if (oc->oformat->flags & AVFMT_RAWPICTURE) {
- /* Raw video case - directly store the picture in the packet */
- AVPacket pkt;
- av_init_packet(&pkt);
-
- pkt.flags |= AV_PKT_FLAG_KEY;
- pkt.stream_index = st->index;
- pkt.data = dst_picture.data[0];
- pkt.size = sizeof(AVPicture);
-
- ret = av_interleaved_write_frame(oc, &pkt);
- } else {
- AVPacket pkt = { 0 };
- int got_packet;
- av_init_packet(&pkt);
-
- /* encode the image */
- ret = avcodec_encode_video2(c, &pkt, frame, &got_packet);
- if (ret < 0) {
- fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret));
- exit(1);
- }
- /* If size is zero, it means the image was buffered. */
-
- if (!ret && got_packet && pkt.size) {
- pkt.stream_index = st->index;
-
- /* Write the compressed frame to the media file. */
- ret = av_interleaved_write_frame(oc, &pkt);
- } else {
- ret = 0;
- }
- }
- if (ret != 0) {
- fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
- exit(1);
- }
- frame_count++;
-}
-
-static void close_video(AVFormatContext *oc, AVStream *st)
-{
- avcodec_close(st->codec);
- av_free(src_picture.data[0]);
- av_free(dst_picture.data[0]);
- av_free(frame);
-}
-
-/**************************************************************/
-/* media file output */
-
-int main(int argc, char **argv)
-{
- const char *filename;
- AVOutputFormat *fmt;
- AVFormatContext *oc;
- AVStream *audio_st, *video_st;
- AVCodec *audio_codec, *video_codec;
- double audio_pts, video_pts;
- int ret;
-
- /* Initialize libavcodec, and register all codecs and formats. */
- av_register_all();
-
- if (argc != 2) {
- printf("usage: %s output_file\n"
- "API example program to output a media file with libavformat.\n"
- "This program generates a synthetic audio and video stream, encodes and\n"
- "muxes them into a file named output_file.\n"
- "The output format is automatically guessed according to the file extension.\n"
- "Raw images can also be output by using '%%d' in the filename.\n"
- "\n", argv[0]);
- return 1;
- }
-
- filename = argv[1];
-
- /* allocate the output media context */
- avformat_alloc_output_context2(&oc, NULL, NULL, filename);
- if (!oc) {
- printf("Could not deduce output format from file extension: using MPEG.\n");
- avformat_alloc_output_context2(&oc, NULL, "mpeg", filename);
- }
- if (!oc) {
- return 1;
- }
- fmt = oc->oformat;
-
- /* Add the audio and video streams using the default format codecs
- * and initialize the codecs. */
- video_st = NULL;
- audio_st = NULL;
-
- if (fmt->video_codec != AV_CODEC_ID_NONE) {
- video_st = add_stream(oc, &video_codec, fmt->video_codec);
- }
- if (fmt->audio_codec != AV_CODEC_ID_NONE) {
- audio_st = add_stream(oc, &audio_codec, fmt->audio_codec);
- }
-
- /* Now that all the parameters are set, we can open the audio and
- * video codecs and allocate the necessary encode buffers. */
- if (video_st)
- open_video(oc, video_codec, video_st);
- if (audio_st)
- open_audio(oc, audio_codec, audio_st);
-
- av_dump_format(oc, 0, filename, 1);
-
- /* open the output file, if needed */
- if (!(fmt->flags & AVFMT_NOFILE)) {
- ret = avio_open(&oc->pb, filename, AVIO_FLAG_WRITE);
- if (ret < 0) {
- fprintf(stderr, "Could not open '%s': %s\n", filename,
- av_err2str(ret));
- return 1;
- }
- }
-
- /* Write the stream header, if any. */
- ret = avformat_write_header(oc, NULL);
- if (ret < 0) {
- fprintf(stderr, "Error occurred when opening output file: %s\n",
- av_err2str(ret));
- return 1;
- }
-
- if (frame)
- frame->pts = 0;
- for (;;) {
- /* Compute current audio and video time. */
- if (audio_st)
- audio_pts = (double)audio_st->pts.val * audio_st->time_base.num / audio_st->time_base.den;
- else
- audio_pts = 0.0;
-
- if (video_st)
- video_pts = (double)video_st->pts.val * video_st->time_base.num /
- video_st->time_base.den;
- else
- video_pts = 0.0;
-
- if ((!audio_st || audio_pts >= STREAM_DURATION) &&
- (!video_st || video_pts >= STREAM_DURATION))
- break;
-
- /* write interleaved audio and video frames */
- if (!video_st || (video_st && audio_st && audio_pts < video_pts)) {
- write_audio_frame(oc, audio_st);
- } else {
- write_video_frame(oc, video_st);
- frame->pts += av_rescale_q(1, video_st->codec->time_base, video_st->time_base);
- }
- }
-
- /* Write the trailer, if any. The trailer must be written before you
- * close the CodecContexts open when you wrote the header; otherwise
- * av_write_trailer() may try to use memory that was freed on
- * av_codec_close(). */
- av_write_trailer(oc);
-
- /* Close each codec. */
- if (video_st)
- close_video(oc, video_st);
- if (audio_st)
- close_audio(oc, audio_st);
-
- if (!(fmt->flags & AVFMT_NOFILE))
- /* Close the output file. */
- avio_close(oc->pb);
-
- /* free the stream */
- avformat_free_context(oc);
-
- return 0;
-}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libavcodec.pc b/ffmpeg1/doc/examples/pc-uninstalled/libavcodec.pc
deleted file mode 100644
index 787d687..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libavcodec.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libavcodec
-includedir=${pcfiledir}/../../..
-
-Name: libavcodec
-Description: FFmpeg codec library
-Version: 55.1.100
-Requires: libavutil = 52.22.100
-Conflicts:
-Libs: -L${libdir} -lavcodec
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libavdevice.pc b/ffmpeg1/doc/examples/pc-uninstalled/libavdevice.pc
deleted file mode 100644
index 89ef046..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libavdevice.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libavdevice
-includedir=${pcfiledir}/../../..
-
-Name: libavdevice
-Description: FFmpeg device handling library
-Version: 55.0.100
-Requires: libavfilter = 3.48.100, libavformat = 55.0.100
-Conflicts:
-Libs: -L${libdir} -lavdevice
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libavfilter.pc b/ffmpeg1/doc/examples/pc-uninstalled/libavfilter.pc
deleted file mode 100644
index aacaf0a..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libavfilter.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libavfilter
-includedir=${pcfiledir}/../../..
-
-Name: libavfilter
-Description: FFmpeg audio/video filtering library
-Version: 3.48.100
-Requires: libpostproc = 52.2.100, libswresample = 0.17.102, libswscale = 2.2.100, libavformat = 55.0.100, libavcodec = 55.1.100, libavutil = 52.22.100
-Conflicts:
-Libs: -L${libdir} -lavfilter
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libavformat.pc b/ffmpeg1/doc/examples/pc-uninstalled/libavformat.pc
deleted file mode 100644
index 8f27151..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libavformat.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libavformat
-includedir=${pcfiledir}/../../..
-
-Name: libavformat
-Description: FFmpeg container format library
-Version: 55.0.100
-Requires: libavcodec = 55.1.100
-Conflicts:
-Libs: -L${libdir} -lavformat
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libavutil.pc b/ffmpeg1/doc/examples/pc-uninstalled/libavutil.pc
deleted file mode 100644
index 8a95064..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libavutil.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libavutil
-includedir=${pcfiledir}/../../..
-
-Name: libavutil
-Description: FFmpeg utility library
-Version: 52.22.100
-Requires:
-Conflicts:
-Libs: -L${libdir} -lavutil
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libpostproc.pc b/ffmpeg1/doc/examples/pc-uninstalled/libpostproc.pc
deleted file mode 100644
index 5e87c13..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libpostproc.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libpostproc
-includedir=${pcfiledir}/../../..
-
-Name: libpostproc
-Description: FFmpeg postprocessing library
-Version: 52.2.100
-Requires: libavutil = 52.22.100
-Conflicts:
-Libs: -L${libdir} -lpostproc
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libswresample.pc b/ffmpeg1/doc/examples/pc-uninstalled/libswresample.pc
deleted file mode 100644
index 873f39d..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libswresample.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libswresample
-includedir=${pcfiledir}/../../..
-
-Name: libswresample
-Description: FFmpeg audio resampling library
-Version: 0.17.102
-Requires: libavutil = 52.22.100
-Conflicts:
-Libs: -L${libdir} -lswresample
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/pc-uninstalled/libswscale.pc b/ffmpeg1/doc/examples/pc-uninstalled/libswscale.pc
deleted file mode 100644
index 764a10c..0000000
--- a/ffmpeg1/doc/examples/pc-uninstalled/libswscale.pc
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=
-exec_prefix=
-libdir=${pcfiledir}/../../../libswscale
-includedir=${pcfiledir}/../../..
-
-Name: libswscale
-Description: FFmpeg image rescaling library
-Version: 2.2.100
-Requires: libavutil = 52.22.100
-Conflicts:
-Libs: -L${libdir} -lswscale
-Cflags: -I${includedir}
diff --git a/ffmpeg1/doc/examples/resampling_audio.c b/ffmpeg1/doc/examples/resampling_audio.c
deleted file mode 100644
index dd128e8..0000000
--- a/ffmpeg1/doc/examples/resampling_audio.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2012 Stefano Sabatini
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @example doc/examples/resampling_audio.c
- * libswresample API use example.
- */
-
-#include <libavutil/opt.h>
-#include <libavutil/channel_layout.h>
-#include <libavutil/samplefmt.h>
-#include <libswresample/swresample.h>
-
-static int get_format_from_sample_fmt(const char **fmt,
- enum AVSampleFormat sample_fmt)
-{
- int i;
- struct sample_fmt_entry {
- enum AVSampleFormat sample_fmt; const char *fmt_be, *fmt_le;
- } sample_fmt_entries[] = {
- { AV_SAMPLE_FMT_U8, "u8", "u8" },
- { AV_SAMPLE_FMT_S16, "s16be", "s16le" },
- { AV_SAMPLE_FMT_S32, "s32be", "s32le" },
- { AV_SAMPLE_FMT_FLT, "f32be", "f32le" },
- { AV_SAMPLE_FMT_DBL, "f64be", "f64le" },
- };
- *fmt = NULL;
-
- for (i = 0; i < FF_ARRAY_ELEMS(sample_fmt_entries); i++) {
- struct sample_fmt_entry *entry = &sample_fmt_entries[i];
- if (sample_fmt == entry->sample_fmt) {
- *fmt = AV_NE(entry->fmt_be, entry->fmt_le);
- return 0;
- }
- }
-
- fprintf(stderr,
- "Sample format %s not supported as output format\n",
- av_get_sample_fmt_name(sample_fmt));
- return AVERROR(EINVAL);
-}
-
-/**
- * Fill dst buffer with nb_samples, generated starting from t.
- */
-void fill_samples(double *dst, int nb_samples, int nb_channels, int sample_rate, double *t)
-{
- int i, j;
- double tincr = 1.0 / sample_rate, *dstp = dst;
- const double c = 2 * M_PI * 440.0;
-
- /* generate sin tone with 440Hz frequency and duplicated channels */
- for (i = 0; i < nb_samples; i++) {
- *dstp = sin(c * *t);
- for (j = 1; j < nb_channels; j++)
- dstp[j] = dstp[0];
- dstp += nb_channels;
- *t += tincr;
- }
-}
-
-int alloc_samples_array_and_data(uint8_t ***data, int *linesize, int nb_channels,
- int nb_samples, enum AVSampleFormat sample_fmt, int align)
-{
- int nb_planes = av_sample_fmt_is_planar(sample_fmt) ? nb_channels : 1;
-
- *data = av_malloc(sizeof(*data) * nb_planes);
- if (!*data)
- return AVERROR(ENOMEM);
- return av_samples_alloc(*data, linesize, nb_channels,
- nb_samples, sample_fmt, align);
-}
-
-int main(int argc, char **argv)
-{
- int64_t src_ch_layout = AV_CH_LAYOUT_STEREO, dst_ch_layout = AV_CH_LAYOUT_SURROUND;
- int src_rate = 48000, dst_rate = 44100;
- uint8_t **src_data = NULL, **dst_data = NULL;
- int src_nb_channels = 0, dst_nb_channels = 0;
- int src_linesize, dst_linesize;
- int src_nb_samples = 1024, dst_nb_samples, max_dst_nb_samples;
- enum AVSampleFormat src_sample_fmt = AV_SAMPLE_FMT_DBL, dst_sample_fmt = AV_SAMPLE_FMT_S16;
- const char *dst_filename = NULL;
- FILE *dst_file;
- int dst_bufsize;
- const char *fmt;
- struct SwrContext *swr_ctx;
- double t;
- int ret;
-
- if (argc != 2) {
- fprintf(stderr, "Usage: %s output_file\n"
- "API example program to show how to resample an audio stream with libswresample.\n"
- "This program generates a series of audio frames, resamples them to a specified "
- "output format and rate and saves them to an output file named output_file.\n",
- argv[0]);
- exit(1);
- }
- dst_filename = argv[1];
-
- dst_file = fopen(dst_filename, "wb");
- if (!dst_file) {
- fprintf(stderr, "Could not open destination file %s\n", dst_filename);
- exit(1);
- }
-
- /* create resampler context */
- swr_ctx = swr_alloc();
- if (!swr_ctx) {
- fprintf(stderr, "Could not allocate resampler context\n");
- ret = AVERROR(ENOMEM);
- goto end;
- }
-
- /* set options */
- av_opt_set_int(swr_ctx, "in_channel_layout", src_ch_layout, 0);
- av_opt_set_int(swr_ctx, "in_sample_rate", src_rate, 0);
- av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt", src_sample_fmt, 0);
-
- av_opt_set_int(swr_ctx, "out_channel_layout", dst_ch_layout, 0);
- av_opt_set_int(swr_ctx, "out_sample_rate", dst_rate, 0);
- av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", dst_sample_fmt, 0);
-
- /* initialize the resampling context */
- if ((ret = swr_init(swr_ctx)) < 0) {
- fprintf(stderr, "Failed to initialize the resampling context\n");
- goto end;
- }
-
- /* allocate source and destination samples buffers */
-
- src_nb_channels = av_get_channel_layout_nb_channels(src_ch_layout);
- ret = alloc_samples_array_and_data(&src_data, &src_linesize, src_nb_channels,
- src_nb_samples, src_sample_fmt, 0);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate source samples\n");
- goto end;
- }
-
- /* compute the number of converted samples: buffering is avoided
- * ensuring that the output buffer will contain at least all the
- * converted input samples */
- max_dst_nb_samples = dst_nb_samples =
- av_rescale_rnd(src_nb_samples, dst_rate, src_rate, AV_ROUND_UP);
-
- /* buffer is going to be directly written to a rawaudio file, no alignment */
- dst_nb_channels = av_get_channel_layout_nb_channels(dst_ch_layout);
- ret = alloc_samples_array_and_data(&dst_data, &dst_linesize, dst_nb_channels,
- dst_nb_samples, dst_sample_fmt, 0);
- if (ret < 0) {
- fprintf(stderr, "Could not allocate destination samples\n");
- goto end;
- }
-
- t = 0;
- do {
- /* generate synthetic audio */
- fill_samples((double *)src_data[0], src_nb_samples, src_nb_channels, src_rate, &t);
-
- /* compute destination number of samples */
- dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, src_rate) +
- src_nb_samples, dst_rate, src_rate, AV_ROUND_UP);
- if (dst_nb_samples > max_dst_nb_samples) {
- av_free(dst_data[0]);
- ret = av_samples_alloc(dst_data, &dst_linesize, dst_nb_channels,
- dst_nb_samples, dst_sample_fmt, 1);
- if (ret < 0)
- break;
- max_dst_nb_samples = dst_nb_samples;
- }
-
- /* convert to destination format */
- ret = swr_convert(swr_ctx, dst_data, dst_nb_samples, (const uint8_t **)src_data, src_nb_samples);
- if (ret < 0) {
- fprintf(stderr, "Error while converting\n");
- goto end;
- }
- dst_bufsize = av_samples_get_buffer_size(&dst_linesize, dst_nb_channels,
- ret, dst_sample_fmt, 1);
- printf("t:%f in:%d out:%d\n", t, src_nb_samples, ret);
- fwrite(dst_data[0], 1, dst_bufsize, dst_file);
- } while (t < 10);
-
- if ((ret = get_format_from_sample_fmt(&fmt, dst_sample_fmt)) < 0)
- goto end;
- fprintf(stderr, "Resampling succeeded. Play the output file with the command:\n"
- "ffplay -f %s -channel_layout %"PRId64" -channels %d -ar %d %s\n",
- fmt, dst_ch_layout, dst_nb_channels, dst_rate, dst_filename);
-
-end:
- if (dst_file)
- fclose(dst_file);
-
- if (src_data)
- av_freep(&src_data[0]);
- av_freep(&src_data);
-
- if (dst_data)
- av_freep(&dst_data[0]);
- av_freep(&dst_data);
-
- swr_free(&swr_ctx);
- return ret < 0;
-}
diff --git a/ffmpeg1/doc/examples/scaling_video.c b/ffmpeg1/doc/examples/scaling_video.c
deleted file mode 100644
index be2c510..0000000
--- a/ffmpeg1/doc/examples/scaling_video.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2012 Stefano Sabatini
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/**
- * @file
- * libswscale API use example.
- * @example doc/examples/scaling_video.c
- */
-
-#include <libavutil/imgutils.h>
-#include <libavutil/parseutils.h>
-#include <libswscale/swscale.h>
-
-static void fill_yuv_image(uint8_t *data[4], int linesize[4],
- int width, int height, int frame_index)
-{
- int x, y;
-
- /* Y */
- for (y = 0; y < height; y++)
- for (x = 0; x < width; x++)
- data[0][y * linesize[0] + x] = x + y + frame_index * 3;
-
- /* Cb and Cr */
- for (y = 0; y < height / 2; y++) {
- for (x = 0; x < width / 2; x++) {
- data[1][y * linesize[1] + x] = 128 + y + frame_index * 2;
- data[2][y * linesize[2] + x] = 64 + x + frame_index * 5;
- }
- }
-}
-
-int main(int argc, char **argv)
-{
- uint8_t *src_data[4], *dst_data[4];
- int src_linesize[4], dst_linesize[4];
- int src_w = 320, src_h = 240, dst_w, dst_h;
- enum AVPixelFormat src_pix_fmt = AV_PIX_FMT_YUV420P, dst_pix_fmt = AV_PIX_FMT_RGB24;
- const char *dst_size = NULL;
- const char *dst_filename = NULL;
- FILE *dst_file;
- int dst_bufsize;
- struct SwsContext *sws_ctx;
- int i, ret;
-
- if (argc != 3) {
- fprintf(stderr, "Usage: %s output_file output_size\n"
- "API example program to show how to scale an image with libswscale.\n"
- "This program generates a series of pictures, rescales them to the given "
- "output_size and saves them to an output file named output_file\n."
- "\n", argv[0]);
- exit(1);
- }
- dst_filename = argv[1];
- dst_size = argv[2];
-
- if (av_parse_video_size(&dst_w, &dst_h, dst_size) < 0) {
- fprintf(stderr,
- "Invalid size '%s', must be in the form WxH or a valid size abbreviation\n",
- dst_size);
- exit(1);
- }
-
- dst_file = fopen(dst_filename, "wb");
- if (!dst_file) {
- fprintf(stderr, "Could not open destination file %s\n", dst_filename);
- exit(1);
- }
-
- /* create scaling context */
- sws_ctx = sws_getContext(src_w, src_h, src_pix_fmt,
- dst_w, dst_h, dst_pix_fmt,
- SWS_BILINEAR, NULL, NULL, NULL);
- if (!sws_ctx) {
- fprintf(stderr,
- "Impossible to create scale context for the conversion "
- "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
- av_get_pix_fmt_name(src_pix_fmt), src_w, src_h,
- av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h);
- ret = AVERROR(EINVAL);
- goto end;
- }
-
- /* allocate source and destination image buffers */
- if ((ret = av_image_alloc(src_data, src_linesize,
- src_w, src_h, src_pix_fmt, 16)) < 0) {
- fprintf(stderr, "Could not allocate source image\n");
- goto end;
- }
-
- /* buffer is going to be written to rawvideo file, no alignment */
- if ((ret = av_image_alloc(dst_data, dst_linesize,
- dst_w, dst_h, dst_pix_fmt, 1)) < 0) {
- fprintf(stderr, "Could not allocate destination image\n");
- goto end;
- }
- dst_bufsize = ret;
-
- for (i = 0; i < 100; i++) {
- /* generate synthetic video */
- fill_yuv_image(src_data, src_linesize, src_w, src_h, i);
-
- /* convert to destination format */
- sws_scale(sws_ctx, (const uint8_t * const*)src_data,
- src_linesize, 0, src_h, dst_data, dst_linesize);
-
- /* write scaled image to file */
- fwrite(dst_data[0], 1, dst_bufsize, dst_file);
- }
-
- fprintf(stderr, "Scaling succeeded. Play the output file with the command:\n"
- "ffplay -f rawvideo -pix_fmt %s -video_size %dx%d %s\n",
- av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h, dst_filename);
-
-end:
- if (dst_file)
- fclose(dst_file);
- av_freep(&src_data[0]);
- av_freep(&dst_data[0]);
- sws_freeContext(sws_ctx);
- return ret < 0;
-}