'Linux API'에 해당되는 글 139건

  1. 2014.10.24 SALSA - Small ALSA
  2. 2014.10.23 alsa + ffmpeg 벤치마크(?)
  3. 2014.10.21 alsa 패키지 종류
  4. 2014.10.16 alsa 버전확인하기
  5. 2014.09.18 alsa 프로그래밍 정리
  6. 2014.09.16 alsa proc file system
  7. 2014.09.15 ALSA (Advanced Linux Sound Architecture)
  8. 2014.09.02 공유메모리
  9. 2013.08.20 timeval, gettimeofday()
  10. 2012.02.05 linux/joystick.h 파일
Linux API/alsa2014. 10. 24. 13:50
ALSA 홈페이지 뒤지다가 발견한 꽃 같은 녀석!
cpu 점유율은... cpu가 구려서 top 만 돌려서 힘들어 하는 녀석이라
비교하긴 힘들지만.. 5~10% 정도는 Mplayer 최대 부하 걸리는 녀석이 아니면 떨어트려 주는 듯

SALSA-Lib - Small ALSA Library
==============================

GENERAL
-------

SALSA-Lib is a small, light-weight, hot and spicy version of the ALSA
library, mainly for embedded systems with limited resources.
The library is designed to be source-level compatible with ALSA
library API for limited contents.  Most of function calls are inlined,
and accesses directly to the hardware via system calls.
Some components like ALSA sequencer aren't supported, and most of all,
the alsa-lib plugins and configurations are completely dropped.  Thus,
neither dmix nor format conversion is available with SALSA-lib.

CROSS-COMPILATION
-----------------

For compiling the library with a cross compiler, run like the
following:

% CC=arm-linux-gcc \
  ./configure --target=arm-linux --host=i686-linux

Don't forget to add "-linux" to the host option value.  Otherwise
configure script won't detect the host type correctly, and the shared
library won't be built properly.
[링크 : http://ftp://ftp.suse.com/pub/people/tiwai/salsa-lib/README] 

[링크 : http://www.alsa-project.org/main/index.php/ALSA_Library_API]
[링크 : http://www.alsa-project.org/main/index.php/SALSA-Library] << SALSA
[링크 : http://ftp://ftp.suse.com/pub/people/tiwai/salsa-lib/]


귀찮으면 --enable-everything 끗 ㅋㅋㅋ
$ ./configure --help
`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/bin', `/usr/lib' etc.  You can specify
an installation prefix other than `/usr' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-static[=PKGS]  build static libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --disable-pcm           disable PCM interface
  --disable-mixer         disable mixer interface
  --enable-rawmidi        enable rawmidi interface
  --enable-hwdep          enable hwdep interface
  --enable-timer          enable timer interface
  --enable-conf           enable dummy conf functions
  --enable-seq            enable seq functions
  --enable-tlv            enable TLV (dB) support
  --disable-user-elem     disable user-space control element support
  --enable-async          enable async handler support
  --enable-libasound      build a ABI-compatible libasound.so
  --disable-deprecated    don't mark deprecated attribute for non-working
                          functions
  --enable-output-buffer  support the string output via snd_output_*()
                          functions
  --disable-delight-valgrind
                          do not initialize unnecessary fields for ioctls
  --disable-symbolic-functions
                          use -Bsymbolic-functions option if available
                          (optmization for size and speed)
  --enable-float          support floatin-point unit
  --disable-4bit          drop the support for 4bit PCM (IMA ADPCM)
  --enable-abicheck       enable library ABI check
  --enable-everything     enable everything :)

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]      include additional configurations [automatic]
  --with-compat-version=VERSION
                          specify the compatible version with ALSA-lib
                          (default=1.0.25)
  --with-alsa-devdir=dir  directory with ALSA device files (default /dev/snd)

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor
  CXX         C++ compiler command
  CXXFLAGS    C++ compiler flags
  CXXCPP      C++ preprocessor
  F77         Fortran 77 compiler command
  FFLAGS      Fortran 77 compiler flags

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider. 
 

'Linux API > alsa' 카테고리의 다른 글

alsa 함수 - size / time  (0) 2014.11.17
alsa low latency  (0) 2014.11.03
alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
Posted by 구차니
Linux API/alsa2014. 10. 23. 17:04
buffer / period 값에 따라서 cpu 점유율이 천차만별이다.
call을 얼마나 하는지 이런건 한번 프로파일링 하던가 해봐야 할 듯

ARM926 / 454MHz

period_size: 8
buffer_size: 2040

period_size: 2048
buffer_size: 16384


cpu 점유율 20% 하락 효과 ㄷㄷ 

'Linux API > alsa' 카테고리의 다른 글

alsa low latency  (0) 2014.11.03
SALSA - Small ALSA  (0) 2014.10.24
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
alsa 프로그래밍 정리  (0) 2014.09.18
Posted by 구차니
Linux API/alsa2014. 10. 21. 12:22
머가 이리 많아! 라고 멘붕중이지만..
Driver는 말그대로 Kernel에 들어가는 Driver (snd / soundcore.ko ?)
Firmeware는 사운드 카드에 들어가는 펌웨어(이건 웬지 더 쓸일이 없어 보이네)
library는 libasound.so 사용자 라이브러리(1.0.28에서 memory leak 해결된 부분이 있다고 함
util은 검증용 같고..
tools는 mixer등의 도구들

PackageStable Release

(2012-01-25)

Development ReleaseDescription
Driver (alsa-driver) 1.0.25 none Kernel drivers
Firmware alsa-firmware) 1.0.28 none Firmware for cards that require it
Library (alsa-lib) 1.0.28 none Userspace library
Plugins (alsa-plugins) 1.0.28 none Additional library plugins Eg.jack, pulse, maemo ...
Utilities (alsa-utils) 1.0.28 none Utilities aplay,arecord,amixer etc
Tools (alsa-tools) 1.0.28 none Tools
PyALSA (pyalsa) 1.0.26 none Python bindings for ALSA lib
OSS compat lib (alsa-oss) 1.0.28 none OSS compatibility library

[링크 : http://www.alsa-project.org/main/index.php/Download]

'Linux API > alsa' 카테고리의 다른 글

SALSA - Small ALSA  (0) 2014.10.24
alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 버전확인하기  (0) 2014.10.16
alsa 프로그래밍 정리  (0) 2014.09.18
alsa proc file system  (0) 2014.09.16
Posted by 구차니
Linux API/alsa2014. 10. 16. 09:42
Ubuntu 10.04의 경우 1.0.21 버전이고
현재 최신 버전은 2014년 6월 17일자로 1.0.28 버전이다.

/proc/asound$ cat version
Advanced Linux Sound Architecture Driver Version 1.0.21.


아무튼.. 1.0.28 버전에서 잠재적 memory leak이 해결되었다는데.. 어떨런지?

[링크 : http://alsa.opensrc.org/TroubleShooting]
[링크 : http://stackoverflow.com/questions/13478861/alsa-mem-leak] << 해결책으로 conf 설정을 free 하라고 한다
   [링크 : http://git.alsa-project.org/?p=alsa-lib.git;a=blob;f=MEMORY-LEAK;hb=HEAD]

[링크 : http://www.alsa-project.org/main/index.php/Changes_v1.0.27.2_v1.0.28]
[링크 : http://www.alsa-project.org/main/index.php/Download]


ALSA 크로스 컴파일
[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=531325&mid=lecture_tip

ALSA 다운로드 링크
driver / lib / firmware가 있는데.. 걍 lib만 하면 libasound.so가 나오는 것으로 보인다.
[링크 : ftp://ftp.alsa-project.org/pub/lib/ ]
[링크 : http://alsa.cybermirror.org/lib/

'Linux API > alsa' 카테고리의 다른 글

alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
alsa 프로그래밍 정리  (0) 2014.09.18
alsa proc file system  (0) 2014.09.16
ALSA (Advanced Linux Sound Architecture)  (0) 2014.09.15
Posted by 구차니
Linux API/alsa2014. 9. 18. 21:25
1. 아무생각 없이 두번 데이터를 넣을 경우
>> 음이 두배로 늘어나고 약간 끊어지거나 노이즈가 끼는 느낌이지만 음색이 변하지는 않음


2.  음소거
>> 0x00으로 가득 채워서 프레임 전송하면 주파수가 변화가 없으므로 소리가 나지 않음
>> 0x01 이라던가 어떠한 값을 넣던 주파수의 변화가 없으면 인식을 못하니.. 무음으로 나려나?
>> 16bit / 2channel의 경우 4바이트가 한 프레임이므로 memset으로 한바이트 크기 도배할 경우 어떤거든 상관없을지도.. 


3. 하드웨어 PCM 샘플링 레이트/비트/채널 설정
>> 디코더에서 고정만 된다면 입력 파일에 상관없이 하드웨어 설정은 변하지 않아도 될 것 같음
>> 그게 아니라면 플레이시 alsa를 초기화 할 때 설정하도록 해야 함 

'Linux API > alsa' 카테고리의 다른 글

alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
alsa proc file system  (0) 2014.09.16
ALSA (Advanced Linux Sound Architecture)  (0) 2014.09.15
Posted by 구차니
Linux API/alsa2014. 9. 16. 15:15
ALSA를 통해 파일을 재생중일때만 
/proc/asound/card0/pcm0p/sub0/sw_params
/proc/asound/card0/pcm0p/sub0/hw_params 파일의 값이 나오게 된다.

/proc/asound/card0/pcm0p/ - play
/proc/asound/card0/pcm0c/ - capture

$ tree /proc/asound/
/proc/asound/
├── Generic -> card1
├── Intel -> card0
├── card0
│   ├── codec#2
│   ├── id
│   ├── oss_mixer
│   ├── pcm0c
│   │   ├── info
│   │   ├── oss
│   │   └── sub0
│   │       ├── hw_params
│   │       ├── info
│   │       ├── prealloc
│   │       ├── prealloc_max
│   │       ├── status
│   │       └── sw_params
│   └── pcm0p
│       ├── info
│       ├── oss
│       └── sub0
│           ├── hw_params
│           ├── info
│           ├── prealloc
│           ├── prealloc_max
│           ├── status
│           └── sw_params
├── card1
│   ├── codec#0
│   ├── id
│   ├── oss_mixer
│   └── pcm3p
│       ├── info
│       └── sub0
│           ├── hw_params
│           ├── info
│           ├── prealloc
│           ├── prealloc_max
│           ├── status
│           └── sw_params
├── cards
├── devices
├── hwdep
├── modules
├── oss
│   ├── devices
│   └── sndstat
├── pcm
├── seq
│   ├── clients
│   ├── drivers
│   ├── oss
│   ├── queues
│   └── timer
├── timers
└── version

'Linux API > alsa' 카테고리의 다른 글

alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
alsa 프로그래밍 정리  (0) 2014.09.18
ALSA (Advanced Linux Sound Architecture)  (0) 2014.09.15
Posted by 구차니
Linux API/alsa2014. 9. 15. 21:43
ALSA는 리눅스에서 사운드를 내기 위한 드라이버인데
기본적(?)으로 PCM 사운드를 입력받아 장치로 내보내 주도록 한다.

[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/index.html]
[링크 : http://equalarea.com/paul/alsa-audio.html
[링크 : http://www.alsa-project.org/main/index.php/FramesPeriods

'Linux API > alsa' 카테고리의 다른 글

alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
alsa 프로그래밍 정리  (0) 2014.09.18
alsa proc file system  (0) 2014.09.16
Posted by 구차니
Linux API2014. 9. 2. 08:08

'Linux API' 카테고리의 다른 글

lirc - linux IR Remote control  (0) 2015.03.31
vaapi vdpau uvd  (6) 2015.03.26
linux 최대 thread 갯수  (0) 2015.01.22
getopt() / getopt_long()  (0) 2014.11.19
timeval, gettimeofday()  (0) 2013.08.20
Posted by 구차니
Linux API2013. 8. 20. 19:03

clock_gettime() 사용 추천

 

SVr4, 4.3BSD. POSIX.1-2001 describes gettimeofday() but not settimeofday(). POSIX.1-2008 marks gettimeofday() as obsolete, recommending the use of clock_gettime(2) instead.

[링크 : https://man7.org/linux/man-pages/man2/gettimeofday.2.html]

[링크 : https://man7.org/linux/man-pages/man2/clock_gettime.2.html]

[링크 : https://minimonk.tistory.com/5700]

---

time_t의 경우 1초 단위로 밖에 시간을 얻을수가 없는데
gettimeofday()를 통해 timeval 구조체로 값을 받으면
ms 단위로 시간을 잴 수 있다.

clock_getres 하면 ns 단위로 해당 시스템의 시간 정밀도를 받을수 있다는데
아무리 시스템이 빨라져도 ns 단위로 타이머를 받기 힘들지도 모르겠다..

[링크 : http://linux.die.net/man/2/clock_getres]
[링크 : http://linux.die.net/man/2/gettimeofday]
[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=507542]

'Linux API' 카테고리의 다른 글

lirc - linux IR Remote control  (0) 2015.03.31
vaapi vdpau uvd  (6) 2015.03.26
linux 최대 thread 갯수  (0) 2015.01.22
getopt() / getopt_long()  (0) 2014.11.19
공유메모리  (0) 2014.09.02
Posted by 구차니
Linux API/joystick2012. 2. 5. 11:36
조이스틱 관련 구조체 및 매크로 내용
우분투 기준 /usr/include/linux/joystick.h 에 존재함.

#ifndef _LINUX_JOYSTICK_H
#define _LINUX_JOYSTICK_H

/*
 *  Copyright (C) 1996-2000 Vojtech Pavlik
 *
 *  Sponsored by SuSE
 */

/*
 * 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
 * 
 * Should you need to contact me, the author, you can do so either by
 * e-mail - mail your message to vojtech@suse.cz, or by paper mail:
 * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
 */

#include "linux/types.h"
#include "linux/input.h"

/*
 * Version
 */

#define JS_VERSION		0x020100

/*
 * Types and constants for reading from /dev/js
 */

#define JS_EVENT_BUTTON		0x01	/* button pressed/released */
#define JS_EVENT_AXIS		0x02	/* joystick moved */
#define JS_EVENT_INIT		0x80	/* initial state of device */

struct js_event {
	__u32 time;	/* event timestamp in milliseconds */
	__s16 value;	/* value */
	__u8 type;	/* event type */
	__u8 number;	/* axis/button number */
};

/*
 * IOCTL commands for joystick driver
 */

#define JSIOCGVERSION		_IOR('j', 0x01, __u32)				/* get driver version */

#define JSIOCGAXES		_IOR('j', 0x11, __u8)				/* get number of axes */
#define JSIOCGBUTTONS		_IOR('j', 0x12, __u8)				/* get number of buttons */
#define JSIOCGNAME(len)		_IOC(_IOC_READ, 'j', 0x13, len)			/* get identifier string */

#define JSIOCSCORR		_IOW('j', 0x21, struct js_corr)			/* set correction values */
#define JSIOCGCORR		_IOR('j', 0x22, struct js_corr)			/* get correction values */

#define JSIOCSAXMAP		_IOW('j', 0x31, __u8[ABS_MAX + 1])		/* set axis mapping */
#define JSIOCGAXMAP		_IOR('j', 0x32, __u8[ABS_MAX + 1])		/* get axis mapping */
#define JSIOCSBTNMAP		_IOW('j', 0x33, __u16[KEY_MAX - BTN_MISC + 1])	/* set button mapping */
#define JSIOCGBTNMAP		_IOR('j', 0x34, __u16[KEY_MAX - BTN_MISC + 1])	/* get button mapping */

/*
 * Types and constants for get/set correction
 */

#define JS_CORR_NONE		0x00	/* returns raw values */
#define JS_CORR_BROKEN		0x01	/* broken line */

struct js_corr {
	__s32 coef[8];
	__s16 prec;
	__u16 type;
};

/*
 * v0.x compatibility definitions
 */

#define JS_RETURN		sizeof(struct JS_DATA_TYPE)
#define JS_TRUE			1
#define JS_FALSE		0
#define JS_X_0			0x01
#define JS_Y_0			0x02
#define JS_X_1			0x04
#define JS_Y_1			0x08
#define JS_MAX			2

#define JS_DEF_TIMEOUT		0x1300
#define JS_DEF_CORR		0
#define JS_DEF_TIMELIMIT	10L

#define JS_SET_CAL		1
#define JS_GET_CAL		2
#define JS_SET_TIMEOUT		3
#define JS_GET_TIMEOUT		4
#define JS_SET_TIMELIMIT	5
#define JS_GET_TIMELIMIT	6
#define JS_GET_ALL		7
#define JS_SET_ALL		8

struct JS_DATA_TYPE {
	__s32 buttons;
	__s32 x;
	__s32 y;
};

struct JS_DATA_SAVE_TYPE_32 {
	__s32 JS_TIMEOUT;
	__s32 BUSY;
	__s32 JS_EXPIRETIME;
	__s32 JS_TIMELIMIT;
	struct JS_DATA_TYPE JS_SAVE;
	struct JS_DATA_TYPE JS_CORR;
};

struct JS_DATA_SAVE_TYPE_64 {
	__s32 JS_TIMEOUT;
	__s32 BUSY;
	__s64 JS_EXPIRETIME;
	__s64 JS_TIMELIMIT;
	struct JS_DATA_TYPE JS_SAVE;
	struct JS_DATA_TYPE JS_CORR;
};


#endif /* _LINUX_JOYSTICK_H */


실험적으로 소스를 짜서 해보니
버튼은 type 1
value는 0(눌리지 않음) 1(눌림)
number는 버튼 번호(1번 버튼은 0번 부터 시작)

X/Y/Z 축은 type 2
좌우는 number 0
앞뒤는 number 1
쓰로틀은 number 2
러더는 number 3 
햇좌우 number 5
햇앞뒤 number 6
 
값이 변하기 전에는 새로운 값은 읽히지 않는 듯 하고,
그런 이유로 예제 파일이 멀티쓰레드로 구성이 된 것으로 생각된다. 

'Linux API > joystick' 카테고리의 다른 글

linux force feedback  (0) 2022.06.15
리눅스에서 조이스틱 값 읽어오기  (0) 2012.02.04
Posted by 구차니