annotate apiexample.c @ 5311:7742d5411c9d libavcodec

AC-3 decoder, soc revision 48, Aug 16 11:27:49 2006 UTC by cloud9 I realized that the bug was not in the imdct routine but in the get_transform_coeffs. Fixed it. Code now uses the ffmpeg's imdct routines. All the mplayer's ac3 samples are decoded successfully. Also improved downmixing. Now all the downmixing coeffcients for channels are normalized such that the sum of coefficients used to construct the output for single channel never exceeds 1.0.
author jbr
date Sat, 14 Jul 2007 15:58:42 +0000
parents 0134da1737d0
children 98d37cfc40a1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3699
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
1 /*
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
2 * copyright (c) 2001 Fabrice Bellard
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
3 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
4 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
5 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or
3699
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
8 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
9 * version 2.1 of the License, or (at your option) any later version.
3699
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
10 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
3699
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
14 * Lesser General Public License for more details.
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
15 *
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
17 * License along with FFmpeg; if not, write to the Free Software
3699
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
19 */
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 2967
diff changeset
20
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
21 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
22 * @file apiexample.c
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
23 * avcodec API use example.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
24 *
986e461dc072 Initial revision
glantau
parents:
diff changeset
25 * Note that this library only handles codecs (mpeg, mpeg4, etc...),
1427
3a6d613c88d8 spelling fix
bellard
parents: 1394
diff changeset
26 * not file formats (avi, vob, etc...). See library 'libavformat' for the
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
27 * format handling
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
28 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
29
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
30 #include <stdlib.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 #include <stdio.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 #include <string.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
33 #include <math.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
34
4545
219255141aa1 Remove a non-C dependency (being M_PI) from the libavcodec example.
takis
parents: 3947
diff changeset
35 #define PI 3.14159265358979323846
219255141aa1 Remove a non-C dependency (being M_PI) from the libavcodec example.
takis
parents: 3947
diff changeset
36
1059
890b9fb44e84 * still unfinished code for Options
kabi
parents: 925
diff changeset
37 #ifdef HAVE_AV_CONFIG_H
890b9fb44e84 * still unfinished code for Options
kabi
parents: 925
diff changeset
38 #undef HAVE_AV_CONFIG_H
890b9fb44e84 * still unfinished code for Options
kabi
parents: 925
diff changeset
39 #endif
890b9fb44e84 * still unfinished code for Options
kabi
parents: 925
diff changeset
40
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
41 #include "avcodec.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
42
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 #define INBUF_SIZE 4096
986e461dc072 Initial revision
glantau
parents:
diff changeset
44
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 /*
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
46 * Audio encoding example
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 void audio_encode_example(const char *filename)
986e461dc072 Initial revision
glantau
parents:
diff changeset
49 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
50 AVCodec *codec;
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
51 AVCodecContext *c= NULL;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
52 int frame_size, i, j, out_size, outbuf_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
53 FILE *f;
986e461dc072 Initial revision
glantau
parents:
diff changeset
54 short *samples;
986e461dc072 Initial revision
glantau
parents:
diff changeset
55 float t, tincr;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1059
diff changeset
56 uint8_t *outbuf;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
57
986e461dc072 Initial revision
glantau
parents:
diff changeset
58 printf("Audio encoding\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
59
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 /* find the MP2 encoder */
986e461dc072 Initial revision
glantau
parents:
diff changeset
61 codec = avcodec_find_encoder(CODEC_ID_MP2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
62 if (!codec) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
63 fprintf(stderr, "codec not found\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
64 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
65 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
66
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
67 c= avcodec_alloc_context();
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
68
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
69 /* put sample parameters */
986e461dc072 Initial revision
glantau
parents:
diff changeset
70 c->bit_rate = 64000;
986e461dc072 Initial revision
glantau
parents:
diff changeset
71 c->sample_rate = 44100;
986e461dc072 Initial revision
glantau
parents:
diff changeset
72 c->channels = 2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
73
986e461dc072 Initial revision
glantau
parents:
diff changeset
74 /* open it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
75 if (avcodec_open(c, codec) < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
76 fprintf(stderr, "could not open codec\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
77 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
78 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
79
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
80 /* the codec gives us the frame size, in samples */
986e461dc072 Initial revision
glantau
parents:
diff changeset
81 frame_size = c->frame_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
82 samples = malloc(frame_size * 2 * c->channels);
986e461dc072 Initial revision
glantau
parents:
diff changeset
83 outbuf_size = 10000;
986e461dc072 Initial revision
glantau
parents:
diff changeset
84 outbuf = malloc(outbuf_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
85
1931
902556e6d21d writing corrupt files on MinGW patch by (Matthias Fritschi <choi at netlabs dot org>)
michael
parents: 1427
diff changeset
86 f = fopen(filename, "wb");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
87 if (!f) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
88 fprintf(stderr, "could not open %s\n", filename);
986e461dc072 Initial revision
glantau
parents:
diff changeset
89 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
91
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 /* encode a single tone sound */
986e461dc072 Initial revision
glantau
parents:
diff changeset
93 t = 0;
4545
219255141aa1 Remove a non-C dependency (being M_PI) from the libavcodec example.
takis
parents: 3947
diff changeset
94 tincr = 2 * PI * 440.0 / c->sample_rate;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
95 for(i=0;i<200;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 for(j=0;j<frame_size;j++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 samples[2*j] = (int)(sin(t) * 10000);
986e461dc072 Initial revision
glantau
parents:
diff changeset
98 samples[2*j+1] = samples[2*j];
986e461dc072 Initial revision
glantau
parents:
diff changeset
99 t += tincr;
986e461dc072 Initial revision
glantau
parents:
diff changeset
100 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
101 /* encode the samples */
986e461dc072 Initial revision
glantau
parents:
diff changeset
102 out_size = avcodec_encode_audio(c, outbuf, outbuf_size, samples);
986e461dc072 Initial revision
glantau
parents:
diff changeset
103 fwrite(outbuf, 1, out_size, f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 fclose(f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 free(outbuf);
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 free(samples);
986e461dc072 Initial revision
glantau
parents:
diff changeset
108
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 avcodec_close(c);
2517
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
110 av_free(c);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
111 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
112
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 /*
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
114 * Audio decoding.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
115 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
116 void audio_decode_example(const char *outfilename, const char *filename)
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
118 AVCodec *codec;
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
119 AVCodecContext *c= NULL;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
120 int out_size, size, len;
986e461dc072 Initial revision
glantau
parents:
diff changeset
121 FILE *f, *outfile;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1059
diff changeset
122 uint8_t *outbuf;
1394
951a4448c05a FF_INPUT_BUFFER_PADDING_SIZE
michaelni
parents: 1373
diff changeset
123 uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE], *inbuf_ptr;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
124
986e461dc072 Initial revision
glantau
parents:
diff changeset
125 printf("Audio decoding\n");
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
126
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
127 /* find the mpeg audio decoder */
986e461dc072 Initial revision
glantau
parents:
diff changeset
128 codec = avcodec_find_decoder(CODEC_ID_MP2);
986e461dc072 Initial revision
glantau
parents:
diff changeset
129 if (!codec) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
130 fprintf(stderr, "codec not found\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
131 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
133
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
134 c= avcodec_alloc_context();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
135
986e461dc072 Initial revision
glantau
parents:
diff changeset
136 /* open it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 if (avcodec_open(c, codec) < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
138 fprintf(stderr, "could not open codec\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
139 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
140 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
141
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
142 outbuf = malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
143
1931
902556e6d21d writing corrupt files on MinGW patch by (Matthias Fritschi <choi at netlabs dot org>)
michael
parents: 1427
diff changeset
144 f = fopen(filename, "rb");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
145 if (!f) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
146 fprintf(stderr, "could not open %s\n", filename);
986e461dc072 Initial revision
glantau
parents:
diff changeset
147 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
148 }
1931
902556e6d21d writing corrupt files on MinGW patch by (Matthias Fritschi <choi at netlabs dot org>)
michael
parents: 1427
diff changeset
149 outfile = fopen(outfilename, "wb");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
150 if (!outfile) {
2517
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
151 av_free(c);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
152 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
153 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
154
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
155 /* decode until eof */
986e461dc072 Initial revision
glantau
parents:
diff changeset
156 inbuf_ptr = inbuf;
986e461dc072 Initial revision
glantau
parents:
diff changeset
157 for(;;) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
158 size = fread(inbuf, 1, INBUF_SIZE, f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
159 if (size == 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
160 break;
986e461dc072 Initial revision
glantau
parents:
diff changeset
161
986e461dc072 Initial revision
glantau
parents:
diff changeset
162 inbuf_ptr = inbuf;
986e461dc072 Initial revision
glantau
parents:
diff changeset
163 while (size > 0) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
164 len = avcodec_decode_audio(c, (short *)outbuf, &out_size,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
165 inbuf_ptr, size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
166 if (len < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
167 fprintf(stderr, "Error while decoding\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
168 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
169 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
170 if (out_size > 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
171 /* if a frame has been decoded, output it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
172 fwrite(outbuf, 1, out_size, outfile);
986e461dc072 Initial revision
glantau
parents:
diff changeset
173 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
174 size -= len;
986e461dc072 Initial revision
glantau
parents:
diff changeset
175 inbuf_ptr += len;
986e461dc072 Initial revision
glantau
parents:
diff changeset
176 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
177 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
178
986e461dc072 Initial revision
glantau
parents:
diff changeset
179 fclose(outfile);
986e461dc072 Initial revision
glantau
parents:
diff changeset
180 fclose(f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
181 free(outbuf);
986e461dc072 Initial revision
glantau
parents:
diff changeset
182
986e461dc072 Initial revision
glantau
parents:
diff changeset
183 avcodec_close(c);
2517
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
184 av_free(c);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
185 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
186
986e461dc072 Initial revision
glantau
parents:
diff changeset
187 /*
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
188 * Video encoding example
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
189 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
190 void video_encode_example(const char *filename)
986e461dc072 Initial revision
glantau
parents:
diff changeset
191 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
192 AVCodec *codec;
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
193 AVCodecContext *c= NULL;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
194 int i, out_size, size, x, y, outbuf_size;
986e461dc072 Initial revision
glantau
parents:
diff changeset
195 FILE *f;
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 919
diff changeset
196 AVFrame *picture;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1059
diff changeset
197 uint8_t *outbuf, *picture_buf;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
198
986e461dc072 Initial revision
glantau
parents:
diff changeset
199 printf("Video encoding\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
200
986e461dc072 Initial revision
glantau
parents:
diff changeset
201 /* find the mpeg1 video encoder */
986e461dc072 Initial revision
glantau
parents:
diff changeset
202 codec = avcodec_find_encoder(CODEC_ID_MPEG1VIDEO);
986e461dc072 Initial revision
glantau
parents:
diff changeset
203 if (!codec) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
204 fprintf(stderr, "codec not found\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
205 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
206 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
207
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
208 c= avcodec_alloc_context();
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 919
diff changeset
209 picture= avcodec_alloc_frame();
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
210
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
211 /* put sample parameters */
986e461dc072 Initial revision
glantau
parents:
diff changeset
212 c->bit_rate = 400000;
986e461dc072 Initial revision
glantau
parents:
diff changeset
213 /* resolution must be a multiple of two */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
214 c->width = 352;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
215 c->height = 288;
986e461dc072 Initial revision
glantau
parents:
diff changeset
216 /* frames per second */
2637
ef44d24680d1 switch to native time bases
michael
parents: 2552
diff changeset
217 c->time_base= (AVRational){1,25};
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
218 c->gop_size = 10; /* emit one intra frame every ten frames */
1373
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
219 c->max_b_frames=1;
2760
dfcfaeed1679 apiexample fix by (Chip: szarlada, freemail hu)
michael
parents: 2637
diff changeset
220 c->pix_fmt = PIX_FMT_YUV420P;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
221
986e461dc072 Initial revision
glantau
parents:
diff changeset
222 /* open it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
223 if (avcodec_open(c, codec) < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
224 fprintf(stderr, "could not open codec\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
225 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
226 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
227
1931
902556e6d21d writing corrupt files on MinGW patch by (Matthias Fritschi <choi at netlabs dot org>)
michael
parents: 1427
diff changeset
228 f = fopen(filename, "wb");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
229 if (!f) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
230 fprintf(stderr, "could not open %s\n", filename);
986e461dc072 Initial revision
glantau
parents:
diff changeset
231 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
232 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
233
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
234 /* alloc image and output buffer */
986e461dc072 Initial revision
glantau
parents:
diff changeset
235 outbuf_size = 100000;
986e461dc072 Initial revision
glantau
parents:
diff changeset
236 outbuf = malloc(outbuf_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
237 size = c->width * c->height;
986e461dc072 Initial revision
glantau
parents:
diff changeset
238 picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
239
919
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
240 picture->data[0] = picture_buf;
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
241 picture->data[1] = picture->data[0] + size;
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
242 picture->data[2] = picture->data[1] + size / 4;
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
243 picture->linesize[0] = c->width;
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
244 picture->linesize[1] = c->width / 2;
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
245 picture->linesize[2] = c->width / 2;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
246
986e461dc072 Initial revision
glantau
parents:
diff changeset
247 /* encode 1 second of video */
986e461dc072 Initial revision
glantau
parents:
diff changeset
248 for(i=0;i<25;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
249 fflush(stdout);
986e461dc072 Initial revision
glantau
parents:
diff changeset
250 /* prepare a dummy image */
986e461dc072 Initial revision
glantau
parents:
diff changeset
251 /* Y */
986e461dc072 Initial revision
glantau
parents:
diff changeset
252 for(y=0;y<c->height;y++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
253 for(x=0;x<c->width;x++) {
919
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
254 picture->data[0][y * picture->linesize[0] + x] = x + y + i * 3;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
255 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
256 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
257
986e461dc072 Initial revision
glantau
parents:
diff changeset
258 /* Cb and Cr */
986e461dc072 Initial revision
glantau
parents:
diff changeset
259 for(y=0;y<c->height/2;y++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
260 for(x=0;x<c->width/2;x++) {
919
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
261 picture->data[1][y * picture->linesize[1] + x] = 128 + y + i * 2;
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
262 picture->data[2][y * picture->linesize[2] + x] = 64 + x + i * 5;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
263 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
264 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
265
986e461dc072 Initial revision
glantau
parents:
diff changeset
266 /* encode the image */
919
c87eee6da7b1 fixing api-example
michaelni
parents: 895
diff changeset
267 out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture);
1373
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
268 printf("encoding frame %3d (size=%5d)\n", i, out_size);
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
269 fwrite(outbuf, 1, out_size, f);
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
270 }
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
271
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
272 /* get the delayed frames */
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
273 for(; out_size; i++) {
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
274 fflush(stdout);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
275
1373
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
276 out_size = avcodec_encode_video(c, outbuf, outbuf_size, NULL);
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
277 printf("write frame %3d (size=%5d)\n", i, out_size);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
278 fwrite(outbuf, 1, out_size, f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
279 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
280
986e461dc072 Initial revision
glantau
parents:
diff changeset
281 /* add sequence end code to have a real mpeg file */
986e461dc072 Initial revision
glantau
parents:
diff changeset
282 outbuf[0] = 0x00;
986e461dc072 Initial revision
glantau
parents:
diff changeset
283 outbuf[1] = 0x00;
986e461dc072 Initial revision
glantau
parents:
diff changeset
284 outbuf[2] = 0x01;
986e461dc072 Initial revision
glantau
parents:
diff changeset
285 outbuf[3] = 0xb7;
986e461dc072 Initial revision
glantau
parents:
diff changeset
286 fwrite(outbuf, 1, 4, f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
287 fclose(f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
288 free(picture_buf);
986e461dc072 Initial revision
glantau
parents:
diff changeset
289 free(outbuf);
986e461dc072 Initial revision
glantau
parents:
diff changeset
290
986e461dc072 Initial revision
glantau
parents:
diff changeset
291 avcodec_close(c);
2517
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
292 av_free(c);
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
293 av_free(picture);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
294 printf("\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
295 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
296
986e461dc072 Initial revision
glantau
parents:
diff changeset
297 /*
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
298 * Video decoding example
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
299 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
300
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
301 void pgm_save(unsigned char *buf,int wrap, int xsize,int ysize,char *filename)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
302 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
303 FILE *f;
986e461dc072 Initial revision
glantau
parents:
diff changeset
304 int i;
986e461dc072 Initial revision
glantau
parents:
diff changeset
305
986e461dc072 Initial revision
glantau
parents:
diff changeset
306 f=fopen(filename,"w");
986e461dc072 Initial revision
glantau
parents:
diff changeset
307 fprintf(f,"P5\n%d %d\n%d\n",xsize,ysize,255);
986e461dc072 Initial revision
glantau
parents:
diff changeset
308 for(i=0;i<ysize;i++)
986e461dc072 Initial revision
glantau
parents:
diff changeset
309 fwrite(buf + i * wrap,1,xsize,f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
310 fclose(f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
311 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
312
986e461dc072 Initial revision
glantau
parents:
diff changeset
313 void video_decode_example(const char *outfilename, const char *filename)
986e461dc072 Initial revision
glantau
parents:
diff changeset
314 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
315 AVCodec *codec;
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
316 AVCodecContext *c= NULL;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
317 int frame, size, got_picture, len;
986e461dc072 Initial revision
glantau
parents:
diff changeset
318 FILE *f;
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 919
diff changeset
319 AVFrame *picture;
1394
951a4448c05a FF_INPUT_BUFFER_PADDING_SIZE
michaelni
parents: 1373
diff changeset
320 uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE], *inbuf_ptr;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
321 char buf[1024];
986e461dc072 Initial revision
glantau
parents:
diff changeset
322
1394
951a4448c05a FF_INPUT_BUFFER_PADDING_SIZE
michaelni
parents: 1373
diff changeset
323 /* set end of buffer to 0 (this ensures that no overreading happens for damaged mpeg streams) */
951a4448c05a FF_INPUT_BUFFER_PADDING_SIZE
michaelni
parents: 1373
diff changeset
324 memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
951a4448c05a FF_INPUT_BUFFER_PADDING_SIZE
michaelni
parents: 1373
diff changeset
325
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
326 printf("Video decoding\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
327
986e461dc072 Initial revision
glantau
parents:
diff changeset
328 /* find the mpeg1 video decoder */
986e461dc072 Initial revision
glantau
parents:
diff changeset
329 codec = avcodec_find_decoder(CODEC_ID_MPEG1VIDEO);
986e461dc072 Initial revision
glantau
parents:
diff changeset
330 if (!codec) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
331 fprintf(stderr, "codec not found\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
332 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
333 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
334
685
44a1dab0205c fixing apiexample
michaelni
parents: 71
diff changeset
335 c= avcodec_alloc_context();
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 919
diff changeset
336 picture= avcodec_alloc_frame();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
337
895
1a5926aeed5f apiexample doesnt send complete frames to the codec
michaelni
parents: 685
diff changeset
338 if(codec->capabilities&CODEC_CAP_TRUNCATED)
5127
4dbe6578f811 misc spelling fixes
diego
parents: 4564
diff changeset
339 c->flags|= CODEC_FLAG_TRUNCATED; /* we do not send complete frames */
895
1a5926aeed5f apiexample doesnt send complete frames to the codec
michaelni
parents: 685
diff changeset
340
5127
4dbe6578f811 misc spelling fixes
diego
parents: 4564
diff changeset
341 /* For some codecs, such as msmpeg4 and mpeg4, width and height
4dbe6578f811 misc spelling fixes
diego
parents: 4564
diff changeset
342 MUST be initialized there because this information is not
4dbe6578f811 misc spelling fixes
diego
parents: 4564
diff changeset
343 available in the bitstream. */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
344
986e461dc072 Initial revision
glantau
parents:
diff changeset
345 /* open it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
346 if (avcodec_open(c, codec) < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
347 fprintf(stderr, "could not open codec\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
348 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
349 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
350
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
351 /* the codec gives us the frame size, in samples */
986e461dc072 Initial revision
glantau
parents:
diff changeset
352
1931
902556e6d21d writing corrupt files on MinGW patch by (Matthias Fritschi <choi at netlabs dot org>)
michael
parents: 1427
diff changeset
353 f = fopen(filename, "rb");
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
354 if (!f) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
355 fprintf(stderr, "could not open %s\n", filename);
986e461dc072 Initial revision
glantau
parents:
diff changeset
356 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
357 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
358
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
359 frame = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
360 for(;;) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
361 size = fread(inbuf, 1, INBUF_SIZE, f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
362 if (size == 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
363 break;
986e461dc072 Initial revision
glantau
parents:
diff changeset
364
986e461dc072 Initial revision
glantau
parents:
diff changeset
365 /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)
986e461dc072 Initial revision
glantau
parents:
diff changeset
366 and this is the only method to use them because you cannot
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
367 know the compressed data size before analysing it.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
368
71
79be2c581c01 changed opendivx to mpeg4
glantau
parents: 0
diff changeset
369 BUT some other codecs (msmpeg4, mpeg4) are inherently frame
79be2c581c01 changed opendivx to mpeg4
glantau
parents: 0
diff changeset
370 based, so you must call them with all the data for one
79be2c581c01 changed opendivx to mpeg4
glantau
parents: 0
diff changeset
371 frame exactly. You must also initialize 'width' and
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
372 'height' before initializing them. */
986e461dc072 Initial revision
glantau
parents:
diff changeset
373
986e461dc072 Initial revision
glantau
parents:
diff changeset
374 /* NOTE2: some codecs allow the raw parameters (frame size,
986e461dc072 Initial revision
glantau
parents:
diff changeset
375 sample rate) to be changed at any frame. We handle this, so
986e461dc072 Initial revision
glantau
parents:
diff changeset
376 you should also take care of it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
377
986e461dc072 Initial revision
glantau
parents:
diff changeset
378 /* here, we use a stream based decoder (mpeg1video), so we
986e461dc072 Initial revision
glantau
parents:
diff changeset
379 feed decoder and see if it could decode a frame */
986e461dc072 Initial revision
glantau
parents:
diff changeset
380 inbuf_ptr = inbuf;
986e461dc072 Initial revision
glantau
parents:
diff changeset
381 while (size > 0) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
382 len = avcodec_decode_video(c, picture, &got_picture,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
383 inbuf_ptr, size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
384 if (len < 0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
385 fprintf(stderr, "Error while decoding frame %d\n", frame);
986e461dc072 Initial revision
glantau
parents:
diff changeset
386 exit(1);
986e461dc072 Initial revision
glantau
parents:
diff changeset
387 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
388 if (got_picture) {
1373
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
389 printf("saving frame %3d\n", frame);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
390 fflush(stdout);
986e461dc072 Initial revision
glantau
parents:
diff changeset
391
986e461dc072 Initial revision
glantau
parents:
diff changeset
392 /* the picture is allocated by the decoder. no need to
986e461dc072 Initial revision
glantau
parents:
diff changeset
393 free it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
394 snprintf(buf, sizeof(buf), outfilename, frame);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
395 pgm_save(picture->data[0], picture->linesize[0],
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
396 c->width, c->height, buf);
986e461dc072 Initial revision
glantau
parents:
diff changeset
397 frame++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
398 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
399 size -= len;
986e461dc072 Initial revision
glantau
parents:
diff changeset
400 inbuf_ptr += len;
986e461dc072 Initial revision
glantau
parents:
diff changeset
401 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
402 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
403
986e461dc072 Initial revision
glantau
parents:
diff changeset
404 /* some codecs, such as MPEG, transmit the I and P frame with a
986e461dc072 Initial revision
glantau
parents:
diff changeset
405 latency of one frame. You must do the following to have a
986e461dc072 Initial revision
glantau
parents:
diff changeset
406 chance to get the last frame of the video */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
407 len = avcodec_decode_video(c, picture, &got_picture,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
408 NULL, 0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
409 if (got_picture) {
1373
b47a402bbe7f last frames & b frames encoding fix
michaelni
parents: 1126
diff changeset
410 printf("saving last frame %3d\n", frame);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
411 fflush(stdout);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
412
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
413 /* the picture is allocated by the decoder. no need to
986e461dc072 Initial revision
glantau
parents:
diff changeset
414 free it */
986e461dc072 Initial revision
glantau
parents:
diff changeset
415 snprintf(buf, sizeof(buf), outfilename, frame);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
416 pgm_save(picture->data[0], picture->linesize[0],
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
417 c->width, c->height, buf);
986e461dc072 Initial revision
glantau
parents:
diff changeset
418 frame++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
419 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2760
diff changeset
420
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
421 fclose(f);
986e461dc072 Initial revision
glantau
parents:
diff changeset
422
986e461dc072 Initial revision
glantau
parents:
diff changeset
423 avcodec_close(c);
2517
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
424 av_free(c);
3d8bbb8e7156 use av_free() instead of free() where it's meant to.
mmu_man
parents: 2423
diff changeset
425 av_free(picture);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
426 printf("\n");
986e461dc072 Initial revision
glantau
parents:
diff changeset
427 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
428
986e461dc072 Initial revision
glantau
parents:
diff changeset
429 int main(int argc, char **argv)
986e461dc072 Initial revision
glantau
parents:
diff changeset
430 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
431 const char *filename;
986e461dc072 Initial revision
glantau
parents:
diff changeset
432
986e461dc072 Initial revision
glantau
parents:
diff changeset
433 /* must be called before using avcodec lib */
986e461dc072 Initial revision
glantau
parents:
diff changeset
434 avcodec_init();
986e461dc072 Initial revision
glantau
parents:
diff changeset
435
5137
0134da1737d0 Improve understanding ofavcodec_find_decoder()
benoit
parents: 5127
diff changeset
436 /* register all the codecs */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
437 avcodec_register_all();
1059
890b9fb44e84 * still unfinished code for Options
kabi
parents: 925
diff changeset
438
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
439 if (argc <= 1) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
440 audio_encode_example("/tmp/test.mp2");
986e461dc072 Initial revision
glantau
parents:
diff changeset
441 audio_decode_example("/tmp/test.sw", "/tmp/test.mp2");
986e461dc072 Initial revision
glantau
parents:
diff changeset
442
986e461dc072 Initial revision
glantau
parents:
diff changeset
443 video_encode_example("/tmp/test.mpg");
986e461dc072 Initial revision
glantau
parents:
diff changeset
444 filename = "/tmp/test.mpg";
986e461dc072 Initial revision
glantau
parents:
diff changeset
445 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
446 filename = argv[1];
986e461dc072 Initial revision
glantau
parents:
diff changeset
447 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
448
986e461dc072 Initial revision
glantau
parents:
diff changeset
449 // audio_decode_example("/tmp/test.sw", filename);
986e461dc072 Initial revision
glantau
parents:
diff changeset
450 video_decode_example("/tmp/test%d.pgm", filename);
986e461dc072 Initial revision
glantau
parents:
diff changeset
451
986e461dc072 Initial revision
glantau
parents:
diff changeset
452 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
453 }