summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-03-28 21:03:14 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-03-28 23:54:51 +0100
commit067a9cf81a7805d7ed026948298fa897c65fba89 (patch)
tree65142331e0b98688c48c04ded12c0bb982c04d5c /libavformat
parentde96e20be959f4df9b8539da0dcc41db5167790e (diff)
avformat/img2dec: make image2dec capable to be used from seperate demuxers
Reviewed-by: wm4 <nfxjfg@googlemail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/img2.h61
-rw-r--r--libavformat/img2dec.c44
2 files changed, 72 insertions, 33 deletions
diff --git a/libavformat/img2.h b/libavformat/img2.h
new file mode 100644
index 0000000000..dc53c5cc51
--- /dev/null
+++ b/libavformat/img2.h
@@ -0,0 +1,61 @@
+/*
+ * Image format
+ * Copyright (c) 2014 Michael Niedermayer
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVFORMAT_IMG2_H
+#define AVFORMAT_IMG2_H
+
+#include <stdint.h>
+#include "avformat.h"
+
+#if HAVE_GLOB
+#include <glob.h>
+#endif
+
+typedef struct {
+ const AVClass *class; /**< Class for private options. */
+ int img_first;
+ int img_last;
+ int img_number;
+ int64_t pts;
+ int img_count;
+ int is_pipe;
+ int split_planes; /**< use independent file for each Y, U, V plane */
+ char path[1024];
+ char *pixel_format; /**< Set by a private option. */
+ int width, height; /**< Set by a private option. */
+ AVRational framerate; /**< Set by a private option. */
+ int loop;
+ enum { PT_GLOB_SEQUENCE, PT_GLOB, PT_SEQUENCE } pattern_type;
+ int use_glob;
+#if HAVE_GLOB
+ glob_t globstate;
+#endif
+ int start_number;
+ int start_number_range;
+ int frame_size;
+ int ts_from_file;
+} VideoDemuxData;
+
+int ff_img_read_header(AVFormatContext *s1);
+
+int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt);
+
+#endif
diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c
index 5163e69f65..026fd5f14b 100644
--- a/libavformat/img2dec.c
+++ b/libavformat/img2dec.c
@@ -28,9 +28,9 @@
#include "libavutil/parseutils.h"
#include "avformat.h"
#include "internal.h"
-#if HAVE_GLOB
-#include <glob.h>
+#include "img2.h"
+#if HAVE_GLOB
/* Locally define as 0 (bitwise-OR no-op) any missing glob options that
are non-posix glibc/bsd extensions. */
#ifndef GLOB_NOMAGIC
@@ -42,31 +42,6 @@
#endif /* HAVE_GLOB */
-typedef struct {
- const AVClass *class; /**< Class for private options. */
- int img_first;
- int img_last;
- int img_number;
- int64_t pts;
- int img_count;
- int is_pipe;
- int split_planes; /**< use independent file for each Y, U, V plane */
- char path[1024];
- char *pixel_format; /**< Set by a private option. */
- int width, height; /**< Set by a private option. */
- AVRational framerate; /**< Set by a private option. */
- int loop;
- enum { PT_GLOB_SEQUENCE, PT_GLOB, PT_SEQUENCE } pattern_type;
- int use_glob;
-#if HAVE_GLOB
- glob_t globstate;
-#endif
- int start_number;
- int start_number_range;
- int frame_size;
- int ts_from_file;
-} VideoDemuxData;
-
static const int sizes[][2] = {
{ 640, 480 },
{ 720, 480 },
@@ -192,7 +167,7 @@ static int img_read_probe(AVProbeData *p)
return 0;
}
-static int img_read_header(AVFormatContext *s1)
+int ff_img_read_header(AVFormatContext *s1)
{
VideoDemuxData *s = s1->priv_data;
int first_index, last_index;
@@ -313,6 +288,9 @@ static int img_read_header(AVFormatContext *s1)
} else if (s1->audio_codec_id) {
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
st->codec->codec_id = s1->audio_codec_id;
+ } else if (s1->iformat->raw_codec_id) {
+ st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
+ st->codec->codec_id = s1->iformat->raw_codec_id;
} else {
const char *str = strrchr(s->path, '.');
s->split_planes = str && !av_strcasecmp(str + 1, "y");
@@ -328,7 +306,7 @@ static int img_read_header(AVFormatContext *s1)
return 0;
}
-static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
+int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt)
{
VideoDemuxData *s = s1->priv_data;
char filename_bytes[1024];
@@ -483,8 +461,8 @@ AVInputFormat ff_image2_demuxer = {
.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
.priv_data_size = sizeof(VideoDemuxData),
.read_probe = img_read_probe,
- .read_header = img_read_header,
- .read_packet = img_read_packet,
+ .read_header = ff_img_read_header,
+ .read_packet = ff_img_read_packet,
.read_close = img_read_close,
.read_seek = img_read_seek,
.flags = AVFMT_NOFILE,
@@ -502,8 +480,8 @@ AVInputFormat ff_image2pipe_demuxer = {
.name = "image2pipe",
.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
.priv_data_size = sizeof(VideoDemuxData),
- .read_header = img_read_header,
- .read_packet = img_read_packet,
+ .read_header = ff_img_read_header,
+ .read_packet = ff_img_read_packet,
.priv_class = &img2pipe_class,
};
#endif