forked from FFmpeg/FFmpeg
avdevice/avfoundation: replace deprecated AVCaptureDevice
Building with iOS platform, the compiler has a warning: "'devicesWithMediaType:' is deprecated: first deprecated in iOS 10.0 - Use AVCaptureDeviceDiscoverySession instead" Signed-off-by: xufuji456 <839789740@qq.com>
This commit is contained in:
parent
1439784ff0
commit
e37b15e26f
1 changed files with 60 additions and 5 deletions
|
@ -761,6 +761,61 @@ static int get_audio_config(AVFormatContext *s)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NSArray* getDevicesWithMediaType(AVMediaType mediaType) {
|
||||||
|
#if ((TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000) || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 101500))
|
||||||
|
NSMutableArray *deviceTypes = nil;
|
||||||
|
if (mediaType == AVMediaTypeVideo) {
|
||||||
|
deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeBuiltInWideAngleCamera]];
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000)
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInDualCamera];
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInTelephotoCamera];
|
||||||
|
#endif
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 110100)
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInTrueDepthCamera];
|
||||||
|
#endif
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInTripleCamera];
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInDualWideCamera];
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInUltraWideCamera];
|
||||||
|
#endif
|
||||||
|
#if (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 130000)
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeDeskViewCamera];
|
||||||
|
#endif
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 150400)
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeBuiltInLiDARDepthCamera];
|
||||||
|
#endif
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000))
|
||||||
|
[deviceTypes addObject: AVCaptureDeviceTypeContinuityCamera];
|
||||||
|
#endif
|
||||||
|
} else if (mediaType == AVMediaTypeAudio) {
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000))
|
||||||
|
deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeMicrophone]];
|
||||||
|
#else
|
||||||
|
deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeBuiltInMicrophone]];
|
||||||
|
#endif
|
||||||
|
} else if (mediaType == AVMediaTypeMuxed) {
|
||||||
|
#if (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 || (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140000))
|
||||||
|
deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeExternal]];
|
||||||
|
#elseif (TARGET_OS_OSX && __MAC_OS_X_VERSION_MAX_ALLOWED < 140000)
|
||||||
|
deviceTypes = [NSMutableArray arrayWithArray:@[AVCaptureDeviceTypeExternalUnknown]];
|
||||||
|
#else
|
||||||
|
return nil;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVCaptureDeviceDiscoverySession *captureDeviceDiscoverySession =
|
||||||
|
[AVCaptureDeviceDiscoverySession
|
||||||
|
discoverySessionWithDeviceTypes:deviceTypes
|
||||||
|
mediaType:mediaType
|
||||||
|
position:AVCaptureDevicePositionUnspecified];
|
||||||
|
return [captureDeviceDiscoverySession devices];
|
||||||
|
#else
|
||||||
|
return [AVCaptureDevice devicesWithMediaType:mediaType];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static int avf_read_header(AVFormatContext *s)
|
static int avf_read_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -770,8 +825,8 @@ static int avf_read_header(AVFormatContext *s)
|
||||||
AVCaptureDevice *video_device = nil;
|
AVCaptureDevice *video_device = nil;
|
||||||
AVCaptureDevice *audio_device = nil;
|
AVCaptureDevice *audio_device = nil;
|
||||||
// Find capture device
|
// Find capture device
|
||||||
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
|
NSArray *devices = getDevicesWithMediaType(AVMediaTypeVideo);
|
||||||
NSArray *devices_muxed = [AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed];
|
NSArray *devices_muxed = getDevicesWithMediaType(AVMediaTypeMuxed);
|
||||||
|
|
||||||
ctx->num_video_devices = [devices count] + [devices_muxed count];
|
ctx->num_video_devices = [devices count] + [devices_muxed count];
|
||||||
|
|
||||||
|
@ -806,7 +861,7 @@ static int avf_read_header(AVFormatContext *s)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
av_log(ctx, AV_LOG_INFO, "AVFoundation audio devices:\n");
|
av_log(ctx, AV_LOG_INFO, "AVFoundation audio devices:\n");
|
||||||
devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio];
|
devices = getDevicesWithMediaType(AVMediaTypeAudio);
|
||||||
for (AVCaptureDevice *device in devices) {
|
for (AVCaptureDevice *device in devices) {
|
||||||
const char *name = [[device localizedName] UTF8String];
|
const char *name = [[device localizedName] UTF8String];
|
||||||
int index = [devices indexOfObject:device];
|
int index = [devices indexOfObject:device];
|
||||||
|
@ -930,7 +985,7 @@ static int avf_read_header(AVFormatContext *s)
|
||||||
|
|
||||||
// get audio device
|
// get audio device
|
||||||
if (ctx->audio_device_index >= 0) {
|
if (ctx->audio_device_index >= 0) {
|
||||||
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio];
|
NSArray *devices = getDevicesWithMediaType(AVMediaTypeAudio);
|
||||||
|
|
||||||
if (ctx->audio_device_index >= [devices count]) {
|
if (ctx->audio_device_index >= [devices count]) {
|
||||||
av_log(ctx, AV_LOG_ERROR, "Invalid audio device index\n");
|
av_log(ctx, AV_LOG_ERROR, "Invalid audio device index\n");
|
||||||
|
@ -943,7 +998,7 @@ static int avf_read_header(AVFormatContext *s)
|
||||||
if (!strncmp(ctx->audio_filename, "default", 7)) {
|
if (!strncmp(ctx->audio_filename, "default", 7)) {
|
||||||
audio_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
|
audio_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
|
||||||
} else {
|
} else {
|
||||||
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio];
|
NSArray *devices = getDevicesWithMediaType(AVMediaTypeAudio);
|
||||||
|
|
||||||
for (AVCaptureDevice *device in devices) {
|
for (AVCaptureDevice *device in devices) {
|
||||||
if (!strncmp(ctx->audio_filename, [[device localizedName] UTF8String], strlen(ctx->audio_filename))) {
|
if (!strncmp(ctx->audio_filename, [[device localizedName] UTF8String], strlen(ctx->audio_filename))) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue