blob: 4f23e2278c1721597e2b756171b65866bdc149c5 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_BASE_MIME_UTIL_H_
#define MEDIA_BASE_MIME_UTIL_H_
#include <string>
#include <vector>
#include "base/strings/string_piece_forward.h"
#include "media/base/audio_codecs.h"
#include "media/base/media_export.h"
#include "media/base/video_codecs.h"
namespace media {
// Check to see if a particular MIME type is in the list of
// supported/recognized MIME types.
MEDIA_EXPORT bool IsSupportedMediaMimeType(base::StringPiece mime_type);
// Splits |codecs| separated by comma into |codecs_out|. Codecs in |codecs| may
// or may not be quoted. For example, "\"aaa.b.c,dd.eee\"" and "aaa.b.c,dd.eee"
// will both be split into {"aaa.b.c", "dd.eee"}.
// See http://www.ietf.org/rfc/rfc4281.txt.
MEDIA_EXPORT void SplitCodecs(base::StringPiece,
std::vector<std::string>* codecs_out);
// Strips the profile and level info from |codecs| in place. For example,
// {"aaa.b.c", "dd.eee"} will be strip into {"aaa", "dd"}.
// See http://www.ietf.org/rfc/rfc4281.txt.
MEDIA_EXPORT void StripCodecs(std::vector<std::string>* codecs);
// Returns true if successfully parsed the given |mime_type| and |codec_id|,
// setting |out_*| arguments to the parsed video codec, profile, and level.
// Empty string |mime_type| indicates "no mime type". |mime_type| should be
// provided whenever available for parsing and validation in combination with
// |codec_id|. |out_is_ambiguous| will be true when the codec string is
// incomplete such that some guessing was required to decide the codec, profile,
// or level.
//
// Returns false if parsing fails (invalid string, or unrecognized video codec),
// in which case values for |out_*| arguments are undefined.
MEDIA_EXPORT bool ParseVideoCodecString(base::StringPiece mime_type,
base::StringPiece codec_id,
bool* out_is_ambiguous,
VideoCodec* out_codec,
VideoCodecProfile* out_profile,
uint8_t* out_level,
VideoColorSpace* out_colorspace);
// Returns true if successfully parsed the given |mime_type| and |codec_id|,
// setting |out_audio_codec| to found codec. Empty string |mime_type| indicates
// "no mime type". |mime_type| should be provided whenever available for parsing
// and validation in combination with |codec_id|. |out_is_ambiguous| will be
// true when the codec string is incomplete such that some guessing was required
// to decide the codec.
//
// Returns false if parsing fails (invalid string, or unrecognized audio codec),
// in which case values for |out_*| arguments are undefined.
MEDIA_EXPORT bool ParseAudioCodecString(base::StringPiece mime_type,
base::StringPiece codec_id,
bool* out_is_ambiguous,
AudioCodec* out_codec);
// Indicates that the MIME type and (possible codec string) are supported.
enum class SupportsType {
// The given MIME type and codec combination is not supported.
kNotSupported,
// The given MIME type and codec combination is supported.
kSupported,
// There's not enough information to determine if the given MIME type and
// codec combination can be rendered or not before actually trying to play it.
kMaybeSupported
};
// Checks the |mime_type| and |codecs| against the MIME types known to support
// only a particular subset of codecs.
// * Returns kSupported if the |mime_type| is supported and all the codecs
// within the |codecs| are supported for the |mime_type|.
// * Returns kMaybeSupported if the |mime_type| is supported and is known to
// support only a subset of codecs, but |codecs| was empty. Also returned if
// all the codecs in |codecs| are supported, but additional codec parameters
// were supplied (such as profile) for which the support cannot be decided.
// * Returns kNotSupported if either the |mime_type| is not supported or the
// |mime_type| is supported but at least one of the codecs within |codecs| is
// not supported for the |mime_type|.
MEDIA_EXPORT SupportsType
IsSupportedMediaFormat(base::StringPiece mime_type,
const std::vector<std::string>& codecs);
// Similar to the above, but for encrypted formats.
MEDIA_EXPORT SupportsType
IsSupportedEncryptedMediaFormat(base::StringPiece mime_type,
const std::vector<std::string>& codecs);
} // namespace media
#endif // MEDIA_BASE_MIME_UTIL_H_