From patchwork Thu Jun 28 00:51:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephan Holljes X-Patchwork-Id: 9533 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:104:0:0:0:0:0 with SMTP id c4-v6csp1478848jad; Wed, 27 Jun 2018 17:51:45 -0700 (PDT) X-Google-Smtp-Source: AAOMgpd2H4SYitxFq1BS2ldLUhriznmyOVBkzhg3fFpB740Iz076JgCX7CtYyL89QR/WmlbhaOQ+ X-Received: by 2002:a1c:7a06:: with SMTP id v6-v6mr6565148wmc.90.1530147105415; Wed, 27 Jun 2018 17:51:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530147105; cv=none; d=google.com; s=arc-20160816; b=mrgqYix+p8bKBQf2Z+TP6MQIsw01USGpGK3Os+arN/wtbVnZIDPP9/3nVO6ShqgT6w gyagvpya9jJnyfU4F9Zp6a0qoK8NhwePLlpwc9P5jlLhs9DqBZgnzLCBts40hA1nC69A wVeIegwFRkcbHdj+mbLU0fw5jjv8/gDKr2ObB2mYiX+ABlL9fo/6LHsb79Z3RG18AULy xbMFVbAXBAJ8PrswDwxw5a71U/zFFUj/xKHVzDCk/JT54n2kvBy/0Q1afhzVIsrP7Rdv 1zlvMWmmJZ6L5eUxndAa6uaAKr/g5tCrxsbYoWNnayj+1D9tPFAsbVJE+o/CheKPJzf6 2mZA== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=N/G7LpWPOJC370Qc0bDjjkwtJWGEIDKBhMsADNzBGIo=; b=UjRMIWp3NAL4Dej7yG+yxhfGXTGtXORnVe8zXAAVRGdkP/2ZY4AUgP67q1+sDqo8le VyBhryEK1u6mnBjG+LFn9rKf4czjCCLBmLS8A1S4fjhOX0Fn0LZfJxkgjX/OAFfUNUs2 BBHuNfWD7riPoEjzAlKnINyhmcWdy+vDkEgSKhr/Fs5XfUzAAJxfFBEzkSRs4I8Ef4bd iEBQI4cIat3erMgz9mPw/lanhZat+xysofphZTA68ModoNVUkWEquGsuWPbSctqpBCBe Vpm7DjUxgVWLkdByWjBu5u4ezK0yJvEzw+wXYEkF2d3rH9pfSJjlB56WjLLb2+4D44Yw 4o2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com header.s=20161025 header.b=V5SZg3Cx; 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; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n12-v6si4972748wrs.204.2018.06.27.17.51.45; Wed, 27 Jun 2018 17:51:45 -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; dkim=neutral (body hash did not verify) header.i=@googlemail.com header.s=20161025 header.b=V5SZg3Cx; 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; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 92AD868A2DE; Thu, 28 Jun 2018 03:51:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f175.google.com (mail-wr0-f175.google.com [209.85.128.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 63FE4689C2E for ; Thu, 28 Jun 2018 03:51:27 +0300 (EEST) Received: by mail-wr0-f175.google.com with SMTP id c5-v6so3703999wrs.10 for ; Wed, 27 Jun 2018 17:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ahFFi0EWnkPX5B83wNAkTbICD2cGQyMEYgvhYM7hDAY=; b=V5SZg3Cxm4rG1ABqps2cFksClzPLltBO8+NPLtCC0DvZw/CnCgOwmkQsTie3CQUi6P V09+837E2QbbtOz/E6dYgVWy7J5F//7FT5Ijckf5h5cM3w4RFJNKtI/5a2TdIPk9VkuJ HTbo9/uoNLzoE1V3qe9jete5EVMubOkxV5+0i5vIsnzrlpy99/PAr66cxB76SzPbCgKg K+K2mmNzy5aSytwFi2PFSeztmLHqFCXTv9oELfwMRjZFfQRDI7I6c1fOKMxy+xsCaiDf a+e8iEEvmg5yhbQVI35yUucUR/D1MTAaUP/oIKfv8eSpGtqf+WMyLlOAyKisVys2/KNg Xe3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ahFFi0EWnkPX5B83wNAkTbICD2cGQyMEYgvhYM7hDAY=; b=XoMgwoZmldZsJpsgME8e946/X8TR6tdcIrGRxOptMiXSttZSkkhJPRqhVPf4lENLjy DQXkbFxhvZrKCO7pd9Byo21vEUEk0s6LcOqVTkcmwd/KQ41rzFYhbrv5MpKFsZA0DoPM j1Cq1Pa+puuiCS2TDdYKOihf6UecjRameLo8QeI289pX279HWN17qHt+k6VL7P830Hob LQLwzaGA/Wx7quM8s/zzOroTSidVKaLdg7mDnwpoHdI3y47oM3QoXgu5kKF+ZYrDDwSu DOq3BMFUlzHFYTOa+JRpdRSEhqsqjDDJPoHfgulTmy7wj0j/dGYOz8fptgw+uXszmLqy yM3Q== X-Gm-Message-State: APt69E17XltEVhyHPT1hNHaFRfNwRHFmIGlGxJl56AyiRZjilVmv1Clb Oc4d8FnaBvSx356auOyPdUIN7g== X-Received: by 2002:a5d:44ca:: with SMTP id z10-v6mr7090069wrr.210.1530147087988; Wed, 27 Jun 2018 17:51:27 -0700 (PDT) Received: from localhost.localdomain ([46.5.2.0]) by smtp.gmail.com with ESMTPSA id a9-v6sm1363017wrq.1.2018.06.27.17.51.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Jun 2018 17:51:26 -0700 (PDT) From: Stephan Holljes To: ffmpeg-devel@ffmpeg.org Date: Thu, 28 Jun 2018 02:51:02 +0200 Message-Id: <20180628005117.18902-3-klaxa1337@googlemail.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180628005117.18902-1-klaxa1337@googlemail.com> References: <20180628005117.18902-1-klaxa1337@googlemail.com> Subject: [FFmpeg-devel] [PATCH 02/17] ffserver.c: Remove trailing whitespace 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: Stephan Holljes MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Stephan Holljes --- ffserver.c | 64 +++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/ffserver.c b/ffserver.c index 0278bc8..cc7dc6c 100644 --- a/ffserver.c +++ b/ffserver.c @@ -86,12 +86,12 @@ void *read_thread(void *arg) AVStream *in_stream; AVRational tb = {1, AV_TIME_BASE}; AVStream *stream; - + if ((ret = avformat_find_stream_info(ifmt_ctx, NULL)) < 0) { av_log(ifmt_ctx, AV_LOG_ERROR, "Could not get input stream info.\n"); goto end; } - + av_log(ifmt_ctx, AV_LOG_INFO, "Finding video stream.\n"); for (i = 0; i < ifmt_ctx->nb_streams; i++) { av_log(ifmt_ctx, AV_LOG_DEBUG, "Checking stream %d\n", i); @@ -103,19 +103,19 @@ void *read_thread(void *arg) } if (video_idx == -1) audio_only = 1; - - + + // All information needed to start segmenting the file is gathered now. // start BUFFER_SECS seconds "in the past" to "catch up" to real-time. Has no effect on streamed sources. start = av_gettime_relative() - BUFFER_SECS * AV_TIME_BASE; - + // segmenting main-loop - + for (;;) { ret = av_read_frame(ifmt_ctx, &pkt); if (ret < 0) break; - + in_stream = ifmt_ctx->streams[pkt.stream_index]; if (pkt.pts == AV_NOPTS_VALUE) { pkt.pts = 0; @@ -123,15 +123,15 @@ void *read_thread(void *arg) if (pkt.dts == AV_NOPTS_VALUE) { pkt.dts = 0; } - + pkt.pts = av_rescale_q_rnd(pkt.pts, in_stream->time_base, tb, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); pkt.dts = av_rescale_q_rnd(pkt.dts, in_stream->time_base, tb, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, tb); pkt.pos = -1; - + // current pts pts = pkt.pts; - + // current stream "uptime" now = av_gettime_relative() - start; @@ -140,7 +140,7 @@ void *read_thread(void *arg) usleep(1000); now = av_gettime_relative() - start; } - + // keyframe or first Segment or audio_only and more than AUDIO_ONLY_SEGMENT_SECONDS passed since last cut if ((pkt.flags & AV_PKT_FLAG_KEY && pkt.stream_index == video_idx) || !seg || (audio_only && pts - last_cut >= AUDIO_ONLY_SEGMENT_SECONDS * AV_TIME_BASE)) { @@ -160,14 +160,14 @@ void *read_thread(void *arg) seg->id = id++; av_log(NULL, AV_LOG_DEBUG, "Starting new segment, id: %d\n", seg->id); } - + ts = av_dynarray2_add((void **)&seg->ts, &seg->ts_len, sizeof(int64_t), (const void *)&pkt.dts); if (!ts) { av_log(seg->fmt_ctx, AV_LOG_ERROR, "could not write dts\n."); goto end; } - + ts = av_dynarray2_add((void **)&seg->ts, &seg->ts_len, sizeof(int64_t), (const void *)&pkt.pts); if (!ts) { @@ -181,7 +181,7 @@ void *read_thread(void *arg) goto end; } } - + if (ret < 0 && ret != AVERROR_EOF) { av_log(seg->fmt_ctx, AV_LOG_ERROR, "Error occurred during read: %s\n", av_err2str(ret)); goto end; @@ -211,19 +211,19 @@ void write_segment(struct Client *c) AVPacket pkt; struct SegmentReadInfo info; unsigned char *avio_buffer; - + av_fifo_generic_peek(c->buffer, &seg, sizeof(seg), NULL); pthread_mutex_unlock(&c->buffer_lock); c->current_segment_id = seg->id; info.buf = seg->buf; info.left = seg->size; - + if (!(fmt_ctx = avformat_alloc_context())) { av_log(NULL, AV_LOG_ERROR, "Could not allocate format context\n"); client_disconnect(c, 0); return; } - + avio_buffer = av_malloc(AV_BUFSIZE); if (!avio_buffer) { av_log(fmt_ctx, AV_LOG_ERROR, "Could not allocate avio_buffer\n"); @@ -249,7 +249,7 @@ void write_segment(struct Client *c) client_disconnect(c, 0); return; } - + ret = avformat_find_stream_info(fmt_ctx, NULL); if (ret < 0) { av_log(fmt_ctx, AV_LOG_ERROR, "Could not find stream information\n"); @@ -259,14 +259,14 @@ void write_segment(struct Client *c) client_disconnect(c, 0); return; } - + av_log(fmt_ctx, AV_LOG_DEBUG, "Client: %d, Segment: %d\n", c->id, seg->id); for (;;) { ret = av_read_frame(fmt_ctx, &pkt); if (ret < 0) break; - + pkt.dts = av_rescale_q_rnd(seg->ts[pkt_count], tb, c->ofmt_ctx->streams[pkt.stream_index]->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX); @@ -379,7 +379,7 @@ void *accept_thread(void *arg) info->httpd->close(server, client); continue; } - + avio_buffer = av_malloc(AV_BUFSIZE); if (!avio_buffer) { av_log(client_ctx, AV_LOG_ERROR, "Could not allocate output format context.\n"); @@ -427,15 +427,15 @@ void *accept_thread(void *arg) avio_context_free(&client_ctx); av_free(ffinfo); continue; - } + } ofmt_ctx->flags |= AVFMT_FLAG_GENPTS; ofmt = ofmt_ctx->oformat; ofmt->flags |= AVFMT_NOFILE | AVFMT_FLAG_AUTO_BSF; - + for (i = 0; i < ifmt_ctx->nb_streams; i++) { in_stream = ifmt_ctx->streams[i]; out_stream = avformat_new_stream(ofmt_ctx, NULL); - + if (!out_stream) { av_log(client, AV_LOG_ERROR, "Could not allocate output stream.\n"); publisher_cancel_reserve(pub); @@ -446,7 +446,7 @@ void *accept_thread(void *arg) av_free(ffinfo); continue; } - + ret = avcodec_parameters_copy(out_stream->codecpar, in_stream->codecpar); if (ret < 0) { av_log(client, AV_LOG_ERROR, "Failed to copy context from input to output stream codec context: %s.\n", av_err2str(ret)); @@ -482,7 +482,7 @@ void *accept_thread(void *arg) } publisher_add_client(pub, ofmt_ctx, ffinfo); ofmt_ctx = NULL; - + } av_log(server, AV_LOG_INFO, "Shutting down http server.\n"); info->httpd->shutdown(server); @@ -518,7 +518,7 @@ void *write_thread(void *arg) if (info->pub->shutdown && nb_free == MAX_CLIENTS) break; } - + return NULL; } @@ -532,7 +532,7 @@ void *run_server(void *arg) { int ret, i, stream_index; pthread_t *r_threads; pthread_t **w_threads_p; - + pubs = av_mallocz_array(config->nb_streams, sizeof(struct PublisherContext*)); if (!pubs) { av_log(NULL, AV_LOG_ERROR, "Could not allocate publishers\n"); @@ -543,15 +543,15 @@ void *run_server(void *arg) { av_log(NULL, AV_LOG_ERROR, "Could not allocate input format contexts.\n"); goto error_cleanup; } - + av_log_set_level(AV_LOG_INFO); - + ainfo.pubs = pubs; ainfo.ifmt_ctxs = ifmt_ctxs; ainfo.nb_pub = config->nb_streams; ainfo.httpd = &lavfhttpd; ainfo.config = config; - + rinfos = av_mallocz_array(config->nb_streams, sizeof(struct ReadInfo)); if (!rinfos) { av_log(NULL, AV_LOG_ERROR, "Could not allocate read infos.\n"); @@ -572,7 +572,7 @@ void *run_server(void *arg) { av_log(NULL, AV_LOG_ERROR, "Could not allocate write thread handle pointers.\n"); goto error_cleanup; } - + for (stream_index = 0; stream_index < config->nb_streams; stream_index++) { struct PublisherContext *pub = NULL; struct AVFormatContext *ifmt_ctx = NULL;