[Mplayer-cvslog] CVS: main codecs.conf,NONE,1.1 codec-cfg.c,NONE,1.1 codec-cfg.h,NONE,1.1 Makefile,1.10,1.11
GEREOFFY
arpi_esp at users.sourceforge.net
Sat Apr 7 01:20:48 CEST 2001
- Previous message: [Mplayer-cvslog] CVS: main dec_audio.c,1.1,1.2 dll_init.c,1.3,1.4 mplayer.c,1.36,1.37 stheader.h,1.1,1.2
- Next message: [Mplayer-cvslog] CVS: main codec-cfg.c,1.1,1.2 codecs.conf,1.1,NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/mplayer/main
In directory usw-pr-cvs1:/tmp/cvs-serv31765
Modified Files:
Makefile
Added Files:
codecs.conf codec-cfg.c codec-cfg.h
Log Message:
imported codec-cfg, small fixes
--- NEW FILE ---
; Example codecs config file.
; It is not functional yet! until we finish config loader,
; mplayer will use codecs.c!!!
videocodec mpeg4
info "Microsoft MPEG-4 v1/v2"
comment "No postprocessing"
fourcc MPG4,mpg4
fourcc MP42,mp42
driver vfw
dll "mpg4c32.dll"
out YUY2 noflip,yuvhack
out RGB32,RGB24,RGB15
videocodec divx
info "DivX ;-) (MS MPEG-4 v3)"
comment "DivX rulez ;-)"
fourcc MP43,mp43 div3 ; fourcc mapping to div3
fourcc DIV5,div5 div3
fourcc DIV6,div6 div4
fourcc DIV3,div3,DIV4,div3
driver vfw
dll "divxc32.dll"
out YUY2 noflip,yuvhack
out RGB32,RGB24,RGB15
videocodec divxds
info "DivX ;-) (MS MPEG-4 v3)"
comment "DivX rulez ;-)"
fourcc MP43,mp43 div3 ; fourcc mapping to div3
fourcc DIV5,div5 div3
fourcc DIV6,div6 div4
fourcc DIV3,div3,DIV4,div3
driver dshow
dll "divx_c32.ax"
guid 0x82CCd3E0, 0xF71A, 0x11D0, 0x9f, 0xe5, 0x00, 0x60, 0x97, 0x78, 0xaa, 0xaa
out YUY2 noflip
out RGB32,RGB24,RGB16,RGB15 noflip
videocodec odivx
info "OpenDivX (MPEG-4 v2)"
fourcc DIVX,divx
fourcc DIV1,div1 divx
driver odivx
out YV12 noflip
videocodec indeo5
info "Intel Indeo 5"
fourcc IV50,iv50
driver vfw
dll "ir50_32.dll"
out YUY2 noflip
out RGB32,RGB24,RGB15 noflip
videocodec indeo4
info "Intel Indeo 4.1"
comment "upside-down"
fourcc IV41,iv41
driver vfw
dll "ir41_32.dll"
out RGB24,RGB15 flip
videocodec indeo3
info "Intel Indeo 3.1/3.2"
comment "upside-down"
fourcc IV31,iv31
fourcc IV32,iv32
driver vfw
dll "ir32_32.dll"
out RGB24,RGB15 flip
videocodec cvid
info "Cinepak Video"
fourcc cvid
driver vfw
dll "msvidc32.dll"
out YUY2 noflip
out RGB24,RGB15 noflip
videocodec cram
info "CRAM"
fourcc cram,CRAM
driver vfw
dll "msvidc32.dll"
out RGB24,RGB15 noflip
videocodec vcr2
info "ATI VCR-2"
fourcc VCR2
driver vfw
dll "ativcr2.dll"
out YUY2 noflip
out RGB32,RGB24,RGB15 noflip
videocodec i263
info "I263"
comment "not tested"
fourcc I263,i263
driver vfw
dll "i263_32.drv"
out RGB32,RGB24,RGB15 noflip
videocodec mjpeg
info "Motion JPEG"
fourcc MJPG
driver vfw
dll "mcmjpg32.dll"
; dll "m3jpeg32.dll"
out YUY2 noflip
out RGB32,RGB24,RGB15 noflip
videocodec wmv1
info "Windows Media Video 7"
fourcc WMV1
driver dshow
dll "wmvds32.ax"
guid 0x4facbba1, 0xffd8, 0x4cd7, 0x82, 0x28, 0x61, 0xe2, 0xf6, 0x5c, 0xb1, 0xae
out YUY2 noflip
out RGB32,RGB24,RGB16,RGB15 noflip
audiocodec divx
info "DivX audio (WMA)"
format 0x160
format 0x161
driver acm
dll "divxa32.acm"
audiocodec msadpcm
info "MS ADPCM"
format 0x2
driver acm
dll "msadp32.acm"
audiocodec mp3acm
info "MPEG layer-3"
comment "Optimized to Intel MMX/SSE"
format 0x55
driver acm
dll "l3codeca.acm"
flags seekable
audiocodec mp3
info "MPEG layer-2,3"
comment "Optimized to AMD 3Dnow!"
format 0x50
format 0x55
driver mp3lib
flags seekable
audiocodec imaadpcm
info "IMA ADPCM"
format 0x11
driver acm
dll "imaadp32.acm"
audiocodec msgsmacm
info "MS GSM"
format 0x31
format 0x32
driver acm
dll "msgsm32.acm"
audiocodec msgsm
info "MS GSM"
format 0x31
format 0x32
driver msgsm
audiocodec voxware
info "VoxWare"
format 0x75
driver dshow
dll "voxmsdec.ax"
guid 0x73f7a062, 0x8829, 0x11d1, 0xb5, 0x50, 0x00, 0x60, 0x97, 0x24, 0x2d, 0x8d
--- NEW FILE ---
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <ctype.h>
#include <assert.h>
#include <string.h>
#include "libvo/video_out.h"
#include "codec-cfg.h"
#define MALLOC_ADD 10
#define MAX_LINE_LEN 1000
#define STATE_MASK ((1<<7)-1)
#define GOT_NAME (1<<0)
#define GOT_INFO (1<<1)
#define GOT_FOURCC (1<<2)
#define GOT_FORMAT (1<<3)
#define GOT_DRIVER (1<<4)
#define GOT_DLL (1<<5)
#define GOT_OUT (1<<6)
#define RET_EOF -1
#define RET_EOL -2
#define RET_OK 0
FILE *fp;
int line_num = 0;
int line_pos; /* line pos */
int firstdef = 1;
char *line;
char *token;
int nr_codecs = 0;
int get_token(void)
{
static int read_nextline = 1;
if (read_nextline) {
if (!fgets(line, MAX_LINE_LEN, fp))
goto ret_eof;
line_pos = 0;
++line_num;
read_nextline = 0;
}
while (isspace(line[line_pos]))
++line_pos;
if (line[line_pos] == '\0' || line[line_pos] == '#' ||
line[line_pos] == ';') {
read_nextline = 1;
goto ret_eol;
}
token = line + line_pos;
if (line[line_pos] == '"') {
token++;
for (/* NOTHING */; line[++line_pos] != '"' && line[line_pos];)
/* NOTHING */;
if (!line[line_pos]) {
read_nextline = 1;
goto ret_eol;
}
} else {
for (/* NOTHING */; !isspace(line[line_pos]); line_pos++)
/* NOTHING */;
}
line[line_pos] = '\0';
line_pos++;
#ifdef DEBUG
printf("get_token ok\n");
#endif
return RET_OK;
ret_eof:
#ifdef DEBUG
printf("get_token EOF\n");
#endif
token = NULL;
return RET_EOF;
ret_eol:
#ifdef DEBUG
printf("get_token EOL\n");
#endif
token = NULL;
return RET_EOL;
}
int add_to_fourcc(char *s, char *alias, unsigned int *fourcc,
unsigned int *map)
{
int i;
char **aliasp;
/* find first unused slot */
for (i = 0; i < CODECS_MAX_FOURCC && fourcc[i] != 0xffffffff; i++)
/* NOTHING */;
if (i == CODECS_MAX_FOURCC) {
printf("too many fourcc...\n");
return 0;
}
#if 1
if (alias) {
do {
fourcc[i] = *((unsigned int *) s);
map[i] = *((unsigned int *) alias);
s += 4;
i++;
} while (*(s++) == ',');
} else {
do {
fourcc[i] = *((unsigned int *) s);
map[i] = *((unsigned int *) s);
s += 4;
i++;
} while (*(s++) == ',');
}
#else
if (alias)
aliasp = &alias;
else
aliasp = &s;
do {
fourcc[i] = *((unsigned int *) s);
map[i++] = *((unsigned int *) (*aliasp));
s += 4;
} while (*(s++) == ',');
#endif
if (*(--s) != '\0')
return 0;
return 1;
}
int add_to_format(char *s, unsigned int *format)
{
return 1;
}
short get_flags(char *s)
{
if (!s)
return 0;
return 1;
}
int add_to_out(char *sfmt, char *sflags, unsigned int *outfmt,
unsigned char *outflags)
{
static char *fmtstr[] = {
"YUY2",
"YV12",
"RGB8",
"RGB15",
"RGB16",
"RGB24",
"RGB32",
"BGR8",
"BGR15",
"BGR16",
"BGR24",
"BGR32",
NULL
};
static unsigned int fmtnum[] = {
IMGFMT_YUY2,
IMGFMT_YV12,
IMGFMT_RGB|8,
IMGFMT_RGB|15,
IMGFMT_RGB|16,
IMGFMT_RGB|24,
IMGFMT_RGB|32,
IMGFMT_BGR|8,
IMGFMT_BGR|15,
IMGFMT_BGR|16,
IMGFMT_BGR|24,
IMGFMT_BGR|32
};
int i, j;
unsigned char flags;
for (i = 0; i < CODECS_MAX_OUTFMT && outfmt[i] != 0xffffffff; i++)
/* NOTHING */;
if (i == CODECS_MAX_FOURCC) {
printf("too many out...\n");
return 0;
}
flags = get_flags(sflags);
do {
for (j = 0; fmtstr[i] != NULL; j++)
if (!strncmp(sfmt, fmtstr[j], strlen(fmtstr[j])))
break;
if (fmtstr[j] == NULL)
return 0;
outfmt[i] = fmtnum[j];
outflags[i] = flags;
sfmt+=strlen(fmtstr[j]);
} while (*(sfmt++) == ',');
if (*(--sfmt) != '\0')
return 0;
return 1;
}
short get_driver(char *s)
{
return 0;
}
#define DEBUG
codecs_t *parse_codec_cfg(char *cfgfile)
{
#define PRINT_LINENUM printf("%s(%d): ", cfgfile, line_num)
#define GET_MEM\
do {\
if (!(codecs = (codecs_t *) realloc(codecs,\
sizeof(codecs_t) * (nr_codecs + 1)))) {\
perror("parse_codec_cfg: can't realloc 'codecs'");\
goto err_out;\
}\
} while (0)
codecs_t *codecs = NULL;
int free_slots = 0;
int tmp, i;
int state = 0;
char *param1;
#ifdef DEBUG
assert(cfgfile != NULL);
#endif
printf("Reading codec config file: %s\n", cfgfile);
if ((line = (char *) malloc(MAX_LINE_LEN + 1)) == NULL) {
perror("parse_codec_cfg: can't get memory for 'line'");
return NULL;
}
if ((fp = fopen(cfgfile, "r")) == NULL) {
printf("parse_codec_cfg: can't open '%s': %s\n", cfgfile, strerror(errno));
free(line);
return NULL;
}
line_pos = 0;
line[0] = '\0'; /* forces get_token to read next line */
for (;;) {
tmp = get_token();
if (tmp == RET_EOF)
goto eof_out;
if (tmp == RET_EOL)
continue;
if (!strcmp(token, "audiocodec") || !strcmp(token, "videocodec")) {
if (codecs) {
// tmp = ~state & STATE_MASK;
// if (tmp != GOT_FOURCC && tmp != GOT_FORMAT)
// goto parse_error_out;
nr_codecs++;
}
PRINT_LINENUM;
GET_MEM;
state = 0;
codecs[nr_codecs].comment = NULL;
memset(codecs[nr_codecs].fourcc, 0xff,
sizeof(codecs[nr_codecs].fourcc) );
/*
memset(codecs[nr_codecs].fourccmap, 0xff,
sizeof(codecs[nr_codecs].fourccmap) *
CODECS_MAX_FOURCC);
*/
memset(codecs[nr_codecs].outfmt, 0xff,
sizeof(codecs[nr_codecs].outfmt) );
if (*token == 'a') { /* audiocodec */
printf("audio");
codecs[nr_codecs].flags |= CODECS_FLAG_AUDIO;
} else if (*token == 'v') { /* videocodec */
printf("video");
codecs[nr_codecs].flags &= !CODECS_FLAG_AUDIO;
} else {
printf("itt valami nagyon el van baszva\n");
goto err_out;
}
if (get_token() < 0)
goto parse_error_out;
codecs[nr_codecs].name = strdup(token);
state |= GOT_NAME;
printf(" %s\n", codecs[nr_codecs].name);
} else if (!strcmp(token, "info")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("info");
if (state & GOT_INFO || get_token() < 0)
goto parse_error_out;
codecs[nr_codecs].info = strdup(token);
state |= GOT_INFO;
printf(" %s\n", codecs[nr_codecs].info);
} else if (!strcmp(token, "comment")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("comment");
if (get_token() < 0)
goto parse_error_out;
#if 1
if (!codecs[nr_codecs].comment)
codecs[nr_codecs].comment = strdup(token);
printf(" %s\n", codecs[nr_codecs].comment);
#else
add_comment(token, &codecs[nr_codecs].comment);
printf(" FIXMEEEEEEEEEEEEEEE\n");
#endif
} else if (!strcmp(token, "fourcc")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("fourcc");
if (codecs[nr_codecs].flags & CODECS_FLAG_AUDIO) {
printf("\n'fourcc' in audiocodec definition!\n");
goto err_out;
}
if (get_token() < 0)
goto parse_error_out;
param1 = strdup(token);
get_token();
if (!add_to_fourcc(param1, token,
codecs[nr_codecs].fourcc,
codecs[nr_codecs].fourccmap))
goto err_out;
state |= GOT_FOURCC;
printf(" %s: %s\n", param1, token);
free(param1);
} else if (!strcmp(token, "format")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("format");
if (!(codecs[nr_codecs].flags & CODECS_FLAG_AUDIO)) {
printf("\n'format' in videocodec definition!\n");
goto err_out;
}
if (get_token() < 0)
goto parse_error_out;
if (!add_to_format(token, codecs[nr_codecs].fourcc))
goto err_out;
state |= GOT_FORMAT;
printf(" %s\n", token);
} else if (!strcmp(token, "driver")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("driver");
if (get_token() < 0)
goto parse_error_out;
if ((codecs[nr_codecs].driver = get_driver(token)) == -1)
goto err_out;
printf(" %s\n", token);
} else if (!strcmp(token, "dll")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("dll");
if (get_token() < 0)
goto parse_error_out;
codecs[nr_codecs].dll = strdup(token);
printf(" %s\n", codecs[nr_codecs].dll);
} else if (!strcmp(token, "guid")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("guid");
if (get_token() < 0)
goto parse_error_out;
sscanf(token, "%ld,", &codecs[nr_codecs].guid.f1);
if (get_token() < 0)
goto parse_error_out;
sscanf(token, "%d,", &tmp);
codecs[nr_codecs].guid.f2 = tmp;
if (get_token() < 0)
goto parse_error_out;
sscanf(token, "%d,", &tmp);
codecs[nr_codecs].guid.f3 = tmp;
for (i = 0; i < 7; i++) {
if (get_token() < 0)
goto parse_error_out;
sscanf(token, "%d,", &tmp);
codecs[nr_codecs].guid.f4[i] = tmp;
}
if (get_token() < 0)
goto parse_error_out;
sscanf(token, "%d", &tmp);
codecs[nr_codecs].guid.f4[7] = tmp;
printf(" %s\n", token);
} else if (!strcmp(token, "out")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("out");
if (get_token() < 0)
goto parse_error_out;
param1 = strdup(token);
get_token();
if (!add_to_out(param1, token, codecs[nr_codecs].outfmt,
codecs[nr_codecs].outflags))
goto err_out;
printf(" %s: %s\n", param1, token);
free(param1);
} else if (!strcmp(token, "flags")) {
if (!(state & GOT_NAME))
goto parse_error_out;
PRINT_LINENUM;
printf("flags");
if (get_token() < 0)
goto parse_error_out;
printf(" %s\n", token);
} else
goto parse_error_out;
}
out:
free(line);
fclose(fp);
return codecs;
parse_error_out:
PRINT_LINENUM;
printf("parse error\n");
err_out:
printf("\nOops\n");
if (codecs)
free(codecs);
codecs = NULL;
goto out;
eof_out:
/* FIXME teljes az utolso config?? */
goto out;
}
#ifdef TESTING
int main(void)
{
codecs_t *codecs;
int i,j;
codecs = parse_codec_cfg("codecs.conf");
printf("total %d codecs parsed\n",nr_codecs);
for(i=0;i<nr_codecs;i++){
codecs_t *c=&codecs[i];
printf("\n============== codec %02d ===============\n",i);
printf("name='%s'\n",c->name);
printf("info='%s'\n",c->info);
printf("comment='%s'\n",c->comment);
printf("dll='%s'\n",c->dll);
printf("flags=%X driver=%d\n",c->flags,c->driver);
for(j=0;j<CODECS_MAX_FOURCC;j++){
if(c->fourcc[j]!=0xFFFFFFFF){
printf("fourcc %02d: %08X (%.4s) ===> %08X (%.4s)\n",j,c->fourcc[j],&c->fourcc[j],c->fourccmap[j],&c->fourccmap[j]);
}
}
}
return 0;
}
#endif
--- NEW FILE ---
#ifndef __CODEC_CFG_H
#define __CODEC_CFG_H
//#include <inttypes.h>
#ifndef IMGFMT_YV12
#define IMGFMT_YV12 0x32315659
#define IMGFMT_YUY2 (('2'<<24)|('Y'<<16)|('U'<<8)|'Y')
#define IMGFMT_RGB_MASK 0xFFFFFF00
#define IMGFMT_RGB (('R'<<24)|('G'<<16)|('B'<<8))
#define IMGFMT_BGR_MASK 0xFFFFFF00
#define IMGFMT_BGR (('B'<<24)|('G'<<16)|('R'<<8))
#endif
#define CODECS_MAX_FOURCC 16
#define CODECS_MAX_OUTFMT 16
#define CODECS_FLAG_AUDIO (1<<0)
#warning nem kellene ket typedef GUID-nak...
typedef struct {
long f1;
short f2;
short f3;
char f4[8];
} GUID;
typedef struct {
char *name;
char *info;
char *comment;
unsigned int fourcc[CODECS_MAX_FOURCC];
unsigned int fourccmap[CODECS_MAX_FOURCC];
short driver;
short flags;
char *dll;
GUID guid;
unsigned int outfmt[CODECS_MAX_OUTFMT];
unsigned char outflags[CODECS_MAX_OUTFMT];
} codecs_t;
codecs_t *parse_codec_cfg(char *cfgfile);
#endif
Index: Makefile
===================================================================
RCS file: /cvsroot/mplayer/main/Makefile,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -r1.10 -r1.11
*** Makefile 2001/03/30 03:06:46 1.10
--- Makefile 2001/04/06 23:20:46 1.11
***************
*** 18,21 ****
--- 18,23 ----
PRG_AVIP = aviparse
PRG_TV = tvision
+ PRG_CFG = codec-cfg
+
prefix = /usr/local
BINDIR = ${prefix}/bin
***************
*** 31,35 ****
# .PHONY: all clean
! all: $(PRG)
# $(PRG_AVIP)
--- 33,37 ----
# .PHONY: all clean
! all: $(PRG) $(PRG_CFG)
# $(PRG_AVIP)
***************
*** 74,77 ****
--- 76,82 ----
$(PRG_TV): .depend tvision.o $(OBJS) $(COMMONLIBS)
$(CC) $(CFLAGS) -o $(PRG_TV) tvision.o $(OBJS) -lm $(TERMCAP_LIB) $(VO_LIBS)
+
+ $(PRG_CFG): codec-cfg.c codec-cfg.h
+ $(CC) $(CFLAGS) codec-cfg.c -o $(PRG_CFG) -DTESTING
install: $(PRG)
_______________________________________________
Mplayer-cvslog mailing list
Mplayer-cvslog at lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/mplayer-cvslog
- Previous message: [Mplayer-cvslog] CVS: main dec_audio.c,1.1,1.2 dll_init.c,1.3,1.4 mplayer.c,1.36,1.37 stheader.h,1.1,1.2
- Next message: [Mplayer-cvslog] CVS: main codec-cfg.c,1.1,1.2 codecs.conf,1.1,NONE
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the MPlayer-cvslog
mailing list