* Add PCM support, assuming defaults of 44.1K and 2 channels.

This commit is contained in:
Justin Maggard 2009-10-12 21:07:14 +00:00
parent f3d9805d7b
commit ecec767f17
5 changed files with 82 additions and 1 deletions

View File

@ -190,6 +190,11 @@ GetAudioMetadata(const char * path, char * name)
strcpy(type, "ogg");
strcpy(mime, "application/ogg");
}
else if( ends_with(path, ".pcm") )
{
strcpy(type, "pcm");
strcpy(mime, "audio/L16");
}
else
{
DPRINTF(E_WARN, L_GENERAL, "Unhandled file extension on %s\n", path);

50
tagutils/tagutils-pcm.c Normal file
View File

@ -0,0 +1,50 @@
//=========================================================================
// FILENAME : tagutils-pcm.c
// DESCRIPTION : Return default PCM values.
//=========================================================================
// Copyright (c) 2009 NETGEAR, Inc. All Rights Reserved.
// based on software from Ron Pedde's FireFly Media Server project
//=========================================================================
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
static int
_get_pcmfileinfo(char *filename, struct song_metadata *psong)
{
struct stat file;
uint32_t sec, ms;
if( stat(filename, &file) != 0 )
{
DPRINTF(E_WARN, L_SCANNER, "Could not stat %s\n", filename);
return -1;
}
psong->file_size = file.st_size;
psong->bitrate = 1411200;
psong->samplerate = 44100;
psong->channels = 2;
sec = psong->file_size / (psong->bitrate / 8);
ms = ((psong->file_size % (psong->bitrate / 8)) * 1000) / (psong->bitrate / 8);
psong->song_length = (sec * 1000) + ms;
psong->lossless = 1;
asprintf(&(psong->mime), "audio/L16;rate=%d;channels=%d", psong->samplerate, psong->channels);
asprintf(&(psong->dlna_pn), "LPCM");
return 0;
}

22
tagutils/tagutils-pcm.h Normal file
View File

@ -0,0 +1,22 @@
//=========================================================================
// FILENAME : tagutils-pcm.h
//=========================================================================
// Copyright (c) 2009- NETGEAR, Inc. All Rights Reserved.
//=========================================================================
/* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
static int _get_pcmfileinfo(char *file, struct song_metadata *psong);

View File

@ -106,6 +106,7 @@ char *winamp_genre[] = {
#include "tagutils-flc.h"
#include "tagutils-asf.h"
#include "tagutils-wav.h"
#include "tagutils-pcm.h"
static int _get_tags(char *file, struct song_metadata *psong);
static int _get_fileinfo(char *file, struct song_metadata *psong);
@ -128,6 +129,7 @@ static taghandler taghandlers[] = {
{ "ogg", 0, _get_oggfileinfo },
{ "asf", 0, _get_asffileinfo },
{ "wav", _get_wavtags, _get_wavfileinfo },
{ "pcm", 0, _get_pcmfileinfo },
{ NULL, 0 }
};
@ -141,6 +143,7 @@ static taghandler taghandlers[] = {
#include "tagutils-flc.c"
#include "tagutils-asf.c"
#include "tagutils-wav.c"
#include "tagutils-pcm.c"
//*********************************************************************************
// freetags()

View File

@ -196,7 +196,8 @@ is_audio(const char * file)
ends_with(file, ".fla") || ends_with(file, ".flc") ||
ends_with(file, ".m4a") || ends_with(file, ".aac") ||
ends_with(file, ".mp4") || ends_with(file, ".m4p") ||
ends_with(file, ".wav") || ends_with(file, ".ogg"));
ends_with(file, ".wav") || ends_with(file, ".ogg") ||
ends_with(file, ".pcm"));
}
int