From patchwork Mon Aug 24 19:56:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 21890 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 324A544B516 for ; Mon, 24 Aug 2020 22:56:49 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 133176881E7; Mon, 24 Aug 2020 22:56:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2F42B6880F0 for ; Mon, 24 Aug 2020 22:56:42 +0300 (EEST) Received: by mail-pf1-f181.google.com with SMTP id m71so5467208pfd.1 for ; Mon, 24 Aug 2020 12:56:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=L1jgFI+/Q49/8cYFbpYa8nGJQaZ94LazJbvbh+9s2cs=; b=lxX2y2kfkoUNcvbpEN+2YiV/PuvV+MOkwUL0TQPh3srZiVmFGnnKT54cepyjQ8Pfb2 V+NlGM+wvaH9MwRlr1mGoumcvlwcLXoK5Wqf6g3ccRq2EKaW8KuNen9FHLU7u1eI2yT0 QqW+C2WwbymFfhbGPY2Hj+Jtbfb5dH9LzjqqwYAZr0/mM1F9ryHp2szY+vb4AXb1okr2 n9YUvvcTEYz0LkyVUJ1O2BuSh5yNGhaX+bJb6tbrosrdx09ptzxT3lHZ2qnR3hv3dypT +Uz5rPB0jeoEECOCxmcElA1G5GjIDYhk4fRTzlWrwESjwlK81W0Zc3sTJh9l6iYHSMK8 LqZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=L1jgFI+/Q49/8cYFbpYa8nGJQaZ94LazJbvbh+9s2cs=; b=IWNYyo+9eV4ahapY8/LhJYqzpxjiPknRjPHgnf73E6++E3pDA0Kp/j+mB7mdGVXW/p FY353eeLDUSLLltT3iiP9aZC3vDiCtoCBx7m8m8z7RsA3HIkNZdNgH0wozSmTaxD0Wg0 HOhWbLU0eiYb8ANNj4t+HEKBjE8ZNU3prks4dmLtaVX7KURpFvqhXb6QFGXWyKr5GZWW 7v129jIOp2oHPQfyWXcWYf8yk/ZWe9oRiaw2jHlkH2uWHHnkQS87Nff9+ExSThmBkU98 k4ebZbWL9OLB8ETDWCH07rPFNOenMCMSS/dhUify79ap9QeihpWs8RJwTkqr9Y4m4/A8 auyg== X-Gm-Message-State: AOAM532dZtLvsiliQpHkWI5BqKTPWEw2Yea62Aci/6ejaTeKDE6WHBPJ 45mKIPVvYeqj6FmgGJZdWXkdPugK3Mb5c+cdRcgfYKUdiN0= X-Google-Smtp-Source: ABdhPJwsCB5PHsN+qIoT4rn23ji+GZBUt8jMbST3AeN2DRY9rER7XHw9YGgDiPjWa1kOaz0C8ucDJrOcd2yoH616EmU= X-Received: by 2002:a17:902:be0f:: with SMTP id r15mr5018539pls.84.1598298999788; Mon, 24 Aug 2020 12:56:39 -0700 (PDT) MIME-Version: 1.0 From: Carl Eugen Hoyos Date: Mon, 24 Aug 2020 21:56:28 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH]lavf/mpegts: Support mulaw audio in Lorex LNC recordings 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Hi! Attached patch allows audio decoding in Lorex LNC recordings, tested with hi- and low-res files. Please comment, Carl Eugen Subject: [PATCH] lavf/mpegts: Support mulaw audio in Lorex LNC files. --- libavformat/mpegts.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 50d4d5e9bc..b159d40368 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -153,6 +153,8 @@ struct MpegTSContext { int resync_size; int merge_pmt_versions; + /* Lorex LNC crf file */ + int lorex_crf; /******************************************/ /* private mpegts data */ @@ -860,6 +862,10 @@ static const StreamType METADATA_types[] = { { 0 }, }; +static const StreamType crf_types[] = { + { 0x06, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW }, +}; + /* descriptor present */ static const StreamType DESC_types[] = { { 0x6a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 }, /* AC-3 descriptor */ @@ -947,6 +953,12 @@ static int mpegts_set_stream_info(AVStream *st, PESContext *pes, } if (st->codecpar->codec_id == AV_CODEC_ID_NONE) mpegts_find_stream_type(st, pes->stream_type, MISC_types); + if (pes->ts->lorex_crf && st->codecpar->codec_id == AV_CODEC_ID_NONE) + mpegts_find_stream_type(st, pes->stream_type, crf_types); + if (st->codecpar->codec_id == AV_CODEC_ID_PCM_MULAW) { + st->codecpar->channels = 1; + st->codecpar->sample_rate = 8000; + } if (st->codecpar->codec_id == AV_CODEC_ID_NONE) { st->codecpar->codec_id = old_codec_id; st->codecpar->codec_type = old_codec_type; @@ -3054,8 +3066,13 @@ static int mpegts_read_header(AVFormatContext *s) s->internal->prefer_codec_framerate = 1; - if (ffio_ensure_seekback(pb, probesize) < 0) + if (ffio_ensure_seekback(pb, probesize) < 0) { av_log(s, AV_LOG_WARNING, "Failed to allocate buffers for seekback\n"); + } else { + if ((avio_rb64(pb) & 0xFFFFFF00FFFFFFFF) == 0x474011000042b025) + ts->lorex_crf = 1; + avio_seek(pb, -8, SEEK_CUR); + } pos = avio_tell(pb); ts->raw_packet_size = get_packet_size(s);