support building sans ffmpeg #153

pull/219/head
nick black 5 years ago committed by Nick Black
parent 7889ffc0a8
commit cb2bf16a73

@ -9,46 +9,66 @@ set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
configure_file(tools/version.h.in include/version.h)
include(GNUInstallDirs)
option(DISABLE_FFMPEG "Disable FFmpeg image/video support" OFF)
configure_file(tools/version.h.in include/version.h)
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
pkg_check_modules(TERMINFO REQUIRED tinfo>=6.1)
if(NOT "${DISABLE_FFMPEG}")
pkg_check_modules(AVUTIL REQUIRED libavutil>=56.0)
pkg_check_modules(AVFORMAT REQUIRED libavformat>=57.0)
pkg_check_modules(SWSCALE REQUIRED libswscale>=5.0)
endif()
find_library(LIBRT rt)
file(GLOB LIBSRCS CONFIGURE_DEPENDS src/lib/*.c)
add_library(notcurses SHARED ${LIBSRCS})
set_target_properties(notcurses PROPERTIES
PUBLIC_HEADER "include/notcurses.h"
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
target_include_directories(notcurses
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
"${TERMINFO_INCLUDE_DIR}"
)
target_link_libraries(notcurses
PRIVATE
"${TERMINFO_LIBRARIES}"
"${LIBRT}"
)
target_link_directories(notcurses
PRIVATE
"${TERMINFO_LIBRARY_DIRS}"
)
if(NOT "${DISABLE_FFMPEG}")
target_include_directories(notcurses
PRIVATE
"${AVFORMAT_INCLUDE_DIR}"
"${SWSCALE_INCLUDE_DIR}"
)
endif()
if(NOT "${DISABLE_FFMPEG}")
target_link_libraries(notcurses
PRIVATE
"${TERMINFO_LIBRARIES}"
"${AVFORMAT_LIBRARIES}"
"${SWSCALE_LIBRARIES}"
"${LIBRT}"
)
endif()
if(NOT "${DISABLE_FFMPEG}")
target_link_directories(notcurses
PRIVATE
"${TERMINFO_LIBRARY_DIRS}"
"${AVFORMAT_LIBRARY_DIRS}"
"${SWSCALE_LIBRARY_DIRS}"
)
set_target_properties(notcurses PROPERTIES
PUBLIC_HEADER "include/notcurses.h"
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
)
endif()
target_compile_options(notcurses
PRIVATE
@ -135,7 +155,9 @@ target_compile_definitions(notcurses-planereel
)
file(GLOB VIEWSRCS CONFIGURE_DEPENDS src/view/*.cpp)
if(NOT "${DISABLE_FFMPEG}")
add_executable(notcurses-view ${VIEWSRCS})
endif()
target_include_directories(notcurses-view
PRIVATE
include
@ -151,6 +173,8 @@ target_link_libraries(notcurses-view
notcurses
PRIVATE
"${AVUTIL_LIBRARIES}"
"${AVFORMAT_LIBRARIES}"
"${SWSCALE_LIBRARIES}"
)
target_compile_options(notcurses-view
PRIVATE
@ -167,6 +191,7 @@ find_package(GTest 1.9 REQUIRED)
target_include_directories(notcurses-tester
PRIVATE
include
"${PROJECT_BINARY_DIR}/include"
src/lib
)
target_link_libraries(notcurses-tester
@ -230,7 +255,9 @@ install(FILES
)
install(TARGETS notcurses-demo DESTINATION bin)
if(NOT "${DISABLE_FFMPEG}")
install(TARGETS notcurses-view DESTINATION bin)
endif()
install(TARGETS notcurses-input DESTINATION bin)
install(TARGETS notcurses-planereel DESTINATION bin)
install(TARGETS notcurses

@ -15,9 +15,6 @@
#ifdef __cplusplus
extern "C" {
#define RESTRICT
#include <libavutil/pixdesc.h>
#include <libavutil/avconfig.h>
#include <libavcodec/avcodec.h> // ffmpeg doesn't reliably "C"-guard itself
#else
#define RESTRICT restrict
#endif

@ -10,8 +10,18 @@
#include <stdbool.h>
#include <pthread.h>
#include "notcurses.h"
#include "version.h"
#include "egcpool.h"
#ifndef DISABLE_FFMPEG
#include <libavutil/error.h>
#include <libavutil/frame.h>
#include <libavutil/pixdesc.h>
#include <libavutil/version.h>
#include <libswscale/version.h>
#include <libavformat/version.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif

@ -9,18 +9,9 @@ ncplane* ncvisual_plane(ncvisual* ncv){
return ncv->ncp;
}
static ncvisual*
ncvisual_create(void){
ncvisual* ret = malloc(sizeof(*ret));
if(ret == NULL){
return NULL;
}
memset(ret, 0, sizeof(*ret));
return ret;
}
void ncvisual_destroy(ncvisual* ncv){
if(ncv){
#ifndef DISABLE_FFMPEG
avcodec_close(ncv->codecctx);
avcodec_free_context(&ncv->codecctx);
av_frame_free(&ncv->frame);
@ -30,6 +21,7 @@ void ncvisual_destroy(ncvisual* ncv){
av_packet_free(&ncv->packet);
av_packet_free(&ncv->subtitle);
avformat_close_input(&ncv->fmtctx);
#endif
if(ncv->ncobj && ncv->ncp){
ncplane_destroy(ncv->ncp);
}
@ -37,6 +29,17 @@ void ncvisual_destroy(ncvisual* ncv){
}
}
#ifndef DISABLE_FFMPEG
static ncvisual*
ncvisual_create(void){
ncvisual* ret = malloc(sizeof(*ret));
if(ret == NULL){
return NULL;
}
memset(ret, 0, sizeof(*ret));
return ret;
}
/* static void
print_frame_summary(const AVCodecContext* cctx, const AVFrame* f){
char pfmt[128];
@ -75,7 +78,7 @@ print_frame_summary(const AVCodecContext* cctx, const AVFrame* f){
f->quality);
}*/
AVFrame* ncvisual_decode(struct ncvisual* nc, int* averr){
AVFrame* ncvisual_decode(ncvisual* nc, int* averr){
bool have_frame = false;
bool unref = false;
do{
@ -392,3 +395,51 @@ int ncvisual_init(void){
// FIXME could also use av_log_set_callback() and capture the message...
return 0;
}
#else
// built without ffmpeg
AVFrame* ncvisual_decode(ncvisual* nc, int* averr){
(void)nc;
(void)averr;
return NULL;
}
int ncvisual_render(const ncvisual* ncv, int begy, int begx, int leny, int lenx){
(void)ncv;
(void)begy;
(void)begx;
(void)leny;
(void)lenx;
return -1;
}
int ncvisual_stream(notcurses* nc, ncvisual* ncv, int* averr, streamcb streamer){
(void)nc;
(void)ncv;
(void)averr;
(void)streamer;
return -1;
}
ncvisual* ncplane_visual_open(ncplane* nc, const char* filename, int* averr){
(void)nc;
(void)filename;
(void)averr;
return NULL;
}
ncvisual* ncvisual_open_plane(notcurses* nc, const char* filename,
int* averr, int y, int x, ncscale_e style){
(void)nc;
(void)filename;
(void)averr;
(void)y;
(void)x;
(void)style;
return NULL;
}
int ncvisual_init(void){
return 0;
}
#endif

@ -4,6 +4,7 @@
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
@ -12,12 +13,6 @@
#include <sys/poll.h>
#include <stdatomic.h>
#include <sys/ioctl.h>
#include <libavutil/error.h>
#include <libavutil/frame.h>
#include <libavutil/pixdesc.h>
#include <libavutil/version.h>
#include <libswscale/version.h>
#include <libavformat/version.h>
#include "notcurses.h"
#include "internal.h"
#include "version.h"
@ -769,20 +764,22 @@ notcurses* notcurses_init(const notcurses_options* opts, FILE* outfp){
char prefixbuf[BPREFIXSTRLEN + 1];
fprintf(ret->ttyfp, "\n"
" notcurses %s by nick black\n"
" %d rows, %d columns (%sB), %d colors (%s)\n"
" compiled with gcc-%s\n"
" terminfo from %s\n"
" avformat %u.%u.%u\n"
" avutil %u.%u.%u\n"
" swscale %u.%u.%u\n"
" %d rows, %d columns (%sB), %d colors (%s)\n",
notcurses_version(), __VERSION__,
curses_version(), LIBAVFORMAT_VERSION_MAJOR,
LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO,
LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO,
LIBSWSCALE_VERSION_MAJOR, LIBSWSCALE_VERSION_MINOR, LIBSWSCALE_VERSION_MICRO,
" terminfo from %s\n",
notcurses_version(),
ret->stdscr->leny, ret->stdscr->lenx,
bprefix(ret->stats.fbbytes, 1, prefixbuf, 0),
ret->colors, ret->RGBflag ? "direct" : "palette");
ret->colors, ret->RGBflag ? "direct" : "palette",
__VERSION__, curses_version());
#ifndef DISABLE_FFMPEG
fprintf(ret->ttyfp, " avformat %u.%u.%u\navutil %u.%u.%u\nswscale %u.%u.%u\n",
LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO,
LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO,
LIBSWSCALE_VERSION_MAJOR, LIBSWSCALE_VERSION_MINOR, LIBSWSCALE_VERSION_MICRO);
#else
fprintf(ret->ttyfp, " warning: built without ffmpeg support\n");
#endif
if(!ret->RGBflag){ // FIXME
if(ret->colors >= 16){
putp(tiparm(ret->setaf, 207));

@ -6,6 +6,12 @@
#include <iostream>
#include "notcurses.h"
extern "C" {
#include <libavutil/pixdesc.h>
#include <libavutil/avconfig.h>
#include <libavcodec/avcodec.h> // ffmpeg doesn't reliably "C"-guard itself
}
static void usage(std::ostream& os, const char* name, int exitcode)
__attribute__ ((noreturn));

@ -1,6 +1,7 @@
#include <string>
#include <cstdlib>
#include <clocale>
#include "internal.h"
#include "main.h"
class InternalsTest : public :: testing::Test {

@ -1,6 +1,11 @@
#include <notcurses.h>
#include "version.h"
#include "main.h"
#ifndef DISABLE_FFMPEG
#include <libavutil/pixdesc.h>
#include <libavutil/avconfig.h>
#include <libavcodec/avcodec.h> // ffmpeg doesn't reliably "C"-guard itself
class LibavTest : public :: testing::Test {
protected:
void SetUp() override {
@ -87,3 +92,4 @@ TEST_F(LibavTest, LoadVideoCreatePlane) {
EXPECT_EQ(0, notcurses_render(nc_));
ncvisual_destroy(ncv);
}
#endif

@ -4,7 +4,6 @@
#include <gtest/gtest.h>
#include <notcurses.h>
#include <curses.h>
#include "internal.h"
// GTEST_SKIP only came along in GoogleTest 1.9
#ifndef GTEST_SKIP

@ -1,5 +1,6 @@
#include <cstdlib>
#include <notcurses.h>
#include "internal.h"
#include "main.h"
class NcplaneTest : public :: testing::Test {

@ -1,3 +1,4 @@
#define notcurses_VERSION_MAJOR "@notcurses_VERSION_MAJOR@"
#define notcurses_VERSION_MINOR "@notcurses_VERSION_MINOR@"
#define notcurses_VERSION_PATCH "@notcurses_VERSION_PATCH@"
#cmakedefine DISABLE_FFMPEG

Loading…
Cancel
Save