mirror of https://github.com/mpv-player/mpv
demux: change signature of open functions, cleanups
Preparation for redoing the open functions.
This commit is contained in:
parent
3a7fa5b186
commit
d17d2fdc7c
|
@ -72,7 +72,7 @@ const demuxer_desc_t *const demuxer_list[] = {
|
|||
#ifdef CONFIG_TV
|
||||
&demuxer_desc_tv,
|
||||
#endif
|
||||
#ifdef CONFIG_LIBASS
|
||||
#ifdef CONFIG_ASS
|
||||
&demuxer_desc_libass,
|
||||
#endif
|
||||
&demuxer_desc_matroska,
|
||||
|
@ -594,16 +594,14 @@ static struct demuxer *open_given_type(struct MPOpts *opts,
|
|||
struct demuxer_params *params)
|
||||
{
|
||||
struct demuxer *demuxer;
|
||||
int fformat;
|
||||
int fformat = desc->type;
|
||||
mp_msg(MSGT_DEMUXER, MSGL_V, "Trying demuxer: %s\n", desc->name);
|
||||
demuxer = new_demuxer(opts, stream, desc->type, filename);
|
||||
demuxer->params = params;
|
||||
if (desc->check_file)
|
||||
fformat = desc->check_file(demuxer);
|
||||
else
|
||||
fformat = desc->type;
|
||||
if (force)
|
||||
fformat = desc->type;
|
||||
if (!force) {
|
||||
if (desc->check_file)
|
||||
fformat = desc->check_file(demuxer) >= 0 ? fformat : 0;
|
||||
}
|
||||
if (fformat == 0)
|
||||
goto fail;
|
||||
if (fformat == desc->type) {
|
||||
|
@ -614,15 +612,12 @@ static struct demuxer *open_given_type(struct MPOpts *opts,
|
|||
mp_tmsg(MSGT_DEMUXER, MSGL_INFO, "Detected file format: %s\n",
|
||||
desc->shortdesc);
|
||||
if (demuxer->desc->open) {
|
||||
struct demuxer *demux2 = demuxer->desc->open(demuxer);
|
||||
if (!demux2) {
|
||||
int ret = demuxer->desc->open(demuxer);
|
||||
if (ret < 0) {
|
||||
mp_tmsg(MSGT_DEMUXER, MSGL_ERR, "Opening as detected format "
|
||||
"\"%s\" failed.\n", desc->shortdesc);
|
||||
goto fail;
|
||||
}
|
||||
/* At least demux_mov can return a demux_demuxers instance
|
||||
* from open() instead of the original fed in. */
|
||||
demuxer = demux2;
|
||||
}
|
||||
demuxer->file_format = fformat;
|
||||
if (stream_manages_timeline(demuxer->stream)) {
|
||||
|
|
|
@ -105,19 +105,15 @@ typedef struct demuxer_desc {
|
|||
// If 1 detection is safe and fast, do it before file extension check
|
||||
int safe_check;
|
||||
|
||||
// Check if can demux the file, return DEMUXER_TYPE_xxx on success
|
||||
// Mandatory if safe_check == 1, else optional
|
||||
// Return 0 on success, otherwise -1
|
||||
int (*check_file)(struct demuxer *demuxer);
|
||||
/// Get packets from file, return 0 on eof. Mandatory
|
||||
int (*fill_buffer)(struct demuxer *demuxer);
|
||||
/// Open the demuxer, return demuxer on success, NULL on failure
|
||||
struct demuxer *(*open)(struct demuxer *demuxer); // Optional
|
||||
/// Close the demuxer
|
||||
void (*close)(struct demuxer *demuxer); // Optional
|
||||
// Seek. Optional
|
||||
// Open the demuxer, return 0 on success, otherwise -1
|
||||
int (*open)(struct demuxer *demuxer);
|
||||
// The following functions are all optional
|
||||
int (*fill_buffer)(struct demuxer *demuxer); // 0 on EOF, otherwise 1
|
||||
void (*close)(struct demuxer *demuxer);
|
||||
void (*seek)(struct demuxer *demuxer, float rel_seek_secs,
|
||||
float audio_delay, int flags);
|
||||
// Various control functions. Optional
|
||||
int (*control)(struct demuxer *demuxer, int cmd, void *arg);
|
||||
} demuxer_desc_t;
|
||||
|
||||
|
|
|
@ -35,16 +35,16 @@ static int try_open_file(struct demuxer *demuxer)
|
|||
char buf[PROBE_SIZE];
|
||||
int len = stream_read(s, buf, sizeof(buf));
|
||||
if (len <= 0)
|
||||
return 0;
|
||||
return -1;
|
||||
if (!mp_probe_cue((struct bstr) { buf, len }))
|
||||
return 0;
|
||||
return -1;
|
||||
stream_seek(s, 0);
|
||||
demuxer->file_contents = stream_read_complete(s, demuxer, 1000000);
|
||||
if (demuxer->file_contents.start == NULL)
|
||||
return 0;
|
||||
return -1;
|
||||
if (!mp_probe_cue((struct bstr) { buf, len }))
|
||||
return 0;
|
||||
return DEMUXER_TYPE_CUE;
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct demuxer_desc demuxer_desc_cue = {
|
||||
|
|
|
@ -30,14 +30,14 @@ static int try_open_file(struct demuxer *demuxer)
|
|||
const int len = sizeof(header) - 1;
|
||||
char buf[len];
|
||||
if (stream_read(s, buf, len) < len)
|
||||
return 0;
|
||||
return -1;
|
||||
if (strncmp(buf, header, len))
|
||||
return 0;
|
||||
return -1;
|
||||
stream_seek(s, 0);
|
||||
demuxer->file_contents = stream_read_complete(s, demuxer, 1000000);
|
||||
if (demuxer->file_contents.start == NULL)
|
||||
return 0;
|
||||
return DEMUXER_TYPE_EDL;
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct demuxer_desc demuxer_desc_edl = {
|
||||
|
|
|
@ -211,7 +211,7 @@ static int lavf_check_file(demuxer_t *demuxer)
|
|||
if (!sep) {
|
||||
mp_msg(MSGT_DEMUX, MSGL_FATAL,
|
||||
"Must specify filename in 'format:filename' form\n");
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
avdevice_format = talloc_strndup(priv, priv->filename,
|
||||
sep - priv->filename);
|
||||
|
@ -238,12 +238,12 @@ static int lavf_check_file(demuxer_t *demuxer)
|
|||
if (format) {
|
||||
if (strcmp(format, "help") == 0) {
|
||||
list_formats();
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
priv->avif = av_find_input_format(format);
|
||||
if (!priv->avif) {
|
||||
mp_msg(MSGT_DEMUX, MSGL_FATAL, "Unknown lavf format %s\n", format);
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
mp_msg(MSGT_DEMUX, MSGL_INFO, "Forced lavf %s demuxer\n",
|
||||
priv->avif->long_name);
|
||||
|
@ -297,7 +297,7 @@ static int lavf_check_file(demuxer_t *demuxer)
|
|||
if (!priv->avif) {
|
||||
mp_msg(MSGT_HEADER, MSGL_V,
|
||||
"No format found, try lowering probescore.\n");
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
success:
|
||||
|
@ -306,7 +306,7 @@ success:
|
|||
if (!demuxer->filetype)
|
||||
demuxer->filetype = priv->avif->name;
|
||||
|
||||
return DEMUXER_TYPE_LAVF;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool matches_avinputformat_name(struct lavf_priv *priv,
|
||||
|
@ -493,7 +493,7 @@ static void add_metadata(demuxer_t *demuxer, AVDictionary *metadata)
|
|||
demux_info_add(demuxer, t->key, t->value);
|
||||
}
|
||||
|
||||
static demuxer_t *demux_open_lavf(demuxer_t *demuxer)
|
||||
static int demux_open_lavf(demuxer_t *demuxer)
|
||||
{
|
||||
struct MPOpts *opts = demuxer->opts;
|
||||
struct lavfdopts *lavfdopts = &opts->lavfdopts;
|
||||
|
@ -505,7 +505,7 @@ static demuxer_t *demux_open_lavf(demuxer_t *demuxer)
|
|||
|
||||
// do not allow forcing the demuxer
|
||||
if (!priv->avif)
|
||||
return NULL;
|
||||
return -1;
|
||||
|
||||
stream_seek(demuxer->stream, 0);
|
||||
|
||||
|
@ -548,7 +548,7 @@ static demuxer_t *demux_open_lavf(demuxer_t *demuxer)
|
|||
mp_msg(MSGT_HEADER, MSGL_ERR,
|
||||
"Your options /%s/ look like gibberish to me pal\n",
|
||||
lavfdopts->avopt);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -567,14 +567,14 @@ static demuxer_t *demux_open_lavf(demuxer_t *demuxer)
|
|||
if (avformat_open_input(&avfc, priv->filename, priv->avif, NULL) < 0) {
|
||||
mp_msg(MSGT_HEADER, MSGL_ERR,
|
||||
"LAVF_header: avformat_open_input() failed\n");
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
priv->avfc = avfc;
|
||||
if (avformat_find_stream_info(avfc, NULL) < 0) {
|
||||
mp_msg(MSGT_HEADER, MSGL_ERR,
|
||||
"LAVF_header: av_find_stream_info() failed\n");
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
mp_msg(MSGT_HEADER, MSGL_V, "demux_lavf: avformat_find_stream_info() "
|
||||
|
@ -640,7 +640,7 @@ static demuxer_t *demux_open_lavf(demuxer_t *demuxer)
|
|||
#endif
|
||||
demuxer->accurate_seek = !priv->seek_by_bytes;
|
||||
|
||||
return demuxer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int destroy_avpacket(void *pkt)
|
||||
|
@ -899,17 +899,17 @@ static void demux_close_lavf(demuxer_t *demuxer)
|
|||
|
||||
|
||||
const demuxer_desc_t demuxer_desc_lavf = {
|
||||
"libavformat demuxer",
|
||||
"lavf",
|
||||
"libavformat",
|
||||
"Michael Niedermayer",
|
||||
"supports many formats, requires libavformat",
|
||||
DEMUXER_TYPE_LAVF,
|
||||
1,
|
||||
lavf_check_file,
|
||||
demux_lavf_fill_buffer,
|
||||
demux_open_lavf,
|
||||
demux_close_lavf,
|
||||
demux_seek_lavf,
|
||||
demux_lavf_control
|
||||
.info = "libavformat demuxer",
|
||||
.name = "lavf",
|
||||
.shortdesc = "libavformat",
|
||||
.author = "Michael Niedermayer",
|
||||
.comment = "supports many formats, requires libavformat",
|
||||
.type = DEMUXER_TYPE_LAVF,
|
||||
.safe_check = 1,
|
||||
.check_file = lavf_check_file,
|
||||
.fill_buffer = demux_lavf_fill_buffer,
|
||||
.open = demux_open_lavf,
|
||||
.close = demux_close_lavf,
|
||||
.seek = demux_seek_lavf,
|
||||
.control = demux_lavf_control,
|
||||
};
|
||||
|
|
|
@ -41,7 +41,7 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
// library handles mismatch, so make sure everything uses a global handle.
|
||||
ASS_Library *lib = demuxer->params ? demuxer->params->ass_library : NULL;
|
||||
if (!lib)
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
// Probe by loading a part of the beginning of the file with libass.
|
||||
// Incomplete scripts are usually ok, and we hope libass is not verbose
|
||||
|
@ -64,7 +64,7 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
talloc_free(cbuf.start);
|
||||
talloc_free(buf.start);
|
||||
if (!track)
|
||||
return 0;
|
||||
return -1;
|
||||
ass_free_track(track);
|
||||
|
||||
// Actually load the full thing.
|
||||
|
@ -73,7 +73,7 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
if (!buf.start) {
|
||||
mp_tmsg(MSGT_ASS, MSGL_ERR, "Refusing to load subtitle file "
|
||||
"larger than 100 MB: %s\n", demuxer->filename);
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
cbuf = mp_charset_guess_and_conv_to_utf8(buf, user_cp, MP_ICONV_VERBOSE);
|
||||
if (cbuf.start == NULL)
|
||||
|
@ -83,7 +83,7 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
talloc_free(cbuf.start);
|
||||
talloc_free(buf.start);
|
||||
if (!track)
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
track->name = strdup(demuxer->filename);
|
||||
|
||||
|
@ -96,7 +96,7 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
sh->sub->track = track;
|
||||
sh->codec = "ass";
|
||||
|
||||
return DEMUXER_TYPE_LIBASS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void d_close(struct demuxer *demuxer)
|
||||
|
|
|
@ -187,14 +187,15 @@ static mf_t *open_mf(demuxer_t *demuxer)
|
|||
static int demux_check_file(demuxer_t *demuxer)
|
||||
{
|
||||
if (demuxer->stream->type == STREAMTYPE_MF)
|
||||
return DEMUXER_TYPE_MF;
|
||||
return 0;
|
||||
mf_t *mf = open_mf(demuxer);
|
||||
bool ok = mf && probe_format(mf);
|
||||
free_mf(mf);
|
||||
return ok ? DEMUXER_TYPE_MF : 0;
|
||||
return ok ? 0 : -1;
|
||||
}
|
||||
|
||||
static demuxer_t* demux_open_mf(demuxer_t* demuxer){
|
||||
static int demux_open_mf(demuxer_t* demuxer)
|
||||
{
|
||||
sh_video_t *sh_video = NULL;
|
||||
|
||||
mf_t *mf = open_mf(demuxer);
|
||||
|
@ -223,11 +224,11 @@ static demuxer_t* demux_open_mf(demuxer_t* demuxer){
|
|||
mf->sh = sh_video;
|
||||
demuxer->priv=(void*)mf;
|
||||
|
||||
return demuxer;
|
||||
return 0;
|
||||
|
||||
error:
|
||||
free_mf(mf);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void demux_close_mf(demuxer_t* demuxer) {
|
||||
|
@ -253,17 +254,17 @@ static int demux_control_mf(demuxer_t *demuxer, int cmd, void *arg) {
|
|||
}
|
||||
|
||||
const demuxer_desc_t demuxer_desc_mf = {
|
||||
"mf demuxer",
|
||||
"mf",
|
||||
"MF",
|
||||
"?",
|
||||
"multiframe?, pictures demuxer",
|
||||
DEMUXER_TYPE_MF,
|
||||
1,
|
||||
demux_check_file,
|
||||
demux_mf_fill_buffer,
|
||||
demux_open_mf,
|
||||
demux_close_mf,
|
||||
demux_seek_mf,
|
||||
demux_control_mf
|
||||
.info = "mf demuxer",
|
||||
.name = "mf",
|
||||
.shortdesc = "MF",
|
||||
.author = "?",
|
||||
.comment = "multiframe?, pictures demuxer",
|
||||
.type = DEMUXER_TYPE_MF,
|
||||
.safe_check = 1,
|
||||
.check_file = demux_check_file,
|
||||
.fill_buffer = demux_mf_fill_buffer,
|
||||
.open = demux_open_mf,
|
||||
.close = demux_close_mf,
|
||||
.seek = demux_seek_mf,
|
||||
.control = demux_control_mf,
|
||||
};
|
||||
|
|
|
@ -1759,11 +1759,11 @@ static int demux_mkv_open(demuxer_t *demuxer)
|
|||
stream_seek(s, s->start_pos);
|
||||
|
||||
if (!read_ebml_header(demuxer))
|
||||
return 0;
|
||||
return -1;
|
||||
mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] Found the head...\n");
|
||||
|
||||
if (!read_mkv_segment_header(demuxer))
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
mkv_d = talloc_zero(demuxer, struct mkv_demuxer);
|
||||
demuxer->priv = mkv_d;
|
||||
|
@ -1788,7 +1788,7 @@ static int demux_mkv_open(demuxer_t *demuxer)
|
|||
}
|
||||
int res = read_header_element(demuxer, id, 0);
|
||||
if (res <= -2)
|
||||
return 0;
|
||||
return -1;
|
||||
if (res < 0)
|
||||
break;
|
||||
}
|
||||
|
@ -1805,7 +1805,7 @@ static int demux_mkv_open(demuxer_t *demuxer)
|
|||
|
||||
demuxer->accurate_seek = true;
|
||||
|
||||
return DEMUXER_TYPE_MATROSKA;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool bstr_read_u8(bstr *buffer, uint8_t *out_u8)
|
||||
|
@ -2718,17 +2718,16 @@ static int demux_mkv_control(demuxer_t *demuxer, int cmd, void *arg)
|
|||
}
|
||||
|
||||
const demuxer_desc_t demuxer_desc_matroska = {
|
||||
"Matroska demuxer",
|
||||
"mkv",
|
||||
"Matroska",
|
||||
"Aurelien Jacobs",
|
||||
"",
|
||||
DEMUXER_TYPE_MATROSKA,
|
||||
1, // safe autodetect
|
||||
demux_mkv_open,
|
||||
demux_mkv_fill_buffer,
|
||||
NULL,
|
||||
mkv_free,
|
||||
demux_mkv_seek,
|
||||
demux_mkv_control
|
||||
.info = "Matroska demuxer",
|
||||
.name = "mkv",
|
||||
.shortdesc = "Matroska",
|
||||
.author = "Aurelien Jacobs",
|
||||
.comment = "",
|
||||
.type = DEMUXER_TYPE_MATROSKA,
|
||||
.safe_check = 1, // safe autodetect
|
||||
.check_file = demux_mkv_open,
|
||||
.fill_buffer = demux_mkv_fill_buffer,
|
||||
.close = mkv_free,
|
||||
.seek = demux_mkv_seek,
|
||||
.control = demux_mkv_control
|
||||
};
|
||||
|
|
|
@ -263,10 +263,10 @@ static int demux_mng_check_file(demuxer_t *demuxer)
|
|||
{
|
||||
char buf[4];
|
||||
if (stream_read(demuxer->stream, buf, 4) != 4)
|
||||
return 0;
|
||||
return -1;
|
||||
if (memcmp(buf, "\x8AMNG", 4))
|
||||
return 0;
|
||||
return DEMUXER_TYPE_MNG;
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -343,12 +343,7 @@ static int demux_mng_fill_buffer(demuxer_t * demuxer)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief MPlayer callback: Open MNG stream.
|
||||
* \param[in] demuxer demuxer structure
|
||||
* \return demuxer structure on success, \p NULL on error
|
||||
*/
|
||||
static demuxer_t * demux_mng_open(demuxer_t * demuxer)
|
||||
static int demux_mng_open(demuxer_t * demuxer)
|
||||
{
|
||||
mng_priv_t * mng_priv;
|
||||
mng_handle h_mng;
|
||||
|
@ -368,7 +363,7 @@ static demuxer_t * demux_mng_open(demuxer_t * demuxer)
|
|||
mp_msg(MSGT_DEMUX, MSGL_ERR,
|
||||
"demux_mng: could not initialize MNG image instance\n");
|
||||
free(mng_priv);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// MNG image handle into private data
|
||||
|
@ -388,7 +383,7 @@ static demuxer_t * demux_mng_open(demuxer_t * demuxer)
|
|||
"demux_mng: could not set MNG callbacks\n");
|
||||
mng_cleanup(&h_mng);
|
||||
free(mng_priv);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// start reading MNG data
|
||||
|
@ -399,7 +394,7 @@ static demuxer_t * demux_mng_open(demuxer_t * demuxer)
|
|||
"mng_retcode %d\n", mng_ret);
|
||||
mng_cleanup(&h_mng);
|
||||
free(mng_priv);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// check that MNG header is processed now
|
||||
|
@ -408,7 +403,7 @@ static demuxer_t * demux_mng_open(demuxer_t * demuxer)
|
|||
"demux_mng: internal error: header not processed\n");
|
||||
mng_cleanup(&h_mng);
|
||||
free(mng_priv);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// create a new video stream header
|
||||
|
@ -432,7 +427,7 @@ static demuxer_t * demux_mng_open(demuxer_t * demuxer)
|
|||
|
||||
// set private data in demuxer and return demuxer
|
||||
demuxer->priv = mng_priv;
|
||||
return demuxer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -569,17 +564,17 @@ static int demux_mng_control(demuxer_t * demuxer, int cmd, void * arg)
|
|||
}
|
||||
|
||||
const demuxer_desc_t demuxer_desc_mng = {
|
||||
"MNG demuxer",
|
||||
"mng",
|
||||
"MNG",
|
||||
"Stefan Schuermans <stefan@blinkenarea.org>",
|
||||
"MNG files, using libmng",
|
||||
DEMUXER_TYPE_MNG,
|
||||
0, // unsafe autodetect (only checking magic at beginning of stream)
|
||||
demux_mng_check_file,
|
||||
demux_mng_fill_buffer,
|
||||
demux_mng_open,
|
||||
demux_mng_close,
|
||||
demux_mng_seek,
|
||||
demux_mng_control
|
||||
.info = "MNG demuxer",
|
||||
.name = "mng",
|
||||
.shortdesc = "MNG",
|
||||
.author = "Stefan Schuermans <stefan@blinkenarea.org>",
|
||||
.comment = "MNG files, using libmng",
|
||||
.type = DEMUXER_TYPE_MNG,
|
||||
.safe_check = 0, // unsafe autodetect (only checking magic at beginning of stream)
|
||||
.check_file = demux_mng_check_file,
|
||||
.fill_buffer = demux_mng_fill_buffer,
|
||||
.open = demux_mng_open,
|
||||
.close = demux_mng_close,
|
||||
.seek = demux_mng_seek,
|
||||
.control = demux_mng_control,
|
||||
};
|
||||
|
|
|
@ -43,13 +43,13 @@ const m_option_t demux_rawaudio_opts[] = {
|
|||
};
|
||||
|
||||
|
||||
static demuxer_t* demux_rawaudio_open(demuxer_t* demuxer) {
|
||||
static int demux_rawaudio_open(demuxer_t* demuxer) {
|
||||
struct sh_stream *sh;
|
||||
sh_audio_t* sh_audio;
|
||||
WAVEFORMATEX* w;
|
||||
|
||||
if ((format & AF_FORMAT_SPECIAL_MASK) != 0)
|
||||
return NULL;
|
||||
return -1;
|
||||
|
||||
sh = new_sh_stream(demuxer, STREAM_AUDIO);
|
||||
sh_audio = sh->audio;
|
||||
|
@ -69,7 +69,7 @@ static demuxer_t* demux_rawaudio_open(demuxer_t* demuxer) {
|
|||
demuxer->movi_start = demuxer->stream->start_pos;
|
||||
demuxer->movi_end = demuxer->stream->end_pos;
|
||||
|
||||
return demuxer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int demux_rawaudio_fill_buffer(demuxer_t* demuxer)
|
||||
|
@ -110,16 +110,13 @@ static void demux_rawaudio_seek(demuxer_t *demuxer,float rel_seek_secs,float aud
|
|||
}
|
||||
|
||||
const demuxer_desc_t demuxer_desc_rawaudio = {
|
||||
"Raw audio demuxer",
|
||||
"rawaudio",
|
||||
"rawaudio",
|
||||
"?",
|
||||
"",
|
||||
DEMUXER_TYPE_RAWAUDIO,
|
||||
0, // no autodetect
|
||||
NULL,
|
||||
demux_rawaudio_fill_buffer,
|
||||
demux_rawaudio_open,
|
||||
NULL,
|
||||
demux_rawaudio_seek,
|
||||
.info = "Raw audio demuxer",
|
||||
.name = "rawaudio",
|
||||
.shortdesc = "rawaudio",
|
||||
.author = "?",
|
||||
.comment = "",
|
||||
.type = DEMUXER_TYPE_RAWAUDIO,
|
||||
.fill_buffer = demux_rawaudio_fill_buffer,
|
||||
.open = demux_rawaudio_open,
|
||||
.seek = demux_rawaudio_seek,
|
||||
};
|
||||
|
|
|
@ -56,13 +56,13 @@ const m_option_t demux_rawvideo_opts[] = {
|
|||
};
|
||||
|
||||
|
||||
static demuxer_t* demux_rawvideo_open(demuxer_t* demuxer) {
|
||||
static int demux_rawvideo_open(demuxer_t* demuxer) {
|
||||
struct sh_stream *sh;
|
||||
sh_video_t* sh_video;
|
||||
|
||||
if(!width || !height){
|
||||
mp_msg(MSGT_DEMUX,MSGL_ERR,"rawvideo: width or height not specified!\n");
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *decoder = "rawvideo";
|
||||
|
@ -109,7 +109,7 @@ static demuxer_t* demux_rawvideo_open(demuxer_t* demuxer) {
|
|||
}
|
||||
if (!bpp) {
|
||||
mp_msg(MSGT_DEMUX,MSGL_ERR,"rawvideo: img size not specified and unknown format!\n");
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
imgsize = width * height * bpp / 8;
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ static demuxer_t* demux_rawvideo_open(demuxer_t* demuxer) {
|
|||
demuxer->movi_start = demuxer->stream->start_pos;
|
||||
demuxer->movi_end = demuxer->stream->end_pos;
|
||||
|
||||
return demuxer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int demux_rawvideo_fill_buffer(demuxer_t* demuxer)
|
||||
|
@ -166,17 +166,13 @@ static void demux_rawvideo_seek(demuxer_t *demuxer,float rel_seek_secs,float aud
|
|||
|
||||
|
||||
const demuxer_desc_t demuxer_desc_rawvideo = {
|
||||
"Raw video demuxer",
|
||||
"rawvideo",
|
||||
"rawvideo",
|
||||
"?",
|
||||
"",
|
||||
DEMUXER_TYPE_RAWVIDEO,
|
||||
0, // no autodetect
|
||||
NULL,
|
||||
demux_rawvideo_fill_buffer,
|
||||
demux_rawvideo_open,
|
||||
NULL,
|
||||
demux_rawvideo_seek,
|
||||
NULL
|
||||
.info = "Raw video demuxer",
|
||||
.name = "rawvideo",
|
||||
.shortdesc = "rawvideo",
|
||||
.author = "?",
|
||||
.comment = "",
|
||||
.type = DEMUXER_TYPE_RAWVIDEO,
|
||||
.fill_buffer = demux_rawvideo_fill_buffer,
|
||||
.open = demux_rawvideo_open,
|
||||
.seek = demux_rawvideo_seek,
|
||||
};
|
||||
|
|
|
@ -1336,11 +1336,11 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
free_stream(ps);
|
||||
|
||||
if (!res)
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
sub_data *sd = sub_read_file(demuxer->stream, &sr);
|
||||
if (!sd)
|
||||
return 0;
|
||||
return -1;
|
||||
|
||||
struct priv *p = talloc_zero(demuxer, struct priv);
|
||||
demuxer->priv = p;
|
||||
|
@ -1355,7 +1355,7 @@ static int d_check_file(struct demuxer *demuxer)
|
|||
|
||||
demuxer->accurate_seek = true;
|
||||
|
||||
return DEMUXER_TYPE_SUBREADER;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int d_fill_buffer(struct demuxer *demuxer)
|
||||
|
|
34
stream/tv.c
34
stream/tv.c
|
@ -701,7 +701,7 @@ static int tv_uninit(tvi_handle_t *tvh)
|
|||
return res;
|
||||
}
|
||||
|
||||
static demuxer_t* demux_open_tv(demuxer_t *demuxer)
|
||||
static int demux_open_tv(demuxer_t *demuxer)
|
||||
{
|
||||
tvi_handle_t *tvh;
|
||||
sh_video_t *sh_video;
|
||||
|
@ -709,14 +709,14 @@ static demuxer_t* demux_open_tv(demuxer_t *demuxer)
|
|||
const tvi_functions_t *funcs;
|
||||
|
||||
demuxer->priv=NULL;
|
||||
if(!(tvh=tv_begin(demuxer->stream->priv))) return NULL;
|
||||
if (!tvh->functions->init(tvh->priv)) return NULL;
|
||||
if(!(tvh=tv_begin(demuxer->stream->priv))) return -1;
|
||||
if (!tvh->functions->init(tvh->priv)) return -1;
|
||||
|
||||
tvh->demuxer = demuxer;
|
||||
|
||||
if (!open_tv(tvh)){
|
||||
tv_uninit(tvh);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
funcs = tvh->functions;
|
||||
demuxer->priv=tvh;
|
||||
|
@ -827,7 +827,7 @@ no_audio:
|
|||
if(!(funcs->start(tvh->priv))){
|
||||
// start failed :(
|
||||
tv_uninit(tvh);
|
||||
return NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* set color eq */
|
||||
|
@ -840,7 +840,7 @@ no_audio:
|
|||
if(funcs->control(tvh->priv,TVI_CONTROL_VID_SET_GAIN,&tvh->tv_param->gain)!=TVI_CONTROL_TRUE)
|
||||
mp_msg(MSGT_TV,MSGL_WARN,"Unable to set gain control!\n");
|
||||
|
||||
return demuxer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void demux_close_tv(demuxer_t *demuxer)
|
||||
|
@ -1094,17 +1094,13 @@ int tv_step_chanlist(tvi_handle_t *tvh)
|
|||
}
|
||||
|
||||
demuxer_desc_t demuxer_desc_tv = {
|
||||
"Tv card demuxer",
|
||||
"tv",
|
||||
"TV",
|
||||
"Alex Beregszaszi, Charles R. Henrich",
|
||||
"?",
|
||||
DEMUXER_TYPE_TV,
|
||||
0, // no autodetect
|
||||
NULL,
|
||||
demux_tv_fill_buffer,
|
||||
demux_open_tv,
|
||||
demux_close_tv,
|
||||
NULL,
|
||||
NULL
|
||||
.info = "Tv card demuxer",
|
||||
.name = "tv",
|
||||
.shortdesc = "TV",
|
||||
.author = "Alex Beregszaszi, Charles R. Henrich",
|
||||
.comment = "?",
|
||||
.type = DEMUXER_TYPE_TV,
|
||||
.fill_buffer = demux_tv_fill_buffer,
|
||||
.open = demux_open_tv,
|
||||
.close = demux_close_tv,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue