Browse Source

LAVFAPI: demuxer specific options.

(someone please add doxy)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n0.8
Michael Niedermayer 14 years ago
parent
commit
492026209b
2 changed files with 27 additions and 2 deletions
  1. +5
    -0
      libavformat/avformat.h
  2. +22
    -2
      libavformat/utils.c

+ 5
- 0
libavformat/avformat.h View File

@@ -423,6 +423,8 @@ typedef struct AVInputFormat {
const AVMetadataConv *metadata_conv; const AVMetadataConv *metadata_conv;
#endif #endif


const AVClass *priv_class; ///< AVClass for the private context

/* private fields */ /* private fields */
struct AVInputFormat *next; struct AVInputFormat *next;
} AVInputFormat; } AVInputFormat;
@@ -726,6 +728,7 @@ typedef struct AVFormatContext {
#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled #define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled
#define AVFMT_FLAG_RTP_HINT 0x0040 ///< Add RTP hinting to the output file #define AVFMT_FLAG_RTP_HINT 0x0040 ///< Add RTP hinting to the output file
#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) #define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)


int loop_input; int loop_input;


@@ -1040,6 +1043,8 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
int buf_size, int buf_size,
AVFormatParameters *ap); AVFormatParameters *ap);


int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap);

/** /**
* Allocate an AVFormatContext. * Allocate an AVFormatContext.
* avformat_free_context() can be used to free the context and everything * avformat_free_context() can be used to free the context and everything


+ 22
- 2
libavformat/utils.c View File

@@ -429,6 +429,10 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
err = AVERROR(ENOMEM); err = AVERROR(ENOMEM);
goto fail; goto fail;
} }
if (fmt->priv_class) {
*(const AVClass**)ic->priv_data= fmt->priv_class;
av_opt_set_defaults(ic->priv_data);
}
} else { } else {
ic->priv_data = NULL; ic->priv_data = NULL;
} }
@@ -437,13 +441,13 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
if (ic->pb) if (ic->pb)
ff_id3v2_read(ic, ID3v2_DEFAULT_MAGIC); ff_id3v2_read(ic, ID3v2_DEFAULT_MAGIC);


if (ic->iformat->read_header) {
if (!(ic->flags&AVFMT_FLAG_PRIV_OPT) && ic->iformat->read_header) {
err = ic->iformat->read_header(ic, ap); err = ic->iformat->read_header(ic, ap);
if (err < 0) if (err < 0)
goto fail; goto fail;
} }


if (pb && !ic->data_offset)
if (!(ic->flags&AVFMT_FLAG_PRIV_OPT) && pb && !ic->data_offset)
ic->data_offset = avio_tell(ic->pb); ic->data_offset = avio_tell(ic->pb);


ic->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE; ic->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
@@ -470,6 +474,22 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
return err; return err;
} }


int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap){
int err;

if (ic->iformat->read_header) {
err = ic->iformat->read_header(ic, ap);
if (err < 0)
return err;
}

if (ic->pb && !ic->data_offset)
ic->data_offset = avio_tell(ic->pb);

return 0;
}


/** size of probe buffer, for guessing file type from file contents */ /** size of probe buffer, for guessing file type from file contents */
#define PROBE_BUF_MIN 2048 #define PROBE_BUF_MIN 2048
#define PROBE_BUF_MAX (1<<20) #define PROBE_BUF_MAX (1<<20)


Loading…
Cancel
Save