'Computing'에 해당되는 글 58건

  1. 2021.06.03 (golang) multiple main functions cannot be exist in main package 1
  2. 2013.09.09 play framework 실행 에러 1
  3. 2013.07.26 play framework
  4. 2012.03.09 The new iPad
  5. 2011.05.19 CentOS 5.5, mongoDB, node.js
  6. 2011.05.18 iphone opengl camera ar
  7. 2010.12.08 https in java, android
  8. 2010.06.10 x.inf contains DirIDs, which are not supported
  9. 2010.06.04 ffmpeg build
  10. 2010.06.03 VP8 And FFmpeg
  11. 2010.05.14 DDS 자료
  12. 2010.04.02 Apple iPod - iPhone dock Connector Pinout
  13. 2010.03.09 HwpCtrl 보안승인모듈 다운로드
  14. 2010.02.26 iPhone and Steve Jobs
  15. 2010.02.24 ffmpeg x264 profile setting
  16. 2010.02.15 ffmpeg for iphone
  17. 2010.02.11 사야될 통계 책
  18. 2010.02.10 유로 ACM 논문 무료로 보기...(물론 합법)
  19. 2010.02.09 C++에서 C# DLL Interop
  20. 2010.02.04 android omnia kernel build
  21. 2010.02.04 android omnia porting current status
  22. 2010.02.04 android kernel build for samsung omnia
  23. 2010.02.04 Windows Mobile / DirectShow / SampleGrabber
  24. 2010.01.15 omnia에 android 설치
  25. 2010.01.15 pda rom dump
  26. 2010.01.15 ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기
  27. 2009.11.13 SATA2하드의 SATA1설정
  28. 2009.11.03 Windows 7, APIs 1
  29. 2009.10.04 ffmpeg의 apiexample을 사용한 mpeg encoding 방법
  30. 2009.09.30 Unofficial FFmpeg Win32 Builds

(golang) multiple main functions cannot be exist in main package

 

go: cannot find main module, but found ....

One more go source file was added, but main() function cannot be multiple in different files/same directory (package)

 

 

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

 

During Mac OS upgrade and xcode change, some soft links might not be updated to new xcode, so additional go utility installation showed some error. This issue can be resolved by below.

xcode-select --install

 

 

 

 

'Computing' 카테고리의 다른 글

play framework 실행 에러  (1) 2013.09.09
play framework  (0) 2013.07.26
The new iPad  (0) 2012.03.09
CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
iphone opengl camera ar  (0) 2011.05.18

play framework 실행 에러

play framework 실행에서 에러

Error occurred during initialization of VM

Could not reserve enough space for object heap

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.


주로 32 bit OS에서 나는듯.


play-2.1.3\play.bat 수정


set JAVA_OPTS=-Xms512M -Xmx512M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M 


java %JAVA_OPTS% -Dsbt.ivy.home="%~dp0repository" -Dplay.home="%~dp0framework" -Dsbt.boot.properties="%fp%framework/sbt/play.boot.properties" -jar "%~dp0framework\sbt\sbt-launch.jar" %*






'Computing' 카테고리의 다른 글

(golang) multiple main functions cannot be exist in main package  (1) 2021.06.03
play framework  (0) 2013.07.26
The new iPad  (0) 2012.03.09
CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
iphone opengl camera ar  (0) 2011.05.18

play framework


아래와 같은 에러가 떴을때 해결방법


[error] (*:update) sbt.ResolveException: download failed: org.slf4j#slf4j-api;1.6.6!slf4j-api.jar
[info] Updating {file:/path/to/your/workspace/}asante...
[warn]  [NOT FOUND  ] org.slf4j#slf4j-api;1.6.6!slf4j-api.jar (0ms)                    
[warn] ==== local: tried
[warn]   /path/to/your/play/home/play-2.1.1/repository/local/org.slf4j/slf4j-api/1.6.6/jars/slf4j-api.jar
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::              FAILED DOWNLOADS            ::
[warn]  :: ^ see resolution messages for details  ^ ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.slf4j#slf4j-api;1.6.6!slf4j-api.jar
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::


아래 디렉토리들을 삭제


/path/to/your/play/home/repository/cache/org.slf4j

/path/to/your/play/home/repository/local/org.slf4j

/path/to/your/play/home/repository/.sbt.ivy.lock


아마도 SBT와 IVY에서 이미 받아놓은 slf4j의 버젼이 안맞는듯. 위의 디렉토리를 clean하고 다시 받으면 된다.


'Computing' 카테고리의 다른 글

(golang) multiple main functions cannot be exist in main package  (1) 2021.06.03
play framework 실행 에러  (1) 2013.09.09
The new iPad  (0) 2012.03.09
CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
iphone opengl camera ar  (0) 2011.05.18

The new iPad


새로운 iPad가 발표되었다.

여러 매체나 블로그 들이 떠들썩한데..
대부분 CPU, GPU와 display, LTE 등을 가지고 amazing하다고 하는 말이 많다.
특히나 해상도 때문에 같이 발표된 애플TV와의 연계 부분을 주목하고 있는 사람들이 많은것으로 보인다.

개인적으로는 새 iPad를 iPhone 4를 가지게 된 다음부터 기다려왔다.
iPhone4의 display는 326dpi라고 하는데 실제로 보다보면 아이콘이 화면에 스티커가 붙어있는것처럼
보일때가 있어서 화들짝 놀랠때가 있다. ㅎㅎ

iPhone 4를 들고다니고 xcode에서 새 iPad용 해상도 지원이 보였을때부터 기다려왔는데..
어쨌건 새 iPad에 기대하는것은 문서 읽기용이다.

원래부터 전자책분야를 애플이 노리고 있지만서도.. 이번 iPad에서부터는 완전 게임오버가 될것같다.
약 290 dpi정도라고 하는데 이정도면 그냥 컬러레이저프린터로 출력한 출력물 그 자체다.

아래 기사에서는 그 점을 약간 언급하고 있다.

http://www.bloter.net/archives/100025 

...

직접 봐야 더 실감할 수 있겠지만 신문보다 더 높은 해상도를 자랑한다는 새 아이패드의 레티나 디스플레이는 체감상 아이폰4에 처음 탑재될 당시보다 더 큰 변화를 가져올 것이다. 아이폰의 레티나 디스플레이가 작은 화면을 더 또렷하게 볼 수 있게 했다면, 아이패드의 레티나 디스플레이는 아이패드를 그야말로 잡지나 신문으로 둔갑시킬 것이다. 더 이상 아이패드로 잡지나 신문, 전자책이나 만화책을 읽으면서 인쇄물의 선명한 화질을 부러워할 필요가 없어졌다는 뜻이다. 단지 인쇄물에 비해 오래 보면 눈이 부실 수 있다는 것을 점을 제외한다면 말이다.

... 



해외에 나가서라도 사가지고 와야되나 생각중이다. ㅎㅎ

 

'Computing' 카테고리의 다른 글

play framework 실행 에러  (1) 2013.09.09
play framework  (0) 2013.07.26
CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
iphone opengl camera ar  (0) 2011.05.18
https in java, android  (0) 2010.12.08

CentOS 5.5, mongoDB, node.js

 

root user

 

cd yum.repos.d

vi 10gen.repo

<32bit>

[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686
gpgcheck=0

 

yum update

yum install mongo-10gen mongo-10gen-server

mongod

 

 

node-v0.4.7.tar.gz

yum install openssl openssl-devel

 

configure

make

make install

'Computing' 카테고리의 다른 글

play framework  (0) 2013.07.26
The new iPad  (0) 2012.03.09
iphone opengl camera ar  (0) 2011.05.18
https in java, android  (0) 2010.12.08
x.inf contains DirIDs, which are not supported  (0) 2010.06.10

iphone opengl camera ar

http://hyena0.tistory.com/421

iPhone 에서 OpenGL 로 AR 기능을

사용하려고 하면 필수적으로 OpenGL 의

모델 도형을 투명한 배경위에 보여줘야 합니다.

그래서 설정해야 할 것들이 몇가지 있습니다.

우선 기본 설정에서 RGBA8 로 해주고,

배경의 색깔을 모두 지운 후 alpha 에 투명값을

설정하는 겁니다. “0″ 으로 말이죠.

다시 정리하면 아래 코드를 볼 수 있습니다.

// The GL view is stored in the nib file. When it’s unarchived it’s sent -initWithCoder:

- (id)initWithCoder:(NSCoder*)coder {

if ((self = [super initWithCoder:coder])) {

CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;

eaglLayer.opaque = NO;//no – transparent

eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:

[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

if (!context || ![EAGLContext setCurrentContext:context]) {

[self release];

return nil;

}

animating = FALSE;

displayLinkSupported = FALSE;

animationFrameInterval = 1;

displayLink = nil;

animationTimer = nil;

// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer

// class is used as fallback when it isn’t available.

NSString *reqSysVer = @”3.1″;

NSString *currSysVer = [[UIDevice currentDevice] systemVersion];

if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)

displayLinkSupported = TRUE;

[self setupView];

}

return self;

}

해당 코드는 일반적으로 제공되는 OpenGL 코드인데, eaglLayer.opaque = NO 로 설정해야 투명한 배경을

얻을 수 있습니다. 또한 도형을 그리는 부분에서는 배경화면의 색깔을 투명으로 지정해야 합니다.

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

여기서 glClear(Red, Green, Blue, alpha) 값을 보시면 모두 0 으로 설정하면 됩니다.

그런데 이렇게 하고서 투명처리가 안되어 무지 고생을 했습니다.

알고 봤더니 인터페이스 빌더에서 해당 OpenGL 을 그리는 View 의 배경색이 흰색으로 설정되어 있었습니다

그래서 위와 같이 View 를 선택한 뒤, 배경색 팔레트에서 Opacity 값을 0 으로 설정하면

View 자체가 투명한 색을 가지게 됩니다.

그러면 아래와 같은 투명배경의 도형을 카메라와 같이 볼 수 있게 됩니다.

'Computing' 카테고리의 다른 글

The new iPad  (0) 2012.03.09
CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
https in java, android  (0) 2010.12.08
x.inf contains DirIDs, which are not supported  (0) 2010.06.10
ffmpeg build  (0) 2010.06.04

https in java, android

Post

url = new URL("https://112.169.59.24:4443/mmpcs/ua/initSync.do");
//HttpURLConnection conn = (HttpURLConnection) url.openConnection();
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

conn.setDoOutput(true);
conn.setRequestMethod("POST");
String msg = "This is message for post";

OutputStreamWriter wr = new OutputStreamWriter(conn
.getOutputStream());
// this is were we're adding post data to the request
wr.write(msg);
wr.flush();

String str;
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
while ((str = in.readLine()) != null) {
    Log.i("TestApp",str);
}

in.close();
wr.close();

 

 

Get

url = new URL("https://112.169.59.24:4443/mmpcs/ua/initSync.do");
//HttpURLConnection conn = (HttpURLConnection) url.openConnection();
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true);

String str;
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
while ((str = in.readLine()) != null) {
    Log.i("TestApp",str);
}

in.close();  

'Computing' 카테고리의 다른 글

CentOS 5.5, mongoDB, node.js  (0) 2011.05.19
iphone opengl camera ar  (0) 2011.05.18
x.inf contains DirIDs, which are not supported  (0) 2010.06.10
ffmpeg build  (0) 2010.06.04
VP8 And FFmpeg  (0) 2010.06.03

x.inf contains DirIDs, which are not supported

http://blogs.msdn.com/b/raffael/archive/2008/03/18/x-inf-contains-dirids-which-are-not-supported.aspx

Since looking around over the web I didn't find any reference to this particular case, I think it's worth writing it here. I tracked down this issue recently together with a developer that wanted to package "many" files within a single .CAB (1000+). He was using a quite old version of CabWiz.exe, launched through an application he wrote. So, as the initial troubleshooting step, I tried to reproduce the issue with the CabWiz.exe shipped with Visual Studio 2008: same problem.

Above all, this error can arise from CabWiz (which is internally invoked by VS2008 when creating Smart Device CAB Projects) also if you're using '%' in registry keys, as my friend Chris reported in his How to avoid hardcoding file paths within CAB file registry settings, in order to add registry values that refer to the location of files installed as part of the application.

So I thought: ok, he's hitting the known limit of 998 files that could be packaged in a CAB... Wrong: the problem happened also when using much less files, say 300... I'm still talking about C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\CabWiz.exe, version 4.0.4332.0.

After running some tests, I reached a magic number: 262. With 262 files VS2008 could create a Smart Device CAB successfully, with 263 files it gave error "x.inf contains DirIDs, which are not supported". At this point I noticed that in the .INF file that VS2008 creates and gives to CabWiz.exe, it wrote an entry under [DestinationDirs] for each added file, even if the target folder on the device is the same, as it was in my case. By manually editing the INF (using some applications that automated lines-creation...), I could successfully create a CAB for 263+ files, specifying only one entry under [DestinationDirs]. So, another limit I wasn't aware of is: VS2008's CabWiz can parse up to 262 different entries under [DestinationDirs].

Now: Windows Mobile 6 SDKs ship with a newer version of CabWiz.exe, v4.5.5102.0 and, very interestingly, it overcame not only the limitation about 998 files, but also the one about 262 entries under [DestinationDirs]. So the "simple" solution in this case was to download one of the 2 Windows Mobile 6 SDKs and use that CabWiz.exe (C:\Program Files\Windows Mobile 6 SDK\Tools\CabWiz).

Playing with files under C:\Program Files\Microsoft Visual Studio 9.0 is not recommended (and probably "not supported"), however for testing purposes I replaced C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\CabWiz.exe and CabWiz.ddf with the ones under C:\Program Files\Windows Mobile 6 SDK\Tools\CabWiz, and now my VS2008 can continue creating one entry under [DestinationDirs] for each file, independently if the target folder will the be same, but now it successfully creates the CAB. I imagine there are still some limits, but this may be a topic of another post... Smile

Cheers,

~raffaele

'Computing' 카테고리의 다른 글

iphone opengl camera ar  (0) 2011.05.18
https in java, android  (0) 2010.12.08
ffmpeg build  (0) 2010.06.04
VP8 And FFmpeg  (0) 2010.06.03
DDS 자료  (0) 2010.05.14

ffmpeg build

http://alvastro.tistory.com/86

ffmpeg compile
OS : Fedora core 8
kernel : 2.6.26.8-57.fc8
외부 코덱 라이브러리 설치 위치 /usr/alvastro/extras
ffmpeg 설치 위치 /usr/alvastro/ffmpeg
외부코덱 라이브러리 패키지 PATH 지정
export PKG_CONFIG_PATH=/usr/alvastro/extras/lib/pkgconfig:$PKG_CONFIG_PATH

faad2 compile
wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static
make ; mak install

faac-1.28 compile
wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static
make ;make install

libmpeg2 compile
wget http://libmpeg2.sourceforge.net/files/libmpeg2-0.5.1.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static
make;make install

speex를 컴파일 할때 libogg를 포함한다.
libogg
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static
make;make install

speex
wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static --with-ogg=/usr/alvastro/extras
make ;make install

libvorbis
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static --with-ogg=/usr/alvastro/extras
make;make install

yasm for libx264
wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.2.tar.gz
컴파일해도 안된다. ㅡㅡ;; asm은 패스 ;;
asm이 없으면 h.264로 엔코딩할때 시간이 많이 걸린다고 한다..

gpac for libx264
wget http://downloads.sourceforge.net/gpac/gpac-0.4.5.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static --disable-opengl
make clean;make
일단 opengl이 필요없으므로 컴파일하지 않는다..
cp -a bin/gcc/libgpac_static.a /usr/alvastro/extras/lib/
cp include -apR /usr/alvastro/extras/include

libx264
git clone git://git.videolan.org/x264.git
./configure --prefix=/usr/alvastro/extras --disable-asm --enable-shared --enable-mp4-output --extra-ldflags=-L/usr/alvastro/extras/lib --extra-cflags=-I/usr/alvastro/extras/include
make;make install

xvidcore
wget http://downloads.xvid.org/downloads/xvidcore-1.2.1.tar.gz
cd build/generic
./configure --prefix=/usr/alvastro/extras
make;make install

libmp3lame
wget http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static
make;make install

libtheora
wget http://downloads.xiph.org/releases/theora/libtheora-1.0.tar.bz2
http://downloads.xiph.org/releases/theora/libtheora-1.0.tar.bz2
./configure --prefix=/usr/alvastro/extras --enable-shared --enable-static
make;make install

ffmpeg 컴파일
ffmpeg는 이 글을 쓰는 날 git로 받은 파일이다.. ffmpeg의 소스 버전에 따라서 컴파일 방법이 다를수 있다.
Source down Date : 2009 03 05
version : SVN-r17822
configure 실행 스크립터 만들기..
vi alvastro-ffmpeg.sh
#내용
./configure --prefix=/usr/alvastro/ffmpeg \
        --enable-static \
        --enable-shared \
        --enable-gpl \
        --enable-postproc \
        --enable-avfilter \
        --enable-libmp3lame \
        --enable-libx264 \
        --enable-libxvid \
        --enable-libfaac \
        --enable-libfaad \
        --enable-libspeex \
        --enable-libvorbis \
        --enable-libtheora \
        --extra-cflags=-I/usr/alvastro/extras/include \
        --extra-ldflags=-L/usr/alvastro/extras/lib \
chmod 777 alvastro-ffmpeg.sh
sh alvastro-ffmpeg.sh
make ; make install

실행 시 라이브러리 패스.
cd /usr/alvastro/ffmpeg/bin
export LD_LIBRARY_PATH=/usr/alvastro/extras/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/alvastro/ffmpeg/lib:$LD_LIBRARY_PATH
./ffplay -stats media.avi
실행 확인

참고사이트
http://ubuntuforums.org/showthread.php?t=786095
ffmpeg를 이용하여 x264 엔코딩
cd /usr/alvastro/ffmpeg/bin
vi 264encode.sh

#!/bin/bash
# Two-Pass x264 Encoding Script
# Usage: ./264encode.sh input output.mp4
# Pass 1
./ffmpeg -y -i $1 -pass 1 -b 512k -bt 512k -vcodec libx264 -an -threads 0 -coder 1 -flags +loop -cmp +chroma -partitions -parti8x8-parti4x4-partp8x8-partp4x4-partb8x8 -me_method dia -subq 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -bf 4 -refs 1 -directpred 3 -bidir_refine 0 -trellis 0 -flags2 -bpyramid-wpred-mixed_refs-dct8x8+fastpskip -f mp4 /dev/null
# Pass 2
./ffmpeg -y -i $1 -pass 2 -b 512k -bt 512k -vcodec libx264 -acodec libfaac -ab 128k -ac 2 -threads 0 -coder 1 -flags +loop -cmp +chroma -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method umh -subq 8 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 2 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -bf 4 -refs 4 -directpred 3 -trellis 1 -flags2 +bpyramid+wpred+mixed_refs+dct8x8+fastpskip -f mp4 $2

chmod 777 264encode.sh
./264encode.sh input output.mp4

'Computing' 카테고리의 다른 글

https in java, android  (0) 2010.12.08
x.inf contains DirIDs, which are not supported  (0) 2010.06.10
VP8 And FFmpeg  (0) 2010.06.03
DDS 자료  (0) 2010.05.14
Apple iPod - iPhone dock Connector Pinout  (0) 2010.04.02

VP8 And FFmpeg

http://multimedia.cx/eggs/vp8-and-ffmpeg/

VP8 And FFmpeg

May 20th, 2010 by Multimedia Mike

Let’s take the VP8 source code (in Google’s new libvpx library) for a spin; get it to compile and hook it up to FFmpeg. I am hesitant to publish specific instructions for building in the somewhat hackish manner available on day 1 (download FFmpeg at a certain revision and apply a patch) since that kind of post has a tendency to rise in Google rankings. I will just need to remember to update this post after the library patches are applied to the official FFmpeg tree.

Statement of libvpx’s Relationship to FFmpeg
I don’t necessarily speak officially for FFmpeg. But I’ve been with the project long enough to explain how certain things work.

Certainly, some may wonder if FFmpeg will incorporate Google’s newly open sourced libvpx library into FFmpeg. In the near term, FFmpeg will support encoding and decoding VP8 via external library as it does with a number of other libraries (most popularly, libx264). FFmpeg will not adopt the code for its own codebase, even if the license may allow it. That just isn’t how the FFmpeg crew rolls.

In the longer term, expect the FFmpeg project to develop an independent, interoperable implementation of the VP8 decoder. Sometime after that, there may also be an independent VP8 encoder as well.

Building libvpx
Download and build libvpx. This is a basic ‘configure && make’ process. The build process creates a static library, a bunch of header files, and 14 utilities. A bunch of these utilities operate on a file format called IVF which is apparently a simple transport method for VP8. I have recorded the file format on the wiki.

We could use a decoder for this in the FFmpeg code base for testing VP8 in the future. Who’s game? Just as I was proofreading this post, I saw that David Conrad has sent an IVF demuxer to the ffmpeg-devel list.

There doesn’t seem to be a ‘make install’ step for the library. Instead, go into the overly long directory (on my system, this is generated as vpx-vp8-nopost-nodocs-generic-gnu-v0.9.0), copy the contents of include/ to /usr/local/include and the static library in lib/ to /usr/local/lib .

Building FFmpeg with libvpx
Download FFmpeg source code at the revision specified or take your chances with the latest version (as I did). Download and apply provided patches. This part hurts since there is one diff per file. Most of them applied for me.

Configure FFmpeg with 'configure --enable-libvpx_vp8 --enable-pthreads'. Ideally, this should yield no complaints and ‘libvpx_vp8′ should show up in the enabled decoders and encoders sections. The library apparently relies on threading which is why '--enable-pthreads' is necessary. After I did this, I was able to create a new webm/VP8/Vorbis file simply with:

 ffmpeg -i input_file output_file.webm

Unfortunately, I can’t complete the round trip as decoding doesn’t seem to work. Passing the generated .webm file back into FFmpeg results in a bunch of errors of this format:

[libvpx_vp8 @ 0x8c4ab20]v0.9.0
[libvpx_vp8 @ 0x8c4ab20]Failed to initialize decoder: Codec does not implement requested capability

Maybe this is the FFmpeg revision mismatch biting me.

FFmpeg Presets
FFmpeg features support for preset files which contain collections of tuning options to be loaded into the program. Google provided some presets along with their FFmpeg patches:

  • 1080p50
  • 1080p
  • 360p
  • 720p50
  • 720p

To invoke one of these (assuming the program has been installed via ‘make install’ so that the presets are in the right place):

 ffmpeg -i input_file -vcodec libvpx_vp8 -vpre 720p output_file.webm

This will use a set of parameters that are known to do well when encoding a 720p video.

Code Paths
One of goals with this post was to visualize a call graph after I got the decoder hooked up to FFmpeg. Fortunately, this recon is greatly simplified by libvpx’s simple_decoder utility. Steps:

  • Build libvpx with --enable-gprof
  • Run simple_decoder on an IVF file
  • Get the pl_from_gprof.pl and dot_from_pl.pl scripts frome Graphviz’s gprof filters
  • gprof simple_decoder | ./pl_from_gprof.pl | ./dot_from_pl.pl > 001.dot
  • Remove the 2 [graph] and 1 [node] modifiers from the dot file (they only make the resulting graph very hard to read)
  • dot -Tpng 001.dot > 001.png

Here are call graphs generated from decoding test vectors 001 and 017.

Like this, only much larger and scarier (click for full graph)

It’s funny to see several functions calling an empty bubble. Probably nothing to worry about. More interesting is the fact that a lot offunction_c() functions are called. The ‘_c’ at the end is important– that generally indicates that there are (or could be) SIMD-optimized versions. I know this codebase has plenty of assembly. All of the x86 ASM files appear to be written such that they could be compiled with NASM.

Leftovers
One interesting item in the code was vpx_scale/leapster. Is this in reference to the Leapster handheld educational gaming unit? Based on this item from 2005 (archive.org copy), some Leapster titles probably used VP6. This reminds me of finding references to the PlayStation in Duck/On2’s original VpVision source release. I don’t know of any PlayStation games that used Duck’s original codecs but with thousands to choose from, it’s possible that we may find a few some day.

'Computing' 카테고리의 다른 글

x.inf contains DirIDs, which are not supported  (0) 2010.06.10
ffmpeg build  (0) 2010.06.04
DDS 자료  (0) 2010.05.14
Apple iPod - iPhone dock Connector Pinout  (0) 2010.04.02
HwpCtrl 보안승인모듈 다운로드  (0) 2010.03.09

DDS 자료

http://cafe.naver.com/multism.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=4014

The Data Distribution Service for Real-Time Systems: Part 1
http://www.drdobbs.com/architecture-and-design/222900238
... DDJ에 소개된 DDS에 대한 이해.
[PPT] An Overview of the OMG DDS - Washington University in St. Louis
http://www.cs.wustl.edu/~schmidt/DDS.ppt
... OMG의 DDS에 대한 설명. 워싱턴 대학의 DOC 그룹을 주관하는 Schmodt 교수 제공 자료.
OpenDDS
http://www.opendds.org
... OpenDDS는 실시간으로 데이터를 여러 곳에 분배하고 동기화 할 수 있는 데이타 분산 미들웨어의 표준인 DDS(Data Distribution Service) 스펙을 구현한 오픈소스 미들웨어이다. DDS는 OMG를 통해 실시간 데이터 분산 분야의 미들웨어로 표준화 되었다.
... DDS를 잠깐 시험해본 소감으로는 이벤트에 실어보낼 데이터 타입을 정의하는데 CORBA에서 사용하는 IDL을 사용한다. IDL의 기능 중 데이터만 정의하는 것으로, CORBA와 달리 원격 오퍼레이션 부가 없기 때문에 데이터 전달 속도가 상당히 빠르다. 원격 오퍼레이션 부가 없기 때문에 구현이 여러가지 언어로 될 수 있고 적은 메모리 풋프린트를 요구한다.(내장형 실시간 시스템에 딱이다!) 주로 센서 네트워크나 레이더에서 데이터를 수집해오고 필터링 하는 곳에 쓰이며, DSP에 포팅된 사례도 있다.
OpenDDS 소스 및 매뉴얼
http://download.ociweb.com/OpenDDS/
... OpenDDS는 C++ 바인딩이 기본이지만 Java 바인딩도 지원한다. 사용할 수 있는 데이타타입은 tao_idl 컴파일러로 생성한다. (단, DDS 전용 옵션인 "-Gdcps"을 줘서 컴파일한다.) C++ 코드와 Java 코드가 동시에 생성되는데 C++ 코드는 컴파일해서 공유라이브러리로, Java 코드는  jar로 묶어서 사용자가 짠 Java코드와 함께 배포하면 된다. OpenDDS의 Java 바인딩은 JNI를 통한 방식이다. JNI용 C++ 코드와 Java 코드가 tao_idl 컴파일러에서 자동 생성되므로 사용자는 OpenDDS의 publisher, subscriber 가 되는 방법을 이해하고 메시지와 QoS를 취급할 줄 알면된다. 순수하게 C++로 코드를 짜고자 하는 경우 TAO와 ACE 라이브러리가 필요하다.
... 시간이 되면 구글폰이나 삼성의 바다폰에 OpenDDS를 이용할 수 있으면 어떨까 싶은 생각이 든다. DDS는 OMG가 정한 메시징 미들웨어의 국제표준이며, 프로토콜중 하나는 표준으로 정해져 있고, 특히, OpenDDS는 DDS 제품들중 프로토콜 확장 구조를 맨 처음 사용하였고고 OMG와 관련 업계에 공개하여 표준화에 기여한 바가 크다. 센서나 레이더 같은 장치에서 실시간으로 시간지연 오차를 최소화하면서 데이터를 보내고 필터링하는 경우 DDS의 전망과 활용가치는 매우 크다.
DDS와 대외계 시스템
http://blog.smallake.kr/smallake/448
... 알티베이스의 역사와 대외계에 AltiBase사에서 DDS 제품을 표준으로 사용하려는 시도에 대한 고찰
gCitizen: A Grid Middleware for a Transparent
Management of the Information about Citizens in the Public Administration
http://www.jtaer.com/apr2007/dealfonso_caballer_carrion_hernandez_p2.pdf
... DDS, 서비스 호출을 혼성하여 시민을 위한 정보서비스를 관리하는 그리드 미들웨어 프레임워크
대개 미들웨어 들은 기능을 다루는 경우가 많은데, 대민 서비스를 상대로 응용되는 것을 설명한 드문 경우라서 참고해볼 필요가 있다.
Data Distribution Service as an alternative to CORBA Notification Services for the Alma Common Software
http://icalepcs2009.spring8.or.jp/abstract/pdf/WEA006_TALK.PDF
... 더 자세한 정보는 http://www.eso.org/projects/alma/develop/acs
Publish/Subscribe Internetworking
http://www.uio.no/studier/emner/matnat/ifi/INF5090/v09/undervisningsmateriale/INF5090-Pub-Sub-2009-Oslo.pdf
... DDS와 JMS 인터워킹에 대한 설명.
A QoS Policy Con?guration Modeling Language for
Publish/Subscribe Middleware Platforms
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.77.3016&rep=rep1&type=pdf
Workshop on Distributed Object Computing for Real-time and Embedded Systems
July 14 ? 16, 2008, Washington, DC, USA
http://www.omg.org/news/meetings/realtime2008/Program.htm
... 2008년 OMG의 Realtime2008 에서는 DDS에 대한 튜토리얼, 고급 이슈들이 많이 다루어졌다.
OMG Standards in Government & NGO's Workshop
July 13-15, 2009, Westin Arlington Gateway, Arlington, VA USA
http://www.omg.org/news/meetings/GOV-WS/rte/Program.htm
... 2009년 OMG의 Realtime2008 에서도 역시 DDS에 대한 튜토리얼, 고급 이슈들이 많이 다루어졌다.
Model-Based Autosynthesis of Time-Triggered Buffers for
Event-Based Middleware Systems
http://www.dsmforum.org/events/DSM09/Papers/Sprinkle.pdf
... An advantage of domain-speci c modeling is the ability to refactor an application to include time-triggered, event-based schedulers. In this paper we present an application in need of such modi cation, and discuss how these additional blocks must be synthesized in order to conform to the input/output constraints of the existing diagram.
Future of CORBA for Distributed Real-time & Embedded Systems
http://www.dre.vanderbilt.edu/~schmidt/ICALEPCS.ppt
... CORBA와 DDS는 분산시스템을 위해 OMG가 정의한 양대 표준인데, 그동안 군에서는 CORBA가 주로 사용되어 왔으며, 나름 단점도 있었다. DDS가 이를 보완하는 용도로 적합하며 미래는 둘이 상호보완되어 결합되는 형태로 발전할 것이다.
Hybernating DDS with C++ and Java
http://www.slideshare.net/Angelo.Corsaro/hibernating-dds
... DDS에 DBMS로 데이타 매핑을 하여 하이버네이트 시키는 구조에 대한 이해
OMG Modeling Specifications
http://www.aswec2008.curtin.edu.au/OMG%20Modeling%20Specifications.ppt
... OMG의 여러가지 모델링 표준에 대한 튜토리얼

Data distribution service and database management systems bridge

United States Patent 7533128

http://www.freepatentsonline.com/7533128.html
... DDS와 DBMS 시스템간 브리지에 특허가 걸려있다. 이 구조와 유사하게 가지 않도록 유의한다.
Distributed Event-based Systems (Hardcover) 
Muhl, Gero, Fiege, Ludger, Pietzuch, Peter  저 | Springer-Verlag New York Inc | 2007.03.05
http://book.naver.com/bookdb/book_detail.nhn?bid=2818334
... 정말 오랫만에 이벤트 기반 분산 시스템에 대해 정리된 책이 나왔다. 미들웨어를 연구하는 사람이라면 꼭 봐두어야 할 내용 아닐까 싶다.

'Computing' 카테고리의 다른 글

ffmpeg build  (0) 2010.06.04
VP8 And FFmpeg  (0) 2010.06.03
Apple iPod - iPhone dock Connector Pinout  (0) 2010.04.02
HwpCtrl 보안승인모듈 다운로드  (0) 2010.03.09
iPhone and Steve Jobs  (0) 2010.02.26

Apple iPod - iPhone dock Connector Pinout

 

http://www.allpinouts.org/index.php/Apple_iPod_-_iPhone_dock

 

30 pin connector used on the dock station for iPod and iPhone

 

30 pin connector used on the dock station for iPod and iPhone.
Available in all Apple iPod MP3 player (iPod 1G, 2G, 3G, 4G, 5G and Nano).

This connector is used on iPod (starting from 3rd generation) and iPhone. It is used to connect the iPod or iPhone to various devices: PC (via USB or FireWire IEEE1394), audio amplifier, serial device (controlled via the Apple Accessory Protocol).

Pin
Signal
Description

1
GND
Ground (-), internaly connected with Pin 2 on iPod motherboard

2
GND
Audio and Video ground (-), internaly connected with Pin 2 on iPod motherboard

3
Right
Line Out - R (+) (Audio output, right channel)

4
Left
Line Out - L(+) (Audio output, left channel)

5
Right In
Line In - R (+)

6
Left In
Line In - L (+)

8
Video Out
Composite video output (only when the slideshow mode is active on iPod Photo)

9
S-Video Chrominance output
for iPod Color, Photo only

10
S-Video Luminance output
for iPod Color, Photo only

11
GND
Serial GND

12
Tx
ipod sending line, Serial TxD

13
Rx
ipod receiving line, Serial RxD

14
NC

15
GND
Ground (-), internaly connected with pin 16 on iPod motherboard

16
GND
USB GND (-), internaly connected with pin 15 on iPod motherboard

17
NC

18
3.3V
3.3V Power (+)
Stepped up to provide +5 VDC to USB on iPod Camera Connector.
If iPod is put to sleep while Camera Connector is present, +5 VDC at this pin slowly drains back to 0 VDC.

19,20
+12V
Firewire Power 12 VDC (+)

21
Accessory Indicator/Serial enable
Different resistances indicate accessory type:

  • 1KOhm - iPod docking station, beeps when connected
  • 10KOhm - Takes some iPods into photo import mode
  • 68kOhm - makes iPhone 3g send audio through line-out without any messages
  • 500KOhm - related to serial communication / used to enable serial communications Used in Dension Ice Link Plus car interface
  • 1MOhm - Belkin auto adaptor, iPod shuts down automatically when power disconnected Connecting pin 21 to ground with a 1MOhm resistor does stop the ipod when power (i.e. Firewire-12V) is cut. Looks to be that when this pin is grounded it closes a switch so that on loss of power the Ipod shuts off. Dock has the same Resistor.

22
TPA (-)
FireWire Data TPA (-)

23
5 VDC (+)
USB Power 5 VDC (+)

24
TPA (+)
FireWire Data TPA (+)

25
Data (-)
USB Data (-)

26
TPB (-)
FireWire Data TPB (-)

27
Data (+)
USB Data (+)
Pins 25 and 27 may be used in different manner. To force the iPod 5G to charge in any case, when 'USB Power 5 VDC' (pin 23) is fed, 25 must be connected to 5V through a 10KOhm resistor, and 27 must be connected to the Ground (for example: pin 1) with a 10KOhm resistor.

28
TPB (+)
FireWire Data TPB (+)

29,30
GND
FireWire Ground (-)

Notes
  • Signals with grey background may not exist on some docking stations.
  • Apple serial devices (i.e. iTalk and remote control) communicate with iPod (3rd generation or more) using the Apple Accessory Protocol.
  • The serial connection uses a standard 19200 baud 8N1 protocol (the speed can be increased up to 57600 but tends to become unstable).

'Computing' 카테고리의 다른 글

VP8 And FFmpeg  (0) 2010.06.03
DDS 자료  (0) 2010.05.14
HwpCtrl 보안승인모듈 다운로드  (0) 2010.03.09
iPhone and Steve Jobs  (0) 2010.02.26
ffmpeg x264 profile setting  (0) 2010.02.24

HwpCtrl 보안승인모듈 다운로드

한글 ActiveX 컨트롤을 사용하여 문서를 열 때 "접근을 허용하시겠습니까?" 라는 내용의 대화상자를 보실 수 있습니다.

이는 local 영역에 파일을 읽고 쓰기할경우 나타나는 보안승인 창으로 보안상 중요하나,

매 사용시 보안승인을 하는 것은 사용상 불편한 점이 많습니다.

그러므로 한글 ActiveX 컨트롤은 보안승인을 별도의 모듈을 이용해서 처리하도록 지원합니다.

보안승인 창을 나타나지 않게 하려면 아래와 같이 2가지를 설정해 주어야 합니다.

1. 보안승인 모듈을 DLL로 구현하고 아래 경로에 등록해 주어야 합니다.

<DLL 레지스트리 등록>

레지스트리 경로 : HKEY_CURRENT_USER\Software\HNC\HwpCtrl\Modules\

Name : 보안모듈 명   (예) FilePathCheckerModuleExample

value : dll 풀패스+dll 명   (예) C:\FilePathCheckerModuleExample.dll

으로 등록해야 합니다.

2. 구현소스에 RegisterModule API를 이용해 보안모듈을 등록합니다.

<MFC 소스에서 보안모듈 등록 예>

BOOL bRes = m_cHwpCtrl.RegisterModule((LPCTSTR)"FilePathCheckDLL", (COleVariant)(LPCTSTR)"FilePathCheckerModuleExample");

<javascript 소스에서 보안모듈 등록 예>

var bRes = vHwpCtrl.RegisterModule("FilePathCheckDLL", "FilePathCheckerModuleExample");

첨부파일 입니다.

1. 보안 모듈 소스

2. DLL 파일   : FilePathCheckerModuleExample.dll

예제를 직접 사용하실때에는 보안을 위해 모듈명을 변경하신 뒤 사용하십시오.

감사합니다.

'Computing' 카테고리의 다른 글

DDS 자료  (0) 2010.05.14
Apple iPod - iPhone dock Connector Pinout  (0) 2010.04.02
iPhone and Steve Jobs  (0) 2010.02.26
ffmpeg x264 profile setting  (0) 2010.02.24
ffmpeg for iphone  (0) 2010.02.15

iPhone and Steve Jobs

'Computing' 카테고리의 다른 글

Apple iPod - iPhone dock Connector Pinout  (0) 2010.04.02
HwpCtrl 보안승인모듈 다운로드  (0) 2010.03.09
ffmpeg x264 profile setting  (0) 2010.02.24
ffmpeg for iphone  (0) 2010.02.15
사야될 통계 책  (0) 2010.02.11

ffmpeg x264 profile setting

 

# option for highprofile

options_hp=-vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256 \

-partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \

-me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 \

-flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 \

-g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\

-qmax 51 -qdiff 4

 

# Option for Baseprofile

options_bp=-vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256 \

  -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \

  -me_method hex -subq 7 -trellis 1 -refs 5 -bf 0 \

  -flags2 +mixed_refs -coder 0 -me_range 16 \

           -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\

  -qmax 51 -qdiff 4

 

http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide/

http://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping

http://rob.opendot.cl/index.php/useful-stuff/h264-profiles-and-levels/

http://sites.google.com/site/linuxencoding/x264-encoding-guide

http://www.ffmpeg.org/ffmpeg-doc.html

'Computing' 카테고리의 다른 글

HwpCtrl 보안승인모듈 다운로드  (0) 2010.03.09
iPhone and Steve Jobs  (0) 2010.02.26
ffmpeg for iphone  (0) 2010.02.15
사야될 통계 책  (0) 2010.02.11
유로 ACM 논문 무료로 보기...(물론 합법)  (0) 2010.02.10

ffmpeg for iphone

http://code.google.com/p/ffmpeg4iphone/

http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-October/076618.html

Måns Rullgård mans at mansr.com
Fri Oct 2 22:58:09 CEST 2009


I am pleased to announce that FFmpeg can now be built unpatched for
the iPhone.  The process is still not entirely without pain, however.
Here's how it's done:

1.  Download and install the iPhone SDK 3.1.
2.  Get the latest gas-preprocessor and install it in /usr/local/bin
    or some other directory in your $PATH.
    http://github.com/yuvi/gas-preprocessor/ 
3.  Get the latest FFmpeg from SVN (minimum r20151).
4.  Configure FFmpeg with one of the following commands.  These give a
    clean build with a default installation of iPhone SDK 3.1 on OSX Leopard.
    Other versions may vary.
4a. For iPhone 3GS or iPod Touch 3G 32GB/64GB, use this command:
    ./configure --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.2.1 --as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.2.1' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk --enable-cross-compile --target-os=darwin --arch=arm --cpu=cortex-a8 --enable-pic
4b. For other iPhone or iPod Touch models, use this command:
    ./configure --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.2.1 --as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.2.1' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk --enable-cross-compile --target-os=darwin --arch=arm --cpu=arm1176jzf-s
5.  Run make.

It is important to specify a correct --cpu option, and not merely an
architecture version.  Failure to specify the exact CPU will give a
broken build.

For the iPhone 3GS and compatible iPods, --enable-pic is required to
avoid some nasty-looking linker warnings about relocations.

I have not tested the builds on an iPhone/iPod, so there may still be
remaining issues.  Please report any problems you encounter.

Many thanks to David Conrad for the gas-preprocessor script, without
which this would not be possible.

-- 
Måns Rullgård
mans at mansr.com


More information about the ffmpeg-devel mailing list

'Computing' 카테고리의 다른 글

iPhone and Steve Jobs  (0) 2010.02.26
ffmpeg x264 profile setting  (0) 2010.02.24
사야될 통계 책  (0) 2010.02.11
유로 ACM 논문 무료로 보기...(물론 합법)  (0) 2010.02.10
C++에서 C# DLL Interop  (0) 2010.02.09

사야될 통계 책

'Computing' 카테고리의 다른 글

ffmpeg x264 profile setting  (0) 2010.02.24
ffmpeg for iphone  (0) 2010.02.15
유로 ACM 논문 무료로 보기...(물론 합법)  (0) 2010.02.10
C++에서 C# DLL Interop  (0) 2010.02.09
android omnia kernel build  (0) 2010.02.04

유로 ACM 논문 무료로 보기...(물론 합법)

 

http://www.hybrid.pe.kr/tt/264

 

많이들 아는 유명한 방법이긴 한데, 그냥 참고삼아 적는다.
다들 ACM 중에서 그래픽 학회인 SIGGRAPH 를 알 것이다. 유로 논문이 많아... 결제를 해버릴까.... 하는 생각도 잠시 했었지만... 안하길 잘했다. -_-;
RISS - KERIS 학술정보서비스( http://www.riss4u.net )에서 라이센스를 받아 서비스 하는 것으로, 회원가입만 하면 ACM 논문들을 무료로 볼 수 있다.
방법은 간단... 회원 가입 후
http://www.riss4u.net/etc/myriss/login ··· m_dl.jsp
이 주소로 접속하면 아래에 ACM Portal 페이지가 뜬다. 그 다음 검색 후 그냥 보면된다.(ACM 로그인은 필요 없음)
추가로 다음을 참고한다.
이 방법의 출처 : http://blog.naver.com/drrich?Redirect=Log&logNo=20034030982
그림을 통한 설명 : http://jbpark.tistory.com/53
또한, SIGGRAPH 의 논문들만 모아둔 곳이 있다. 
Tim Rowley : http://trowley.org/
연도별로, 분야별로 잘 정리를 해둔 곳이다. 이곳에서는 각 논문의 저자 홈페이지를 잘 분류해서 링크를 해두었다. (많은 논문 저자들이 자신의 홈페이지에 자신의 논문을 올려둔다.)
ps. PubMed 논문은 어디서 무료로 볼 수 있는 방법 없나.... 없겠지.. ㅜ_ㅜ
(RISS 에 건의나 해봐야겠다.)

'Computing' 카테고리의 다른 글

ffmpeg for iphone  (0) 2010.02.15
사야될 통계 책  (0) 2010.02.11
C++에서 C# DLL Interop  (0) 2010.02.09
android omnia kernel build  (0) 2010.02.04
android omnia porting current status  (0) 2010.02.04

C++에서 C# DLL Interop

'Computing' 카테고리의 다른 글

사야될 통계 책  (0) 2010.02.11
유로 ACM 논문 무료로 보기...(물론 합법)  (0) 2010.02.10
android omnia kernel build  (0) 2010.02.04
android omnia porting current status  (0) 2010.02.04
android kernel build for samsung omnia  (0) 2010.02.04

android omnia kernel build

http://andromnia.blogspot.com/2009/08/andromnia-tutorial-so-far.html

 

What do you need to install Android OS on a Samsung Omnia ?

  1. A Samsung Omnia
  2. A linux PC (I made that with Ubuntu 9.04)
  3. A little basic shell command knowledge
  4. A Mini SD card (couple gig's)
  5. Some time ^^

First, get all the necessary packages:

sudo apt-get install linux-headers-$(uname -r) gcc make kernel-package libncurses5-dev fakeroot wget bzip2 git-svn curl git-core gedit build-essential debhelper libqt3-mt-dev libxtst-dev libqt3-headers qt4-qmake qt4-qtconfig libqt4-gui libqt4-core subversion

Next, get the latest version of the project (this step may take a while, it's about a giga):

svn co https://dotpt.com/svn/andromnia/trunk/ ~/andromnia

Get the cross compiler and extract it in your andromnia directory:

http://www.codesourcery.com/sgpp/lite/arm/portal/package3696/public/arm-none-linux-gnueabi/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Create this link :

ln -s ~/andromnia/arm-2008q3 ~/andromnia/arm_cross_compiler

Get the haret archive and extract it in your andromnia/haret directory (yes create it too):

http://pmaster.no/andromnia/haret.zip

Then, go to the kernel's directory and build it (takes some time, grab a coffee and/or a smoke):

cd ~/andromnia/kernel
make zImage

Finally, copy it to haret's directory for convenience's sake 

cp ~/andromnia/kernel/arch/arm/boot/zImage ~/andromnia/haret/zImage

Copy the contents of ~/andromnia/rootfs to the root of your sd card (should be formatted with ext2 or ext3)
HOT TIP: Don't forget to unmount before removing the cable/unplugging it!!!
Copy the contents of ~/andromnia/haret anywhere on your phone (except the sd card), run haret.exe and tap run!

Voilà ^^

android omnia porting current status

http://www.samsung-omnia.org/rom-discussion/android-runs-on-omnia/

 


Re: Android RUNS ON OMNIA

« Reply #10 on: August 11, 2009, 01:30:37 AM »


So I just wanted to get more updates running on this site. I hope some developers and chefs will hopefully go work on this project if they haven't already. Heres some links with more information.
The Modaco forum (looks like the hub of develpmont) http://www.modaco.com/content/i9x0-omnia-http-omnia-modaco-com/289028/project-andromnia-android-on-omnia/
Andromnia.net (A discussion forum similar to this site) http://www.andromnia.net
Androidomnia.com (Site with news and donations)http://androidomnia.com/
Changelog (revision notes) http://ferro.eu.org/andromnia/changelog.txt
Heres a list of what works and what doesn't as of August 6th 2009
CPU (PXA312)    - Working
128MB RAM    - Working
Boot Process    - Working (Kernel, Android and armDebian successfully booted)
Touchscreen    - Working
Backlight    - Working
LED    - Working
Battery    - Working (USB charging isn't working yet)
SD-Card    - Working (Internal memory recognized by Android)
Wifi    - Partitially working (some users reported wifi is disconnecting after few minutes or access point not found!)
Buttons    - Most buttons working (except power button)
GSM    - basic support (you can send and recieve sms but no calls yet)
Frequency Scaling   - In progress
Suspend/Resume    - In progress
Sound    - in progress
USB    - Not working
Bluetooth    - Not working
GPS    - Not working
Flash    - Not working
Bootloader    - Not working

'Computing' 카테고리의 다른 글

C++에서 C# DLL Interop  (0) 2010.02.09
android omnia kernel build  (0) 2010.02.04
android kernel build for samsung omnia  (0) 2010.02.04
Windows Mobile / DirectShow / SampleGrabber  (0) 2010.02.04
omnia에 android 설치  (0) 2010.01.15

android kernel build for samsung omnia

http://forum.xda-developers.com/showthread.php?t=431329

 

Complete steps for booting the android linux kernel (updates follow as we progress):

Install Dev Environment:

apt-get install linux-headers-$(uname -r) gcc make kernel-package libncurses5-dev fakeroot wget bzip2 git-svn curl

 

Download Cross Compiler
http://www.codesourcery.com/sgpp/lit...tal/release642

Select: GNU/Linux (and then Advanced Packages / IA32 GNU/Linux TAR)

 

Download and Unpack Cross Compiler
(http://www.codesourcery.com/sgpp/lit...ux-gnu.tar.bz2)

# wget http://www.codesourcery.com/sgpp/lit...ux-gnu.tar.bz2
# cd /usr/local ; tar -xjvf /tmp/arm-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 

Download Kernel (Thans to Oliver Ford!)
# git clone http://www.oliford.co.uk/hpipaq214/ipaq214.git v4

 

Change in Makefile:

# vi /ANDROID/v4/Makefile

ARCH ?= arm
CROSS_COMPILE ?= /usr/local/xscale/arm-2008q3/bin/arm-none-linux-gnueabi-

 

Adjust resolution (Thanks to z720!)
open the /arch/arm/mach-pxa/hpipaq214-lcd.c and change the folowing parameters:

.xres = 240 
.yres = 400
.pixclock = 96153.

 

Compile kernel:
make Image
The compiled and with Haret runable image will be in "arch/arm/boot/Image"

Download Haret (I used the PXA312 version from Oliver Ford from www.handhelds.com)
http://www.oliford.co.uk/hpipaq214/f...q214-aug08.exe

Change Haret Settings (default.txt)

set kernel "Image"
Set ramaddr 0xa0000000
Set RAMSIZE 0x04000000
Set cmdline "root=179:2 rootdelay=3 rw init=/sbin/init"
Set mtype 1653
Set kernelcrc 0
Set fbduringboot 1
Set forcefbduringboot 1

Bootlinux

Booting.....
If you copy the compiled Image to the directory in which you placed Haret, you should be off, the kernel will boot.. Mind you, this is just the booting kernel, the hard work will start from here!

 

Cross Compile busybox with static linking:
cd busybox-1.13.2/
Change Makefile to have the cross compiler active again:

ARCH            ?= arm
CROSS_COMPILE   ?= /usr/local/arm-2008q3/bin/arm-none-linux-gnueabi-

 

Make the static busybox (make menuconfig first and disable all non wanted busybox commands, leave ash, init, rclinux and telnetd active for later use!):
# LDFLAGS="--static" CFLAGS="--static" make
# file busybox
busybox: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
Copy the busybox to the new initrd directory:
# cp busybox /ANDROID/initrd
# cd /ANDROID/initrd
# ln -s busybox init
# ln -s busybox ash
# ln -s busybox rclinux
# mkdir dev; mkdir sys ; mkdir proc
# cp -dpr /dev/ttys1 /dev/ttys2 /dev/ttys3 /dev/ttys4 /ANDROID/initrd/dev
Make the initrd.gz ramdisk fromout the initrd directory
# find . | cpio --create --'format=newc' | gzip >../initrd.gz
Copy it to the directory in which the kernel is placed...
Change default.txt cmdline:

Set cmdline "root=/dev/ram0 ramdisk_size=8192 rootdelay=5 rootwait rw init=/ash lpj=loops_per_jiffy boot_delay=100"

 

Boot and see why we need a keyboard now Next step is maybe auto configure network and start telnetd in the ramdisk
[OLD]
Hi, I read the thread about running Android on the Kaiser and was very interested to get at least a linux kernel running on my phone.. However no luck..
Well.. Tried to compile the kernel for this specific architecture (PXA312) with the gnueabi toolchain. The android kernel compiled fine with some minor changes. After that, i tried to start the kernel with HaRET but could not get it to start. I cannot determine the RAMADDR and the mtype for the omnia.
http://www.arm.linux.org.uk/developer/machines/
http://www.codesourcery.com/gnu_tool...ux-gnu.tar.bz2
http://code.google.com/p/android/downloads/list
HaRET does not seem to recognize the omnia's PXA312... Also i cannot determine the mtype for this.. Anyone have any ideas on how to get the kernel to boot???


Last edited by us1111; 10th February 2009 at 04:44 PM..

'Computing' 카테고리의 다른 글

android omnia kernel build  (0) 2010.02.04
android omnia porting current status  (0) 2010.02.04
Windows Mobile / DirectShow / SampleGrabber  (0) 2010.02.04
omnia에 android 설치  (0) 2010.01.15
pda rom dump  (0) 2010.01.15

Windows Mobile / DirectShow / SampleGrabber

code project의 SampleGrabber 사용

http://www.codeproject.com/KB/mobile/samplegrabberfilter-wm6.aspx

 

VS2005에서 빌드할때 문제발생

method undefined

  1. CSampleGrabber::FindPin
  2. CSampleGrabber::JoinFilterGraph
  3. CSampleGrabber::QueryVendorInfo
  4. CSampleGrabber::NonDelegatingRelease

위 목록중에서 3개는 아래 방법으로 해결

  • Under Project Propeties/C++/Language change the compiler option  "Treat wchar_t as builtin type" to No and rebuild

마지막 1개는 아래 방법으로 해결

  • #ifdef DEBUG
    #define UNDEFINEDEBUGTEMPORARILY
    #undef DEBUG
    #endif
    #include <streams.h>
    #ifdef UNDEFINEDEBUGTEMPORARILY
    #define DEBUG
    #endif
  • streams.h안에 NonDelegatingRelease는 DEBUG에서만 정의되도록 되어있어서, CBaseFilter를 implement하는 모든 class들은 이를 DEBUG에서는 구현해야하나 보통 구현하지않게되므로, streams.h를 include할때 그냥 DEBUG를 undef해버림
  • codeproject의 소스는 그 외에도 precompiled header에서 streams.h를 include하고 있으므로 이또한 처리를 해주어야 한다.

'Computing' 카테고리의 다른 글

android omnia porting current status  (0) 2010.02.04
android kernel build for samsung omnia  (0) 2010.02.04
omnia에 android 설치  (0) 2010.01.15
pda rom dump  (0) 2010.01.15
ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기  (0) 2010.01.15

omnia에 android 설치

pda rom dump

'Computing' 카테고리의 다른 글

Windows Mobile / DirectShow / SampleGrabber  (0) 2010.02.04
omnia에 android 설치  (0) 2010.01.15
ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기  (0) 2010.01.15
SATA2하드의 SATA1설정  (0) 2009.11.13
Windows 7, APIs  (1) 2009.11.03

ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기

1. torrent를 통해서 받은 이미지는 에러가 난다 (cound not find kernel image)

2. display resolution이 800x600으로 고정되어있다.

virtual pc는 S3 Trio gfx card를 에뮬레이트 한단다.

그래서 grup config에다가 한줄 추가해줘야되는데

/etc/default/grub
GRUB_CMDLINE_LINUX="vga=791 s3fb.mode_option=1024x768-16"

그리고나서

sudo update-grub

그리고 reboot

 

그랬더니 console은 1024x768로 나오는데 정작 gdm은 그대로 800x600이다. 쩝

 

결국 해결안되서 VirtualBox로 이동… ㅜ.ㅜ

http://www.virtualbox.org

'Computing' 카테고리의 다른 글

omnia에 android 설치  (0) 2010.01.15
pda rom dump  (0) 2010.01.15
SATA2하드의 SATA1설정  (0) 2009.11.13
Windows 7, APIs  (1) 2009.11.03
ffmpeg의 apiexample을 사용한 mpeg encoding 방법  (0) 2009.10.04

SATA2하드의 SATA1설정

image

'Computing' 카테고리의 다른 글

pda rom dump  (0) 2010.01.15
ubuntu 9.10 desktop을 microsoft virtual pc 2007에 설치하기  (0) 2010.01.15
Windows 7, APIs  (1) 2009.11.03
ffmpeg의 apiexample을 사용한 mpeg encoding 방법  (0) 2009.10.04
Unofficial FFmpeg Win32 Builds  (0) 2009.09.30

Windows 7, APIs

Windows 7 그리고 새로운 API

 

Active Directory Rights Management Services
For a list of API additions, see RMS in Windows 7.

 

Biometric Service API
Use the Biometric Service API to create client applications that call into the Windows Biometric Framework (WBF) to capture, save, and compare end-user biometric information.

For more information, see Biometric Service API.

 

COM
For a list of API changes, see Changes to COM in Windows 7.

 

Core Windows
For a list of API additions, see Windows 7.

 

Distributed File System Replication
For a list of API additions, see What's New in DFSR in Windows Server 2008 R2 and Windows 7.

 

Enhanced Storage
The Enhanced Storage API enables consistent end-to-end authentication for personal storage devices that differ in form factor.

For more information, see Enhanced Storage.

 

Enhanced Taskbar
The taskbar has been extended significantly under the guiding principle of getting users where they're going as quickly and efficiently as possible. To that end, the application windows, files, and commands that the user needs to accomplish that are now centralized into a single taskbar button that consolidates previously scattered information sources and controls. A user can now find common tasks, recent and frequent files, alerts, progress notifications, and thumbnails for individual documents or tabs all in one place.

For more information, see Taskbar Extensions.

 

Event Tracing for Windows (ETW)
For a list of API additions, see What's New.

 

Extended Linguistic Services
Extended Linguistic Services (ELS) supports text-based services, including language detection, script detection, and transliteration services.

For more information, see Extended Linguistic Services.

 

File Server resource Manager
For a list of API additions, see What's New.

 

Hardware Counter Profiling
This API enables applications to capture thread profiling data such as cycle time and the reasons for context switches.

For more information, see Hardware Counter Profiling.

 

Hyper-V
For a list of API additions, see What's New in Hyper-V.

 

Internet Explorer
Internet Explorer 8 is available for download and is also included in Windows 7.

For more information, see What's New in Internet Explorer 8.

 

Location API
The Location API helps to simplify location-aware programming by providing a standard way to retrieve data about user location and standardizing formats for location data reports. The Location API automatically handles transitions between location data providers and always chooses the most accurate provider for the current situation.

For more information, see Location API.

 

Mobile Broadband
The Mobile Broadband API is used to implement connectivity to cellular networks. Applications should not communicate with such mobile broadband devices directly. Instead, they must use the Mobile Broadband API.

For more information, see Mobile Broadband.

 

Native Wifi
For a list of API additions, see What's New in Native Wifi.

 

Network Share Management
For a list of API additions, see What's New in Network Share Management in Windows Server 2008 R2 and Windows 7.

 

Packaging
A package is a compressed file that contains application data. The Open Packaging Conventions (OPC) introduce two basic concepts to describe a package: parts and relationships. A part is a physical object that contains application data and is located inside a package. A relationship is a logical association between any package or part and a URI-addressable resource such as a part or an external Web site.

A digital signature is used to validate the package originator's identity and to confirm that the signed contents of the package have not been modified after signing. In a package, the signature can reference the package components that have been signed; it can include objects that contain application data, which may also have been signed; and it can include certificates, which can be used in signature validation.

For more information, see Packaging.

 

Parental Controls
For a list of changes, see What's New in Windows 7 Parental Controls.

 

Peer Distribution
Use this API to publish or consume digital content.

For more information, see Peer Distribution.

 

Performance Counters
For a list of API additions, see What's New.

 

Power Management
For a list of API additions, see What's New in Power Management.

 

Scenic Animation
For more information, see Scenic Animation.

 

Sensor API
Sensors are devices or mechanisms that can measure physical phenomena, provide descriptive data, or provide information about the state of a physical object or environment. Computers can make use of built-in sensors, sensors that are connected through wired or wireless connections, or sensors that provide data through a network or the Internet. The Sensor API provides a standard way to programmatically access data that sensors provide.

For more information, see Sensor API.

 

Virtual Disk Service
For a list of API additions, see What's New in VDS in Windows Server 2008 R2 and Windows 7.

 

Virtual Hard Disk
The Virtual Hard Disk (VHD) format is a publicly-available image format specification that specifies a virtual hard disk encapsulated in a single file, capable of hosting native file systems while supporting standard disk and file operations. An example of how VHD files are used is the Hyper-V feature in Windows Server 2008, Virtual Server, and Virtual PC. These products use VHD to contain the Windows operating system image utilized by a virtual machine as its system boot disk.

For more information, see Virtual Hard Disk.

 

Volume Shadow Copy Service
For a list of API additions, see What's New in VSS in Windows Server 2008 R2 and Windows 7.

 

Windows Connect Now
Windows Connect Now (WCN) allows mobile and embedded devices, 802.11 access points (APs), and computers to securely connect, and exchange settings with each other. WCN is designed for the home or small business user, providing a reasonable compromise between ease-of-use and robust security.

For more information, see Windows Connect Now.

 

Windows Error Reporting
For a list of API additions, see What's New in WER.

 

Windows Event Log
For a list of API additions, see What's New.

 

Windows Gadget Platform
The Windows Gadget Platform is the new framework for creating and hosting mini-applications called gadgets on the desktop.

For more information, see Windows Gadget Platform.

 

Windows Installer
For a list of changes, see What's New in Windows Installer 5.0.

 

Windows Scenic Ribbon
The Windows Scenic Ribbon (Ribbon) is a rich command presentation system that provides a modern alternative to the layered menus, toolbars, and task panes of traditional Windows applications. Similar in functionality and appearance to the Microsoft Office Fluent Ribbon, the Ribbon is a command bar that exposes the major features of an application through a series of tabs at the top of an application window.

For more information, see Windows Scenic Ribbon.

 

Windows Touch
New hardware and API support enables applications to receive multitouch input. This gives such applications the ability to detect and respond to multiple simultaneous touch points on the application’s visible surface. Functionality for this feature is provided by a new set of dedicated window messages that report touch down, up, and move actions. The new messages report action and position of touch points with unique identification of simultaneous touch points.

For more information, see Windows Touch.

 

Windows Troubleshooting Platform
Windows Troubleshooting Platform (WTP) provides ISVs, OEMs, and administrators the ability to write troubleshooting packs that are used to discover and resolve issues found on the computer. Previously, troubleshooting software and hardware issues was a manual process; however, using WTP you can automate the process of fixing the most common detectable issues that the user might encounter using your software or hardware.

For more information, see Windows Troubleshooting Platform.

 

Windows Web Services
Windows Web Services API (WWSAPI) is a native-code implementation of SOAP which provides core network communication functionality by supporting a set of the WS-* and .NET-* family of protocols. WWSAPI offers C/C++ application programming interface (API) for building SOAP based web services and clients to them.

For more information, see Windows Web Services.

 

XPS Documents
Application developers can use XPS documents to share and archive content as electronic paper in a high-fidelity, efficient, and trustworthy format. The XPS document APIs enable developers to create, access, and manipulate XPS documents easily.

For more information, see XPS Digital Signatures and XPS Document.

ffmpeg의 apiexample을 사용한 mpeg encoding 방법

ffmpeg의 apiexample을 사용한 mpeg encoding 방법
|
MMPEG

2007.07.31 17:04

민주가인(ohlucky6)

http://cafe.naver.com/inggi/286

1. ffmpeg library 사용법
2. ffmpeg encoding 방법의 종류
  2.1 YUV
  2.2 RGB->YUV
  2.3 YUV library함수 사용하기
  2.4 RGB->YUV library함수 사용하기
3. V4L에서 영상 받기
  3.1 TV Card
  3.2 USB
4. ffmpeg를 사용하여 encoding하기
  4.1 saveToFile
  4.2 포맷에 따는 각각의 MPEG압축 방법
    4.2.1 YUV420P
    4.2.2 RGB24->YUV420P
    4.2.3 YUV library함수 사용하기
    4.2.4 RGB24->YUV420P library함수 사용하기
5. 요약

-서문
------

본 문서는 ffmpeg를 사용하여 video 신호를 mpeg codec로 encoding하는 방법을 소개한다.
여기서 사용하는 source는 libavcodec의 예제 source인 apiexample.c를 가지고 변형하여
작성한 문서임을 밝힌다.
Reference문서가 많지 않아서 정확한 의미를 알지 못하는 부분이 있다.
만약 그러한 부분에 대한 정화한 의미를 아는 사람이 있다면, director@smu.ac.kr로 연락주기 바란다.
그럼 이제부터 WebCAM과 TV Card를 사용한 ffmpeg encoding 방법에 대해서 알아보자

1. ffmpeg library 사용법
-------------------------

우리가 ffmpeg library를 사용하기 위해서는 동적 라이브러리 파일을 컴파일시
연결시켜 주어야 한다.
동적 라이브러리 파일은 "*.a"파일로서, 우리가 ffmpeg를 통해 인코디하기 위해
사용하는 파일은 "/libavcodec/libavcodec.a"파일이다.
이렇게 ffmpeg library를 사용하는 파일을 컴파일하는 방법은 다음과 같다.

--------------------------------------------------------------------------------
$ gcc -g -O3 -Wall -o [filename] [filename.c] libavcodec.a -lm -lz -ldl
--------------------------------------------------------------------------------

2. ffmpeg encoding 방법의 종류
-------------------------------

장치가 가지는 신호의 종류는 여러가지이다. 그러나 여기서는 RGB24와 YUV420P두가지의
방식을 사용함을 먼저 밝힌다.
RGB24와 YUV420P 두가지의 방식을 사용하여 기본적으로 apiexample에서 제공하는 방식과
함수를 사용하는 방식 2가지로 구분하면 총 4가지의 방식이 나오게 된다.
이제부터 이 4가지의 방식에 대해 소개 하려 한다.

2.1 encoding_YUV.c
-------------------

apiexample.c에서 사용한 기본적인 방식을 사용한 방식이다.
AVFrame이라는 구조체를 선헌하고 구조체의 data배열에 실제 영상을 넣어주어
encoding하는 방식이다.

2.2 encoding_YUV_f.c
---------------------

AVPicture 구조체에 avpicture_fill()함수를 사용하여 영상데이터를
library함수로 넣어주는 방식이다.

2.3 encoding_RGB.c
-------------------

encoding_YUV.c와 방식은 동일하다. context의 세팅값은 PIX_FMT_YUV420P방식으로
세팅되어 있다.
단지 영상을 V4L을 통해서 받아 들일때 우리는 RGB24로 받아오게 되는것이다.
RGB24로 받아진 영상은 AVPicture라는 구조체에 저장되고 저장된 AVPicture를
img_convert()를 통해서 YUV420P로 변환한다.
그런후에 AVFrame 구조체의 배열인 data에 넣어주고 인코딩하게 되는것이다.

2.4 encoding_RGB_f.c
---------------------

모든 것은 위의 encoding_RGB.c와 동일하나 단지 apiexample.c에서 영상을
받아오는 방법과 틀릴뿐이다.
apiexample.c에서는 영상을 받아와 AVFrmae *picture의 data에 넣어 주었다
하지만 여기서는 avpicture_fill()을 사용하여 캡쳐된 영상을
AVPicture 타입의 구조체에 넣어준다.
RGB타입인 이 영상을 YUV방식으로 변환하기 위하여 img_convert()함수를
사용하여 RGB24형태의 영상을 YUV420P포맷으로 변환한 후
avcodec_encode_video()를 사용하여 인코드 시키는 것이다.

3. V4L에서 영상받기
--------------------

자세한 내용은 http://pl.smu.ac.kr/researches/projects/linux-dvr/
의2004-02-02-ELF-Video4linux-Capture.txt 문서를 참조 하기 바란다.
여기서는 TV Card와 USB Camera를 세팅하기 위한 부분만 보도록 하겠다.

--------------------------------------------------------------------------------
int setChannel(struct video_channel chan, int channel_no, int device_type)
{
  switch(device_type)
  {
    /* Case 1 : TV Card setting */
    case 0 :
      chan.channel = channel_no;
      chan.flags = VIDEO_VC_TUNER;
      chan.type = VIDEO_TYPE_TV;
      chan.norm = VIDEO_MODE_NTSC;
      if((rv = ioctl(video, VIDIOCSCHAN, &chan)) < 0)
      {
return -1;
      }
      break;
    case 1 :
      chan.channel = channel_no;
      chan.type = VIDEO_TYPE_CAMERA;
      chan.norm = VIDEO_MODE_NTSC;
      if((rv = ioctl(video, VIDIOCSCHAN, &chan)) < 0)
      {
return -1;
      }
      break;
    default :
      break;
  }
  return 0;
}
--------------------------------------------------------------------------------

3.1 TV Card
------------

위의 소스 코드를 보면 TV Card의 경우 device_type의 값이 0일경우 대응됨을
알 수 있다.
이경우 우리는 총 4가지를 설정해준다.
channel값과 flags, type, norm값등이다. 이런 세팅값들은 다른 TV Card들에서도 동일하다.
여기서 channel값은 일반적으로 가정용 비디오에서의 Input의 종류를 의미한다.
flag값은 비디오 장치가 tuner를 가지고 있다는 것을 알려준다.
tuner가 없을 경우 설정하지 않아도 된다.
type값은 비디오 장치의 종류를 의미하고 여기서는 TV Card이기 때문에
VIDEO_TYPE_TVnorm값은 NTSC와 PAL이라는 TV신호의 종류를 의미한다.

3.2 USB
--------

위의 소스 코드를 보면 USB의 경우 device_type의 값이 1일경우 대응됨을 알 수 있다.
이경우 우리는 3가지를 설정해주는데 channel값과 type, norm값을 설정해 주면된다.

4. ffmpeg를 사용하여 encoding하기
----------------------------------

ffmpeg를 사용하여 encoding을 하기 위해서 우리는 크게 5가지의 단계를 거칠 것이다.
첫번째, avcodec_init();
두번째, avcodec_register_all();
세번째, InitCaptureDevice(DEVICE_NAME, VIDEO_INPUT);
네번째, CaptureImage();
다섯번재, SaveToFile(nMaxCount, map, IMG_W, IMG_H);
첫번째 단계는 avcodec_init()함수를 사용하여 avcodec을 초기화 하는 단계이다.
다음으로 우리는 초기화된 avcodec의 모든 codec을 등록해야 하는데 이일을
avcodec_register_all()함수가 해주게 된다.
그러면 일단 avcodec과 관련된 기본적인 설정은 끝난것이다.
다음으로 우리는 우리가 만든 initCaptureDevice()라는 함수를 부르게 된다.
여기에는 DEVICE_NAME와, VIDEO_INPUT이 인수로 들어가게 되는데 둘다 상수 값으로서
DEVICE_NAME는 TV 또는 USB Camera를 의미하고 VIDEO_INPUT은 말 그대로
input의 종류를 의미한다.
그 다음으로 우리는 설정된 디바이스에서 메모리로 사진을 가져오게 된다.
영상은 여러장의 사진이 모아진 것이므로 우리는 먼저 사진을 찍어야하고
이사진들을 여러장 찍어서 동영상을 만드는 작업을 하게 되는 것이다.
따라서, captureImage()라는 함수를 호출하게 된다.
이 함수는 장치 디바이스로 부터 사진을 받아와 v_map이라는 곳에다 저장하게 된다.
그것을 우리는 in_addr이라는 포인터로 접근 할 수 있다.
이렇게 가져온 사진들을 동영상으로 만들기위해 saveToFile(nMaxCount, map, IMG_W, IMG_H);와 같이
saveToFile()함수를 부르게 된다. 이때 같이 넘겨주는 인수는 총 프레임의 수와 v_map영상이 저장된
곳의 주소(여기서는 in_addr) 포인터, 이미지의 가로와 세로 길이를 넘겨준다.
saveToFile()함수는 이러한 인수를 받아서 nMaxCount만큼 돌면서 map주소에서 IMG_W*IMG_H크기 만큼의
사진을 얻어와 우리가 설정해준 값에 따라서 파일로 저장해 준다.
그렇다면 이렇게 저장되기 위해서 우리는 어떠한 설정을 해주어야 하는 것이라는 것을 알수 있다.
우리는 encoding을 하기 전에 AVContext라는 구조체의 값을 설정해주어야 한다.
이것은 우리가 encoding할 파일의 정보를 설정하는 것으로서 bitrate, framerate등 영상파일에 대한
정보를 가지고 있다. 자세한 내용은 별첨 문서에서 알아보기로 한다.

4.1 saveToFile
-----------------------------------------------------------------------------
  /*
   *
   * Function    : saveToFile
   *
   * Description : After encoding a frame, save to file
   *
   * Global      : n_frame_count
   *
   * Arguments   : int n_max_count, char *int_addr, int n_width, int n_height
   *
   */
  void saveToFile( int n_max_count, char *in_addr, int n_width, int n_height )
  {
    unsigned char *y;
    unsigned char *u;
    unsigned char *v;
    int yy;
    int xx;
    int i = 0;
    AVCodec *codec = NULL;
    AVCodecContext *c = NULL;
    int out_size = 0, size = 0, outbuf_size = 0;
    AVFrame *picture = NULL;
    uint8_t *outbuf = 0, *picture_buf = 0;

    if ( n_frame_count == 0 )
    {
      f = fopen ( "test.mpg", "w" );
      if ( !f )
      {
        fprintf( stderr, "could not open test.mpg\n" );
        exit( 1 );
      }
    }

    if( n_frame_count < n_max_count )
    {
      n_frame_count++;
      printf( "Video encoding\n" );

      /* find the mpeg1 video encoder */
      codec = avcodec_find_encoder( CODEC_ID_MPEG1VIDEO );
      if ( !codec )
      {
        fprintf( stderr, "codec not found\n" );
        exit( 1 );
      }
      c = avcodec_alloc_context();
      picture = avcodec_alloc_frame();

      /*format*/
      c->get_format = PIX_FMT_YUV420P;
      /* put sample parameters */
      c->bit_rate = 400000;
      /* resolution must be a multiple of two */
      printf("%d, %d\n", n_width, n_height);
      c->width = n_width;
      c->height = n_height;
      /* frames per second */
      c->frame_rate = 30;
      c->frame_rate_base= 1;
      c->gop_size = 10; /* emit one intra frame every ten frames */
      /*maximum number of b frames between non b frames.
        note: the output will be delayed by max_b_frames+! relative to th input
        - encodeing : set by user.
        - decoding: unused*/
      c->max_b_frames=1;

      /* open it */
      if ( avcodec_open( c, codec ) < 0 )
      {
        fprintf( stderr, "could not open codec\n" );
        exit( 1 );
      }
      /* the codec gives us the frame size, in samples */
      /* alloc image and output buffer */
      outbuf_size = 100000;
      outbuf = malloc( outbuf_size );
      size = c->width * c->height;
      picture_buf = malloc( ( size * 3 ) / 2 ); /* size for YUV 420 */
      picture->data[0] = picture_buf;
      picture->data[1] = picture->data[0] + size;
      picture->data[2] = picture->data[1] + size / 4;
      picture->linesize[0] = c->width;
      picture->linesize[1] = c->width / 2;
      picture->linesize[2] = c->width / 2;
      //dp = (unsigned char *)out_addr;
      y = ( unsigned char * )in_addr;
      u = y + n_width * n_height;
      v = u + n_width * n_height / 4;

      fflush( stdout );
      /* prepare a dummy image */
      /* Y */
      for( yy = 0; yy < c->height; yy++ )
      {
        for( xx = 0; xx < c->width; xx++ )
        {
     picture->data[0][yy * picture->linesize[0] + xx] = *y;
     y++;
        }
      }
      /* Cb and Cr */
      for( yy = 0; yy < c->height / 2; yy++ )
      {
        for( xx = 0; xx < c->width / 2; xx++ )
        {
   picture->data[1][yy * picture->linesize[1] + xx] = *u;
       picture->data[2][yy * picture->linesize[2] + xx] = *v;
       u++; v++;
        }
      }

      /* encode the image */
      for( i = 0; i < 2; i++ )
        out_size = avcodec_encode_video( c, outbuf, outbuf_size, picture );
      printf( "encoding frame %3d (size=%5d)\n", i, out_size );
      fwrite(outbuf, 1, out_size, f);
    }
    if ( n_frame_count == n_max_count )
    {
      n_frame_count++;
      /* get the delayed frames */  
      for( ; out_size; i++ )
      {
        fflush( stdout);      
        out_size = avcodec_encode_video( c, outbuf, outbuf_size, NULL );
        printf( "write frame %3d (size=%5d)\n", i, out_size );
        fwrite( outbuf, 1, out_size, f );
      }

      /* add sequence end code to have a real mpeg file */
      outbuf[0] = 0x00;
      outbuf[1] = 0x00;
      outbuf[2] = 0x01;
      outbuf[3] = 0xb7;
      fwrite( outbuf, 1, 4, f );
      fclose( f );
      free( picture_buf );
      free( outbuf );

      avcodec_close( c );
      free( c );
      free( picture );
      printf( "\n" );
    }
  }
-----------------------------------------------------------------------------
위의 소스를 보고 순서 대로 알아보자
여기서는 MPEG1을 사용한 인코딩의 방법만을 알아본다.
우리는 먼저 avcodec_find_encoder() 함수를 사용하여 우리가 사용할 코덱을 찾는다
이 작업이 끝나면 AVContext 형의 c에 avcodec_alloc_context();를 사용하여 메모리
공간을 할당해 준다.
그 다음에 AVFrame 형의 picture에 avcodec_alloc_frame();함수를 사용하여 메모리 공간을
할당하여 준다.
그런후 구조체 c에 값들을 세팅해준다.
여기서 세팅하는 값은 나중에 encoding을 할경우 인자로 같이 넘겨줄 값이다.
그런 다음 우리는 실제 영상이 들어갈 곳을 실제 영상이 있는 곳과 연결 시켜 준다.
이부분은 RGB이인지 YUV인지에 따라서 틀려지는 부분이 될 것이다.
여기서는 YUV420P포멧이기 때문에 Y, U, V 3개로 나눈다.
이것은 picture의 의 멤버 변수인 data[]배열에 연결 시켜주는데, 우리가 v_map에서
얻어온 in_addr의 주소를 data[0]에 넣어주고 data[1]와 data[2]에는 Y값이 차지하는
공간을 계산하고 in_addr주소에 Y가 차지하는 주소 공간을 더한 값을 넣어주게 된다.
이렇게 세팅을 한후 이미지를 인코딩 하는데 이미지가 처음에는 지연에 의해서
인코딩 되지 않기 때문에 2번의 인코딩을 함으로써 우리는 실제 데이터를 얻을 수 있다.
따라서, for문 안에 avcodec_encode_video( c, outbuf, outbuf_size, picture );를
2번 돌려서 우리가 원하는 압축된 사진을 얻을수 있는 것이다.
이렇게 나온 사진을 우리는 바로 파일에 저장한다.
이렇게 끝난후에 우리는 지연된 이미지가 있는지 알아보기위해 처음부터 out_size만큼
지연된 프레임을 확인하고 다시 파일에 저장 하게 된다.
그런후 파일의 마지막에 mpeg헤더를 추가한후에 모든 자원을 해제하고 끝내게 된다.

4.2 포맷에 따는 각각의 MPEG압축 방법
-------------------------------------

포맷과 함수를 사용하는지 마는지에 따라서 우리는 전부 4가지 경우의 사례를 볼 수 있다.
이러한 부분은 전부가 picture의 data배열에 자료를 넣어주는 방법에서 차이를 보이게 된다.
이러한 차이에 대해서 이제부터 알아볼것이다.

4.2.1 YUV420P
-----------------------------------------------------------------------------
      picture_buf = malloc( ( size * 3 ) / 2 ); /* size for YUV 420 */
      picture->data[0] = picture_buf;
      picture->data[1] = picture->data[0] + size;
      picture->data[2] = picture->data[1] + size / 4;
      picture->linesize[0] = c->width;
      picture->linesize[1] = c->width / 2;
      picture->linesize[2] = c->width / 2;
      //dp = (unsigned char *)out_addr;
      y = ( unsigned char * )in_addr;
      u = y + n_width * n_height;
      v = u + n_width * n_height / 4;

      fflush( stdout );
      /* prepare a dummy image */
      /* Y */
      for( yy = 0; yy < c->height; yy++ )
      {
        for( xx = 0; xx < c->width; xx++ )
        {
     picture->data[0][yy * picture->linesize[0] + xx] = *y;
     y++;
        }
      }
      /* Cb and Cr */
      for( yy = 0; yy < c->height / 2; yy++ )
      {
        for( xx = 0; xx < c->width / 2; xx++ )
        {
   picture->data[1][yy * picture->linesize[1] + xx] = *u;
       picture->data[2][yy * picture->linesize[2] + xx] = *v;
       u++; v++;
        }
      }
-----------------------------------------------------------------------------
AVFrame형의 data[0]에는 우리는 원래 YUV420P포맷의 영상을 가지고 있는 주소를 넣어준다.
그런후에 포인터를 Y의 크기 만큼 증가 시킨후에 U의 주소를 data[1]에 넣어주고
V의 주소를 data[2]에 넣어준다. 그런후에 linesize를 정해주는데,
Y는 원래 width이고 U,V는 크기가 압축되어 원래 width크기의 반절밖에 안되기 때문에
라인사이즈는 width/2가 된다.
그리고 for문을 돌리면서 각각의  data의 개개별 값에 y, u, v값을 넣어주게 된다.

4.2.2 RGB24->YUV420P
-----------------------------------------------------------------------------
    picture_buf = malloc((size * 3) / 2); /* size for YUV 420 */
    picture->data[0] = picture_buf;
    picture->data[1] = picture->data[0] + size;
    picture->data[2] = picture->data[1] + size / 4;
    picture->linesize[0] = c->width;
    picture->linesize[1] = c->width / 2;
    picture->linesize[2] = c->width / 2;

    newPicture.data[0] = picture->data[0];
    newPicture.data[1] = picture->data[1];
    newPicture.data[2] = picture->data[2];
    newPicture.linesize[0] = picture->linesize[0];
    newPicture.linesize[1] = picture->linesize[1];
    newPicture.linesize[2] = picture->linesize[2];

    avpicture_fill(&myPicture, in_addr, PIX_FMT_BGR24, c->width, c->height);
    img_convert(&newPicture, PIX_FMT_YUV420P, &myPicture, PIX_FMT_BGR24, c->width, c->height);
    fflush(stdout);
    /* prepare a dummy image */
    /* Y */
    for(y=0;y<c->height;y++)
    {
      for(x=0;x<c->width;x++)
      {
picture->data[0][y * picture->linesize[0] + x] = newPicture.data[0][y * newPicture.linesize[0] + x];
      }
    }
    /* Cb and Cr */
    for(y=0;y<c->height/2;y++)
    {
      for(x=0;x<c->width/2;x++)
      {
picture->data[1][y * picture->linesize[1] + x] = newPicture.data[1][y * newPicture.linesize[1] + x];;
picture->data[2][y * picture->linesize[2] + x] = newPicture.data[2][y * newPicture.linesize[2] + x];;
      }
    }
-----------------------------------------------------------------------------
RGB24->YUV420P와 YUV420P와 다른 점은 encoding은 YUV420P로 하지만 처음에 영상을
받은 후에 이미지를 컨버트 하는 점이다. 우리는 avpicture_fill()이란 함수를
사용해 AVPicture형의 구조체에 영상을 받아오게 된다.
받아온 영상은 RGB24포맷이고 이것을 우리는 img_convert()함수를 사용해
YUV420P포맷으로 변화하게 된다.
변화된 영상은 새로운 AVPicture형의 구조체에 할당 되게 되고 이것을 AVFrame의
구조체의 data[0]부터 data[1], data[2]에 넣어주므로서 그냥 YUV420P포맷을
사용했을때와 별 다를바없이 MPEG encoding을 할수 있게 된다.

4.2.3 YUV library함수 사용하기
-------------------------------

-----------------------------------------------------------------------------
    avpicture_fill(picture, in_addr, PIX_FMT_YUV420P, c->width, c->height);
-----------------------------------------------------------------------------
위에서 보았던 것과 같이 AVFrame의 data배열에 직접 넣어주어야 했던 실제
데이터 영상을 우리는 avpicture_fill()이라는 함수를 통해서 자동으로 할 수 있다.
하지만, 여기서는 약간의 문제가 생기게 된다.
무엇이냐면, avpicture_fill()함수의 첫번째인자는 즉 데이터가 들어가게 되는
곳의 형이 AVPicture타입이라는 점이다. AVPicture와 AVFrame의 차이점은 별첨 문서에서
확인하게 될것이다.
이런 것은 우리가 원하는 영상을 얻는데 영향을 미치지는 않는다. 하지만, 컴파일시
warning메세지를 출력하게 된다.
이렇게 간단하게 해주고 우리는 encoding함수를 호출하면 된다.

4.2.4 RGB24->YUV420P library함수 사용하기
------------------------------------------

-----------------------------------------------------------------------------
    avpicture_fill(&temp_picture, buf1, PIX_FMT_BGR24, c->width, c->height);
    avpicture_fill(&temp_picture, in_addr, PIX_FMT_BGR24, c->width, c->height);
    avpicture_fill(&new_picture, buf, PIX_FMT_YUV420P, c->width, c->height);
    img_convert(&new_picture, PIX_FMT_YUV420P, &temp_picture, PIX_FMT_BGR24, c->width, c->height);
    picture = (AVFrame *)&new_picture;
-----------------------------------------------------------------------------
RGB24에서 YUV420P로 변화시키는 과정은 위에서 보았던 함수를 사용하지
않는 것과 차이가 없다.
단지 data배열에 넣는 과정을 함수화 했다는 것이다.
실제 ffmpeg library에 있는 함수를 사용하게 되는것이다.
그리고 형의 충돌을 막기위해 AVFrame형의 picture에 AVPicture형의
new_picture를 넣을때 (AVFrame *)으로 형변환을 해주게 된다.

5. 요약
--------

ffmpeg library에 대한 문서가 정확히 나와있지 않은 상황에서 작성된 문서라
많은 부분이 부족 할 것으로 생각된다.
이 문서를 작성하는 동안에도 새로운 것을 알게 되었고 그부분에 대해서 추가
하지는 못했다.
새로운 방향으로 소스 코드를 고쳐야 하는 문제가 생겼기 때문이다.
그렇지만 기본적으로 영상을 저장하는데는 문제가 없었고 약 1개월동안
Mailing List를 보면서 알게된 점에대해서 부족하지만 적어 보았다.
많은 도움이 되기를 바라고 문제가 있을시에는 director@smu.ac.kr으로 연락 바란다.

'Computing' 카테고리의 다른 글

SATA2하드의 SATA1설정  (0) 2009.11.13
Windows 7, APIs  (1) 2009.11.03
Unofficial FFmpeg Win32 Builds  (0) 2009.09.30
Guide to building FFMpeg for Windows Mobile / Win CE  (0) 2009.09.30
윈도우에서 ffmpeg 컴파일하기(to use in vc++)  (0) 2009.09.30

Unofficial FFmpeg Win32 Builds

prev 1 2 next