asfdec: Add an option for not searching for the packet markers
Some streams don't contain these. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
1428527581
commit
75b7feaeb4
@ -26,6 +26,7 @@
|
|||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/dict.h"
|
#include "libavutil/dict.h"
|
||||||
#include "libavutil/mathematics.h"
|
#include "libavutil/mathematics.h"
|
||||||
|
#include "libavutil/opt.h"
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "avio_internal.h"
|
#include "avio_internal.h"
|
||||||
@ -35,6 +36,7 @@
|
|||||||
#include "avlanguage.h"
|
#include "avlanguage.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
const AVClass *class;
|
||||||
int asfid2avid[128]; ///< conversion table from asf ID 2 AVStream ID
|
int asfid2avid[128]; ///< conversion table from asf ID 2 AVStream ID
|
||||||
ASFStream streams[128]; ///< it's max number and it's not that big
|
ASFStream streams[128]; ///< it's max number and it's not that big
|
||||||
uint32_t stream_bitrates[128]; ///< max number of streams, bitrate for each (for streaming)
|
uint32_t stream_bitrates[128]; ///< max number of streams, bitrate for each (for streaming)
|
||||||
@ -72,8 +74,22 @@ typedef struct {
|
|||||||
int stream_index;
|
int stream_index;
|
||||||
|
|
||||||
ASFStream* asf_st; ///< currently decoded stream
|
ASFStream* asf_st; ///< currently decoded stream
|
||||||
|
|
||||||
|
int no_resync_search;
|
||||||
} ASFContext;
|
} ASFContext;
|
||||||
|
|
||||||
|
static const AVOption options[] = {
|
||||||
|
{"no_resync_search", "Don't try to resynchronize by looking for a certain optional start code", offsetof(ASFContext, no_resync_search), AV_OPT_TYPE_INT, {.dbl = 0}, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
|
||||||
|
{ NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const AVClass asf_class = {
|
||||||
|
.class_name = "asf demuxer",
|
||||||
|
.item_name = av_default_item_name,
|
||||||
|
.option = options,
|
||||||
|
.version = LIBAVUTIL_VERSION_INT,
|
||||||
|
};
|
||||||
|
|
||||||
#undef NDEBUG
|
#undef NDEBUG
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
@ -709,7 +725,9 @@ static int ff_asf_get_packet(AVFormatContext *s, AVIOContext *pb)
|
|||||||
|
|
||||||
// if we do not know packet size, allow skipping up to 32 kB
|
// if we do not know packet size, allow skipping up to 32 kB
|
||||||
off= 32768;
|
off= 32768;
|
||||||
if (s->packet_size > 0)
|
if (asf->no_resync_search)
|
||||||
|
off = 3;
|
||||||
|
else if (s->packet_size > 0)
|
||||||
off= (avio_tell(pb) - s->data_offset) % s->packet_size + 3;
|
off= (avio_tell(pb) - s->data_offset) % s->packet_size + 3;
|
||||||
|
|
||||||
c=d=e=-1;
|
c=d=e=-1;
|
||||||
@ -1293,4 +1311,5 @@ AVInputFormat ff_asf_demuxer = {
|
|||||||
.read_seek = asf_read_seek,
|
.read_seek = asf_read_seek,
|
||||||
.read_timestamp = asf_read_pts,
|
.read_timestamp = asf_read_pts,
|
||||||
.flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH,
|
.flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH,
|
||||||
|
.priv_class = &asf_class,
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user