mirror of https://github.com/mpv-player/mpv
Add option pointer to demuxers and stheader.h structs
This commit is contained in:
parent
d3d12332d6
commit
7039bc090a
|
@ -822,6 +822,7 @@ static int avi_check_file(demuxer_t *demuxer)
|
|||
|
||||
static demuxer_t* demux_open_hack_avi(demuxer_t *demuxer)
|
||||
{
|
||||
struct MPOpts *opts = demuxer->opts;
|
||||
sh_audio_t* sh_a;
|
||||
|
||||
demuxer = demux_open_avi(demuxer);
|
||||
|
@ -836,7 +837,7 @@ static demuxer_t* demux_open_hack_avi(demuxer_t *demuxer)
|
|||
stream_t* s;
|
||||
demuxer_t *od;
|
||||
s = new_ds_stream(demuxer->audio);
|
||||
od = new_demuxer(s,DEMUXER_TYPE_OGG,-1,-2,-2,NULL);
|
||||
od = new_demuxer(opts, s,DEMUXER_TYPE_OGG,-1,-2,-2,NULL);
|
||||
if(!demux_ogg_open(od)) {
|
||||
mp_msg( MSGT_DEMUXER,MSGL_ERR,MSGTR_ErrorOpeningOGGDemuxer);
|
||||
free_stream(s);
|
||||
|
|
|
@ -1908,6 +1908,7 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id,
|
|||
}
|
||||
|
||||
static demuxer_t* mov_read_header(demuxer_t* demuxer){
|
||||
struct MPOpts *opts = demuxer->opts;
|
||||
mov_priv_t* priv=demuxer->priv;
|
||||
int t_no;
|
||||
int best_a_id=-1, best_a_len=0;
|
||||
|
@ -1983,7 +1984,7 @@ static demuxer_t* mov_read_header(demuxer_t* demuxer){
|
|||
|
||||
demuxer->video->id = t_no;
|
||||
s = new_ds_stream(demuxer->video);
|
||||
od = demux_open(s, DEMUXER_TYPE_MPEG_PS, -1, -1, -1, NULL);
|
||||
od = demux_open(opts, s, DEMUXER_TYPE_MPEG_PS, -1, -1, -1, NULL);
|
||||
if(od) return new_demuxers_demuxer(od, od, od);
|
||||
demuxer->video->id = -2; //new linked demuxer couldn't be allocated
|
||||
break;
|
||||
|
|
|
@ -1226,6 +1226,7 @@ static int demux_ogg_fill_buffer(demuxer_t *d, demux_stream_t *dsds) {
|
|||
/// For avi with Ogg audio stream we have to create an ogg demuxer for this
|
||||
// stream, then we join the avi and ogg demuxer with a demuxers demuxer
|
||||
demuxer_t* init_avi_with_ogg(demuxer_t* demuxer) {
|
||||
struct MPOpts *opts = demuxer->opts;
|
||||
demuxer_t *od;
|
||||
ogg_demuxer_t *ogg_d;
|
||||
stream_t* s;
|
||||
|
@ -1287,7 +1288,7 @@ demuxer_t* init_avi_with_ogg(demuxer_t* demuxer) {
|
|||
|
||||
// Create the ds_stream and the ogg demuxer
|
||||
s = new_ds_stream(demuxer->audio);
|
||||
od = new_demuxer(s,DEMUXER_TYPE_OGG,0,-2,-2,NULL);
|
||||
od = new_demuxer(opts, s,DEMUXER_TYPE_OGG,0,-2,-2,NULL);
|
||||
|
||||
/// Add the header packets in the ogg demuxer audio stream
|
||||
for (i = 0; i < 3; i++) {
|
||||
|
|
|
@ -97,6 +97,7 @@ extern int rtsp_port;
|
|||
|
||||
extern "C" int audio_id, video_id, dvdsub_id;
|
||||
extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
||||
struct MPOpts *opts = demuxer->opts;
|
||||
Boolean success = False;
|
||||
do {
|
||||
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
|
||||
|
@ -256,7 +257,7 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
|||
// code to recognize this:
|
||||
if (demux_is_multiplexed_rtp_stream(demuxer)) {
|
||||
stream_t* s = new_ds_stream(demuxer->video);
|
||||
demuxer_t* od = demux_open(s, DEMUXER_TYPE_UNKNOWN,
|
||||
demuxer_t* od = demux_open(opts, s, DEMUXER_TYPE_UNKNOWN,
|
||||
audio_id, video_id, dvdsub_id, NULL);
|
||||
demuxer = new_demuxers_demuxer(od, od, od);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <sys/stat.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "options.h"
|
||||
#include "mp_msg.h"
|
||||
#include "help_mp.h"
|
||||
#include "m_config.h"
|
||||
|
@ -203,8 +204,8 @@ static const demuxer_desc_t *get_demuxer_desc_from_type(int file_format)
|
|||
}
|
||||
|
||||
|
||||
demuxer_t *new_demuxer(stream_t *stream, int type, int a_id, int v_id,
|
||||
int s_id, char *filename)
|
||||
demuxer_t *new_demuxer(struct MPOpts *opts, stream_t *stream, int type,
|
||||
int a_id, int v_id, int s_id, char *filename)
|
||||
{
|
||||
demuxer_t *d = malloc(sizeof(demuxer_t));
|
||||
memset(d, 0, sizeof(demuxer_t));
|
||||
|
@ -220,6 +221,7 @@ demuxer_t *new_demuxer(stream_t *stream, int type, int a_id, int v_id,
|
|||
d->video = new_demuxer_stream(d, v_id);
|
||||
d->sub = new_demuxer_stream(d, s_id);
|
||||
d->type = type;
|
||||
d->opts = opts;
|
||||
if (type)
|
||||
if (!(d->desc = get_demuxer_desc_from_type(type)))
|
||||
mp_msg(MSGT_DEMUXER, MSGL_ERR,
|
||||
|
@ -248,6 +250,7 @@ sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid)
|
|||
sh_sub_t *sh = calloc(1, sizeof(sh_sub_t));
|
||||
demuxer->s_streams[id] = sh;
|
||||
sh->sid = sid;
|
||||
sh->opts = demuxer->opts;
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SUBTITLE_ID=%d\n", sid);
|
||||
}
|
||||
return demuxer->s_streams[id];
|
||||
|
@ -285,6 +288,7 @@ sh_audio_t *new_sh_audio_aid(demuxer_t *demuxer, int id, int aid)
|
|||
sh->sample_format = AF_FORMAT_S16_NE;
|
||||
sh->audio_out_minsize = 8192; /* default size, maybe not enough for Win32/ACM */
|
||||
sh->pts = MP_NOPTS_VALUE;
|
||||
sh->opts = demuxer->opts;
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AUDIO_ID=%d\n", aid);
|
||||
}
|
||||
((sh_audio_t *) demuxer->a_streams[id])->aid = aid;
|
||||
|
@ -314,7 +318,9 @@ sh_video_t *new_sh_video_vid(demuxer_t *demuxer, int id, int vid)
|
|||
mp_msg(MSGT_DEMUXER, MSGL_WARN, MSGTR_VideoStreamRedefined, id);
|
||||
else {
|
||||
mp_msg(MSGT_DEMUXER, MSGL_V, MSGTR_FoundVideoStream, id);
|
||||
demuxer->v_streams[id] = calloc(1, sizeof(sh_video_t));
|
||||
sh_video_t *sh = calloc(1, sizeof *sh);
|
||||
demuxer->v_streams[id] = sh;
|
||||
sh->opts = demuxer->opts;
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_ID=%d\n", vid);
|
||||
}
|
||||
((sh_video_t *) demuxer->v_streams[id])->vid = vid;
|
||||
|
@ -748,9 +754,10 @@ int user_correct_pts = -1;
|
|||
(ex: tv,mf).
|
||||
*/
|
||||
|
||||
static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
||||
int force, int audio_id, int video_id,
|
||||
int dvdsub_id, char *filename)
|
||||
static demuxer_t *demux_open_stream(struct MPOpts *opts, stream_t *stream,
|
||||
int file_format, int force, int audio_id,
|
||||
int video_id, int dvdsub_id,
|
||||
char *filename)
|
||||
{
|
||||
demuxer_t *demuxer = NULL;
|
||||
|
||||
|
@ -764,8 +771,8 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
if (file_format) {
|
||||
if ((demuxer_desc = get_demuxer_desc_from_type(file_format))) {
|
||||
demuxer =
|
||||
new_demuxer(stream, demuxer_desc->type, audio_id, video_id,
|
||||
dvdsub_id, filename);
|
||||
new_demuxer(opts, stream, demuxer_desc->type, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
if (demuxer_desc->check_file)
|
||||
fformat = demuxer_desc->check_file(demuxer);
|
||||
if (force || !demuxer_desc->check_file)
|
||||
|
@ -786,8 +793,9 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
} else {
|
||||
// Format changed after check, recurse
|
||||
free_demuxer(demuxer);
|
||||
return demux_open_stream(stream, fformat, force, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
return demux_open_stream(opts, stream, fformat, force,
|
||||
audio_id, video_id, dvdsub_id,
|
||||
filename);
|
||||
}
|
||||
}
|
||||
// Check failed for forced demuxer, quit
|
||||
|
@ -799,8 +807,8 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
for (i = 0; (demuxer_desc = demuxer_list[i]); i++) {
|
||||
if (demuxer_desc->safe_check) {
|
||||
demuxer =
|
||||
new_demuxer(stream, demuxer_desc->type, audio_id, video_id,
|
||||
dvdsub_id, filename);
|
||||
new_demuxer(opts, stream, demuxer_desc->type, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
if ((fformat = demuxer_desc->check_file(demuxer)) != 0) {
|
||||
if (fformat == demuxer_desc->type) {
|
||||
demuxer_t *demux2 = demuxer;
|
||||
|
@ -819,8 +827,9 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
// Format changed after check, recurse
|
||||
free_demuxer(demuxer);
|
||||
demuxer =
|
||||
demux_open_stream(stream, fformat, force, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
demux_open_stream(opts, stream, fformat, force,
|
||||
audio_id, video_id, dvdsub_id,
|
||||
filename);
|
||||
if (demuxer)
|
||||
return demuxer; // done!
|
||||
file_format = DEMUXER_TYPE_UNKNOWN;
|
||||
|
@ -840,8 +849,9 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
file_format = demuxer_type_by_filename(filename);
|
||||
if (file_format != DEMUXER_TYPE_UNKNOWN) {
|
||||
// we like recursion :)
|
||||
demuxer = demux_open_stream(stream, file_format, force, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
demuxer = demux_open_stream(opts, stream, file_format, force,
|
||||
audio_id, video_id, dvdsub_id,
|
||||
filename);
|
||||
if (demuxer)
|
||||
return demuxer; // done!
|
||||
file_format = DEMUXER_TYPE_UNKNOWN; // continue fuzzy guessing...
|
||||
|
@ -853,8 +863,8 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
for (i = 0; (demuxer_desc = demuxer_list[i]); i++) {
|
||||
if (!demuxer_desc->safe_check && demuxer_desc->check_file) {
|
||||
demuxer =
|
||||
new_demuxer(stream, demuxer_desc->type, audio_id, video_id,
|
||||
dvdsub_id, filename);
|
||||
new_demuxer(opts, stream, demuxer_desc->type, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
if ((fformat = demuxer_desc->check_file(demuxer)) != 0) {
|
||||
if (fformat == demuxer_desc->type) {
|
||||
demuxer_t *demux2 = demuxer;
|
||||
|
@ -873,8 +883,9 @@ static demuxer_t *demux_open_stream(stream_t *stream, int file_format,
|
|||
// Format changed after check, recurse
|
||||
free_demuxer(demuxer);
|
||||
demuxer =
|
||||
demux_open_stream(stream, fformat, force, audio_id,
|
||||
video_id, dvdsub_id, filename);
|
||||
demux_open_stream(opts, stream, fformat, force,
|
||||
audio_id, video_id, dvdsub_id,
|
||||
filename);
|
||||
if (demuxer)
|
||||
return demuxer; // done!
|
||||
file_format = DEMUXER_TYPE_UNKNOWN;
|
||||
|
@ -930,8 +941,9 @@ extern int hr_mp3_seek;
|
|||
extern float stream_cache_min_percent;
|
||||
extern float stream_cache_seek_min_percent;
|
||||
|
||||
demuxer_t *demux_open(stream_t *vs, int file_format, int audio_id,
|
||||
int video_id, int dvdsub_id, char *filename)
|
||||
demuxer_t *demux_open(struct MPOpts *opts, stream_t *vs, int file_format,
|
||||
int audio_id, int video_id, int dvdsub_id,
|
||||
char *filename)
|
||||
{
|
||||
stream_t *as = NULL, *ss = NULL;
|
||||
demuxer_t *vd, *ad = NULL, *sd = NULL;
|
||||
|
@ -989,7 +1001,7 @@ demuxer_t *demux_open(stream_t *vs, int file_format, int audio_id,
|
|||
}
|
||||
}
|
||||
|
||||
vd = demux_open_stream(vs, demuxer_type ? demuxer_type : file_format,
|
||||
vd = demux_open_stream(opts, vs, demuxer_type ? demuxer_type : file_format,
|
||||
demuxer_force, audio_stream ? -2 : audio_id,
|
||||
video_id, sub_stream ? -2 : dvdsub_id, filename);
|
||||
if (!vd) {
|
||||
|
@ -1000,7 +1012,7 @@ demuxer_t *demux_open(stream_t *vs, int file_format, int audio_id,
|
|||
return NULL;
|
||||
}
|
||||
if (as) {
|
||||
ad = demux_open_stream(as,
|
||||
ad = demux_open_stream(opts, as,
|
||||
audio_demuxer_type ? audio_demuxer_type : afmt,
|
||||
audio_demuxer_force, audio_id, -2, -2,
|
||||
audio_stream);
|
||||
|
@ -1013,7 +1025,8 @@ demuxer_t *demux_open(stream_t *vs, int file_format, int audio_id,
|
|||
hr_mp3_seek = 1; // Enable high res seeking
|
||||
}
|
||||
if (ss) {
|
||||
sd = demux_open_stream(ss, sub_demuxer_type ? sub_demuxer_type : sfmt,
|
||||
sd = demux_open_stream(opts, ss,
|
||||
sub_demuxer_type ? sub_demuxer_type : sfmt,
|
||||
sub_demuxer_force, -2, -2, dvdsub_id,
|
||||
sub_stream);
|
||||
if (!sd) {
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include "libass/ass_types.h"
|
||||
#endif
|
||||
|
||||
struct MPOpts;
|
||||
|
||||
#define MAX_PACKS 4096
|
||||
#ifdef HAVE_TV_BSDBT848
|
||||
#define MAX_PACK_BYTES 0x2000000
|
||||
|
@ -223,6 +225,7 @@ typedef struct demuxer_st {
|
|||
|
||||
void* priv; // fileformat-dependent data
|
||||
char** info;
|
||||
struct MPOpts *opts;
|
||||
} demuxer_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -305,7 +308,7 @@ static inline void *realloc_struct(void *ptr, size_t nmemb, size_t size) {
|
|||
}
|
||||
|
||||
demux_stream_t* new_demuxer_stream(struct demuxer_st *demuxer,int id);
|
||||
demuxer_t* new_demuxer(stream_t *stream,int type,int a_id,int v_id,int s_id,char *filename);
|
||||
demuxer_t* new_demuxer(struct MPOpts *opts, stream_t *stream,int type,int a_id,int v_id,int s_id,char *filename);
|
||||
void free_demuxer_stream(demux_stream_t *ds);
|
||||
void free_demuxer(demuxer_t *demuxer);
|
||||
|
||||
|
@ -368,7 +371,7 @@ static inline int avi_stream_id(unsigned int id){
|
|||
return a*10+b;
|
||||
}
|
||||
|
||||
demuxer_t* demux_open(stream_t *stream,int file_format,int aid,int vid,int sid,char* filename);
|
||||
demuxer_t* demux_open(struct MPOpts *opts, stream_t *stream,int file_format,int aid,int vid,int sid,char* filename);
|
||||
int demux_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags);
|
||||
demuxer_t* new_demuxers_demuxer(demuxer_t* vd, demuxer_t* ad, demuxer_t* sd);
|
||||
|
||||
|
|
|
@ -4,10 +4,12 @@
|
|||
#include "demuxer.h"
|
||||
#include "aviheader.h"
|
||||
#include "ms_hdr.h"
|
||||
struct MPOpts;
|
||||
|
||||
// Stream headers:
|
||||
|
||||
typedef struct sh_audio {
|
||||
struct MPOpts *opts;
|
||||
int aid;
|
||||
demux_stream_t *ds;
|
||||
struct codecs_st *codec;
|
||||
|
@ -55,6 +57,7 @@ typedef struct sh_audio {
|
|||
} sh_audio_t;
|
||||
|
||||
typedef struct sh_video {
|
||||
struct MPOpts *opts;
|
||||
int vid;
|
||||
demux_stream_t *ds;
|
||||
struct codecs_st *codec;
|
||||
|
@ -95,6 +98,7 @@ typedef struct sh_video {
|
|||
} sh_video_t;
|
||||
|
||||
typedef struct sh_sub {
|
||||
struct MPOpts *opts;
|
||||
int sid;
|
||||
char type; // t = text, v = VobSub, a = SSA/ASS
|
||||
int has_palette; // If we have a valid palette
|
||||
|
|
|
@ -519,7 +519,7 @@ if(!codecs_file || !parse_codec_cfg(codecs_file)){
|
|||
if (frameno_filename) {
|
||||
stream2=open_stream(frameno_filename,0,&i);
|
||||
if(stream2){
|
||||
demuxer2=demux_open(stream2,DEMUXER_TYPE_AVI,-1,-1,-2,NULL);
|
||||
demuxer2=demux_open(&opts, stream2,DEMUXER_TYPE_AVI,-1,-1,-2,NULL);
|
||||
if(demuxer2) mp_msg(MSGT_MENCODER, MSGL_INFO, MSGTR_UsingPass3ControlFile, frameno_filename);
|
||||
else mp_msg(MSGT_DEMUXER,MSGL_ERR,MSGTR_FormatNotRecognized);
|
||||
}
|
||||
|
@ -605,7 +605,7 @@ if(stream->type==STREAMTYPE_DVDNAV){
|
|||
if(demuxer2) audio_id=-2; /* do NOT read audio packets... */
|
||||
|
||||
//demuxer=demux_open(stream,file_format,video_id,audio_id,dvdsub_id);
|
||||
demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id,filename);
|
||||
demuxer=demux_open(&opts, stream,file_format,audio_id,video_id,dvdsub_id,filename);
|
||||
if(!demuxer){
|
||||
mp_msg(MSGT_DEMUXER, MSGL_FATAL, MSGTR_FormatNotRecognized);
|
||||
mp_msg(MSGT_DEMUXER, MSGL_FATAL, MSGTR_CannotOpenDemuxer);
|
||||
|
|
|
@ -3231,7 +3231,7 @@ if(stream_cache_size>0){
|
|||
//============ Open DEMUXERS --- DETECT file type =======================
|
||||
current_module="demux_open";
|
||||
|
||||
mpctx->demuxer=demux_open(mpctx->stream,mpctx->file_format,audio_id,video_id,dvdsub_id,filename);
|
||||
mpctx->demuxer=demux_open(opts, mpctx->stream,mpctx->file_format,audio_id,video_id,dvdsub_id,filename);
|
||||
|
||||
// HACK to get MOV Reference Files working
|
||||
|
||||
|
|
Loading…
Reference in New Issue