Commit fb135139 authored by tab's avatar tab Committed by Michael Niedermayer

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: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent b480f0e3
...@@ -22,13 +22,9 @@ ...@@ -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) ...@@ -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 { ...@@ -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 @@ ...@@ -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) ...@@ -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 = { ...@@ -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 = { ...@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment