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