From patchwork Sun Dec 31 09:46:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: misty@brew.sh X-Patchwork-Id: 7046 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.79.195 with SMTP id r64csp12434750jad; Sun, 31 Dec 2017 01:46:56 -0800 (PST) X-Google-Smtp-Source: ACJfBos5PNEO5sV8oD3dbgMWQgEOBvEg914PRKEdZxfeiFWIHENNoR5/E/OeAk1bD38o1X3YILLH X-Received: by 10.28.106.6 with SMTP id f6mr30723647wmc.111.1514713616221; Sun, 31 Dec 2017 01:46:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514713616; cv=none; d=google.com; s=arc-20160816; b=QLswtU3dIgD251BtiinHqUlzbsgLzjh2zBoR3In/tJ+C2n7Hj+FuCgJLhNv1jCl4A5 XutA+sP9WqcahTvkE7wuuluR5BvyF0fkyw9/1QTCN4wYJ/T9M3C8ynEnSRWPnwBbE3Wu CLm9eErUowJFHzarh9ncU6W6+q9Rkm1chEItqoVXcV0Re0wnO0jDpVqlIGa3fIQjqxZO paSNbilWIVH5Q1WHekxVfQECC4xx0Hp0NOWvZE98FVcYe+qzNIjSzwMa0IpA8/7G1eZZ H8TRgY4UP31I1VWMH4/VdXjLN2hIwyXPXCPJOsS6+kIOj/B1U1gCPef1kaD1RcKYeZ1b 1+lw== 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=49gbZHDppxG5T8VZ/PQrfKUqLcut321VohvcGeUnuD8=; b=tCrQki3NZd9UUhwhbAbuy8tV9edACYwePouDBDYNEiRmQ3pD2T1S8RhujUSGZHIsnl 9MEl5RzwQGPC2DrAp3GynF7C4vKhlZWYTycIDQlzgC5UUsCdRlMPNvoeWjpB1kjQ1bsr NXrj3QEzrpjnBEjDW+cx455262CNg6lr6Yvgcw8pLm1jdY13yHpFmr1i57D9DN2CEtp0 ZLo+f9ETWPPoNGI5w3KHp33T9989upB/MzS9yu8nWzC+VPkPV94IRWOf6uLflVJ1Tc36 zM2V0c1FG5cKcCi03mezhDEB+x237cpXXqv4m348Z6dGOqkgqxNi+3nzdpJuyXZ+WIX/ VlIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=oPUlnrjr; 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 o18si23382385wro.223.2017.12.31.01.46.55; Sun, 31 Dec 2017 01:46:56 -0800 (PST) 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=@gmail.com header.s=20161025 header.b=oPUlnrjr; 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 82C4C6806BC; Sun, 31 Dec 2017 11:46:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf0-f179.google.com (mail-pf0-f179.google.com [209.85.192.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 29669680485 for ; Sun, 31 Dec 2017 11:46:25 +0200 (EET) Received: by mail-pf0-f179.google.com with SMTP id c204so23727924pfc.13 for ; Sun, 31 Dec 2017 01:46:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=hBai0oawJrZTeBQPfPHqKlUJ9dnG7rYwm4gPimmUGKg=; b=oPUlnrjrbPf3ZvYKa18NGMTb+QLOgHgpD4ffkizVWzj0JCTOcBreQfL9U1AIqmfRcb AeO01h2CKIxe+a8UdKvpZNW6ro4Q9PFeG2+3mo7F4DvVNbzangB+hCTLavPV0yp2EQb3 OAENUH+kjb+VNu/XlTbEN5Ldycxswi5xEPEmbGHWAmr4eoQSVRB3vRa1uyNNP1klIyhP QiuqaJwo9mGPqBZyAvfoRkfvlBrPzg4PSaVbAqPcmFYFGaQGzAQvHezgBunMvI4czKK3 eYZ/ESzXZrj+Rg5GZpqxiZ3UimPdH7Mv0pJJBjChklYCzZ+a2IcWODwiM5m5T6VRL7kL li2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=hBai0oawJrZTeBQPfPHqKlUJ9dnG7rYwm4gPimmUGKg=; b=fmsou0ZI+KkTJxuNWVaITolVpkzXKYHYamGYLfRS+HlxMWBj/u8vraDn8cdWoNjqPt rLp56cz/teXG3SdCi9jFzhrqkmCUzZJmNinmwsx9cql22uzlgNdsSUDxhUn1ydxJ+npS e2RRJVzGOZDYeUgJSgihBjBYizCid6M9R4vtTpNTIt6sCKXG+RCC2vn0OPcZFy99EHIg +dCAu9qnbWTaJlnyAqhRX3iuzRhTLhVGfh9R60A9fBT8b4V0ZiQRhl34FXgRMtmZlyem M+Az/IRGjS4c76pT0OmJD+bmf+x3paU8m+dMSVj3YjmL7THQ/Sj6LX4O8z15AIE5PIOL HCPA== X-Gm-Message-State: AKGB3mJrqQTzntClFEyTnk/M2YR5Nz1RkUoUy75nhQz9ItE7zNHHHVGJ SbUKd8bzunWh7RRxy/6TmGV5rmhB X-Received: by 10.98.237.14 with SMTP id u14mr30623682pfh.170.1514713598714; Sun, 31 Dec 2017 01:46:38 -0800 (PST) Received: from localhost.localdomain (58-7-95-79.dyn.iinet.net.au. [58.7.95.79]) by smtp.gmail.com with ESMTPSA id c2sm13957332pgq.48.2017.12.31.01.46.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 31 Dec 2017 01:46:37 -0800 (PST) From: misty@brew.sh To: ffmpeg-devel@ffmpeg.org Date: Sun, 31 Dec 2017 17:46:05 +0800 Message-Id: <20171231094607.68768-5-misty@brew.sh> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171231094607.68768-1-misty@brew.sh> References: <20171227005143.GV4926@michaelspb> <20171231094607.68768-1-misty@brew.sh> Subject: [FFmpeg-devel] [PATCH 4/6] Fix detecting ATRAC3 audio from MPS files 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: Misty De Meo MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Misty De Meo MPS files are MPEG files used on PSP Video discs. They lack the PSMF header used by .pms files, and so the special casing in the original patch fails to support their audio. This patch fixes this by unconditionally reading a new byte for the startcode for PRIVATE_STREAM_1 sections, and doing the comparison on that to find ATRAC-3 streams. In my testing, it works fine for both MPS and PSMF files. --- Changelog | 1 + libavformat/mpeg.c | 38 ++++++++++++++------------------------ libavformat/mpeg.h | 1 + 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/Changelog b/Changelog index ee48876128..67f28ea839 100644 --- a/Changelog +++ b/Changelog @@ -27,6 +27,7 @@ version : - video setrange filter - nsp demuxer - support LibreSSL (via libtls) +- ATRAC-3 support for Sony PSP MPEG files version 3.4: diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 895c6fb231..a366ece0ed 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -128,7 +128,6 @@ typedef struct MpegDemuxContext { int sofdec; int dvd; int imkh_cctv; - int sony_psmf; // true if Play Station Movie file signature is present #if CONFIG_VOBSUB_DEMUXER AVFormatContext *sub_ctx; FFDemuxSubtitlesQueue q[32]; @@ -148,8 +147,6 @@ static int mpegps_read_header(AVFormatContext *s) avio_get_str(s->pb, 6, buffer, sizeof(buffer)); if (!memcmp("IMKH", buffer, 4)) { m->imkh_cctv = 1; - } else if (!memcmp("PSMF00", buffer, 6)) { - m->sony_psmf = 1; } else if (!memcmp("Sofdec", buffer, 6)) { m->sofdec = 1; } else @@ -444,7 +441,7 @@ redo: goto redo; } - if (startcode == PRIVATE_STREAM_1 && !m->sony_psmf) { + if (startcode == PRIVATE_STREAM_1) { startcode = avio_r8(s->pb); len--; } @@ -544,28 +541,21 @@ redo: else request_probe= 1; type = AVMEDIA_TYPE_VIDEO; - } else if (startcode == PRIVATE_STREAM_1 && m->sony_psmf) { - uint8_t stream_id; - - if (len < 2) - goto skip; - stream_id = avio_r8(s->pb); + // Sony PSP video with ATRAC-3 audio + } else if (!(startcode & STREAM_TYPE_AUDIO_ATRAC3)) { avio_r8(s->pb); // skip padding - len -= 2; - if (!(stream_id & 0xF0)) { // seems like we got an ATRAC stream - /* check if an appropriate stream already exists */ - for (i = 0; i < s->nb_streams; i++) { - st = s->streams[i]; - if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && - st->codec->codec_id == AV_CODEC_ID_ATRAC3P && - st->id - 0x1BD0 == (stream_id & 0xF)) - goto found; - } - - startcode = 0x1BD0 + (stream_id & 0xF); - type = AVMEDIA_TYPE_AUDIO; - codec_id = AV_CODEC_ID_ATRAC3P; + len--; + for (i = 0; i < s->nb_streams; i++) { + st = s->streams[i]; + if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && + st->codec->codec_id == AV_CODEC_ID_ATRAC3P && + st->id - 0x1BD0 == (startcode & 0xF)) + goto found; } + + startcode = 0x1BD0 + (startcode & 0xF); + type = AVMEDIA_TYPE_AUDIO; + codec_id = AV_CODEC_ID_ATRAC3P; } else if (startcode == PRIVATE_STREAM_2) { type = AVMEDIA_TYPE_DATA; codec_id = AV_CODEC_ID_DVD_NAV; diff --git a/libavformat/mpeg.h b/libavformat/mpeg.h index 617e36cba8..efbadec8ba 100644 --- a/libavformat/mpeg.h +++ b/libavformat/mpeg.h @@ -58,6 +58,7 @@ #define STREAM_TYPE_VIDEO_CAVS 0x42 #define STREAM_TYPE_AUDIO_AC3 0x81 +#define STREAM_TYPE_AUDIO_ATRAC3 0xF0 static const int lpcm_freq_tab[4] = { 48000, 96000, 44100, 32000 };