changeset 6200:e604be87613d

codecs.conf versioning - patch by Joey Parrish <joey@yunamusic.com>
author arpi
date Sun, 26 May 2002 22:39:38 +0000
parents d4206ea88ffa
children f454e289070f
files DOCS/tech/codecs.conf.txt codec-cfg.c codec-cfg.h etc/codecs.conf
diffstat 4 files changed, 41 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/DOCS/tech/codecs.conf.txt	Sun May 26 22:18:59 2002 +0000
+++ b/DOCS/tech/codecs.conf.txt	Sun May 26 22:39:38 2002 +0000
@@ -33,6 +33,18 @@
 human readers. For example, all of the open source decoders that MPlayer
 implements natively are grouped in one section.
 
+Release Number
+--------------
+Your codecs.conf now requires a release number to avoid codec release
+incompatibilities. The format is simple: (YYYYMMDD)
+
+release 20020520
+
+Whenever changes are made to the codecs that *require* an updated
+codecs.conf, then MPlayer will no longer accept outdated versions.
+It is not recommended to change this line unless you know exactly
+what you are doing.
+
 Video Codecs
 ------------
 Let's jump right in with an example. Here is an example video codec block:
--- a/codec-cfg.c	Sun May 26 22:18:59 2002 +0000
+++ b/codec-cfg.c	Sun May 26 22:39:38 2002 +0000
@@ -368,10 +368,10 @@
 static int line_num = 0;
 static char *line;
 static char *token[MAX_NR_TOKEN];
+static int read_nextline = 1;
 
 static int get_token(int min, int max)
 {
-	static int read_nextline = 1;
 	static int line_pos;
 	int i;
 	char c;
@@ -466,15 +466,33 @@
 		mp_msg(MSGT_CODECCFG,MSGL_FATAL,"can't get memory for 'line': %s\n", strerror(errno));
 		return 0;
 	}
+	read_nextline = 1;
 
 	/*
-	 * check if the cfgfile starts with 'audiocodec' or
-	 * with 'videocodec'
+	 * this only catches release lines at the start of 
+	 * codecs.conf, before audiocodecs and videocodecs.
 	 */
 	while ((tmp = get_token(1, 1)) == RET_EOL)
 		/* NOTHING */;
 	if (tmp == RET_EOF)
 		goto out;
+	if (!strcmp(token[0], "release")) {
+		if (get_token(1, 2) < 0)
+			goto err_out_parse_error;
+		tmp = atoi(token[0]);
+		if (tmp < CODEC_CFG_MIN)
+			goto err_out_release_num;
+		while ((tmp = get_token(1, 1)) == RET_EOL)
+			/* NOTHING */;
+		if (tmp == RET_EOF)
+			goto out;
+	} else
+		goto err_out_release_num;
+
+	/*
+	 * check if the next block starts with 'audiocodec' or
+	 * with 'videocodec'
+	 */
 	if (!strcmp(token[0], "audiocodec") || !strcmp(token[0], "videocodec"))
 		goto loop_enter;
 	goto err_out_parse_error;
@@ -652,11 +670,15 @@
 
 	free(line);
 	line=NULL;
+	line_num = 0;
 	fclose(fp);
 	return 0;
 err_out_not_valid:
 	mp_msg(MSGT_CODECCFG,MSGL_ERR,"codec is not defined correctly");
 	goto err_out_print_linenum;
+err_out_release_num:
+	mp_msg(MSGT_CODECCFG,MSGL_ERR,"this codecs.conf is too old, incompatible with this mplayer release!");
+	goto err_out_print_linenum;
 }
 
 codecs_t *find_audio_codec(unsigned int fourcc, unsigned int *fourccmap,
--- a/codec-cfg.h	Sun May 26 22:18:59 2002 +0000
+++ b/codec-cfg.h	Sun May 26 22:39:38 2002 +0000
@@ -1,6 +1,8 @@
 #ifndef __CODEC_CFG_H
 #define __CODEC_CFG_H
 
+#define CODEC_CFG_MIN	20020520
+
 #define CODECS_MAX_FOURCC	32
 #define CODECS_MAX_OUTFMT	16
 #define CODECS_MAX_INFMT	16
--- a/etc/codecs.conf	Sun May 26 22:18:59 2002 +0000
+++ b/etc/codecs.conf	Sun May 26 22:39:38 2002 +0000
@@ -3,6 +3,8 @@
 ;  Before editing this file, please read DOCS/tech/codecs.conf.txt !
 ;=============================================================================
 
+release 20020520
+
 ;=============================================================================
 ;                   VIDEO CODECS
 ;=============================================================================