You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
avformat: implement query_codec for the image2 muxer.
Allows avformat_query_codec to be used to check for valid image2 encoders. Reuses the existing ff_guess_image2_codec ID table. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -22,13 +22,9 @@
|
|||||||
|
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
#include "img2.h"
|
||||||
|
|
||||||
typedef struct IdStrMap {
|
const IdStrMap ff_img_tags[] = {
|
||||||
enum AVCodecID id;
|
|
||||||
const char *str;
|
|
||||||
} IdStrMap;
|
|
||||||
|
|
||||||
static const IdStrMap img_tags[] = {
|
|
||||||
{ AV_CODEC_ID_MJPEG, "jpeg" },
|
{ AV_CODEC_ID_MJPEG, "jpeg" },
|
||||||
{ AV_CODEC_ID_MJPEG, "jpg" },
|
{ AV_CODEC_ID_MJPEG, "jpg" },
|
||||||
{ AV_CODEC_ID_MJPEG, "jps" },
|
{ AV_CODEC_ID_MJPEG, "jps" },
|
||||||
@@ -103,5 +99,5 @@ static enum AVCodecID av_str2id(const IdStrMap *tags, const char *str)
|
|||||||
|
|
||||||
enum AVCodecID ff_guess_image2_codec(const char *filename)
|
enum AVCodecID ff_guess_image2_codec(const char *filename)
|
||||||
{
|
{
|
||||||
return av_str2id(img_tags, filename);
|
return av_str2id(ff_img_tags, filename);
|
||||||
}
|
}
|
||||||
|
@@ -62,6 +62,13 @@ typedef struct VideoDemuxData {
|
|||||||
int ts_from_file;
|
int ts_from_file;
|
||||||
} VideoDemuxData;
|
} VideoDemuxData;
|
||||||
|
|
||||||
|
typedef struct IdStrMap {
|
||||||
|
enum AVCodecID id;
|
||||||
|
const char *str;
|
||||||
|
} IdStrMap;
|
||||||
|
|
||||||
|
extern const IdStrMap ff_img_tags[];
|
||||||
|
|
||||||
extern const AVOption ff_img_options[];
|
extern const AVOption ff_img_options[];
|
||||||
|
|
||||||
int ff_img_read_header(AVFormatContext *s1);
|
int ff_img_read_header(AVFormatContext *s1);
|
||||||
|
@@ -30,6 +30,7 @@
|
|||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
#include "avio_internal.h"
|
#include "avio_internal.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
#include "img2.h"
|
||||||
|
|
||||||
typedef struct VideoMuxData {
|
typedef struct VideoMuxData {
|
||||||
const AVClass *class; /**< Class for private options. */
|
const AVClass *class; /**< Class for private options. */
|
||||||
@@ -172,6 +173,17 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int query_codec(enum AVCodecID id, int std_compliance)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; ff_img_tags[i].id != AV_CODEC_ID_NONE; i++)
|
||||||
|
if (ff_img_tags[i].id == id)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
// Anything really can be stored in img2
|
||||||
|
return std_compliance < FF_COMPLIANCE_NORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
#define OFFSET(x) offsetof(VideoMuxData, x)
|
#define OFFSET(x) offsetof(VideoMuxData, x)
|
||||||
#define ENC AV_OPT_FLAG_ENCODING_PARAM
|
#define ENC AV_OPT_FLAG_ENCODING_PARAM
|
||||||
static const AVOption muxoptions[] = {
|
static const AVOption muxoptions[] = {
|
||||||
@@ -200,6 +212,7 @@ AVOutputFormat ff_image2_muxer = {
|
|||||||
.video_codec = AV_CODEC_ID_MJPEG,
|
.video_codec = AV_CODEC_ID_MJPEG,
|
||||||
.write_header = write_header,
|
.write_header = write_header,
|
||||||
.write_packet = write_packet,
|
.write_packet = write_packet,
|
||||||
|
.query_codec = query_codec,
|
||||||
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS | AVFMT_NOFILE,
|
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS | AVFMT_NOFILE,
|
||||||
.priv_class = &img2mux_class,
|
.priv_class = &img2mux_class,
|
||||||
};
|
};
|
||||||
@@ -212,6 +225,7 @@ AVOutputFormat ff_image2pipe_muxer = {
|
|||||||
.video_codec = AV_CODEC_ID_MJPEG,
|
.video_codec = AV_CODEC_ID_MJPEG,
|
||||||
.write_header = write_header,
|
.write_header = write_header,
|
||||||
.write_packet = write_packet,
|
.write_packet = write_packet,
|
||||||
|
.query_codec = query_codec,
|
||||||
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS
|
.flags = AVFMT_NOTIMESTAMPS | AVFMT_NODIMENSIONS
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user