Commit 75b7feae authored by Martin Storsjö's avatar Martin Storsjö

asfdec: Add an option for not searching for the packet markers

Some streams don't contain these.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 14285275
...@@ -26,6 +26,7 @@ ...@@ -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 @@ ...@@ -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 { ...@@ -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) ...@@ -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 = { ...@@ -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,
}; };
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment