diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-03-28 21:03:14 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-03-28 23:54:51 +0100 |
commit | 067a9cf81a7805d7ed026948298fa897c65fba89 (patch) | |
tree | 65142331e0b98688c48c04ded12c0bb982c04d5c /libavformat | |
parent | de96e20be959f4df9b8539da0dcc41db5167790e (diff) | |
download | ffmpeg-067a9cf81a7805d7ed026948298fa897c65fba89.tar.gz |
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.h | 61 | ||||
-rw-r--r-- | libavformat/img2dec.c | 44 |
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 |