From patchwork Mon Dec 25 02:28:32 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: 6953 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.79.195 with SMTP id r64csp5294226jad; Sun, 24 Dec 2017 18:29:38 -0800 (PST) X-Google-Smtp-Source: ACJfBotdc2NFP6o13kH4W+x0OM/5OQxHz+sJIUiYIT/IK4ds9ZZUZ1lMow9/zBMPALfp62IPfOsW X-Received: by 10.28.74.147 with SMTP id n19mr19326681wmi.134.1514168978715; Sun, 24 Dec 2017 18:29:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514168978; cv=none; d=google.com; s=arc-20160816; b=0IZ5EZuD5l5wjztQGT0YMZ4rKUZ7ciO2pu5S5fcDm1tFSm/SP8lPLIr6HsOZ6fbyeB IuIKegyyn/qn/OOoTLg35cPWFxZUDND5d/0oB6NZKs1QBg4BXYmPW5rsE8K9UDlRRi4+ /wJfKny43lYoRs1Q69MVJ1FbzmBly9IRSbaVHXbyG73i8ZbOb6mB+d4toezJDd3sC+TQ AejliqJPxPz7jPgbWrT+s0EijO8ulNOJr/pWR6Z7xbD3xoZZu9WX1FfF2nTSUyz4pciH u3PxREikayvcdCz5JUGJvxR/qgBEB9zX4duvNMvQuLEF1TGYfW5MzGxp5zwNmaI+MgKk zCdQ== 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=wYe7PKWuvpkp+WvQSGEWAnXnL1WVJouI+ScUiKxCEsJjuosDtl5lGPw7m7X2BFTdN/ YsrfwQpPGSoYCbOxx+MutlDjETPrDD1vxQMfyc7xhp/EjTnU+dlya/itTjz9qf+bxEVY EpaQpXmYypPjRlRWBYgOp4A+Otetr22MZVpcOAg6fZZDs+M3XK6p9E9B12y/Acu+Hs8N tLjTjZasloCh0WS+v/Gi3zypWL5dZTnGGQIooKOrl1ZxiRl4a/WTOS5PjAZad4XpE7fx 7uHwANODlnG0XXip2ikY3F9Q+MQlNOne1/RyMJwX5A8hE0xGWSCXlIcK8CmIUAAeiPHY v8pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=gN2qM+8t; 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 w88si16497386wrc.335.2017.12.24.18.29.38; Sun, 24 Dec 2017 18:29:38 -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=gN2qM+8t; 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 36F37688292; Mon, 25 Dec 2017 04:29:01 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl0-f50.google.com (mail-pl0-f50.google.com [209.85.160.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B69768096F for ; Mon, 25 Dec 2017 04:28:54 +0200 (EET) Received: by mail-pl0-f50.google.com with SMTP id 62so14639094pld.7 for ; Sun, 24 Dec 2017 18:29:07 -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=gN2qM+8tQLdz7ozgOA/T+Qycr4AXK15vvqjm9UJ4UnDpOmCVfHtDXAbGdUo0zmkTXa iyKogZ2N8EqUq9Nv0R7HWnAjHNITLQOJnwUilnpSHVg5KFvmV/YpkUxjPR0rcrBOPYIv 2hcj8Q+1qmct//QWw7JLS2llm6XYO61r8K1A01W1OyKlnsO3oyNDRLUxLIk697A2r0XA ZwFIMXC3SSmHoJStCEURw0M43CUwsGyfK/85B4Wq2sqqMLxIlBPkARvyjU0GLIBYHwIK GmgjgepY7K7FKAFlH8rUU/ilL0qFLHHj67whOKoX0aMVQlamVeCgzxu5JUcNStCLC+Zx KT0g== 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=Uerc79fArdhIJw+Q0+9/PTu0sJCZ/UoGNy81kk9MdNsO6T2oMOJ1B04IgQ8DDoITa8 MHTcqCosEY4zckbeJHYIh4QQ9h+pLitLHt8qL11C7NXCxkUolPej5JKG5iye7YhEhg8j HkaopEeOQNFNek+CHHCbF12/rBZx60nyQqx8E7tnw1vDTde0VCXnUmCRaNFksd3xL3Gj Vd0sh1DZL7BoKxslqBhTPNtSFQCEz24SerASwGaTTSwnZy1sBDX7RSHV72SDTqs+e4C8 FQU/XuPiamPgPt6hfV2JF9LrT+mnDtpgAEdyB+Hkojc8IRq4UCR7npE69ovCnNB3E7rV Q3kg== X-Gm-Message-State: AKGB3mK6pho3R8RNvvp1kzuvVqXbEJCG8HYuvaq/DTMIsa2PGbh6YycC yTaWZOYG5OtGNoTC10qGbW5YTto0 X-Received: by 10.159.230.16 with SMTP id u16mr21269595plq.41.1514168945774; Sun, 24 Dec 2017 18:29:05 -0800 (PST) Received: from localhost.localdomain (124-148-94-180.dyn.iinet.net.au. [124.148.94.180]) by smtp.gmail.com with ESMTPSA id n22sm27888708pgc.76.2017.12.24.18.29.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 24 Dec 2017 18:29:05 -0800 (PST) From: misty@brew.sh To: ffmpeg-devel@ffmpeg.org Date: Mon, 25 Dec 2017 10:28:32 +0800 Message-Id: <20171225022834.33865-5-misty@brew.sh> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171225022834.33865-1-misty@brew.sh> References: <20171225022834.33865-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 };