분류 전체보기
-
쉬우면서 다양한 기능을 제공하는 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) 쓰레드를..
-
FFmpeg 기본 자료형 - AVFifoBufferStreaming Media/Media Tools 2013. 6. 10. 14:59
순환하는 FIFO 이다. av_fifo_generic_read / av_fifo_generic_write 버퍼에 데이타를 읽고/쓴다.콜백 함수를 사용하지 않으면, 메모리의 복사가 발생한다.읽은 만큼 FIFO를 버린다. (av_fifo_drain 함수 참조)읽고/쓰기 함수에서 FIFO의 크기를 검사하지 않는 점을 주의한다. av_fifo_peek2 오프셋의 데이타의 주소를 반환한다.FIFO 자체에 어떠한 변경도 가하지 않는다. av_fifo_size 저장된 데이타의 크기이다. av_fifo_space 저장 가능한 크기이다. 즉, 버퍼의 크기 - 저장된 데이타의 크기 av_fifo_alloc / av_fifo_free FIFO 구조체의 자원을 생성/소멸한다. av_fifo_grow FIFO의 버퍼의 크기를 ..
-
제대로된 결론을 이끌어 내는 대화의 방법Life/Communication 2013. 6. 4. 15:37
대화를 하다보면 처음에 가졌던 생각이 정리되면서 바뀌는 경우가 종종 있다. 그냥 시원하게 생각이 바뀌었다고 하면 쉽게 해결된다. 여러가지 이유로 끝까지 기존 입장을 고수하며 지저분한 토른을 만들어낸다. 억지, 괘변, 정신승리 또는 정신 붕괘 등 과정과 결과는 제각각이다. 성급한 결론 짓기와 타협 없는 주장의 이면에는 감정적인 것이 많이 작용한다. 내 경험으로는, 상대의 주장에 성급하게 동조하거나 반대하는 것은 상대방에 대한 호불호나 자신의 트라우마의 결과이다. 어떻게 하면 이러한 난관을 해결할 수 있을까? 자신의 감정을 잘 통제할 수 있는 힘을 기른다. 반대로 부정적인 기억을 치유한다. 둘 다 동시에 할 수 있다면 더 좋겠다. 이 방법은 자신의 성장을 위해서는 필요하다. 문제는, 단기간에 해결할 수 없다..