From patchwork Sat Nov 4 18:54:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 5859 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.176.82.201 with SMTP id w9csp1219115uaw; Sat, 4 Nov 2017 11:55:06 -0700 (PDT) X-Google-Smtp-Source: ABhQp+TI8TqSYUeeQEgxLAX/Y83ejTaqjbEMkX5tNVz0PU31spdCNN5Or7eYGedm0aAYTixISX3a X-Received: by 10.28.2.84 with SMTP id 81mr2003094wmc.106.1509821706189; Sat, 04 Nov 2017 11:55:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509821706; cv=none; d=google.com; s=arc-20160816; b=lJwwsn6ipmhlgm64i/HTNAHPLJnKl7BCKT3/8UZ5mEtP71Ka1MjkfcQ2kjr1xom01B IdK4cqD67mNEW4pOlraDLzi9+AkEq8MZHjy/+CHhSlpK3sM92x69EIcwqHW1tMZbTSgR vj9s0euy8PbzKXGPzwZR0l+Tfm2Uf9MjbDjNiKCbKJsiYcrCzl+ufMDxUsfkMu6ummUE S6RwNb+XTEJWKnFe2r2Z9oyM4YPud14ZOuDNHNJYCetdvmOqi9cUC4N3FF7Reuex0D6R pZeytLGc/ZYTzlV6llpWOJBc5PUbQzxNP7ko8QTSRrPjoxVM0fa23xkE59wIJW5h9RqK 5HXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:delivered-to :arc-authentication-results; bh=bvspX+GEPv95B9i7odSOLBbQzt5oV28rClUFsfNf01s=; b=trog8wL9Tlf6RT+psaGW5AKU8u2KH1dcSMQRCxXWdO/OBNFYRkl/Lq/vVH6MUxLqb/ H/u3YTNY23825GluoqtpOLSG0pwFTW65Uns83AqBu2+xFnJPqDpE1NQRSdXfPWuHQraC Pxak9Viysb3vj25+WB1NpgB1LuVkUK2130PWHJEJEapIfQxY2bL2ffFbMj9gZEOz999D X8cKymNFJhlwj6WIA+OY2gqmkSHmnSPqtub1TQyKm3jmy+oFCqfF5GDKvyZqnepr4LVZ eveUhm02xIz8TCEsDJgVAhekLTEdxMeo6rqo2C+krd5eTntLc+b9dHSa0BMvZlkA/zOu RObQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k40si8630829wrf.308.2017.11.04.11.54.43; Sat, 04 Nov 2017 11:55:06 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id ACB87689DAC; Sat, 4 Nov 2017 20:54:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 90EF3680476 for ; Sat, 4 Nov 2017 20:54:24 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 08B83E1A76; Sat, 4 Nov 2017 19:54:36 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fAiXkT9Hz40d; Sat, 4 Nov 2017 19:54:34 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 27C28E1A74; Sat, 4 Nov 2017 19:54:34 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Nov 2017 19:54:30 +0100 Message-Id: <20171104185430.18383-1-cus@passwd.hu> X-Mailer: git-send-email 2.13.6 Subject: [FFmpeg-devel] [PATCH] ffplay: use SDL2 audio API X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Marton Balint MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" It allows us to specify what kind of audio parameter changes are allowed. Should fix ticket #6721. Signed-off-by: Marton Balint --- fftools/ffplay.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index c264e92535..bd1457c7e3 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -362,6 +362,7 @@ static AVPacket flush_pkt; static SDL_Window *window; static SDL_Renderer *renderer; static SDL_RendererInfo renderer_info = {0}; +static SDL_AudioDeviceID audio_dev; static const struct TextureFormatEntry { enum AVPixelFormat format; @@ -1192,7 +1193,7 @@ static void stream_component_close(VideoState *is, int stream_index) switch (codecpar->codec_type) { case AVMEDIA_TYPE_AUDIO: decoder_abort(&is->auddec, &is->sampq); - SDL_CloseAudio(); + SDL_CloseAudioDevice(audio_dev); decoder_destroy(&is->auddec); swr_free(&is->swr_ctx); av_freep(&is->audio_buf1); @@ -2451,7 +2452,7 @@ static void sdl_audio_callback(void *opaque, Uint8 *stream, int len) else { memset(stream, 0, len1); if (!is->muted && is->audio_buf) - SDL_MixAudio(stream, (uint8_t *)is->audio_buf + is->audio_buf_index, len1, is->audio_volume); + SDL_MixAudioFormat(stream, (uint8_t *)is->audio_buf + is->audio_buf_index, AUDIO_S16SYS, len1, is->audio_volume); } len -= len1; stream += len1; @@ -2496,7 +2497,7 @@ static int audio_open(void *opaque, int64_t wanted_channel_layout, int wanted_nb wanted_spec.samples = FFMAX(SDL_AUDIO_MIN_BUFFER_SIZE, 2 << av_log2(wanted_spec.freq / SDL_AUDIO_MAX_CALLBACKS_PER_SEC)); wanted_spec.callback = sdl_audio_callback; wanted_spec.userdata = opaque; - while (SDL_OpenAudio(&wanted_spec, &spec) < 0) { + while (!(audio_dev = SDL_OpenAudioDevice(NULL, 0, &wanted_spec, &spec, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_CHANNELS_CHANGE))) { av_log(NULL, AV_LOG_WARNING, "SDL_OpenAudio (%d channels, %d Hz): %s\n", wanted_spec.channels, wanted_spec.freq, SDL_GetError()); wanted_spec.channels = next_nb_channels[FFMIN(7, wanted_spec.channels)]; @@ -2659,7 +2660,7 @@ static int stream_component_open(VideoState *is, int stream_index) } if ((ret = decoder_start(&is->auddec, audio_thread, is)) < 0) goto out; - SDL_PauseAudio(0); + SDL_PauseAudioDevice(audio_dev, 0); break; case AVMEDIA_TYPE_VIDEO: is->video_stream = stream_index;