Hello Michael, could you take a look at the patch?
Felix > Am 30.11.2017 um 18:15 schrieb Michael Niedermayer <mich...@niedermayer.cc>: > > On Thu, Nov 30, 2017 at 10:15:48AM +0100, Felix Matouschek wrote: >> Sorry, my mail client swallowed the attachment, sent it again. >> > >> Changelog | 1 >> MAINTAINERS | 1 >> configure | 6 >> doc/indevs.texi | 40 ++ >> libavdevice/Makefile | 1 >> libavdevice/alldevices.c | 1 >> libavdevice/android_camera.c | 816 >> +++++++++++++++++++++++++++++++++++++++++++ >> libavdevice/version.h | 2 >> 8 files changed, 867 insertions(+), 1 deletion(-) >> 2fea6cb3990aed83c3a3c492aa482f619a885ed7 >> 0001-avdevice-add-android_camera-indev.patch >> From b70da28e33e07b4565daffc94c8ffe3c8df747ff Mon Sep 17 00:00:00 2001 >> From: Felix Matouschek <fe...@matouschek.org> >> Date: Thu, 30 Nov 2017 10:03:54 +0100 >> Subject: [PATCH] avdevice: add android_camera indev >> To: ffmpeg-devel@ffmpeg.org >> >> This commit adds an indev for Android devices on API level 24+ which >> uses the Android NDK Camera2 API to capture video from builtin cameras >> >> Signed-off-by: Felix Matouschek <fe...@matouschek.org> >> --- >> Changelog | 1 + >> MAINTAINERS | 1 + >> configure | 6 + >> doc/indevs.texi | 40 +++ >> libavdevice/Makefile | 1 + >> libavdevice/alldevices.c | 1 + >> libavdevice/android_camera.c | 816 >> +++++++++++++++++++++++++++++++++++++++++++ >> libavdevice/version.h | 2 +- >> 8 files changed, 867 insertions(+), 1 deletion(-) >> create mode 100644 libavdevice/android_camera.c >> >> diff --git a/Changelog b/Changelog >> index 6592d868da..f58cd810e0 100644 >> --- a/Changelog >> +++ b/Changelog >> @@ -6,6 +6,7 @@ version <next>: >> - Dropped support for OpenJPEG versions 2.0 and below. Using OpenJPEG now >> requires 2.1 (or later) and pkg-config. >> - VDA dropped (use VideoToolbox instead) >> +- Add android_camera indev >> >> >> version 3.4: >> diff --git a/MAINTAINERS b/MAINTAINERS >> index 1d2ff78b0e..d6cb135964 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -281,6 +281,7 @@ libavdevice >> >> >> avfoundation.m Thilo Borgmann >> + android_camera.c Felix Matouschek >> decklink* Marton Balint >> dshow.c Roger Pack (CC rogerdp...@gmail.com) >> fbdev_enc.c Lukasz Marek >> diff --git a/configure b/configure >> index 7a53bc76c7..d52b18fab3 100755 >> --- a/configure >> +++ b/configure >> @@ -3068,6 +3068,8 @@ xmv_demuxer_select="riffdec" >> xwma_demuxer_select="riffdec" >> >> # indevs / outdevs >> +android_camera_indev_deps="android camera2ndk mediandk pthreads" >> +android_camera_indev_extralibs="-landroid -lcamera2ndk -lmediandk" >> alsa_indev_deps="alsa" >> alsa_outdev_deps="alsa" >> avfoundation_indev_deps="avfoundation corevideo coremedia pthreads" >> @@ -5836,6 +5838,10 @@ check_lib shell32 "windows.h shellapi.h" >> CommandLineToArgvW -lshell32 >> check_lib wincrypt "windows.h wincrypt.h" CryptGenRandom -ladvapi32 >> check_lib psapi "windows.h psapi.h" GetProcessMemoryInfo -lpsapi >> >> +check_lib android android/native_window.h ANativeWindow_acquire -landroid >> +check_lib mediandk "stdint.h media/NdkImage.h" AImage_delete -lmediandk >> +check_lib camera2ndk "stdbool.h stdint.h camera/NdkCameraManager.h" >> ACameraManager_create -lcamera2ndk >> + >> enabled appkit && check_apple_framework AppKit >> enabled audiotoolbox && check_apple_framework AudioToolbox >> enabled avfoundation && check_apple_framework AVFoundation >> diff --git a/doc/indevs.texi b/doc/indevs.texi >> index d308bbf7de..07056d762e 100644 >> --- a/doc/indevs.texi >> +++ b/doc/indevs.texi >> @@ -63,6 +63,46 @@ Set the number of channels. Default is 2. >> >> @end table >> >> +@section android_camera >> + >> +Android camera input device. >> + >> +This input devices uses the Android Camera2 NDK API which is >> +available on devices with API level 24+. The availability of >> +android_camera is autodetected during configuration. >> + >> +This device allows capturing from all cameras on an Android device, >> +which are integrated into the Camera2 NDK API. >> + >> +The available cameras are enumerated internally and can be selected >> +with the @var{camera_index} parameter. The input file string is >> +discarded. >> + >> +Generally the back facing camera has index 0 while the front facing >> +camera has index 1. >> + >> +@subsection Options >> + >> +@table @option >> + >> +@item video_size >> +Set the video size given as a string such as 640x480 or hd720. >> +Falls back to the first available configuration reported by >> +Android if requested video size is not available or by default. >> + >> +@item framerate >> +Set the video framerate. >> +Falls back to the first available configuration reported by >> +Android if requested framerate is not available or by default (-1). >> + >> +@item camera_index >> +Set the index of the camera to use. Default is 0. >> + >> +@item input_queue_size >> +Set the maximum number of frames to buffer. Default is 5. >> + >> +@end table >> + >> @section avfoundation >> >> AVFoundation input device. >> diff --git a/libavdevice/Makefile b/libavdevice/Makefile >> index 8228d62147..f11a6f2a86 100644 >> --- a/libavdevice/Makefile >> +++ b/libavdevice/Makefile >> @@ -14,6 +14,7 @@ OBJS-$(CONFIG_SHARED) += reverse.o >> # input/output devices >> OBJS-$(CONFIG_ALSA_INDEV) += alsa_dec.o alsa.o timefilter.o >> OBJS-$(CONFIG_ALSA_OUTDEV) += alsa_enc.o alsa.o >> +OBJS-$(CONFIG_ANDROID_CAMERA_INDEV) += android_camera.o >> OBJS-$(CONFIG_AVFOUNDATION_INDEV) += avfoundation.o >> OBJS-$(CONFIG_BKTR_INDEV) += bktr.o >> OBJS-$(CONFIG_CACA_OUTDEV) += caca.o >> diff --git a/libavdevice/alldevices.c b/libavdevice/alldevices.c >> index b767b6a718..2c8d9035da 100644 >> --- a/libavdevice/alldevices.c >> +++ b/libavdevice/alldevices.c >> @@ -42,6 +42,7 @@ static void register_all(void) >> { >> /* devices */ >> REGISTER_INOUTDEV(ALSA, alsa); >> + REGISTER_INDEV (ANDROID_CAMERA, android_camera); >> REGISTER_INDEV (AVFOUNDATION, avfoundation); >> REGISTER_INDEV (BKTR, bktr); >> REGISTER_OUTDEV (CACA, caca); >> diff --git a/libavdevice/android_camera.c b/libavdevice/android_camera.c >> new file mode 100644 >> index 0000000000..eaef032a4c >> --- /dev/null >> +++ b/libavdevice/android_camera.c >> @@ -0,0 +1,816 @@ >> +/* >> + * Android camera input device >> + * >> + * Copyright (C) 2017 Felix Matouschek >> + * >> + * This file is part of FFmpeg. >> + * >> + * FFmpeg is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU Lesser General Public >> + * License as published by the Free Software Foundation; either >> + * version 2.1 of the License, or (at your option) any later version. >> + * >> + * FFmpeg is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with FFmpeg; if not, write to the Free Software >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >> USA >> + */ >> + >> +#include <errno.h> >> +#include <pthread.h> >> +#include <stdatomic.h> >> +#include <stdbool.h> >> +#include <stdint.h> >> + >> +#include <camera/NdkCameraDevice.h> >> +#include <camera/NdkCameraManager.h> >> +#include <media/NdkImage.h> >> +#include <media/NdkImageReader.h> >> + >> +#include "libavformat/avformat.h" >> +#include "libavformat/internal.h" >> +#include "libavutil/avstring.h" >> +#include "libavutil/display.h" >> +#include "libavutil/imgutils.h" >> +#include "libavutil/log.h" >> +#include "libavutil/opt.h" >> +#include "libavutil/parseutils.h" >> +#include "libavutil/threadmessage.h" >> +#include "libavutil/time.h" >> + >> +#include "version.h" >> + >> +/* This image format is available on all Android devices >> + * supporting the Camera2 API */ >> +#define IMAGE_FORMAT_ANDROID AIMAGE_FORMAT_YUV_420_888 >> +#define IMAGE_FORMAT_FFMPEG AV_PIX_FMT_YUV420P >> +#define IMAGE_NUM_PLANES 3 >> + >> +#define MAX_BUF_COUNT 2 >> +#define VIDEO_STREAM_INDEX 0 >> +#define VIDEO_TIMEBASE 1000000000 >> + >> +typedef struct AndroidCameraCtx { >> + const AVClass *class; >> + >> + int requested_width; >> + int requested_height; >> + AVRational framerate; >> + int camera_index; >> + int input_queue_size; >> + >> + uint8_t lens_facing; >> + int32_t sensor_orientation; >> + int width; >> + int height; >> + int32_t framerate_range[2]; >> + >> + ACameraManager *camera_mgr; >> + char *camera_id; >> + ACameraMetadata *camera_metadata; >> + ACameraDevice *camera_dev; >> + ACameraDevice_StateCallbacks camera_state_callbacks; >> + AImageReader *image_reader; >> + AImageReader_ImageListener image_listener; >> + ANativeWindow *image_reader_window; >> + ACaptureSessionOutputContainer *capture_session_output_container; >> + ACaptureSessionOutput *capture_session_output; >> + ACameraOutputTarget *camera_output_target; >> + ACaptureRequest *capture_request; >> + ACameraCaptureSession_stateCallbacks capture_session_state_callbacks; >> + ACameraCaptureSession *capture_session; >> + >> + AVThreadMessageQueue *input_queue; >> + atomic_int exit; >> + int display_matrix_sent; >> +} AndroidCameraCtx; >> + >> +static const char *camera_status_string(camera_status_t val) >> +{ >> + switch(val) { >> + case ACAMERA_OK: >> + return AV_STRINGIFY(ACAMERA_OK); >> + case ACAMERA_ERROR_UNKNOWN: >> + return AV_STRINGIFY(ACAMERA_ERROR_UNKNOWN); >> + case ACAMERA_ERROR_INVALID_PARAMETER: >> + return AV_STRINGIFY(ACAMERA_ERROR_INVALID_PARAMETER); > > what i meant was something like > > #define RETURN_CASE(x) case x: return AV_STRINGIFY(x); > switch(val) { > RETURN_CASE(ACAMERA_OK) > RETURN_CASE(ACAMERA_ERROR_UNKNOWN) > RETURN_CASE(ACAMERA_ERROR_INVALID_PARAMETER) > > > [...] > > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > If you fake or manipulate statistics in a paper in physics you will never > get a job again. > If you fake or manipulate statistics in a paper in medicin you will get > a job for life at the pharma industry. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel