| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * utils for libavcodec | 
					
						
							| 
									
										
										
										
											2002-05-25 22:45:33 +00:00
										 |  |  |  * Copyright (c) 2001 Fabrice Bellard. | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2002-05-25 22:45:33 +00:00
										 |  |  |  * This library is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  * modify it under the terms of the GNU Lesser General Public | 
					
						
							|  |  |  |  * License as published by the Free Software Foundation; either | 
					
						
							|  |  |  |  * version 2 of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2002-05-25 22:45:33 +00:00
										 |  |  |  * This library is distributed in the hope that it will be useful, | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							| 
									
										
										
										
											2002-05-25 22:45:33 +00:00
										 |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
					
						
							|  |  |  |  * Lesser General Public License for more details. | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2002-05-25 22:45:33 +00:00
										 |  |  |  * You should have received a copy of the GNU Lesser General Public | 
					
						
							|  |  |  |  * License along with this library; if not, write to the Free Software | 
					
						
							|  |  |  |  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | #include "avcodec.h"
 | 
					
						
							| 
									
										
										
										
											2002-05-18 22:59:50 +00:00
										 |  |  | #include "dsputil.h"
 | 
					
						
							| 
									
										
										
										
											2002-04-24 01:24:06 +00:00
										 |  |  | #include "mpegvideo.h"
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-12 15:00:04 +00:00
										 |  |  | void *av_mallocz(unsigned int size) | 
					
						
							| 
									
										
										
										
											2002-05-18 22:59:50 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     void *ptr; | 
					
						
							| 
									
										
										
										
											2002-12-04 12:42:25 +00:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2002-05-18 22:59:50 +00:00
										 |  |  |     ptr = av_malloc(size); | 
					
						
							|  |  |  |     if (!ptr) | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     memset(ptr, 0, size); | 
					
						
							|  |  |  |     return ptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-23 23:03:09 +00:00
										 |  |  | char *av_strdup(const char *s) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     char *ptr; | 
					
						
							|  |  |  |     int len; | 
					
						
							|  |  |  |     len = strlen(s) + 1; | 
					
						
							|  |  |  |     ptr = av_malloc(len); | 
					
						
							|  |  |  |     if (!ptr) | 
					
						
							|  |  |  |         return NULL; | 
					
						
							|  |  |  |     memcpy(ptr, s, len); | 
					
						
							|  |  |  |     return ptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * realloc which does nothing if the block is large enough | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2003-02-10 09:35:32 +00:00
										 |  |  | void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size) | 
					
						
							| 
									
										
										
										
											2003-01-23 23:03:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     if(min_size < *size)  | 
					
						
							|  |  |  |         return ptr; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     *size= min_size + 10*1024; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return av_realloc(ptr, *size); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-03 19:40:35 +00:00
										 |  |  | /* allocation of static arrays - do not use for normal allocation */ | 
					
						
							|  |  |  | static unsigned int last_static = 0; | 
					
						
							|  |  |  | static char*** array_static = NULL; | 
					
						
							|  |  |  | static const unsigned int grow_static = 64; // ^2
 | 
					
						
							|  |  |  | void *__av_mallocz_static(void** location, unsigned int size) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2003-02-10 09:35:32 +00:00
										 |  |  |     unsigned int l = (last_static + grow_static) & ~(grow_static - 1); | 
					
						
							| 
									
										
										
										
											2002-12-03 19:40:35 +00:00
										 |  |  |     void *ptr = av_mallocz(size); | 
					
						
							|  |  |  |     if (!ptr) | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (location) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 	if (l > last_static) | 
					
						
							| 
									
										
										
										
											2003-01-23 23:03:09 +00:00
										 |  |  | 	    array_static = av_realloc(array_static, l); | 
					
						
							| 
									
										
										
										
											2002-12-03 19:40:35 +00:00
										 |  |  | 	array_static[last_static++] = (char**) location; | 
					
						
							|  |  |  | 	*location = ptr; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return ptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | /* free all static arrays and reset pointers to 0 */ | 
					
						
							|  |  |  | void av_free_static() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (array_static) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  | 	unsigned i; | 
					
						
							|  |  |  | 	for (i = 0; i < last_static; i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2003-01-23 23:03:09 +00:00
										 |  |  | 	    av_free(*array_static[i]); | 
					
						
							| 
									
										
										
										
											2002-12-03 19:40:35 +00:00
										 |  |  |             *array_static[i] = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2003-01-23 23:03:09 +00:00
										 |  |  | 	av_free(array_static); | 
					
						
							| 
									
										
										
										
											2002-12-03 19:40:35 +00:00
										 |  |  | 	array_static = 0; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     last_static = 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-20 16:23:27 +00:00
										 |  |  | /* cannot call it directly because of 'void **' casting is not automatic */ | 
					
						
							|  |  |  | void __av_freep(void **ptr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     av_free(*ptr); | 
					
						
							|  |  |  |     *ptr = NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | /* encoder management */ | 
					
						
							|  |  |  | AVCodec *first_avcodec; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void register_avcodec(AVCodec *format) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AVCodec **p; | 
					
						
							|  |  |  |     p = &first_avcodec; | 
					
						
							|  |  |  |     while (*p != NULL) p = &(*p)->next; | 
					
						
							|  |  |  |     *p = format; | 
					
						
							|  |  |  |     format->next = NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  | typedef struct DefaultPicOpaque{ | 
					
						
							|  |  |  |     int last_pic_num; | 
					
						
							|  |  |  |     uint8_t *data[4]; | 
					
						
							|  |  |  | }DefaultPicOpaque; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  | int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |     int i; | 
					
						
							|  |  |  |     const int width = s->width; | 
					
						
							|  |  |  |     const int height= s->height; | 
					
						
							|  |  |  |     DefaultPicOpaque *opaque; | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     assert(pic->data[0]==NULL); | 
					
						
							|  |  |  |     assert(pic->type==0 || pic->type==FF_TYPE_INTERNAL); | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if(pic->opaque){ | 
					
						
							|  |  |  |         opaque= (DefaultPicOpaque *)pic->opaque; | 
					
						
							|  |  |  |         for(i=0; i<3; i++) | 
					
						
							|  |  |  |             pic->data[i]= opaque->data[i]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //    printf("get_buffer %X coded_pic_num:%d last:%d\n", pic->opaque, pic->coded_picture_number, opaque->last_pic_num);    
 | 
					
						
							|  |  |  |         pic->age= pic->coded_picture_number - opaque->last_pic_num; | 
					
						
							|  |  |  |         opaque->last_pic_num= pic->coded_picture_number; | 
					
						
							|  |  |  | //printf("age: %d %d %d\n", pic->age, c->picture_number, pic->coded_picture_number);
 | 
					
						
							|  |  |  |     }else{ | 
					
						
							|  |  |  |         int align, h_chroma_shift, v_chroma_shift; | 
					
						
							|  |  |  |         int w, h, pixel_size; | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         switch(s->pix_fmt){ | 
					
						
							|  |  |  |         case PIX_FMT_YUV422: | 
					
						
							|  |  |  |             pixel_size=2; | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         case PIX_FMT_RGB24: | 
					
						
							|  |  |  |         case PIX_FMT_BGR24: | 
					
						
							|  |  |  |             pixel_size=3; | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         case PIX_FMT_RGBA32: | 
					
						
							|  |  |  |             pixel_size=4; | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             pixel_size=1; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         if(s->codec_id==CODEC_ID_SVQ1) align=63; | 
					
						
							|  |  |  |         else                           align=15; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         w= (width +align)&~align; | 
					
						
							|  |  |  |         h= (height+align)&~align; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |         if(!(s->flags&CODEC_FLAG_EMU_EDGE)){ | 
					
						
							|  |  |  |             w+= EDGE_WIDTH*2; | 
					
						
							|  |  |  |             h+= EDGE_WIDTH*2; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         opaque= av_mallocz(sizeof(DefaultPicOpaque)); | 
					
						
							|  |  |  |         if(opaque==NULL) return -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pic->opaque= opaque; | 
					
						
							|  |  |  |         opaque->last_pic_num= -256*256*256*64; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for(i=0; i<3; i++){ | 
					
						
							|  |  |  |             int h_shift= i==0 ? 0 : h_chroma_shift; | 
					
						
							|  |  |  |             int v_shift= i==0 ? 0 : v_chroma_shift; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             pic->linesize[i]= pixel_size*w>>h_shift; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             pic->base[i]= av_mallocz((pic->linesize[i]*h>>v_shift)+16); //FIXME 16
 | 
					
						
							|  |  |  |             if(pic->base[i]==NULL) return -1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             memset(pic->base[i], 128, pic->linesize[i]*h>>v_shift); | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |             if(s->flags&CODEC_FLAG_EMU_EDGE) | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |                 pic->data[i] = pic->base[i] + 16; //FIXME 16
 | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |             else | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |                 pic->data[i] = pic->base[i] + (pic->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift) + 16; //FIXME 16
 | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |              | 
					
						
							|  |  |  |             opaque->data[i]= pic->data[i]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         pic->age= 256*256*256*64; | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |         pic->type= FF_BUFFER_TYPE_INTERNAL; | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  | void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |     int i; | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |     assert(pic->type==FF_BUFFER_TYPE_INTERNAL); | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |     for(i=0; i<3; i++) | 
					
						
							|  |  |  |         pic->data[i]=NULL; | 
					
						
							|  |  |  | //printf("R%X\n", pic->opaque);
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-12 00:48:29 +00:00
										 |  |  | enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, enum PixelFormat * fmt){ | 
					
						
							|  |  |  |     return fmt[0]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-19 09:13:43 +00:00
										 |  |  | void avcodec_get_context_defaults(AVCodecContext *s){ | 
					
						
							| 
									
										
										
										
											2002-09-19 18:24:52 +00:00
										 |  |  |     s->bit_rate= 800*1000; | 
					
						
							|  |  |  |     s->bit_rate_tolerance= s->bit_rate*10; | 
					
						
							| 
									
										
										
										
											2002-09-19 09:13:43 +00:00
										 |  |  |     s->qmin= 2; | 
					
						
							|  |  |  |     s->qmax= 31; | 
					
						
							| 
									
										
										
										
											2002-12-18 10:09:43 +00:00
										 |  |  |     s->mb_qmin= 2; | 
					
						
							|  |  |  |     s->mb_qmax= 31; | 
					
						
							| 
									
										
										
										
											2002-09-19 09:13:43 +00:00
										 |  |  |     s->rc_eq= "tex^qComp"; | 
					
						
							|  |  |  |     s->qcompress= 0.5; | 
					
						
							| 
									
										
										
										
											2002-09-19 18:24:52 +00:00
										 |  |  |     s->max_qdiff= 3; | 
					
						
							|  |  |  |     s->b_quant_factor=1.25; | 
					
						
							|  |  |  |     s->b_quant_offset=1.25; | 
					
						
							| 
									
										
										
										
											2002-09-19 20:22:39 +00:00
										 |  |  |     s->i_quant_factor=-0.8; | 
					
						
							| 
									
										
										
										
											2002-09-19 18:24:52 +00:00
										 |  |  |     s->i_quant_offset=0.0; | 
					
						
							| 
									
										
										
										
											2002-10-13 13:16:04 +00:00
										 |  |  |     s->error_concealment= 3; | 
					
						
							| 
									
										
										
										
											2002-10-22 23:43:25 +00:00
										 |  |  |     s->error_resilience= 1; | 
					
						
							| 
									
										
										
										
											2002-10-13 13:16:04 +00:00
										 |  |  |     s->workaround_bugs= FF_BUG_AUTODETECT; | 
					
						
							| 
									
										
										
										
											2002-10-22 23:43:25 +00:00
										 |  |  |     s->frame_rate = 25 * FRAME_RATE_BASE; | 
					
						
							|  |  |  |     s->gop_size= 50; | 
					
						
							|  |  |  |     s->me_method= ME_EPZS; | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |     s->get_buffer= avcodec_default_get_buffer; | 
					
						
							|  |  |  |     s->release_buffer= avcodec_default_release_buffer; | 
					
						
							| 
									
										
										
										
											2003-01-12 00:48:29 +00:00
										 |  |  |     s->get_format= avcodec_default_get_format; | 
					
						
							| 
									
										
										
										
											2003-01-05 15:57:10 +00:00
										 |  |  |     s->me_subpel_quality=8; | 
					
						
							| 
									
										
										
										
											2002-09-19 09:13:43 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * allocates a AVCodecContext and set it to defaults. | 
					
						
							|  |  |  |  * this can be deallocated by simply calling free()  | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-09-28 01:49:37 +00:00
										 |  |  | AVCodecContext *avcodec_alloc_context(void){ | 
					
						
							| 
									
										
										
										
											2002-09-19 09:13:43 +00:00
										 |  |  |     AVCodecContext *avctx= av_mallocz(sizeof(AVCodecContext)); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     if(avctx==NULL) return NULL; | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     avcodec_get_context_defaults(avctx); | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     return avctx; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  |  * allocates a AVPFrame and set it to defaults. | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |  * this can be deallocated by simply calling free()  | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  | AVFrame *avcodec_alloc_frame(void){ | 
					
						
							|  |  |  |     AVFrame *pic= av_mallocz(sizeof(AVFrame)); | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     return pic; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | int avcodec_open(AVCodecContext *avctx, AVCodec *codec) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     avctx->codec = codec; | 
					
						
							| 
									
										
										
										
											2002-12-09 18:54:09 +00:00
										 |  |  |     avctx->codec_id = codec->id; | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     avctx->frame_number = 0; | 
					
						
							| 
									
										
										
										
											2002-05-09 01:24:27 +00:00
										 |  |  |     if (codec->priv_data_size > 0) { | 
					
						
							|  |  |  |         avctx->priv_data = av_mallocz(codec->priv_data_size); | 
					
						
							|  |  |  |         if (!avctx->priv_data)  | 
					
						
							|  |  |  |             return -ENOMEM; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         avctx->priv_data = NULL; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     ret = avctx->codec->init(avctx); | 
					
						
							|  |  |  |     if (ret < 0) { | 
					
						
							| 
									
										
										
										
											2002-05-18 22:59:50 +00:00
										 |  |  |         av_freep(&avctx->priv_data); | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         return ret; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int avcodec_encode_audio(AVCodecContext *avctx, UINT8 *buf, int buf_size,  | 
					
						
							|  |  |  |                          const short *samples) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples); | 
					
						
							|  |  |  |     avctx->frame_number++; | 
					
						
							|  |  |  |     return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int avcodec_encode_video(AVCodecContext *avctx, UINT8 *buf, int buf_size,  | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  |                          const AVFrame *pict) | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     int ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict); | 
					
						
							| 
									
										
										
										
											2002-10-31 12:11:53 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     emms_c(); //needed to avoid a emms_c() call before every return;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     avctx->frame_number++; | 
					
						
							|  |  |  |     return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* decode a frame. return -1 if error, otherwise return the number of
 | 
					
						
							|  |  |  |    bytes used. If no frame could be decompressed, *got_picture_ptr is | 
					
						
							|  |  |  |    zero. Otherwise, it is non zero */ | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  | int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,  | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |                          int *got_picture_ptr, | 
					
						
							|  |  |  |                          UINT8 *buf, int buf_size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int ret; | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     ret = avctx->codec->decode(avctx, picture, got_picture_ptr,  | 
					
						
							|  |  |  |                                buf, buf_size); | 
					
						
							| 
									
										
										
										
											2002-10-31 12:11:53 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     emms_c(); //needed to avoid a emms_c() call before every return;
 | 
					
						
							| 
									
										
										
										
											2002-12-04 10:04:03 +00:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2002-03-16 02:41:00 +00:00
										 |  |  |     if (*got_picture_ptr)                            | 
					
						
							|  |  |  |         avctx->frame_number++; | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* decode an audio frame. return -1 if error, otherwise return the
 | 
					
						
							|  |  |  |    *number of bytes used. If no frame could be decompressed, | 
					
						
							|  |  |  |    *frame_size_ptr is zero. Otherwise, it is the decompressed frame | 
					
						
							|  |  |  |    *size in BYTES. */ | 
					
						
							|  |  |  | int avcodec_decode_audio(AVCodecContext *avctx, INT16 *samples,  | 
					
						
							|  |  |  |                          int *frame_size_ptr, | 
					
						
							|  |  |  |                          UINT8 *buf, int buf_size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ret = avctx->codec->decode(avctx, samples, frame_size_ptr,  | 
					
						
							|  |  |  |                                buf, buf_size); | 
					
						
							|  |  |  |     avctx->frame_number++; | 
					
						
							|  |  |  |     return ret; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int avcodec_close(AVCodecContext *avctx) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (avctx->codec->close) | 
					
						
							|  |  |  |         avctx->codec->close(avctx); | 
					
						
							| 
									
										
										
										
											2002-05-18 22:59:50 +00:00
										 |  |  |     av_freep(&avctx->priv_data); | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     avctx->codec = NULL; | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AVCodec *avcodec_find_encoder(enum CodecID id) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AVCodec *p; | 
					
						
							|  |  |  |     p = first_avcodec; | 
					
						
							|  |  |  |     while (p) { | 
					
						
							|  |  |  |         if (p->encode != NULL && p->id == id) | 
					
						
							|  |  |  |             return p; | 
					
						
							|  |  |  |         p = p->next; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-12-23 22:25:18 +00:00
										 |  |  | AVCodec *avcodec_find_encoder_by_name(const char *name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AVCodec *p; | 
					
						
							|  |  |  |     p = first_avcodec; | 
					
						
							|  |  |  |     while (p) { | 
					
						
							|  |  |  |         if (p->encode != NULL && strcmp(name,p->name) == 0) | 
					
						
							|  |  |  |             return p; | 
					
						
							|  |  |  |         p = p->next; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | AVCodec *avcodec_find_decoder(enum CodecID id) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AVCodec *p; | 
					
						
							|  |  |  |     p = first_avcodec; | 
					
						
							|  |  |  |     while (p) { | 
					
						
							|  |  |  |         if (p->decode != NULL && p->id == id) | 
					
						
							|  |  |  |             return p; | 
					
						
							|  |  |  |         p = p->next; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AVCodec *avcodec_find_decoder_by_name(const char *name) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AVCodec *p; | 
					
						
							|  |  |  |     p = first_avcodec; | 
					
						
							|  |  |  |     while (p) { | 
					
						
							|  |  |  |         if (p->decode != NULL && strcmp(name,p->name) == 0) | 
					
						
							|  |  |  |             return p; | 
					
						
							|  |  |  |         p = p->next; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AVCodec *avcodec_find(enum CodecID id) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     AVCodec *p; | 
					
						
							|  |  |  |     p = first_avcodec; | 
					
						
							|  |  |  |     while (p) { | 
					
						
							|  |  |  |         if (p->id == id) | 
					
						
							|  |  |  |             return p; | 
					
						
							|  |  |  |         p = p->next; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     const char *codec_name; | 
					
						
							|  |  |  |     AVCodec *p; | 
					
						
							|  |  |  |     char buf1[32]; | 
					
						
							| 
									
										
										
										
											2002-04-22 19:57:26 +00:00
										 |  |  |     char channels_str[100]; | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |     int bitrate; | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (encode) | 
					
						
							|  |  |  |         p = avcodec_find_encoder(enc->codec_id); | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         p = avcodec_find_decoder(enc->codec_id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (p) { | 
					
						
							|  |  |  |         codec_name = p->name; | 
					
						
							|  |  |  |     } else if (enc->codec_name[0] != '\0') { | 
					
						
							|  |  |  |         codec_name = enc->codec_name; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         /* output avi tags */ | 
					
						
							|  |  |  |         if (enc->codec_type == CODEC_TYPE_VIDEO) { | 
					
						
							|  |  |  |             snprintf(buf1, sizeof(buf1), "%c%c%c%c",  | 
					
						
							|  |  |  |                      enc->codec_tag & 0xff, | 
					
						
							|  |  |  |                      (enc->codec_tag >> 8) & 0xff, | 
					
						
							|  |  |  |                      (enc->codec_tag >> 16) & 0xff, | 
					
						
							|  |  |  |                      (enc->codec_tag >> 24) & 0xff); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         codec_name = buf1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     switch(enc->codec_type) { | 
					
						
							|  |  |  |     case CODEC_TYPE_VIDEO: | 
					
						
							|  |  |  |         snprintf(buf, buf_size, | 
					
						
							|  |  |  |                  "Video: %s%s", | 
					
						
							|  |  |  |                  codec_name, enc->flags & CODEC_FLAG_HQ ? " (hq)" : ""); | 
					
						
							| 
									
										
										
										
											2001-08-11 19:04:31 +00:00
										 |  |  |         if (enc->codec_id == CODEC_ID_RAWVIDEO) { | 
					
						
							|  |  |  |             snprintf(buf + strlen(buf), buf_size - strlen(buf), | 
					
						
							|  |  |  |                      ", %s", | 
					
						
							| 
									
										
										
										
											2003-01-11 00:07:06 +00:00
										 |  |  |                      avcodec_get_pix_fmt_name(enc->pix_fmt)); | 
					
						
							| 
									
										
										
										
											2001-08-11 19:04:31 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         if (enc->width) { | 
					
						
							|  |  |  |             snprintf(buf + strlen(buf), buf_size - strlen(buf), | 
					
						
							|  |  |  |                      ", %dx%d, %0.2f fps", | 
					
						
							|  |  |  |                      enc->width, enc->height,  | 
					
						
							|  |  |  |                      (float)enc->frame_rate / FRAME_RATE_BASE); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2002-10-10 17:12:55 +00:00
										 |  |  |         if (encode) { | 
					
						
							|  |  |  |             snprintf(buf + strlen(buf), buf_size - strlen(buf), | 
					
						
							|  |  |  |                      ", q=%d-%d", enc->qmin, enc->qmax); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |         bitrate = enc->bit_rate; | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         break; | 
					
						
							|  |  |  |     case CODEC_TYPE_AUDIO: | 
					
						
							|  |  |  |         snprintf(buf, buf_size, | 
					
						
							|  |  |  |                  "Audio: %s", | 
					
						
							|  |  |  |                  codec_name); | 
					
						
							| 
									
										
										
										
											2002-04-09 04:52:49 +00:00
										 |  |  |         switch (enc->channels) { | 
					
						
							|  |  |  |             case 1: | 
					
						
							| 
									
										
										
										
											2002-04-22 19:57:26 +00:00
										 |  |  |                 strcpy(channels_str, "mono"); | 
					
						
							| 
									
										
										
										
											2002-04-09 04:52:49 +00:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case 2: | 
					
						
							| 
									
										
										
										
											2002-04-22 19:57:26 +00:00
										 |  |  |                 strcpy(channels_str, "stereo"); | 
					
						
							| 
									
										
										
										
											2002-04-09 04:52:49 +00:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             case 6: | 
					
						
							| 
									
										
										
										
											2002-04-22 19:57:26 +00:00
										 |  |  |                 strcpy(channels_str, "5:1"); | 
					
						
							| 
									
										
										
										
											2002-04-09 04:52:49 +00:00
										 |  |  |                 break; | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 sprintf(channels_str, "%d channels", enc->channels); | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         if (enc->sample_rate) { | 
					
						
							|  |  |  |             snprintf(buf + strlen(buf), buf_size - strlen(buf), | 
					
						
							|  |  |  |                      ", %d Hz, %s", | 
					
						
							|  |  |  |                      enc->sample_rate, | 
					
						
							| 
									
										
										
										
											2002-04-09 04:52:49 +00:00
										 |  |  |                      channels_str); | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2002-04-09 04:52:49 +00:00
										 |  |  |          | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |         /* for PCM codecs, compute bitrate directly */ | 
					
						
							|  |  |  |         switch(enc->codec_id) { | 
					
						
							|  |  |  |         case CODEC_ID_PCM_S16LE: | 
					
						
							|  |  |  |         case CODEC_ID_PCM_S16BE: | 
					
						
							|  |  |  |         case CODEC_ID_PCM_U16LE: | 
					
						
							|  |  |  |         case CODEC_ID_PCM_U16BE: | 
					
						
							| 
									
										
										
										
											2001-09-24 23:29:46 +00:00
										 |  |  |             bitrate = enc->sample_rate * enc->channels * 16; | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |             break; | 
					
						
							|  |  |  |         case CODEC_ID_PCM_S8: | 
					
						
							|  |  |  |         case CODEC_ID_PCM_U8: | 
					
						
							|  |  |  |         case CODEC_ID_PCM_ALAW: | 
					
						
							|  |  |  |         case CODEC_ID_PCM_MULAW: | 
					
						
							| 
									
										
										
										
											2001-09-24 23:29:46 +00:00
										 |  |  |             bitrate = enc->sample_rate * enc->channels * 8; | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |             break; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             bitrate = enc->bit_rate; | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         break; | 
					
						
							|  |  |  |     default: | 
					
						
							| 
									
										
										
										
											2002-07-27 03:08:04 +00:00
										 |  |  |         av_abort(); | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2002-10-10 17:12:55 +00:00
										 |  |  |     if (encode) { | 
					
						
							|  |  |  |         if (enc->flags & CODEC_FLAG_PASS1) | 
					
						
							|  |  |  |             snprintf(buf + strlen(buf), buf_size - strlen(buf), | 
					
						
							|  |  |  |                      ", pass 1"); | 
					
						
							|  |  |  |         if (enc->flags & CODEC_FLAG_PASS2) | 
					
						
							|  |  |  |             snprintf(buf + strlen(buf), buf_size - strlen(buf), | 
					
						
							|  |  |  |                      ", pass 2"); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |     if (bitrate != 0) { | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |         snprintf(buf + strlen(buf), buf_size - strlen(buf),  | 
					
						
							| 
									
										
										
										
											2001-09-23 17:16:51 +00:00
										 |  |  |                  ", %d kb/s", bitrate / 1000); | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-05 09:56:13 +00:00
										 |  |  | unsigned avcodec_version( void ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   return LIBAVCODEC_VERSION_INT; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2001-08-11 19:04:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-12 15:53:25 +00:00
										 |  |  | unsigned avcodec_build( void ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   return LIBAVCODEC_BUILD; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | /* must be called before any other functions */ | 
					
						
							|  |  |  | void avcodec_init(void) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2002-04-01 13:24:47 +00:00
										 |  |  |     static int inited = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (inited != 0) | 
					
						
							|  |  |  | 	return; | 
					
						
							|  |  |  |     inited = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-11 09:31:17 +00:00
										 |  |  |     //dsputil_init();
 | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  | /* this can be called after seeking and before trying to decode the next keyframe */ | 
					
						
							| 
									
										
										
										
											2002-04-24 01:24:06 +00:00
										 |  |  | void avcodec_flush_buffers(AVCodecContext *avctx) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |     int i; | 
					
						
							| 
									
										
										
										
											2002-04-24 01:24:06 +00:00
										 |  |  |     MpegEncContext *s = avctx->priv_data; | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |      | 
					
						
							|  |  |  |     switch(avctx->codec_id){ | 
					
						
							|  |  |  |     case CODEC_ID_MPEG1VIDEO: | 
					
						
							|  |  |  |     case CODEC_ID_H263: | 
					
						
							|  |  |  |     case CODEC_ID_RV10: | 
					
						
							|  |  |  |     case CODEC_ID_MJPEG: | 
					
						
							|  |  |  |     case CODEC_ID_MJPEGB: | 
					
						
							|  |  |  |     case CODEC_ID_MPEG4: | 
					
						
							|  |  |  |     case CODEC_ID_MSMPEG4V1: | 
					
						
							|  |  |  |     case CODEC_ID_MSMPEG4V2: | 
					
						
							|  |  |  |     case CODEC_ID_MSMPEG4V3: | 
					
						
							|  |  |  |     case CODEC_ID_WMV1: | 
					
						
							|  |  |  |     case CODEC_ID_WMV2: | 
					
						
							|  |  |  |     case CODEC_ID_H263P: | 
					
						
							|  |  |  |     case CODEC_ID_H263I: | 
					
						
							|  |  |  |     case CODEC_ID_SVQ1: | 
					
						
							|  |  |  |         for(i=0; i<MAX_PICTURE_COUNT; i++){ | 
					
						
							|  |  |  |            if(s->picture[i].data[0] && (   s->picture[i].type == FF_BUFFER_TYPE_INTERNAL | 
					
						
							|  |  |  |                                         || s->picture[i].type == FF_BUFFER_TYPE_USER)) | 
					
						
							| 
									
										
										
										
											2002-12-09 12:03:43 +00:00
										 |  |  |             avctx->release_buffer(avctx, (AVFrame*)&s->picture[i]); | 
					
						
							| 
									
										
										
										
											2003-01-06 18:09:27 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	s->last_picture.data[0] = s->next_picture.data[0] = NULL; | 
					
						
							| 
									
										
										
										
											2002-12-09 00:29:17 +00:00
										 |  |  |         break; | 
					
						
							|  |  |  |     default: | 
					
						
							|  |  |  |         //FIXME
 | 
					
						
							|  |  |  |         break; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2002-04-24 01:24:06 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-27 16:42:14 +00:00
										 |  |  | static int raw_encode_init(AVCodecContext *s) | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-27 16:42:14 +00:00
										 |  |  | static int raw_decode_frame(AVCodecContext *avctx, | 
					
						
							|  |  |  | 			    void *data, int *data_size, | 
					
						
							|  |  |  | 			    UINT8 *buf, int buf_size) | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     return -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-05-27 16:42:14 +00:00
										 |  |  | static int raw_encode_frame(AVCodecContext *avctx, | 
					
						
							|  |  |  | 			    unsigned char *frame, int buf_size, void *data) | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     return -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AVCodec rawvideo_codec = { | 
					
						
							|  |  |  |     "rawvideo", | 
					
						
							|  |  |  |     CODEC_TYPE_VIDEO, | 
					
						
							|  |  |  |     CODEC_ID_RAWVIDEO, | 
					
						
							|  |  |  |     0, | 
					
						
							| 
									
										
										
										
											2002-05-27 16:42:14 +00:00
										 |  |  |     raw_encode_init, | 
					
						
							|  |  |  |     raw_encode_frame, | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  |     NULL, | 
					
						
							| 
									
										
										
										
											2002-05-27 16:42:14 +00:00
										 |  |  |     raw_decode_frame, | 
					
						
							| 
									
										
										
										
											2001-07-22 14:18:56 +00:00
										 |  |  | }; |