diff options
author | Martin Storsjö <martin@martin.st> | 2012-04-06 16:54:23 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-04-07 01:01:03 +0300 |
commit | 75b7feaeb488e8bfa8ce9ba9958c0c6fa704f2ad (patch) | |
tree | f27f5d5b9ddb744ecf3c67a99b3c2856b756d1d4 | |
parent | 14285275814fd80de4111d68105c8cb75cfe89c4 (diff) | |
download | ffmpeg-75b7feaeb488e8bfa8ce9ba9958c0c6fa704f2ad.tar.gz |
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>
-rw-r--r-- | libavformat/asfdec.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index 0cb43a578b..b39d2f2d9c 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -26,6 +26,7 @@ #include "libavutil/avstring.h" #include "libavutil/dict.h" #include "libavutil/mathematics.h" +#include "libavutil/opt.h" #include "avformat.h" #include "internal.h" #include "avio_internal.h" @@ -35,6 +36,7 @@ #include "avlanguage.h" typedef struct { + const AVClass *class; int asfid2avid[128]; ///< conversion table from asf ID 2 AVStream ID 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) @@ -72,8 +74,22 @@ typedef struct { int stream_index; ASFStream* asf_st; ///< currently decoded stream + + int no_resync_search; } 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 #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 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; c=d=e=-1; @@ -1293,4 +1311,5 @@ AVInputFormat ff_asf_demuxer = { .read_seek = asf_read_seek, .read_timestamp = asf_read_pts, .flags = AVFMT_NOBINSEARCH | AVFMT_NOGENSEARCH, + .priv_class = &asf_class, }; |