FFmpeg 소스 코드 간단한 분석:libavdevice의 avdeviceregister_all()
FFmpeg의 라이브러리 함수 소스 코드 분석 문서 목록:
【구조도】
FFmpeg 소스 코드 구성도 - 디코딩
FFmpeg 소스 코드 구성도 - 인코딩
【통용】
FFmpeg 소스 코드 단순 분석:avregister_all()
FFmpeg 소스 코드 단순 분석:avcodecregister_all()
FFmpeg 소스 코드 간단한 분석: 메모리의 분배와 방출(av malloc(), avfree () 등
FFmpeg 소스 코드 간단한 분석: 일반적인 구조체의 초기화와 소각(AVFormatContext, AVFrame 등)
FFmpeg 소스 코드 단순 분석:avioopen2()
FFmpeg 소스 코드 단순 분석:avfind_decoder() 및 avfind_encoder()
FFmpeg 소스 코드 단순 분석:avcodecopen2()
FFmpeg 소스 코드 단순 분석:avcodecclose()[디코딩]
그림 FFMPEG 미디어 열기 함수 avformatopen_input
FFmpeg 소스 코드 단순 분석: avformatopen_input()
FFmpeg 소스 코드 단순 분석: avformatfind_stream_info()
FFmpeg 소스 코드 단순 분석:avread_frame()
FFmpeg 소스 코드 단순 분석:avcodecdecode_video2()
FFmpeg 소스 코드 단순 분석: avformatclose_input()
[인코딩]
FFmpeg 소스 코드 단순 분석: avformatalloc_output_context2()
FFmpeg 소스 코드 단순 분석: avformatwrite_header()
FFmpeg 소스 코드 단순 분석:avcodecencode_video()
FFmpeg 소스 코드 단순 분석:avwrite_frame()
FFmpeg 소스 코드 단순 분석:avwrite_trailer()
【기타】
FFmpeg 소스 코드 단순 분석: 로그 출력 시스템(av log () 등)
FFmpeg 소스 코드 간단한 분석: 구조체 구성원 관리 시스템 - AVclass
FFmpeg 소스 코드 단순 분석: 구조체 구성원 관리 시스템 - AVOption
FFmpeg 소스 코드 간단한 분석:libswscale의 swsgetContext()
FFmpeg 소스 코드 간단한 분석:libswscale의 swsscale()
FFmpeg 소스 코드 간단한 분석:libavdevice의 avdeviceregister_all()
FFmpeg 소스 코드 간단한 분석:libavdevice의 gdigrab
[스크립트]
FFmpeg 소스 코드 단순 분석:makefile
FFmpeg 소스 코드 단순 분석:configure
【H.264】
FFmpeg의 H.264 디코더 소스 코드 간단한 분석: 개요
=====================================================
본고는 FFmpeg에서libavdevice 등록 장치의 함수 avdevice 를 간단하게 기록합니다register_all().avdevice_register_all () 프로그래밍에서 사용되는 예는 다음과 같습니다.
"가장 간단한 FFmpeg 기반 AVDevice 예(카메라 읽기)"
libavdevice를 사용하기 전에 avdevice를 실행해야 합니다.register_all () 장치를 등록합니다. 그렇지 않으면 오류가 발생합니다.avdevice_register_all ()의 등록 방법 및 avregister_all()、avcodec_register_all () 이 몇 개의 함수는 유사하다.참고 자료:
FFmpeg 소스 코드 단순 분석: av register all ()
avdevice_register_all () 코드는 다음과 같습니다.
/*
*
* http://blog.csdn.net/leixiaohua1020
*/
#include "config.h"
#include "avdevice.h"
//
#define REGISTER_OUTDEV(X, x) \
{ \
extern AVOutputFormat ff_##x##_muxer; \
if (CONFIG_##X##_OUTDEV) \
av_register_output_format(&ff_##x##_muxer); \
}
//
#define REGISTER_INDEV(X, x) \
{ \
extern AVInputFormat ff_##x##_demuxer; \
if (CONFIG_##X##_INDEV) \
av_register_input_format(&ff_##x##_demuxer); \
}
//
#define REGISTER_INOUTDEV(X, x) REGISTER_OUTDEV(X, x); REGISTER_INDEV(X, x)
void avdevice_register_all(void)
{
static int initialized;
if (initialized)
return;
initialized = 1;
/* devices */
REGISTER_INOUTDEV(ALSA, alsa);
REGISTER_INDEV (AVFOUNDATION, avfoundation);
REGISTER_INDEV (BKTR, bktr);
REGISTER_OUTDEV (CACA, caca);
REGISTER_OUTDEV (DECKLINK, decklink);
REGISTER_INDEV (DSHOW, dshow);
REGISTER_INDEV (DV1394, dv1394);
REGISTER_INOUTDEV(FBDEV, fbdev);
REGISTER_INDEV (GDIGRAB, gdigrab);
REGISTER_INDEV (IEC61883, iec61883);
REGISTER_INDEV (JACK, jack);
REGISTER_INDEV (LAVFI, lavfi);
REGISTER_INDEV (OPENAL, openal);
REGISTER_OUTDEV (OPENGL, opengl);
REGISTER_INOUTDEV(OSS, oss);
REGISTER_INOUTDEV(PULSE, pulse);
REGISTER_INDEV (QTKIT, qtkit);
REGISTER_OUTDEV (SDL, sdl);
REGISTER_INOUTDEV(SNDIO, sndio);
REGISTER_INOUTDEV(V4L2, v4l2);
// REGISTER_INDEV (V4L, v4l
REGISTER_INDEV (VFWCAP, vfwcap);
REGISTER_INDEV (X11GRAB, x11grab);
REGISTER_OUTDEV (XV, xv);
/* external libraries */
REGISTER_INDEV (LIBCDIO, libcdio);
REGISTER_INDEV (LIBDC1394, libdc1394);
}
코드에서 보듯이 avdeviceregister_all () 장치 등록을 위해 3개의 함수를 호출합니다: REGISTERINDEV(),REGISTER_OUTDEV(),REGISTER_INOUTDEV().이러한 3개의 함수는 실제로 미리 정의된 3개의 매크로입니다.
REGISTER_INDEV(): 입력 장치를 등록합니다.실제로 av 를 호출했습니다register_input_format () 는 입력 장치를 AVInputFormat로 등록합니다.
REGISTER_OUTDEV(): 출력 장치를 등록합니다.실제로 av 를 호출했습니다register_output_format () 는 출력 장치를 AVOutputFormat로 등록합니다.
REGISTER_INOUTDEV(): 입력 및 출력 장치를 등록합니다.이러한 두 매크로 정의는 실제로 결합됩니다.
뇌소희[email protected]://blog.csdn.net/leixiaohua1020
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
FFmpeg 소스 코드 간단한 분석:libavdevice의 avdeviceregister_all()FFmpeg 소스 코드 구성도 - 디코딩 FFmpeg 소스 코드 구성도 - 인코딩 FFmpeg 소스 코드 단순 분석:avregister_all() FFmpeg 소스 코드 단순 분석:avcodecregister_all...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.