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>
This commit is contained in:
parent
de96e20be9
commit
067a9cf81a
61
libavformat/img2.h
Normal file
61
libavformat/img2.h
Normal file
@ -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 "libavutil/parseutils.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#if HAVE_GLOB
|
#include "img2.h"
|
||||||
#include <glob.h>
|
|
||||||
|
|
||||||
|
#if HAVE_GLOB
|
||||||
/* Locally define as 0 (bitwise-OR no-op) any missing glob options that
|
/* Locally define as 0 (bitwise-OR no-op) any missing glob options that
|
||||||
are non-posix glibc/bsd extensions. */
|
are non-posix glibc/bsd extensions. */
|
||||||
#ifndef GLOB_NOMAGIC
|
#ifndef GLOB_NOMAGIC
|
||||||
@ -42,31 +42,6 @@
|
|||||||
|
|
||||||
#endif /* HAVE_GLOB */
|
#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] = {
|
static const int sizes[][2] = {
|
||||||
{ 640, 480 },
|
{ 640, 480 },
|
||||||
{ 720, 480 },
|
{ 720, 480 },
|
||||||
@ -192,7 +167,7 @@ static int img_read_probe(AVProbeData *p)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int img_read_header(AVFormatContext *s1)
|
int ff_img_read_header(AVFormatContext *s1)
|
||||||
{
|
{
|
||||||
VideoDemuxData *s = s1->priv_data;
|
VideoDemuxData *s = s1->priv_data;
|
||||||
int first_index, last_index;
|
int first_index, last_index;
|
||||||
@ -313,6 +288,9 @@ static int img_read_header(AVFormatContext *s1)
|
|||||||
} else if (s1->audio_codec_id) {
|
} else if (s1->audio_codec_id) {
|
||||||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||||
st->codec->codec_id = s1->audio_codec_id;
|
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 {
|
} else {
|
||||||
const char *str = strrchr(s->path, '.');
|
const char *str = strrchr(s->path, '.');
|
||||||
s->split_planes = str && !av_strcasecmp(str + 1, "y");
|
s->split_planes = str && !av_strcasecmp(str + 1, "y");
|
||||||
@ -328,7 +306,7 @@ static int img_read_header(AVFormatContext *s1)
|
|||||||
return 0;
|
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;
|
VideoDemuxData *s = s1->priv_data;
|
||||||
char filename_bytes[1024];
|
char filename_bytes[1024];
|
||||||
@ -483,8 +461,8 @@ AVInputFormat ff_image2_demuxer = {
|
|||||||
.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
|
.long_name = NULL_IF_CONFIG_SMALL("image2 sequence"),
|
||||||
.priv_data_size = sizeof(VideoDemuxData),
|
.priv_data_size = sizeof(VideoDemuxData),
|
||||||
.read_probe = img_read_probe,
|
.read_probe = img_read_probe,
|
||||||
.read_header = img_read_header,
|
.read_header = ff_img_read_header,
|
||||||
.read_packet = img_read_packet,
|
.read_packet = ff_img_read_packet,
|
||||||
.read_close = img_read_close,
|
.read_close = img_read_close,
|
||||||
.read_seek = img_read_seek,
|
.read_seek = img_read_seek,
|
||||||
.flags = AVFMT_NOFILE,
|
.flags = AVFMT_NOFILE,
|
||||||
@ -502,8 +480,8 @@ AVInputFormat ff_image2pipe_demuxer = {
|
|||||||
.name = "image2pipe",
|
.name = "image2pipe",
|
||||||
.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
|
.long_name = NULL_IF_CONFIG_SMALL("piped image2 sequence"),
|
||||||
.priv_data_size = sizeof(VideoDemuxData),
|
.priv_data_size = sizeof(VideoDemuxData),
|
||||||
.read_header = img_read_header,
|
.read_header = ff_img_read_header,
|
||||||
.read_packet = img_read_packet,
|
.read_packet = ff_img_read_packet,
|
||||||
.priv_class = &img2pipe_class,
|
.priv_class = &img2pipe_class,
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user