embeded/arduino(genuino)2017. 2. 11. 12:54

그렇게 궁금해 하던 오리지널 소스 발견!


int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();

if (serialEventRun) serialEventRun();

}
return 0;
}



[링크 : https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/main.cpp]

    [링크 : https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/cores/arduino]


[링크 : https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders] AVR기반

[링크 : https://github.com/arduino/ArduinoCore-samd/tree/master/bootloaders/zero] ARM기반


2016/03/28 - [embeded/arduino(genuino)] - 아두이노 빌드 프로세스 & c/cpp



+

간단하게 말해서.. FT232 USB to RS232 칩에서 DTR를 감지하면 자동으로 리셋을 걸어버린다.

그런 이유로 아두이노 부트로더에만 업로드 하는 것이 있고,

아두이노 sketch쪽 스켈레톤 코드에는 특정 코드에서 리부팅 하는 부분이 없다.


Since the DTR signal goes from 5V to 0 at the moment a new connection to the Arduino is started, if you send this signal to the reset line of the Arduino's processor, it resets. 

[링크 : http://www.instructables.com/id/Overview-the-Arduino-sketch-uploading-process-and-/]


Data Terminal Ready (DTR) is a control signal in RS-232 serial communications, transmitted from data terminal equipment (DTE), such as a computer, to data communications equipment (DCE), for example a modem, to indicate that the terminal is ready for communications and the modem may initiate a communications channel.

[링크 : https://en.wikipedia.org/wiki/Data_Terminal_Ready]

[링크 : https://www.arduino.cc/en/uploads/Main/ArduinoNano30Schematic.pdf]


대충보면.. Makefile에서 sketch를 c로 변경해서 빌드할때 .text 섹션을 BOOT_START 주소로 옮기고 링킹하는 듯?


$ vi /usr/share/arduino/hardware/arduino/bootloaders/caterina/Makefile

#---------------- Linker Options ---------------- # -Wl,...: tell GCC to pass this to linker. # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref LDFLAGS += -Wl,--section-start=.text=$(BOOT_START) LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) #LDFLAGS += -T linker_script.x








-Wl,--section-start=.bootloader=0x1E000 

[링크 : http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_reloc_code.html]

'embeded > arduino(genuino)' 카테고리의 다른 글

릴레이로 AC전원 스위치하기  (0) 2017.10.26
hoverlabs 사의 hover 제품  (0) 2017.07.17
avrdude arduino  (0) 2016.12.02
pwm ppm decode  (0) 2016.11.28
arduino clcd  (0) 2016.11.25
Posted by 구차니
회사일2017. 2. 11. 12:37

VDI / VDO에 대한 명확한(?) 약어는 안보이고

대충.. 보이는 녀석들이


Vertical Drive Output / Input - VDO/VDI

Vertical Sync Output / Output - Vsync 정도?


CIS-ISP 간의 master/slave 모드로 인해서

Input/Output 모드로 전환해서 사용



[링크 : http://www.semicon.panasonic.co.jp/ds4/MN83951_E_discon.pdf]

'회사일' 카테고리의 다른 글

HSTL  (0) 2017.07.01
Rigid-Flex PCB  (0) 2017.06.09
sdi bt.1120  (0) 2016.12.07
ldo - linear drop out  (0) 2016.12.07
동축 케이블 표준  (0) 2016.09.09
Posted by 구차니
프로그램 사용/vi2017. 2. 10. 20:43


:sp

:vsp


[링크 : https://www.linux.com/learn/vim-tips-using-viewports]


보이는 것만 둘로 나눈 것이기에

다른쪽에서 수정하면 동시에 수정되는 것이 보인다

'프로그램 사용 > vi' 카테고리의 다른 글

vi 버퍼 컨트롤  (0) 2017.02.13
vi buffer window tab 차이점?  (0) 2017.02.11
vi 현재 위치에서 끝까지 복사  (0) 2017.02.01
vi 단어 단위 이동  (0) 2017.02.01
vi syntax highlight 선택하기  (0) 2017.01.03
Posted by 구차니
Programming/ffmpeg2017. 2. 10. 17:38

[링크 : https://github.com/mpenkov/ffmpeg-tutorial/blob/master/tutorial01.c]


사용된 헤더별 구조체

libavcodec/avcodec.h

- AVCodecContext

- AVCodec

- AVPacket


libavformat/avformat.h

- AVFormatContext


libswscale/swscale_internal.h ??

- SwsContext 


libavutil/frame.h

from libavcodec/avcodec.h

- AVFrame


libavutil/dict.h

- AVDictionary 



av_register_all() // Initialize libavformat and register all the muxers, demuxers and protocols.


avformat_open_input()

avformat_find_stream_info()

av_dump_format()

avcodec_find_decoder()

avcodec_open2()

av_frame_alloc()

avpicture_get_size()


av_malloc()

sws_getContext()


avpicture_fill()

while(av_read_frame())

avcodec_decode_video2()

sws_scale()

av_free_packet()


av_free()

avcodec_close()

avformat_close_input() 


AVFormatContext *pFormatCtx = NULL;

AVCodecContext  *pCodecCtx = NULL;

AVCodec         *pCodec = NULL;

AVFrame         *pFrame = NULL; 

AVFrame         *pFrameRGB = NULL;

AVPacket        packet;

AVDictionary    *optionsDict = NULL;

struct SwsContext      *sws_ctx = NULL;


av_register_all();

avformat_open_input(&pFormatCtx, argv[1], NULL, NULL);

avformat_find_stream_info(pFormatCtx, NULL);

av_dump_format(pFormatCtx, 0, argv[1], 0);


pCodecCtx=pFormatCtx->streams[videoStream]->codec;

pCodec=avcodec_find_decoder(pCodecCtx->codec_id);

avcodec_open2(pCodecCtx, pCodec, &optionsDict)

pFrame=av_frame_alloc();

pFrameRGB=av_frame_alloc();

numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,

pCodecCtx->height);

buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));


sws_ctx = sws_getContext(

    pCodecCtx->width,

    pCodecCtx->height,

    pCodecCtx->pix_fmt,

    pCodecCtx->width,

    pCodecCtx->height,

    PIX_FMT_RGB24,

    SWS_BILINEAR,

    NULL,

    NULL,

    NULL    );

avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,

pCodecCtx->width, pCodecCtx->height);


while(av_read_frame(pFormatCtx, &packet)>=0)

{

avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished,  &packet);

av_free_packet(&packet);

}

av_free(buffer);

av_free(pFrameRGB);

av_free(pFrame);

avcodec_close(pCodecCtx);

avformat_close_input(&pFormatCtx); 



void av_register_all (void)

// Initialize libavformat and register all the muxers, demuxers and protocols.

[링크 : https://www.ffmpeg.org/.../group__lavf__core.html#ga917265caec45ef5a0646356ed1a507e3]


int avformat_open_input (AVFormatContext ** ps,

const char * url,

AVInputFormat * fmt,

AVDictionary ** options 

)

[링크 : https://www.ffmpeg.org/.../group__lavf__decoding.html#ga31d601155e9035d5b0e7efedc894ee49]


void avformat_close_input (AVFormatContext ** s)

[링크 : https://www.ffmpeg.org/.../group__lavf__decoding.html#gae804b99aec044690162b8b9b110236a4]


int avformat_find_stream_info ( AVFormatContext * ic, AVDictionary ** options )

// Read packets of a media file to get stream information.

[링크 : https://www.ffmpeg.org/.../group__lavf__decoding.html#gad42172e27cddafb81096939783b157bb]


void av_dump_format ( AVFormatContext * ic,

int index,

const char * url,

int is_output 

)

//Print detailed information about the input or output format, such as duration, bitrate, streams, container, programs, metadata, side data, codec and time base.

[링크 : https://www.ffmpeg.org/.../group__lavf__misc.html#gae2645941f2dc779c307eb6314fd39f10]


AVCodec* avcodec_find_decoder ( enum AVCodecID id )

// Find a registered decoder with a matching codec ID.

[링크 : https://www.ffmpeg.org/.../group__lavc__decoding.html#ga19a0ca553277f019dd5b0fec6e1f9dca]


int avcodec_open2 ( AVCodecContext * avctx,

const AVCodec * codec,

AVDictionary ** options 

)

// Initialize the AVCodecContext to use the given AVCodec.

// Warning - This function is not thread safe!

[링크 : https://www.ffmpeg.org/.../group__lavc__core.html#ga11f785a188d7d9df71621001465b0f1d]


AVFrame* av_frame_alloc ( void )

// Allocate an AVFrame and set its fields to default values.

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavu__frame.html#gac700017c5270c79c1e1befdeeb008b2f]


attribute_deprecated int avpicture_get_size ( enum AVPixelFormat pix_fmt,

int width,

int height 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavc__picture.html#gad2eba60171ee81107d2ca3a6957f4f2d]


int av_image_get_buffer_size ( enum AVPixelFormat pix_fmt,

int width,

int height,

int align 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavu__picture.html#ga24a67963c3ae0054a2a4bab35930e694]


void* av_malloc ( size_t size )

[링크 : https://www.ffmpeg.org/.../group__lavu__mem__funcs.html#ga9722446c5e310ffedfaac9489864796d]



struct SwsContext* sws_getContext ( int srcW,

int srcH,

enum AVPixelFormat srcFormat,

int dstW,

int dstH,

enum AVPixelFormat dstFormat,

int flags,

SwsFilter * srcFilter,

SwsFilter * dstFilter,

const double * param 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__libsws.html#gaf360d1a9e0e60f906f74d7d44f9abfdd]


attribute_deprecated int avpicture_fill ( AVPicture * picture,

const uint8_t * ptr,

enum AVPixelFormat pix_fmt,

int width,

int height 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavc__picture.html#gab740f592342cbbe872adf3e85c52e40c]


int av_image_fill_arrays ( uint8_t * dst_data[4],

int dst_linesize[4],

const uint8_t * src,

enum AVPixelFormat pix_fmt,

int width,

int height,

int align 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavu__picture.html#ga5b6ead346a70342ae8a303c16d2b3629]


int av_read_frame ( AVFormatContext * s,

AVPacket * pkt 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavf__decoding.html#ga4fdb3084415a82e3810de6ee60e46a61]


attribute_deprecated int avcodec_decode_video2 ( AVCodecContext * avctx,

AVFrame * picture,

int * got_picture_ptr,

const AVPacket * avpkt 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavc__decoding.html#ga3ac51525b7ad8bca4ced9f3446e96532]


int avcodec_receive_frame ( AVCodecContext * avctx,

AVFrame * frame 

)

[링크 : https://www.ffmpeg.org/doxygen/3.2/group__lavc__decoding.html#ga11e6542c4e66d3028668788a1a74217c]




+

2017.03.06


avcodec_register_all();

av_register_all();

avformat_network_init();


[링크 : http://laconicd.blogspot.com/2014/01/ffmpeg.html]

[링크 : http://egloos.zum.com/aslike/v/3083403]


+

2017.03.08

[링크 : https://www.codeproject.com/Tips/111468/FFmpeg-Tutorial]

[링크 : http://dranger.com/ffmpeg/tutorial01.html]

[링크 : https://ffmpeg.org/doxygen/trunk/doc_2examples_2decoding_encoding_8c-example.html]

'Programming > ffmpeg' 카테고리의 다른 글

vlc "network-caching" / ffmpeg "buffer_size" 소스 검색  (0) 2017.03.07
ffplay.c  (0) 2017.03.06
ffmpeg 3.2 소스관련  (0) 2017.02.10
ffmpeg - vlc cache 설정관련  (0) 2017.02.10
ffmpeg + opengl  (0) 2017.02.09
Posted by 구차니
Programming/ffmpeg2017. 2. 10. 17:20

'Programming > ffmpeg' 카테고리의 다른 글

ffplay.c  (0) 2017.03.06
ffmpeg 예제 소스 분석  (0) 2017.02.10
ffmpeg - vlc cache 설정관련  (0) 2017.02.10
ffmpeg + opengl  (0) 2017.02.09
ffmpeg / ffplay 딜레이 관련 분석  (0) 2017.02.09
Posted by 구차니
Programming/ffmpeg2017. 2. 10. 13:33

도대체 vlc의  :network-caching 설정은 어디를 적용하는거야?!?!?


일단 구조적으로

rtsp 쪽 네트워크 버퍼

ffmpeg avcodec decoder쪽 버퍼

sdl등의 비디오 버퍼

버퍼만 해도 세개인데 어느녀석을 건드려야 레이턴시가 줄어들까?


[링크 : https://wiki.videolan.org/..HowTo/Advanced_Streaming_Using_the_Command_Line/]

[링크 : http://stackoverflow.com/.../which-functions-of-live555-is-used-in-vlc-for-network-caching-option]

'Programming > ffmpeg' 카테고리의 다른 글

ffmpeg 예제 소스 분석  (0) 2017.02.10
ffmpeg 3.2 소스관련  (0) 2017.02.10
ffmpeg + opengl  (0) 2017.02.09
ffmpeg / ffplay 딜레이 관련 분석  (0) 2017.02.09
ffmpeg 예제 (sdl / live555)  (0) 2017.02.06
Posted by 구차니
Programming/ffmpeg2017. 2. 9. 21:21


[링크 : http://aslike.egloos.com/category/└%20FFMPEG] // 연재 중단으로 openGL 관련내용 x

[링크 : http://sijoo.tistory.com/82]

'Programming > ffmpeg' 카테고리의 다른 글

ffmpeg 예제 소스 분석  (0) 2017.02.10
ffmpeg 3.2 소스관련  (0) 2017.02.10
ffmpeg - vlc cache 설정관련  (0) 2017.02.10
ffmpeg / ffplay 딜레이 관련 분석  (0) 2017.02.09
ffmpeg 예제 (sdl / live555)  (0) 2017.02.06
Posted by 구차니
프로그램 사용/sdl2017. 2. 9. 21:18

sdl 이라는 녀석으로 한번 해봐야 하려나..

윈도우에서는 DirectDraw를 쓴다고 하니 일단 Platformsdk 안깔아도 되서 편할듯


[링크 : http://prog3.com/sbdm/blog/hjl240/article/details/47857175] sdl + mfc

[링크 : http://dranger.com/ffmpeg/] // ffmpeg + sdl + mfc

'프로그램 사용 > sdl' 카테고리의 다른 글

sdl tutorial  (0) 2022.05.27
SDL - Simple DirectMedia Layer  (0) 2021.07.06
SDL - Simple DirectMedia Layer  (0) 2011.12.12
Posted by 구차니
Programming/ffmpeg2017. 2. 9. 19:43

vlc 에서 rtsp 추가 옵션을 보면

캐쉬로 기본 1000ms 가 설정되는데 이걸 어디서 설정하나 검색중..


ffplay의 max_delay?

ffplay -max_delay 500000 -rtsp_transport udp -v trace "rtsp://user:pass@CamIP:Port/URL" 

[링크 : https://github.com/ZoneMinder/ZoneMinder/issues/811]


ffplay -h 도움말을 보니 이렇게 us 단위라네..

-max_delay         <int>   ED... maximum muxing or demuxing delay in microseconds 


다시 읽어 보니.. 레이턴시에 영향을 주긴 하지만.. TCP에는 적용사항이 없고

UDP에서 패킷 재조합시간에 대한 내용이라 일단 패스~

When receiving data over UDP, the demuxer tries to reorder received packets (since they may arrive out of order, or packets may get lost totally). This can be disabled by setting the maximum demuxing delay to zero (via the max_delay field of AVFormatContext). 

[링크 : https://ffmpeg.org/ffmpeg-protocols.html#rtsp]

[링크 : https://ffmpeg.org/doxygen/2.7/structAVFormatContext.html#a58422ed3d461b3440a15cf057ac5f5b7]


AVFormatContext의 buffer_size

cache 버퍼 크기

av_dict_set(&options, "buffer_size", "655360", 0); 

[링크 : http://stackoverflow.com/questions/29075467/set-rtsp-udp-buffer-size-in-ffmpeg-libav]

  [링크 : https://git.libav.org/?p=libav.git;a=commit;h=e3ec6fe7bb2a622a863e3912181717a659eb1bad] commit log

  [링크 : https://git.libav.org/?p=libav.git;a=blob;f=libavformat/rtsp.c;h...d] rtsp whole source

  [링크 : https://git.libav.org/?p=libav.git;a=blobdiff;f=libavformat/rtsp.c;h...f] diff


1547 AVDictionary *metadata;

[링크 : https://ffmpeg.org/doxygen/trunk/avformat_8h_source.html#l01331] AVFormatContext structure


int av_dict_set (AVDictionary ** pm, const char * key, const char * value, int flags ) 

[링크 : https://www.ffmpeg.org/doxygen/2.7/group__lavu__dict.html#ga8d9c2de72b310cef8e6a28c9cd3acbbe]


AVCodecContext의 rc_buffer_size

int AVCodecContext::rc_buffer_size

decoder bitstream buffer size


encoding: Set by user.

decoding: unused

Definition at line 2291 of file avcodec.h. 

[링크 : https://www.ffmpeg.org/doxygen/2.5/structAVCodecContext.html#a15000607a7e2371162348bb35b0184c1]


일단... 두개 옵션을 줘서 어느 구간에서 지연시간들이 생기는지 검사할 수 있는 듯?

Also setting -probesize and -analyzeduration to low values may help your stream start up more quickly (it uses these to scan for "streams" in certain muxers, like ts, where some can appears "later", and also to estimate the duration, which, for live streams, the latter you don't need anyway). This should be unneeded by dshow input. 

[링크 : https://trac.ffmpeg.org/wiki/StreamingGuide#Latency]

'Programming > ffmpeg' 카테고리의 다른 글

ffmpeg 예제 소스 분석  (0) 2017.02.10
ffmpeg 3.2 소스관련  (0) 2017.02.10
ffmpeg - vlc cache 설정관련  (0) 2017.02.10
ffmpeg + opengl  (0) 2017.02.09
ffmpeg 예제 (sdl / live555)  (0) 2017.02.06
Posted by 구차니

auth.log에서 정규표현식으로 아이피 빼내니 편하긴 하네

공부해봐야지 ㅠㅠ


.*?((?:\d{1,3}\.){3}\d{1,3})|.+

$1



[링크 : http://stackoverflow.com/questions/23707270/notepad-keep-only-ip-addresses]

Posted by 구차니