-
이맥스의 파일 변수 사용하기Programmer/Emacs 2013. 7. 15. 10:31
이맥스에서 컴파일은 대부분 'M-x compile'을 사용한다. 이 명령을 치면, 별다른 설정이 없으면, 기본 명령어 "make -f"가 이맥스 미니 퍼버에 보인다. 대다수의 C/C++ 프로젝트는 Makefile을 사용함으로 그냥 엔터를 누르자. 컴파일 과정과 결과는 '*compilation*' 버퍼에서 보여준다. 컴파일 관련 오류도 같이 출력한다. 이 오류 메시지를 선택하면 그것과 연결되는 소스로 바로 갈 수 있다. 한편 기본 컴파일 명령어를 사용하지 않는 상황을 생각해보자. 간단한 실험용으로 코드를 작성하는 상황이다. 실험용 코드를 담은 파일을 'test.c'라는 하자. 이맥스에서 위에서 언급한대로 컴파일을 해보자. 그러면, 미니 버퍼에 "make -f"라는 명령어가 보이지만, 실험용 코드라서 Mak..
-
strspn/strcspnProgrammer/Programming 2013. 7. 9. 09:37
ffmpeg 코드를 보던 중에 못 보던 함수를 만났다. C 언어의 스트링 관련 함수는 거의 다 안다고 생각했는데, 학부까지 포함하면 20년만에 새로운 함수를 발견했다. #include size_t strspn(const char *s, const char *accept); size_t strcspn(const char *s, const char *reject); 메뉴얼 페이지에 의하면, strspn() 함수는 accept에 있는 문자들로 이루어져있는 s의 부분 문자열의 처음의 개수를 구한다. 즉, s 문자열의 앞에서 읽기 시작하여 accept에 포함되지 않은 문자가 나타나면 그 지점에서 멈추고 개수를 반환한다. 반대로, strcspn() 함수는 전체적으로 reject에 없는 문자들로 이루어져있는 s의 부..
-
쉬우면서 다양한 기능을 제공하는 UIProgrammer/Etc 2013. 6. 27. 19:55
100가지의 기능을 사용자가 손쉽게 사용할 수 있게 하려면 어떤 방법이 좋을까? 첫번째 접근으로 모든 기능을 사용자가 마음껏 사용할 수 있도록 UI를 제공한다. UI에 100가지가 넘는 컨트롤이 덕지덕지 붙은 모양이 된다. 그간의 경험으로는, 사용자 경험에 대한 생각없는 개발자가 UI까지 맡는 경우 종종 이러한 사태가 발생한다. 이러한 UI는 일반 대중들이 처음에 사용하기에 매우 어렵다. Pilot's Seat of Space Shuttle Endeavour by jurvetson 두번째로는 중요한 10가지 기능만을 엮어서 UI와 함께 제공한다. 나머지 90가지는 아깝지만 폐기한다. 일반 대중을 생각한다면, 위에 것보다는 낫지만, 기능 상의 한계가 존재한다.일반 대중의 개개인이 생각하는 주요 10가지의 ..
-
MPEG-4 파일 시스템의 미디어 샘플과 시간 정보 구하기Streaming Media/Media Tech 2013. 6. 26. 18:09
선행 학습MPEG-4 파일의 구조 개괄 샘플의 정보를 저장하는 박스 미디어 샘플에 관한 정보는 샘플 테이블 박스에서 구한다. 미디어 샘플 테이블 박스는 "stbl"이라는 타입명을 가진다. 이 박스의 위치는 다음과 같다. (중간에 존재하는 다른 박스는 모두 무시하였다. 자세한 내용은 아래 참고 링크에서 확인한다.) moovmvhdtrakmdiaminfstbl stbl 박스는 목적에 맞는 여러 개의 박스를 포함한다.co64 - 64-bits Chunk Offsets Boxctts -Composition Offset Boxstco - Chunk Offsets Box stsd - Sample Descriptionstsc - Sample To Chunk Boxstss - Sync Sample stsz - Samp..
-
FFmpeg으로 트랜스코딩하는 프로그램 만들기Streaming Media/Media Tools 2013. 6. 21. 13:50
선행 학습FFmpeg으로 재생하는 프로그램 만들기 예제 코드 static AVFormatContext *fmt_ctx = NULL; static AVCodecContext *dec_ctx = NULL; static int vst_idx = -1; void open_input_file() { AVCodec *dec; /* open input streams */ avformat_open_input(&fmt_ctx, filename, NULL, NULL); /* select the video stream */ vst_idx = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0); dec_ctx = fmt_ctx->streams[vst_idx]-..
-
FFmpeg으로 재생하는 프로그램 만들기Streaming Media/Media Tools 2013. 6. 20. 11:30
선행 학습FFmpeg으로 미디어 스트림 열기 예제 코드 static AVFormatContext *fmt_ctx = NULL; void play() { AVStream *st; AVPacket pkt; AVFrame *frm = av_frame_alloc(); int got_frame; while (1) { av_read_frame(fmt_ctx, &pkt); st = fmt_ctx->streams[pkt.stream_index]; avcodec_get_frame_defaults(frm); switch (st->codec->codec_type) { case AVMEDIA_TYPE_AUDIO: avcodec_decode_audio4(st->codec, frm, &got_frame, &pkt); break;..
-
FFmpeg으로 미디어 스트림 열기Streaming Media/Media Tools 2013. 6. 19. 13:34
예제 코드 static AVFormatContext *fmt_ctx = NULL; void open_input_file() { avformat_open_input(&fmt_ctx, filename, NULL, NULL); for (i = 0; i nb_streams; i++) { AVStream *st = fmt_ctx->streams[i]; AVCodec *dec; avcodec_open2(st->codec, dec, NULL); } } void close_input_file() { for (i = 0; i nb_streams; i++) { AVStream *st = fmt_ctx->streams[i]; avcodec_close(st->codec); } avfor..
-
FFmpeg 데이타 흐름 다이어그램Streaming Media/Media Tools 2013. 6. 17. 17:16
요즘에 쓰레드를 사용하지 않고 동작하는 경우는 거의 없다고 본다. 따라서 쓰레드를 사용하는 상태를 가정하여 데이타의 흐름을 다이어그램으로 정리한다. 이 다이어그램에 관한 몇 가지 사전 안내 ffmpeg에 대해서 분석하는 것은 이제 시작이다. 다이어그램이 틀렸을 가능성을 염두한다. ffmpeg의 소스코드는 2013년 5월 정도에 git 으로 받아왔다. 흐름의 추적은 emacs와 gtags를 사용했다. 다이어그램은 dia로 작성했다. 내맘대로 다이어그램이다. 즉, UML이니 뭐니 하는 그런 것이 아니다. 서로 알아보면 그만이지 않는가? 고침 `av_codec_xxx'이 아니라 'avcodec_xxx'이다. (예: av_codec_encode_video2 -> avcodec_encode_video2) 쓰레드를..