lavf: add avformat_query_codec().

It allows to check if a given codec can be written into a container.
This commit is contained in:
Anton Khirnov 2011-08-11 20:34:45 +02:00
parent bca06e77e1
commit 48f9e457ea
3 changed files with 35 additions and 0 deletions

View File

@ -13,6 +13,9 @@ libavutil: 2011-04-18
API changes, most recent first:
2011-08-xx - xxxxxxx - lavf 53.4.0
Add avformat_query_codec().
2011-08-xx - xxxxxxx - lavc 53.8.0
Add avcodec_get_type().

View File

@ -322,6 +322,14 @@ typedef struct AVOutputFormat {
const AVClass *priv_class; ///< AVClass for the private context
/**
* Test if the given codec can be stored in this container.
*
* @return 1 if the codec is supported, 0 if it is not.
* A negative number if unknown.
*/
int (*query_codec)(enum CodecID id, int std_compliance);
/* private fields */
struct AVOutputFormat *next;
} AVOutputFormat;
@ -1595,4 +1603,14 @@ attribute_deprecated int avf_sdp_create(AVFormatContext *ac[], int n_files, char
*/
int av_match_ext(const char *filename, const char *extensions);
/**
* Test if the given container can store a codec.
*
* @param std_compliance standards compliance level, one of FF_COMPLIANCE_*
*
* @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot.
* A negative number if this information is not available.
*/
int avformat_query_codec(AVOutputFormat *ofmt, enum CodecID codec_id, int std_compliance);
#endif /* AVFORMAT_AVFORMAT_H */

View File

@ -3904,3 +3904,17 @@ int64_t ff_iso8601_to_unix_time(const char *datestr)
return 0;
#endif
}
int avformat_query_codec(AVOutputFormat *ofmt, enum CodecID codec_id, int std_compliance)
{
if (ofmt) {
if (ofmt->query_codec)
return ofmt->query_codec(codec_id, std_compliance);
else if (ofmt->codec_tag)
return !!av_codec_get_tag(ofmt->codec_tag, codec_id);
else if (codec_id == ofmt->video_codec || codec_id == ofmt->audio_codec ||
codec_id == ofmt->subtitle_codec)
return 1;
}
return AVERROR_PATCHWELCOME;
}