public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
* Two updated patches
@ 2008-12-23 16:07 Christian Hoene
  2008-12-23 23:04 ` Marcel Holtmann
  0 siblings, 1 reply; 2+ messages in thread
From: Christian Hoene @ 2008-12-23 16:07 UTC (permalink / raw)
  To: linux-bluetooth

[-- Attachment #1: Type: text/plain, Size: 122 bytes --]

Hello,

again. Hopefully, I got all coding style rules right this time.
Here my two patches.

Merry Christmas

 Christian

[-- Attachment #2: patch_again_empty_frames.diff --]
[-- Type: text/x-patch, Size: 349 bytes --]

diff --git a/sbc/sbc.c b/sbc/sbc.c
index 5411893..a3a3ac1 100644
--- a/sbc/sbc.c
+++ b/sbc/sbc.c
@@ -1196,6 +1196,9 @@ int sbc_decode(sbc_t *sbc, void *input, int input_len, void *output,
 	if (written)
 		*written = 0;
 
+	if (framelen <= 0)
+		return framelen;
+
 	samples = sbc_synthesize_audio(&priv->dec_state, &priv->frame);
 
 	ptr = output;

[-- Attachment #3: patch_for_more_cmdline_parameters.diff --]
[-- Type: text/x-patch, Size: 3714 bytes --]

diff --git a/sbc/sbcenc.c b/sbc/sbcenc.c
index 74a3434..e553935 100644
--- a/sbc/sbcenc.c
+++ b/sbc/sbcenc.c
@@ -72,8 +72,8 @@ static ssize_t __write(int fd, const void *buf, size_t count)
 	return pos;
 }
 
-static void encode(char *filename, int subbands,
-					int bitpool, int joint, int snr)
+static void encode(char *filename, int subbands, int bitpool, int joint,
+			int dualchannel, int snr, int blocks)
 {
 	struct au_header *au_hdr;
 	unsigned char input[2048], output[2048];
@@ -131,12 +131,24 @@ static void encode(char *filename, int subbands,
 
 	sbc.subbands = subbands == 4 ? SBC_SB_4 : SBC_SB_8;
 
-	if (BE_INT(au_hdr->channels) == 1)
+	if (BE_INT(au_hdr->channels) == 1) {
 		sbc.mode = SBC_MODE_MONO;
-	else if (joint)
+		if (joint || dualchannel) {
+			fprintf(stderr, "Audio file is mono but joint or"
+				"dualchannel mode has been specified\n");
+			goto done;
+		}
+	} else if (joint && !dualchannel)
 		sbc.mode = SBC_MODE_JOINT_STEREO;
-	else
+	else if (!joint && dualchannel)
+		sbc.mode = SBC_MODE_DUAL_CHANNEL;
+	else if (!joint && !dualchannel)
 		sbc.mode = SBC_MODE_STEREO;
+	else {
+		fprintf(stderr, "Both joint and dualchannel mode have been"
+				"specified\n");
+		goto done;
+	}
 
 	sbc.endian = SBC_BE;
 	count = BE_INT(au_hdr->data_size);
@@ -145,15 +157,20 @@ static void encode(char *filename, int subbands,
 
 	sbc.bitpool = bitpool;
 	sbc.allocation = snr ? SBC_AM_SNR : SBC_AM_LOUDNESS;
+	sbc.blocks = blocks == 4 ? SBC_BLK_4 :
+			blocks == 8 ? SBC_BLK_8 :
+			blocks == 12 ? SBC_BLK_12 : SBC_BLK_16;
 
-	if(verbose) {
+	if (verbose) {
 		fprintf(stderr,"encoding %s with rate %d, %d subbands, "
-			"%d bits, allocation method %s and mode %s\n",
+			"%d bits, allocation method %s, mode %s, "
+			"and %d blocks\n",
 			filename, srate, subbands, bitpool,
 			sbc.allocation == SBC_AM_SNR ? "SNR" : "LOUDNESS",
 			sbc.mode == SBC_MODE_MONO ? "MONO" :
 					sbc.mode == SBC_MODE_STEREO ?
-						"STEREO" : "JOINTSTEREO");
+						"STEREO" : "JOINTSTEREO",
+			blocks);
 	}
 
 	while (1) {
@@ -209,7 +226,10 @@ static void usage(void)
 		"\t-s, --subbands       Number of subbands to use (4 or 8)\n"
 		"\t-b, --bitpool        Bitpool value (default is 32)\n"
 		"\t-j, --joint          Joint stereo\n"
+		"\t-d, --dualchannel    Dual channel\n"
 		"\t-S, --snr            Use SNR mode (default is loudness)\n"
+		"\t-B, --blocks         Number of blocks to use (4, 8, 12 "
+			"or 16)\n"
 		"\n");
 }
 
@@ -219,15 +239,18 @@ static struct option main_options[] = {
 	{ "subbands",	1, 0, 's' },
 	{ "bitpool",	1, 0, 'b' },
 	{ "joint",	0, 0, 'j' },
+	{ "dualchannel",0, 0, 'd' },
 	{ "snr",	0, 0, 'S' },
+	{ "blocks",	1, 0, 'B' },
 	{ 0, 0, 0, 0 }
 };
 
 int main(int argc, char *argv[])
 {
-	int i, opt, subbands = 8, bitpool = 32, joint = 0, snr= 0;
+	int i, opt, subbands = 8, bitpool = 32, joint = 0, dualchannel = 0;
+	int snr = 0, blocks = 16;
 
-	while ((opt = getopt_long(argc, argv, "+hvs:b:jS",
+	while ((opt = getopt_long(argc, argv, "+hvs:b:jdSB:",
 						main_options, NULL)) != -1) {
 		switch(opt) {
 		case 'h':
@@ -255,10 +278,24 @@ int main(int argc, char *argv[])
 			joint = 1;
 			break;
 
+		case 'd':
+			dualchannel = 1;
+			break;
+
 		case 'S':
 			snr = 1;
 			break;
 
+		case 'B':
+			blocks = atoi(optarg);
+			if (blocks != 16 && blocks != 12 &&
+				blocks != 8 && blocks != 4) {
+				fprintf(stderr, "Invalid blocks %d!\n",
+					blocks);
+				exit(1);
+			}
+			break;
+
 		default:
 			exit(1);
 		}
@@ -274,7 +311,8 @@ int main(int argc, char *argv[])
 	}
 
 	for (i = 0; i < argc; i++)
-		encode(argv[i], subbands, bitpool, joint, snr);
+		encode(argv[i], subbands, bitpool, joint, dualchannel,
+			snr, blocks);
 
 	return 0;
 }

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: Two updated patches
  2008-12-23 16:07 Two updated patches Christian Hoene
@ 2008-12-23 23:04 ` Marcel Holtmann
  0 siblings, 0 replies; 2+ messages in thread
From: Marcel Holtmann @ 2008-12-23 23:04 UTC (permalink / raw)
  To: Christian Hoene; +Cc: linux-bluetooth

Hi Christian,

> again. Hopefully, I got all coding style rules right this time.
> Here my two patches.

so I applied both patches, but I actually had to touch your options
patch to make it look a little bit nicer and fix some pending coding
style stuff. Don't worry, non of that is obvious. The cases where you
have too many options or statements in if/while etc. for format strings
are kind nasty. The reason for being so strict here is that the code
must remain easy readable even after years. The right and more clean
indentation is crucial here 

Also in the future please use git-format-patch so I can just commit them
directly. That way also your name shows up in the repository. And that
way you get forced to write a commit message. If I have to write the
commit message by myself, I don't bother changing the author ;)

Regards

Marcel



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-12-23 23:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-23 16:07 Two updated patches Christian Hoene
2008-12-23 23:04 ` Marcel Holtmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox