annotate utils.c @ 1080:a150aba978de libavcodec

huffyuv v1 tables, as they are essential and the only possible way for decding of v1 files they very likely cant be copyrighted ...
author michaelni
date Mon, 24 Feb 2003 09:49:37 +0000
parents b32afefe7d33
children 1e39f273ecd6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * utils for libavcodec
429
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
3 * Copyright (c) 2001 Fabrice Bellard.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
429
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
8 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 *
429
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
10 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
13 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 *
429
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 400
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
18 */
394
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
19 #include "avcodec.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
20 #include "dsputil.h"
341
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 337
diff changeset
21 #include "mpegvideo.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
22
862
058194d7ade6 * fixing some minor const warnings
kabi
parents: 851
diff changeset
23 void *av_mallocz(unsigned int size)
394
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
24 {
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
25 void *ptr;
908
2ac4caad5ca6 print a warning if something allocates 0 bytes
michaelni
parents: 903
diff changeset
26
394
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
27 ptr = av_malloc(size);
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
28 if (!ptr)
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
29 return NULL;
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
30 memset(ptr, 0, size);
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
31 return ptr;
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
32 }
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
33
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
34 char *av_strdup(const char *s)
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
35 {
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
36 char *ptr;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
37 int len;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
38 len = strlen(s) + 1;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
39 ptr = av_malloc(len);
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
40 if (!ptr)
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
41 return NULL;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
42 memcpy(ptr, s, len);
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
43 return ptr;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
44 }
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
45
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
46 /**
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
47 * realloc which does nothing if the block is large enough
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
48 */
1057
bb5de8a59da8 * static,const,compiler warning cleanup
kabi
parents: 1032
diff changeset
49 void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size)
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
50 {
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
51 if(min_size < *size)
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
52 return ptr;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
53
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
54 *size= min_size + 10*1024;
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
55
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
56 return av_realloc(ptr, *size);
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
57 }
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
58
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
59
902
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
60 /* allocation of static arrays - do not use for normal allocation */
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
61 static unsigned int last_static = 0;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
62 static char*** array_static = NULL;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
63 static const unsigned int grow_static = 64; // ^2
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
64 void *__av_mallocz_static(void** location, unsigned int size)
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
65 {
1057
bb5de8a59da8 * static,const,compiler warning cleanup
kabi
parents: 1032
diff changeset
66 unsigned int l = (last_static + grow_static) & ~(grow_static - 1);
902
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
67 void *ptr = av_mallocz(size);
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
68 if (!ptr)
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
69 return NULL;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
70
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
71 if (location)
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
72 {
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
73 if (l > last_static)
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
74 array_static = av_realloc(array_static, l);
902
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
75 array_static[last_static++] = (char**) location;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
76 *location = ptr;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
77 }
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
78 return ptr;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
79 }
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
80 /* free all static arrays and reset pointers to 0 */
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
81 void av_free_static()
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
82 {
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
83 if (array_static)
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
84 {
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
85 unsigned i;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
86 for (i = 0; i < last_static; i++)
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
87 {
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
88 av_free(*array_static[i]);
902
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
89 *array_static[i] = NULL;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
90 }
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 998
diff changeset
91 av_free(array_static);
902
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
92 array_static = 0;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
93 }
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
94 last_static = 0;
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
95 }
6acc8394960d * two functions to handle allocation of static data more simple
kabi
parents: 862
diff changeset
96
400
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
97 /* cannot call it directly because of 'void **' casting is not automatic */
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
98 void __av_freep(void **ptr)
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
99 {
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
100 av_free(*ptr);
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
101 *ptr = NULL;
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
102 }
b0aed401a756 better av_freep()
glantau
parents: 394
diff changeset
103
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 /* encoder management */
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 AVCodec *first_avcodec;
986e461dc072 Initial revision
glantau
parents:
diff changeset
106
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 void register_avcodec(AVCodec *format)
986e461dc072 Initial revision
glantau
parents:
diff changeset
108 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 AVCodec **p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
110 p = &first_avcodec;
986e461dc072 Initial revision
glantau
parents:
diff changeset
111 while (*p != NULL) p = &(*p)->next;
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 *p = format;
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 format->next = NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
114 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
115
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
116 typedef struct DefaultPicOpaque{
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
117 int last_pic_num;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
118 uint8_t *data[4];
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
119 }DefaultPicOpaque;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
120
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
121 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
122 int i;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
123 const int width = s->width;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
124 const int height= s->height;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
125 DefaultPicOpaque *opaque;
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
126
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
127 assert(pic->data[0]==NULL);
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
128 assert(pic->type==0 || pic->type==FF_TYPE_INTERNAL);
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
129
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
130 if(pic->opaque){
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
131 opaque= (DefaultPicOpaque *)pic->opaque;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
132 for(i=0; i<3; i++)
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
133 pic->data[i]= opaque->data[i];
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
134
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
135 // printf("get_buffer %X coded_pic_num:%d last:%d\n", pic->opaque, pic->coded_picture_number, opaque->last_pic_num);
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
136 pic->age= pic->coded_picture_number - opaque->last_pic_num;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
137 opaque->last_pic_num= pic->coded_picture_number;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
138 //printf("age: %d %d %d\n", pic->age, c->picture_number, pic->coded_picture_number);
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
139 }else{
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
140 int align, h_chroma_shift, v_chroma_shift;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
141 int w, h, pixel_size;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
142
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
143 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift);
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
144
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
145 switch(s->pix_fmt){
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
146 case PIX_FMT_YUV422:
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
147 pixel_size=2;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
148 break;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
149 case PIX_FMT_RGB24:
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
150 case PIX_FMT_BGR24:
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
151 pixel_size=3;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
152 break;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
153 case PIX_FMT_RGBA32:
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
154 pixel_size=4;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
155 break;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
156 default:
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
157 pixel_size=1;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
158 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
159
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
160 if(s->codec_id==CODEC_ID_SVQ1) align=63;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
161 else align=15;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
162
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
163 w= (width +align)&~align;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
164 h= (height+align)&~align;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
165
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
166 if(!(s->flags&CODEC_FLAG_EMU_EDGE)){
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
167 w+= EDGE_WIDTH*2;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
168 h+= EDGE_WIDTH*2;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
169 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
170
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
171 opaque= av_mallocz(sizeof(DefaultPicOpaque));
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
172 if(opaque==NULL) return -1;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
173
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
174 pic->opaque= opaque;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
175 opaque->last_pic_num= -256*256*256*64;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
176
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
177 for(i=0; i<3; i++){
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
178 int h_shift= i==0 ? 0 : h_chroma_shift;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
179 int v_shift= i==0 ? 0 : v_chroma_shift;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
180
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
181 pic->linesize[i]= pixel_size*w>>h_shift;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
182
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
183 pic->base[i]= av_mallocz((pic->linesize[i]*h>>v_shift)+16); //FIXME 16
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
184 if(pic->base[i]==NULL) return -1;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
185
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
186 memset(pic->base[i], 128, pic->linesize[i]*h>>v_shift);
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
187
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
188 if(s->flags&CODEC_FLAG_EMU_EDGE)
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
189 pic->data[i] = pic->base[i] + 16; //FIXME 16
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
190 else
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
191 pic->data[i] = pic->base[i] + (pic->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift) + 16; //FIXME 16
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
192
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
193 opaque->data[i]= pic->data[i];
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
194 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
195 pic->age= 256*256*256*64;
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
196 pic->type= FF_BUFFER_TYPE_INTERNAL;
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
197 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
198
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
199 return 0;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
200 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
201
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
202 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
203 int i;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
204
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
205 assert(pic->type==FF_BUFFER_TYPE_INTERNAL);
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
206
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
207 for(i=0; i<3; i++)
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
208 pic->data[i]=NULL;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
209 //printf("R%X\n", pic->opaque);
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
210 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
211
998
6129c88a6393 get_format()
michaelni
parents: 992
diff changeset
212 enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, enum PixelFormat * fmt){
6129c88a6393 get_format()
michaelni
parents: 992
diff changeset
213 return fmt[0];
6129c88a6393 get_format()
michaelni
parents: 992
diff changeset
214 }
6129c88a6393 get_format()
michaelni
parents: 992
diff changeset
215
681
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
216 void avcodec_get_context_defaults(AVCodecContext *s){
685
44a1dab0205c fixing apiexample
michaelni
parents: 681
diff changeset
217 s->bit_rate= 800*1000;
44a1dab0205c fixing apiexample
michaelni
parents: 681
diff changeset
218 s->bit_rate_tolerance= s->bit_rate*10;
681
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
219 s->qmin= 2;
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
220 s->qmax= 31;
932
176fd8c8e8a8 mb qp limits
michaelni
parents: 927
diff changeset
221 s->mb_qmin= 2;
176fd8c8e8a8 mb qp limits
michaelni
parents: 927
diff changeset
222 s->mb_qmax= 31;
681
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
223 s->rc_eq= "tex^qComp";
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
224 s->qcompress= 0.5;
685
44a1dab0205c fixing apiexample
michaelni
parents: 681
diff changeset
225 s->max_qdiff= 3;
44a1dab0205c fixing apiexample
michaelni
parents: 681
diff changeset
226 s->b_quant_factor=1.25;
44a1dab0205c fixing apiexample
michaelni
parents: 681
diff changeset
227 s->b_quant_offset=1.25;
686
83d2c9d50d7d fixing i_quant_factor, this should finally fix the bitrate bug with ffserver hopefully
michaelni
parents: 685
diff changeset
228 s->i_quant_factor=-0.8;
685
44a1dab0205c fixing apiexample
michaelni
parents: 681
diff changeset
229 s->i_quant_offset=0.0;
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 742
diff changeset
230 s->error_concealment= 3;
762
5da504c8c90e more defaults
michaelni
parents: 745
diff changeset
231 s->error_resilience= 1;
745
25d7fb7c89be better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents: 742
diff changeset
232 s->workaround_bugs= FF_BUG_AUTODETECT;
762
5da504c8c90e more defaults
michaelni
parents: 745
diff changeset
233 s->frame_rate = 25 * FRAME_RATE_BASE;
5da504c8c90e more defaults
michaelni
parents: 745
diff changeset
234 s->gop_size= 50;
5da504c8c90e more defaults
michaelni
parents: 745
diff changeset
235 s->me_method= ME_EPZS;
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
236 s->get_buffer= avcodec_default_get_buffer;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
237 s->release_buffer= avcodec_default_release_buffer;
998
6129c88a6393 get_format()
michaelni
parents: 992
diff changeset
238 s->get_format= avcodec_default_get_format;
954
13aec7e50c52 qpel in mmx2/3dnow
michaelni
parents: 932
diff changeset
239 s->me_subpel_quality=8;
681
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
240 }
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
241
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
242 /**
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
243 * allocates a AVCodecContext and set it to defaults.
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
244 * this can be deallocated by simply calling free()
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
245 */
703
65f9e32225ba Minor warning fix.
mellum
parents: 686
diff changeset
246 AVCodecContext *avcodec_alloc_context(void){
681
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
247 AVCodecContext *avctx= av_mallocz(sizeof(AVCodecContext));
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
248
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
249 if(avctx==NULL) return NULL;
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
250
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
251 avcodec_get_context_defaults(avctx);
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
252
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
253 return avctx;
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
254 }
b3869ffff47a avcodec_alloc_context()
michaelni
parents: 583
diff changeset
255
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
256 /**
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
257 * allocates a AVPFrame and set it to defaults.
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
258 * this can be deallocated by simply calling free()
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
259 */
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
260 AVFrame *avcodec_alloc_frame(void){
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
261 AVFrame *pic= av_mallocz(sizeof(AVFrame));
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
262
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
263 return pic;
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
264 }
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
265
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
266 int avcodec_open(AVCodecContext *avctx, AVCodec *codec)
986e461dc072 Initial revision
glantau
parents:
diff changeset
267 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
268 int ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
269
986e461dc072 Initial revision
glantau
parents:
diff changeset
270 avctx->codec = codec;
927
60241e4290e3 * fill codec_id in codec_open
kabi
parents: 925
diff changeset
271 avctx->codec_id = codec->id;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
272 avctx->frame_number = 0;
374
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
273 if (codec->priv_data_size > 0) {
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
274 avctx->priv_data = av_mallocz(codec->priv_data_size);
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
275 if (!avctx->priv_data)
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
276 return -ENOMEM;
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
277 } else {
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
278 avctx->priv_data = NULL;
02147e22f8c8 * Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents: 362
diff changeset
279 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
280 ret = avctx->codec->init(avctx);
986e461dc072 Initial revision
glantau
parents:
diff changeset
281 if (ret < 0) {
394
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
282 av_freep(&avctx->priv_data);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
283 return ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
284 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
285 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
286 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
287
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
288 int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
289 const short *samples)
986e461dc072 Initial revision
glantau
parents:
diff changeset
290 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
291 int ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
292
986e461dc072 Initial revision
glantau
parents:
diff changeset
293 ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples);
986e461dc072 Initial revision
glantau
parents:
diff changeset
294 avctx->frame_number++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
295 return ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
296 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
297
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
298 int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
299 const AVFrame *pict)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
300 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
301 int ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
302
986e461dc072 Initial revision
glantau
parents:
diff changeset
303 ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict);
814
8f31ed5bacd1 dont call emms_c() for each MB
michaelni
parents: 762
diff changeset
304
8f31ed5bacd1 dont call emms_c() for each MB
michaelni
parents: 762
diff changeset
305 emms_c(); //needed to avoid a emms_c() call before every return;
8f31ed5bacd1 dont call emms_c() for each MB
michaelni
parents: 762
diff changeset
306
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
307 avctx->frame_number++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
308 return ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
309 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
310
986e461dc072 Initial revision
glantau
parents:
diff changeset
311 /* decode a frame. return -1 if error, otherwise return the number of
986e461dc072 Initial revision
glantau
parents:
diff changeset
312 bytes used. If no frame could be decompressed, *got_picture_ptr is
986e461dc072 Initial revision
glantau
parents:
diff changeset
313 zero. Otherwise, it is non zero */
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
314 int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
315 int *got_picture_ptr,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
316 uint8_t *buf, int buf_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
317 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
318 int ret;
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
319
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
320 ret = avctx->codec->decode(avctx, picture, got_picture_ptr,
986e461dc072 Initial revision
glantau
parents:
diff changeset
321 buf, buf_size);
814
8f31ed5bacd1 dont call emms_c() for each MB
michaelni
parents: 762
diff changeset
322
8f31ed5bacd1 dont call emms_c() for each MB
michaelni
parents: 762
diff changeset
323 emms_c(); //needed to avoid a emms_c() call before every return;
903
22ee74da2cd3 cleanup
michaelni
parents: 902
diff changeset
324
267
e10840e4f773 - Bug fix MPEG-2 decoder to handle "repeat_first_field" (Telecine)
pulento
parents: 260
diff changeset
325 if (*got_picture_ptr)
e10840e4f773 - Bug fix MPEG-2 decoder to handle "repeat_first_field" (Telecine)
pulento
parents: 260
diff changeset
326 avctx->frame_number++;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
327 return ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
328 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
329
986e461dc072 Initial revision
glantau
parents:
diff changeset
330 /* decode an audio frame. return -1 if error, otherwise return the
986e461dc072 Initial revision
glantau
parents:
diff changeset
331 *number of bytes used. If no frame could be decompressed,
986e461dc072 Initial revision
glantau
parents:
diff changeset
332 *frame_size_ptr is zero. Otherwise, it is the decompressed frame
986e461dc072 Initial revision
glantau
parents:
diff changeset
333 *size in BYTES. */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
334 int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
335 int *frame_size_ptr,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
336 uint8_t *buf, int buf_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
337 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
338 int ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
339
986e461dc072 Initial revision
glantau
parents:
diff changeset
340 ret = avctx->codec->decode(avctx, samples, frame_size_ptr,
986e461dc072 Initial revision
glantau
parents:
diff changeset
341 buf, buf_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
342 avctx->frame_number++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
343 return ret;
986e461dc072 Initial revision
glantau
parents:
diff changeset
344 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
345
986e461dc072 Initial revision
glantau
parents:
diff changeset
346 int avcodec_close(AVCodecContext *avctx)
986e461dc072 Initial revision
glantau
parents:
diff changeset
347 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
348 if (avctx->codec->close)
986e461dc072 Initial revision
glantau
parents:
diff changeset
349 avctx->codec->close(avctx);
394
e2cb8a4ee0c5 proper memory handling functions
glantau
parents: 379
diff changeset
350 av_freep(&avctx->priv_data);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
351 avctx->codec = NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
352 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
353 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
354
986e461dc072 Initial revision
glantau
parents:
diff changeset
355 AVCodec *avcodec_find_encoder(enum CodecID id)
986e461dc072 Initial revision
glantau
parents:
diff changeset
356 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
357 AVCodec *p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
358 p = first_avcodec;
986e461dc072 Initial revision
glantau
parents:
diff changeset
359 while (p) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
360 if (p->encode != NULL && p->id == id)
986e461dc072 Initial revision
glantau
parents:
diff changeset
361 return p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
362 p = p->next;
986e461dc072 Initial revision
glantau
parents:
diff changeset
363 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
364 return NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
365 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
366
177
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
367 AVCodec *avcodec_find_encoder_by_name(const char *name)
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
368 {
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
369 AVCodec *p;
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
370 p = first_avcodec;
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
371 while (p) {
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
372 if (p->encode != NULL && strcmp(name,p->name) == 0)
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
373 return p;
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
374 p = p->next;
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
375 }
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
376 return NULL;
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
377 }
53da914d6f46 avcodec_find_encoder_by_name() patch by Alex
arpi_esp
parents: 94
diff changeset
378
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
379 AVCodec *avcodec_find_decoder(enum CodecID id)
986e461dc072 Initial revision
glantau
parents:
diff changeset
380 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
381 AVCodec *p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
382 p = first_avcodec;
986e461dc072 Initial revision
glantau
parents:
diff changeset
383 while (p) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
384 if (p->decode != NULL && p->id == id)
986e461dc072 Initial revision
glantau
parents:
diff changeset
385 return p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
386 p = p->next;
986e461dc072 Initial revision
glantau
parents:
diff changeset
387 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
388 return NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
389 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
390
986e461dc072 Initial revision
glantau
parents:
diff changeset
391 AVCodec *avcodec_find_decoder_by_name(const char *name)
986e461dc072 Initial revision
glantau
parents:
diff changeset
392 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
393 AVCodec *p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
394 p = first_avcodec;
986e461dc072 Initial revision
glantau
parents:
diff changeset
395 while (p) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
396 if (p->decode != NULL && strcmp(name,p->name) == 0)
986e461dc072 Initial revision
glantau
parents:
diff changeset
397 return p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
398 p = p->next;
986e461dc072 Initial revision
glantau
parents:
diff changeset
399 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
400 return NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
401 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
402
986e461dc072 Initial revision
glantau
parents:
diff changeset
403 AVCodec *avcodec_find(enum CodecID id)
986e461dc072 Initial revision
glantau
parents:
diff changeset
404 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
405 AVCodec *p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
406 p = first_avcodec;
986e461dc072 Initial revision
glantau
parents:
diff changeset
407 while (p) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
408 if (p->id == id)
986e461dc072 Initial revision
glantau
parents:
diff changeset
409 return p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
410 p = p->next;
986e461dc072 Initial revision
glantau
parents:
diff changeset
411 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
412 return NULL;
986e461dc072 Initial revision
glantau
parents:
diff changeset
413 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
414
986e461dc072 Initial revision
glantau
parents:
diff changeset
415 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
986e461dc072 Initial revision
glantau
parents:
diff changeset
416 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
417 const char *codec_name;
986e461dc072 Initial revision
glantau
parents:
diff changeset
418 AVCodec *p;
986e461dc072 Initial revision
glantau
parents:
diff changeset
419 char buf1[32];
337
8899c3b35b57 * using some small char buffer - needed for sprintf
kabi
parents: 322
diff changeset
420 char channels_str[100];
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
421 int bitrate;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
422
986e461dc072 Initial revision
glantau
parents:
diff changeset
423 if (encode)
986e461dc072 Initial revision
glantau
parents:
diff changeset
424 p = avcodec_find_encoder(enc->codec_id);
986e461dc072 Initial revision
glantau
parents:
diff changeset
425 else
986e461dc072 Initial revision
glantau
parents:
diff changeset
426 p = avcodec_find_decoder(enc->codec_id);
986e461dc072 Initial revision
glantau
parents:
diff changeset
427
986e461dc072 Initial revision
glantau
parents:
diff changeset
428 if (p) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
429 codec_name = p->name;
986e461dc072 Initial revision
glantau
parents:
diff changeset
430 } else if (enc->codec_name[0] != '\0') {
986e461dc072 Initial revision
glantau
parents:
diff changeset
431 codec_name = enc->codec_name;
986e461dc072 Initial revision
glantau
parents:
diff changeset
432 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
433 /* output avi tags */
986e461dc072 Initial revision
glantau
parents:
diff changeset
434 if (enc->codec_type == CODEC_TYPE_VIDEO) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
435 snprintf(buf1, sizeof(buf1), "%c%c%c%c",
986e461dc072 Initial revision
glantau
parents:
diff changeset
436 enc->codec_tag & 0xff,
986e461dc072 Initial revision
glantau
parents:
diff changeset
437 (enc->codec_tag >> 8) & 0xff,
986e461dc072 Initial revision
glantau
parents:
diff changeset
438 (enc->codec_tag >> 16) & 0xff,
986e461dc072 Initial revision
glantau
parents:
diff changeset
439 (enc->codec_tag >> 24) & 0xff);
986e461dc072 Initial revision
glantau
parents:
diff changeset
440 } else {
986e461dc072 Initial revision
glantau
parents:
diff changeset
441 snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag);
986e461dc072 Initial revision
glantau
parents:
diff changeset
442 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
443 codec_name = buf1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
444 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
445
986e461dc072 Initial revision
glantau
parents:
diff changeset
446 switch(enc->codec_type) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
447 case CODEC_TYPE_VIDEO:
986e461dc072 Initial revision
glantau
parents:
diff changeset
448 snprintf(buf, buf_size,
986e461dc072 Initial revision
glantau
parents:
diff changeset
449 "Video: %s%s",
986e461dc072 Initial revision
glantau
parents:
diff changeset
450 codec_name, enc->flags & CODEC_FLAG_HQ ? " (hq)" : "");
55
6064342168f4 picture utils
glantau
parents: 24
diff changeset
451 if (enc->codec_id == CODEC_ID_RAWVIDEO) {
6064342168f4 picture utils
glantau
parents: 24
diff changeset
452 snprintf(buf + strlen(buf), buf_size - strlen(buf),
6064342168f4 picture utils
glantau
parents: 24
diff changeset
453 ", %s",
988
001b7d3045e5 moved avcodec_get_chroma_sub_sample() to imgconvert.c
bellard
parents: 963
diff changeset
454 avcodec_get_pix_fmt_name(enc->pix_fmt));
55
6064342168f4 picture utils
glantau
parents: 24
diff changeset
455 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
456 if (enc->width) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
457 snprintf(buf + strlen(buf), buf_size - strlen(buf),
986e461dc072 Initial revision
glantau
parents:
diff changeset
458 ", %dx%d, %0.2f fps",
986e461dc072 Initial revision
glantau
parents:
diff changeset
459 enc->width, enc->height,
986e461dc072 Initial revision
glantau
parents:
diff changeset
460 (float)enc->frame_rate / FRAME_RATE_BASE);
986e461dc072 Initial revision
glantau
parents:
diff changeset
461 }
741
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
462 if (encode) {
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
463 snprintf(buf + strlen(buf), buf_size - strlen(buf),
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
464 ", q=%d-%d", enc->qmin, enc->qmax);
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
465 }
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
466 bitrate = enc->bit_rate;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
467 break;
986e461dc072 Initial revision
glantau
parents:
diff changeset
468 case CODEC_TYPE_AUDIO:
986e461dc072 Initial revision
glantau
parents:
diff changeset
469 snprintf(buf, buf_size,
986e461dc072 Initial revision
glantau
parents:
diff changeset
470 "Audio: %s",
986e461dc072 Initial revision
glantau
parents:
diff changeset
471 codec_name);
318
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
472 switch (enc->channels) {
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
473 case 1:
337
8899c3b35b57 * using some small char buffer - needed for sprintf
kabi
parents: 322
diff changeset
474 strcpy(channels_str, "mono");
318
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
475 break;
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
476 case 2:
337
8899c3b35b57 * using some small char buffer - needed for sprintf
kabi
parents: 322
diff changeset
477 strcpy(channels_str, "stereo");
318
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
478 break;
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
479 case 6:
337
8899c3b35b57 * using some small char buffer - needed for sprintf
kabi
parents: 322
diff changeset
480 strcpy(channels_str, "5:1");
318
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
481 break;
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
482 default:
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
483 sprintf(channels_str, "%d channels", enc->channels);
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
484 break;
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
485 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
486 if (enc->sample_rate) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
487 snprintf(buf + strlen(buf), buf_size - strlen(buf),
986e461dc072 Initial revision
glantau
parents:
diff changeset
488 ", %d Hz, %s",
986e461dc072 Initial revision
glantau
parents:
diff changeset
489 enc->sample_rate,
318
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
490 channels_str);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
491 }
318
21697f35a9ca - Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents: 315
diff changeset
492
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
493 /* for PCM codecs, compute bitrate directly */
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
494 switch(enc->codec_id) {
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
495 case CODEC_ID_PCM_S16LE:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
496 case CODEC_ID_PCM_S16BE:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
497 case CODEC_ID_PCM_U16LE:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
498 case CODEC_ID_PCM_U16BE:
94
7e263a256a6f fixed pcm bitrate
glantau
parents: 92
diff changeset
499 bitrate = enc->sample_rate * enc->channels * 16;
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
500 break;
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
501 case CODEC_ID_PCM_S8:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
502 case CODEC_ID_PCM_U8:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
503 case CODEC_ID_PCM_ALAW:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
504 case CODEC_ID_PCM_MULAW:
94
7e263a256a6f fixed pcm bitrate
glantau
parents: 92
diff changeset
505 bitrate = enc->sample_rate * enc->channels * 8;
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
506 break;
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
507 default:
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
508 bitrate = enc->bit_rate;
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
509 break;
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
510 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
511 break;
986e461dc072 Initial revision
glantau
parents:
diff changeset
512 default:
583
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 521
diff changeset
513 av_abort();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
514 }
741
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
515 if (encode) {
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
516 if (enc->flags & CODEC_FLAG_PASS1)
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
517 snprintf(buf + strlen(buf), buf_size - strlen(buf),
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
518 ", pass 1");
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
519 if (enc->flags & CODEC_FLAG_PASS2)
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
520 snprintf(buf + strlen(buf), buf_size - strlen(buf),
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
521 ", pass 2");
3be57e506f01 added two pass info
bellard
parents: 703
diff changeset
522 }
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
523 if (bitrate != 0) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
524 snprintf(buf + strlen(buf), buf_size - strlen(buf),
92
1d3eb6cdc6b5 added pcm codecs
glantau
parents: 91
diff changeset
525 ", %d kb/s", bitrate / 1000);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
526 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
527 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
528
362
1ee4ba4ca783 version info
nickols_k
parents: 341
diff changeset
529 unsigned avcodec_version( void )
1ee4ba4ca783 version info
nickols_k
parents: 341
diff changeset
530 {
1ee4ba4ca783 version info
nickols_k
parents: 341
diff changeset
531 return LIBAVCODEC_VERSION_INT;
1ee4ba4ca783 version info
nickols_k
parents: 341
diff changeset
532 }
55
6064342168f4 picture utils
glantau
parents: 24
diff changeset
533
379
47c878305986 build info for ABI
nickols_k
parents: 374
diff changeset
534 unsigned avcodec_build( void )
47c878305986 build info for ABI
nickols_k
parents: 374
diff changeset
535 {
47c878305986 build info for ABI
nickols_k
parents: 374
diff changeset
536 return LIBAVCODEC_BUILD;
47c878305986 build info for ABI
nickols_k
parents: 374
diff changeset
537 }
47c878305986 build info for ABI
nickols_k
parents: 374
diff changeset
538
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
539 /* must be called before any other functions */
986e461dc072 Initial revision
glantau
parents:
diff changeset
540 void avcodec_init(void)
986e461dc072 Initial revision
glantau
parents:
diff changeset
541 {
303
9a931fd8d06c multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents: 267
diff changeset
542 static int inited = 0;
9a931fd8d06c multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents: 267
diff changeset
543
9a931fd8d06c multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents: 267
diff changeset
544 if (inited != 0)
9a931fd8d06c multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents: 267
diff changeset
545 return;
9a931fd8d06c multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents: 267
diff changeset
546 inited = 1;
9a931fd8d06c multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents: 267
diff changeset
547
851
a25aed263097 * avcodec_init could be removed I guess...
kabi
parents: 814
diff changeset
548 //dsputil_init();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
549 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
550
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
551 /* this can be called after seeking and before trying to decode the next keyframe */
341
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 337
diff changeset
552 void avcodec_flush_buffers(AVCodecContext *avctx)
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 337
diff changeset
553 {
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
554 int i;
341
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 337
diff changeset
555 MpegEncContext *s = avctx->priv_data;
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
556
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
557 switch(avctx->codec_id){
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
558 case CODEC_ID_MPEG1VIDEO:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
559 case CODEC_ID_H263:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
560 case CODEC_ID_RV10:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
561 case CODEC_ID_MJPEG:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
562 case CODEC_ID_MJPEGB:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
563 case CODEC_ID_MPEG4:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
564 case CODEC_ID_MSMPEG4V1:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
565 case CODEC_ID_MSMPEG4V2:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
566 case CODEC_ID_MSMPEG4V3:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
567 case CODEC_ID_WMV1:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
568 case CODEC_ID_WMV2:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
569 case CODEC_ID_H263P:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
570 case CODEC_ID_H263I:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
571 case CODEC_ID_SVQ1:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
572 for(i=0; i<MAX_PICTURE_COUNT; i++){
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
573 if(s->picture[i].data[0] && ( s->picture[i].type == FF_BUFFER_TYPE_INTERNAL
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
574 || s->picture[i].type == FF_BUFFER_TYPE_USER))
925
7fccaa0d699d AVVideoFrame -> AVFrame
michaelni
parents: 924
diff changeset
575 avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]);
963
1936a177d482 * avoid usage of next/last buffer after flush
kabi
parents: 954
diff changeset
576 }
1936a177d482 * avoid usage of next/last buffer after flush
kabi
parents: 954
diff changeset
577 s->last_picture.data[0] = s->next_picture.data[0] = NULL;
924
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
578 break;
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
579 default:
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
580 //FIXME
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
581 break;
3814e9115672 cleanup / messup?
michaelni
parents: 908
diff changeset
582 }
341
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 337
diff changeset
583 }
bf26081c373c avcodec_flush_buffers()
michaelni
parents: 337
diff changeset
584
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
585 static int raw_encode_init(AVCodecContext *s)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
586 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
587 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
588 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
589
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
590 static int raw_decode_frame(AVCodecContext *avctx,
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
591 void *data, int *data_size,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
592 uint8_t *buf, int buf_size)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
593 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
594 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
595 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
596
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
597 static int raw_encode_frame(AVCodecContext *avctx,
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
598 unsigned char *frame, int buf_size, void *data)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
599 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
600 return -1;
986e461dc072 Initial revision
glantau
parents:
diff changeset
601 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
602
986e461dc072 Initial revision
glantau
parents:
diff changeset
603 AVCodec rawvideo_codec = {
986e461dc072 Initial revision
glantau
parents:
diff changeset
604 "rawvideo",
986e461dc072 Initial revision
glantau
parents:
diff changeset
605 CODEC_TYPE_VIDEO,
986e461dc072 Initial revision
glantau
parents:
diff changeset
606 CODEC_ID_RAWVIDEO,
986e461dc072 Initial revision
glantau
parents:
diff changeset
607 0,
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
608 raw_encode_init,
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
609 raw_encode_frame,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
610 NULL,
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
611 raw_decode_frame,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
612 };