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>
pull/64/head
Michael Niedermayer 11 years ago
parent de96e20be9
commit 067a9cf81a
  1. 61
      libavformat/img2.h
  2. 44
      libavformat/img2dec.c

@ -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

@ -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

Loading…
Cancel
Save