From 7817adba9347b0468dd3da47e70ca442ced55514 Mon Sep 17 00:00:00 2001 From: roytam1 Date: Fri, 10 Jan 2025 22:50:50 +0800 Subject: [PATCH] import from UXP: Issue #2673 - Part 4: Hook up the ADTS sniffer + raw AAC MIME type. (d63a56ad) --- netwerk/mime/nsMimeTypes.h | 1 + toolkit/components/mediasniffer/nsMediaSniffer.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/netwerk/mime/nsMimeTypes.h b/netwerk/mime/nsMimeTypes.h index aba444de2..41950a7e7 100644 --- a/netwerk/mime/nsMimeTypes.h +++ b/netwerk/mime/nsMimeTypes.h @@ -88,6 +88,7 @@ #define AUDIO_3GPP2 "audio/3gpp2" #define AUDIO_MIDI "audio/x-midi" #define AUDIO_MATROSKA "audio/x-matroska" +#define AUDIO_AAC "audio/aac" #define BINARY_OCTET_STREAM "binary/octet-stream" diff --git a/toolkit/components/mediasniffer/nsMediaSniffer.cpp b/toolkit/components/mediasniffer/nsMediaSniffer.cpp index e9dc5dbd5..d00dea894 100644 --- a/toolkit/components/mediasniffer/nsMediaSniffer.cpp +++ b/toolkit/components/mediasniffer/nsMediaSniffer.cpp @@ -3,6 +3,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include "ADTSDemuxer.h" #include "FlacDemuxer.h" #include "mozilla/ArrayUtils.h" #include "mozilla/ModuleUtils.h" @@ -125,6 +126,11 @@ MatchesFLAC(const uint8_t* aData, const uint32_t aLength) { return mozilla::FlacDemuxer::FlacSniffer(aData, aLength); } +static bool MatchesADTS(const uint8_t* aData, const uint32_t aLength) +{ + return mozilla::ADTSDemuxer::ADTSSniffer(aData, aLength); +} + NS_IMETHODIMP nsMediaSniffer::GetMIMETypeFromContent(nsIRequest* aRequest, const uint8_t* aData, @@ -183,6 +189,13 @@ nsMediaSniffer::GetMIMETypeFromContent(nsIRequest* aRequest, return NS_OK; } + // Note: Sniff for ADTS content before flac. + // The flac decoder can easily produce false negatives. + if (MatchesADTS(aData, clampedLength)) { + aSniffedType.AssignLiteral(AUDIO_AAC); + return NS_OK; + } + // Flac frames are generally big, often in excess of 24kB. // Using a size of MAX_BYTES_SNIFFED effectively means that we will only // recognize flac content if it starts with a frame.