FFmpeg filter enable/disable

2023. 11. 6. 19:49Multimedia

    목차
반응형

FFmpeg을 통해 특정 filter의 build에 대해 enable/disable 하는 방법에 대해 알아보겠습니다.

my_filter라는 filter를 추가한다고 해 보겠습니다.
우선 다음의 작업들을 수행해야 합니다.

  • vf_test.c 파일 작성
    • 여기에는 const AVFilter ff_vf_test = { ... }; 가 정의되어 있어야 함
  • allfilters.c
    • 작성한 filter 내 정의한 AVFilter 구조체 인스턴스의 extern 선언을 추가
    • ex. extern const AVFilter ff_vf_test;
      • 이건 enable/disable 시 뺄(수정할) 필요가 없음
  • Makefile
    • filter 파일 build를 위해 다음의 행을 추가
    • OBJS-$(CONFIG_TEST) += vf_test.o
  • configure
    • CONFIG_TEST가 특정 option에 의해 활성화/비활성화 될 수 있도록 다음과 같이 의존성 추가
    • test_filter_deps="test"
      • 이를 통해 test라는 option이 활성화 되어 있어야 my_filter가 빌드됩니다.
      • vf_test.c에 AVFilter ff_vf_test가 정의되어 있다면, 이 dependency 변수의 이름은 test_filter_deps가 됩니다.
      • 만약 vf_test.c 내에 다른 AVFilter가 정의되어 있다면, 예를들어 AVFilter ff_vf_test2가 정의되어 있다면, 이것 또한 다음과 같이 처리합니다. 
        • test2_filter_deps="..."
    • test 옵션을 받아 들이는 부분은 다음과 같이 처리합니다.
...
  --disable-videotoolbox   disable VideoToolbox code [autodetect]
  --enable-test        enable test libraries [no]     <- 추가
...

for opt do
    optval="${opt#*=}"
        --extra-ldflags=*)
            add_ldflags $optval
        ...
        --enable-test)                  <- 추가
            warn "test is enabled"      <- 추가
            enable test                 <- 추가
        ...

...

다음의 script를 추가

enabled test  && { check_lib test test_dep_lib/dep_api.h foo_function_in_dep -ltest_dep || 
                                 die "ERROR: test_dep not found"; }
...

우선 configure 수행 시 --enable-myfilter option을 argument로 넘길 시 myfilter가 활성화 될 수 있도록 opt 처리 부분을 추가합니다.
여기서 enable myfilter를 통해 myfilter가 활성화 됩니다.

이후 myfilter가 활성화 된 경우 check_lib을 수행하여 my_filter가 의존하는 library의 정상 유무를 검사하는 부분을 추가합니다. 만약 의존하는 library가 없다면 이 부분은 무시합니다.

반응형

'Multimedia' 카테고리의 다른 글

NAL (Network Abstraction Layer)  (0) 2023.11.17
vmaf library  (0) 2023.11.14
FFmpeg filter에서 lib link 작업 정리  (0) 2023.10.20
FFmpeg filter 추가  (0) 2023.10.20
FFmpeg에서 의존 라이브러리 지정  (0) 2023.10.19