mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: Revert "swscale: use 15-bit intermediates for 9/10-bit scaling." swscale: use 15-bit intermediates for 9/10-bit scaling. dct32: Add SSE2 ASM optimizations Correct chroma vector calculation for RealVideo 3. lavf: Add an option to discard corrupted frames mpegts: Mark wrongly-sized packets as corrupted mpegts: Move scan test to handle_packets mpegts: Mark corrupted packets mpegts: Reset continuity counter on seek mpegts: Fix for continuity counter mpegts: Silence "can't seek" warning on unseekable apichange: add an entry for AV_PKT_FLAG_CORRUPT avpacket: signal possibly corrupted packets mpeg4videodec: remove dead code that would have detected erroneous encoding aac: Remove some suspicious illegal memcpy()s from LTP. bink: Eliminate unnecessary shadow declaration. Conflicts: doc/APIchanges libavcodec/version.h libavformat/avformat.h libavformat/options.c libavformat/utils.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
1d186e9e12
@ -13,6 +13,9 @@ libavutil: 2011-04-18
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2011-08-02 - 9d39cbf - lavc 53.7.1
|
||||||
|
Add AV_PKT_FLAG_CORRUPT AVPacket flag.
|
||||||
|
|
||||||
2011-07-16 - xxxxxx - lavfi 2.27.0
|
2011-07-16 - xxxxxx - lavfi 2.27.0
|
||||||
Add audio packing negotiation fields and helper functions.
|
Add audio packing negotiation fields and helper functions.
|
||||||
|
|
||||||
|
@ -1791,12 +1791,10 @@ static void windowing_and_mdct_ltp(AACContext *ac, float *out,
|
|||||||
} else {
|
} else {
|
||||||
memset(in, 0, 448 * sizeof(float));
|
memset(in, 0, 448 * sizeof(float));
|
||||||
ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128);
|
ac->dsp.vector_fmul(in + 448, in + 448, swindow_prev, 128);
|
||||||
memcpy(in + 576, in + 576, 448 * sizeof(float));
|
|
||||||
}
|
}
|
||||||
if (ics->window_sequence[0] != LONG_START_SEQUENCE) {
|
if (ics->window_sequence[0] != LONG_START_SEQUENCE) {
|
||||||
ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
|
ac->dsp.vector_fmul_reverse(in + 1024, in + 1024, lwindow, 1024);
|
||||||
} else {
|
} else {
|
||||||
memcpy(in + 1024, in + 1024, 448 * sizeof(float));
|
|
||||||
ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
|
ac->dsp.vector_fmul_reverse(in + 1024 + 448, in + 1024 + 448, swindow, 128);
|
||||||
memset(in + 1024 + 576, 0, 448 * sizeof(float));
|
memset(in + 1024 + 576, 0, 448 * sizeof(float));
|
||||||
}
|
}
|
||||||
|
@ -800,6 +800,9 @@ typedef struct AVPacket {
|
|||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
int size;
|
int size;
|
||||||
int stream_index;
|
int stream_index;
|
||||||
|
/**
|
||||||
|
* A combination of AV_PKT_FLAG values
|
||||||
|
*/
|
||||||
int flags;
|
int flags;
|
||||||
/**
|
/**
|
||||||
* Additional packet data that can be provided by the container.
|
* Additional packet data that can be provided by the container.
|
||||||
@ -840,7 +843,8 @@ typedef struct AVPacket {
|
|||||||
*/
|
*/
|
||||||
int64_t convergence_duration;
|
int64_t convergence_duration;
|
||||||
} AVPacket;
|
} AVPacket;
|
||||||
#define AV_PKT_FLAG_KEY 0x0001
|
#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
|
||||||
|
#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Audio Video Frame.
|
* Audio Video Frame.
|
||||||
|
@ -624,7 +624,6 @@ static int read_dct_coeffs(GetBitContext *gb, int32_t block[64], const uint8_t *
|
|||||||
coef_list[--list_start] = ccoef;
|
coef_list[--list_start] = ccoef;
|
||||||
mode_list[ list_start] = 3;
|
mode_list[ list_start] = 3;
|
||||||
} else {
|
} else {
|
||||||
int t;
|
|
||||||
if (!bits) {
|
if (!bits) {
|
||||||
t = 1 - (get_bits1(gb) << 1);
|
t = 1 - (get_bits1(gb) << 1);
|
||||||
} else {
|
} else {
|
||||||
|
@ -737,8 +737,8 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
|
|||||||
my = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) / 3 - (1 << 24);
|
my = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) / 3 - (1 << 24);
|
||||||
lx = (s->current_picture_ptr->f.motion_val[dir][mv_pos][0] + (3 << 24)) % 3;
|
lx = (s->current_picture_ptr->f.motion_val[dir][mv_pos][0] + (3 << 24)) % 3;
|
||||||
ly = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) % 3;
|
ly = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + (3 << 24)) % 3;
|
||||||
chroma_mx = (s->current_picture_ptr->f.motion_val[dir][mv_pos][0] + 1) >> 1;
|
chroma_mx = s->current_picture_ptr->f.motion_val[dir][mv_pos][0] / 2;
|
||||||
chroma_my = (s->current_picture_ptr->f.motion_val[dir][mv_pos][1] + 1) >> 1;
|
chroma_my = s->current_picture_ptr->f.motion_val[dir][mv_pos][1] / 2;
|
||||||
umx = (chroma_mx + (3 << 24)) / 3 - (1 << 24);
|
umx = (chroma_mx + (3 << 24)) / 3 - (1 << 24);
|
||||||
umy = (chroma_my + (3 << 24)) / 3 - (1 << 24);
|
umy = (chroma_my + (3 << 24)) / 3 - (1 << 24);
|
||||||
uvmx = chroma_coeffs[(chroma_mx + (3 << 24)) % 3];
|
uvmx = chroma_coeffs[(chroma_mx + (3 << 24)) % 3];
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#define LIBAVCODEC_VERSION_MAJOR 53
|
#define LIBAVCODEC_VERSION_MAJOR 53
|
||||||
#define LIBAVCODEC_VERSION_MINOR 9
|
#define LIBAVCODEC_VERSION_MINOR 9
|
||||||
#define LIBAVCODEC_VERSION_MICRO 0
|
#define LIBAVCODEC_VERSION_MICRO 1
|
||||||
|
|
||||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||||
LIBAVCODEC_VERSION_MINOR, \
|
LIBAVCODEC_VERSION_MINOR, \
|
||||||
|
@ -63,6 +63,13 @@ ps_p1p1m1m1: dd 0, 0, 0x80000000, 0x80000000, 0, 0, 0x80000000, 0x80000000
|
|||||||
mulps %1, %3
|
mulps %1, %3
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
%macro BUTTERFLY0_SSE2 5
|
||||||
|
pshufd %4, %1, %5
|
||||||
|
xorps %1, %2
|
||||||
|
addps %1, %4
|
||||||
|
mulps %1, %3
|
||||||
|
%endmacro
|
||||||
|
|
||||||
%macro BUTTERFLY0_AVX 5
|
%macro BUTTERFLY0_AVX 5
|
||||||
vshufps %4, %1, %1, %5
|
vshufps %4, %1, %1, %5
|
||||||
vxorps %1, %1, %2
|
vxorps %1, %1, %2
|
||||||
@ -405,18 +412,17 @@ INIT_XMM
|
|||||||
|
|
||||||
|
|
||||||
INIT_XMM
|
INIT_XMM
|
||||||
|
%macro DCT32_FUNC 1
|
||||||
; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in)
|
; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in)
|
||||||
cglobal dct32_float_sse, 2,3,16, out, in, tmp
|
cglobal dct32_float_%1, 2,3,16, out, in, tmp
|
||||||
; pass 1
|
; pass 1
|
||||||
|
|
||||||
movaps m0, [inq+0]
|
movaps m0, [inq+0]
|
||||||
movaps m1, [inq+112]
|
LOAD_INV m1, [inq+112]
|
||||||
shufps m1, m1, 0x1b
|
|
||||||
BUTTERFLY m0, m1, [ps_cos_vec], m3
|
BUTTERFLY m0, m1, [ps_cos_vec], m3
|
||||||
|
|
||||||
movaps m7, [inq+64]
|
movaps m7, [inq+64]
|
||||||
movaps m4, [inq+48]
|
LOAD_INV m4, [inq+48]
|
||||||
shufps m4, m4, 0x1b
|
|
||||||
BUTTERFLY m7, m4, [ps_cos_vec+32], m3
|
BUTTERFLY m7, m4, [ps_cos_vec+32], m3
|
||||||
|
|
||||||
; pass 2
|
; pass 2
|
||||||
@ -427,13 +433,11 @@ cglobal dct32_float_sse, 2,3,16, out, in, tmp
|
|||||||
|
|
||||||
; pass 1
|
; pass 1
|
||||||
movaps m1, [inq+16]
|
movaps m1, [inq+16]
|
||||||
movaps m6, [inq+96]
|
LOAD_INV m6, [inq+96]
|
||||||
shufps m6, m6, 0x1b
|
|
||||||
BUTTERFLY m1, m6, [ps_cos_vec+16], m3
|
BUTTERFLY m1, m6, [ps_cos_vec+16], m3
|
||||||
|
|
||||||
movaps m4, [inq+80]
|
movaps m4, [inq+80]
|
||||||
movaps m5, [inq+32]
|
LOAD_INV m5, [inq+32]
|
||||||
shufps m5, m5, 0x1b
|
|
||||||
BUTTERFLY m4, m5, [ps_cos_vec+48], m3
|
BUTTERFLY m4, m5, [ps_cos_vec+48], m3
|
||||||
|
|
||||||
; pass 2
|
; pass 2
|
||||||
@ -492,3 +496,20 @@ cglobal dct32_float_sse, 2,3,16, out, in, tmp
|
|||||||
PASS5
|
PASS5
|
||||||
PASS6
|
PASS6
|
||||||
RET
|
RET
|
||||||
|
%endmacro
|
||||||
|
|
||||||
|
%macro LOAD_INV_SSE 2
|
||||||
|
movaps %1, %2
|
||||||
|
shufps %1, %1, 0x1b
|
||||||
|
%endmacro
|
||||||
|
|
||||||
|
%define LOAD_INV LOAD_INV_SSE
|
||||||
|
DCT32_FUNC sse
|
||||||
|
|
||||||
|
%macro LOAD_INV_SSE2 2
|
||||||
|
pshufd %1, %2, 0x1b
|
||||||
|
%endmacro
|
||||||
|
|
||||||
|
%define LOAD_INV LOAD_INV_SSE2
|
||||||
|
%define BUTTERFLY0 BUTTERFLY0_SSE2
|
||||||
|
DCT32_FUNC sse2
|
||||||
|
@ -60,6 +60,8 @@ av_cold void ff_dct_init_mmx(DCTContext *s)
|
|||||||
int has_vectors = av_get_cpu_flags();
|
int has_vectors = av_get_cpu_flags();
|
||||||
if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX)
|
if (has_vectors & AV_CPU_FLAG_AVX && HAVE_AVX)
|
||||||
s->dct32 = ff_dct32_float_avx;
|
s->dct32 = ff_dct32_float_avx;
|
||||||
|
else if (has_vectors & AV_CPU_FLAG_SSE2 && HAVE_SSE)
|
||||||
|
s->dct32 = ff_dct32_float_sse2;
|
||||||
else if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE)
|
else if (has_vectors & AV_CPU_FLAG_SSE && HAVE_SSE)
|
||||||
s->dct32 = ff_dct32_float_sse;
|
s->dct32 = ff_dct32_float_sse;
|
||||||
#endif
|
#endif
|
||||||
|
@ -35,6 +35,7 @@ void ff_imdct_calc_sse(FFTContext *s, FFTSample *output, const FFTSample *input)
|
|||||||
void ff_imdct_half_sse(FFTContext *s, FFTSample *output, const FFTSample *input);
|
void ff_imdct_half_sse(FFTContext *s, FFTSample *output, const FFTSample *input);
|
||||||
void ff_imdct_half_avx(FFTContext *s, FFTSample *output, const FFTSample *input);
|
void ff_imdct_half_avx(FFTContext *s, FFTSample *output, const FFTSample *input);
|
||||||
void ff_dct32_float_sse(FFTSample *out, const FFTSample *in);
|
void ff_dct32_float_sse(FFTSample *out, const FFTSample *in);
|
||||||
|
void ff_dct32_float_sse2(FFTSample *out, const FFTSample *in);
|
||||||
void ff_dct32_float_avx(FFTSample *out, const FFTSample *in);
|
void ff_dct32_float_avx(FFTSample *out, const FFTSample *in);
|
||||||
|
|
||||||
#endif /* AVCODEC_X86_FFT_H */
|
#endif /* AVCODEC_X86_FFT_H */
|
||||||
|
@ -774,6 +774,7 @@ typedef struct AVFormatContext {
|
|||||||
#define AVFMT_FLAG_RTP_HINT 0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead
|
#define AVFMT_FLAG_RTP_HINT 0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead
|
||||||
#endif
|
#endif
|
||||||
#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
|
#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
|
||||||
|
#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
|
||||||
#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload
|
#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload
|
||||||
#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)
|
#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)
|
||||||
|
@ -164,6 +164,7 @@ typedef struct PESContext {
|
|||||||
enum MpegTSState state;
|
enum MpegTSState state;
|
||||||
/* used to get the format */
|
/* used to get the format */
|
||||||
int data_index;
|
int data_index;
|
||||||
|
int flags; /**< copied to the AVPacket flags */
|
||||||
int total_size;
|
int total_size;
|
||||||
int pes_header_size;
|
int pes_header_size;
|
||||||
int extended_stream_id;
|
int extended_stream_id;
|
||||||
@ -636,6 +637,12 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
|
|||||||
pkt->destruct = av_destruct_packet;
|
pkt->destruct = av_destruct_packet;
|
||||||
pkt->data = pes->buffer;
|
pkt->data = pes->buffer;
|
||||||
pkt->size = pes->data_index;
|
pkt->size = pes->data_index;
|
||||||
|
|
||||||
|
if(pes->total_size != MAX_PES_PAYLOAD &&
|
||||||
|
pes->pes_header_size + pes->data_index != pes->total_size + 6) {
|
||||||
|
av_log(pes->ts, AV_LOG_WARNING, "PES packet size mismatch\n");
|
||||||
|
pes->flags |= AV_PKT_FLAG_CORRUPT;
|
||||||
|
}
|
||||||
memset(pkt->data+pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
memset(pkt->data+pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
|
||||||
// Separate out the AC3 substream from an HDMV combined TrueHD/AC3 PID
|
// Separate out the AC3 substream from an HDMV combined TrueHD/AC3 PID
|
||||||
@ -647,12 +654,14 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt)
|
|||||||
pkt->dts = pes->dts;
|
pkt->dts = pes->dts;
|
||||||
/* store position of first TS packet of this PES packet */
|
/* store position of first TS packet of this PES packet */
|
||||||
pkt->pos = pes->ts_packet_pos;
|
pkt->pos = pes->ts_packet_pos;
|
||||||
|
pkt->flags = pes->flags;
|
||||||
|
|
||||||
/* reset pts values */
|
/* reset pts values */
|
||||||
pes->pts = AV_NOPTS_VALUE;
|
pes->pts = AV_NOPTS_VALUE;
|
||||||
pes->dts = AV_NOPTS_VALUE;
|
pes->dts = AV_NOPTS_VALUE;
|
||||||
pes->buffer = NULL;
|
pes->buffer = NULL;
|
||||||
pes->data_index = 0;
|
pes->data_index = 0;
|
||||||
|
pes->flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return non zero if a packet could be constructed */
|
/* return non zero if a packet could be constructed */
|
||||||
@ -1269,7 +1278,8 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
|
|||||||
{
|
{
|
||||||
AVFormatContext *s = ts->stream;
|
AVFormatContext *s = ts->stream;
|
||||||
MpegTSFilter *tss;
|
MpegTSFilter *tss;
|
||||||
int len, pid, cc, expected_cc, cc_ok, afc, is_start;
|
int len, pid, cc, expected_cc, cc_ok, afc, is_start, is_discontinuity,
|
||||||
|
has_adaptation, has_payload;
|
||||||
const uint8_t *p, *p_end;
|
const uint8_t *p, *p_end;
|
||||||
int64_t pos;
|
int64_t pos;
|
||||||
|
|
||||||
@ -1285,20 +1295,36 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
|
|||||||
if (!tss)
|
if (!tss)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* continuity check (currently not used) */
|
|
||||||
cc = (packet[3] & 0xf);
|
|
||||||
expected_cc = (packet[3] & 0x10) ? (tss->last_cc + 1) & 0x0f : tss->last_cc;
|
|
||||||
cc_ok = (tss->last_cc < 0) || (expected_cc == cc);
|
|
||||||
tss->last_cc = cc;
|
|
||||||
|
|
||||||
/* skip adaptation field */
|
|
||||||
afc = (packet[3] >> 4) & 3;
|
afc = (packet[3] >> 4) & 3;
|
||||||
p = packet + 4;
|
|
||||||
if (afc == 0) /* reserved value */
|
if (afc == 0) /* reserved value */
|
||||||
return 0;
|
return 0;
|
||||||
if (afc == 2) /* adaptation field only */
|
has_adaptation = afc & 2;
|
||||||
|
has_payload = afc & 1;
|
||||||
|
is_discontinuity = has_adaptation
|
||||||
|
&& packet[4] != 0 /* with length > 0 */
|
||||||
|
&& (packet[5] & 0x80); /* and discontinuity indicated */
|
||||||
|
|
||||||
|
/* continuity check (currently not used) */
|
||||||
|
cc = (packet[3] & 0xf);
|
||||||
|
expected_cc = has_payload ? (tss->last_cc + 1) & 0x0f : tss->last_cc;
|
||||||
|
cc_ok = pid == 0x1FFF // null packet PID
|
||||||
|
|| is_discontinuity
|
||||||
|
|| tss->last_cc < 0
|
||||||
|
|| expected_cc == cc;
|
||||||
|
|
||||||
|
tss->last_cc = cc;
|
||||||
|
if (!cc_ok) {
|
||||||
|
av_log(ts, AV_LOG_WARNING, "Continuity Check Failed\n");
|
||||||
|
if(tss->type == MPEGTS_PES) {
|
||||||
|
PESContext *pc = tss->u.pes_filter.opaque;
|
||||||
|
pc->flags |= AV_PKT_FLAG_CORRUPT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!has_payload)
|
||||||
return 0;
|
return 0;
|
||||||
if (afc == 3) {
|
p = packet + 4;
|
||||||
|
if (has_adaptation) {
|
||||||
/* skip adapation field */
|
/* skip adapation field */
|
||||||
p += p[0] + 1;
|
p += p[0] + 1;
|
||||||
}
|
}
|
||||||
@ -1399,7 +1425,22 @@ static int handle_packets(MpegTSContext *ts, int nb_packets)
|
|||||||
{
|
{
|
||||||
AVFormatContext *s = ts->stream;
|
AVFormatContext *s = ts->stream;
|
||||||
uint8_t packet[TS_PACKET_SIZE];
|
uint8_t packet[TS_PACKET_SIZE];
|
||||||
int packet_num, ret;
|
int packet_num, ret = 0;
|
||||||
|
|
||||||
|
if (avio_tell(s->pb) != ts->last_pos) {
|
||||||
|
int i;
|
||||||
|
// av_dlog("Skipping after seek\n");
|
||||||
|
/* seek detected, flush pes buffer */
|
||||||
|
for (i = 0; i < NB_PID_MAX; i++) {
|
||||||
|
if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {
|
||||||
|
PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
|
||||||
|
av_freep(&pes->buffer);
|
||||||
|
ts->pids[i]->last_cc = -1;
|
||||||
|
pes->data_index = 0;
|
||||||
|
pes->state = MPEGTS_SKIP; /* skip until pes header */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ts->stop_parse = 0;
|
ts->stop_parse = 0;
|
||||||
packet_num = 0;
|
packet_num = 0;
|
||||||
@ -1411,12 +1452,13 @@ static int handle_packets(MpegTSContext *ts, int nb_packets)
|
|||||||
break;
|
break;
|
||||||
ret = read_packet(s, packet, ts->raw_packet_size);
|
ret = read_packet(s, packet, ts->raw_packet_size);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
break;
|
||||||
ret = handle_packet(ts, packet);
|
ret = handle_packet(ts, packet);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
ts->last_pos = avio_tell(s->pb);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mpegts_probe(AVProbeData *p)
|
static int mpegts_probe(AVProbeData *p)
|
||||||
@ -1511,7 +1553,7 @@ static int mpegts_read_header(AVFormatContext *s,
|
|||||||
/* normal demux */
|
/* normal demux */
|
||||||
|
|
||||||
/* first do a scaning to get all the services */
|
/* first do a scaning to get all the services */
|
||||||
if (avio_seek(pb, pos, SEEK_SET) < 0)
|
if (pb->seekable && avio_seek(pb, pos, SEEK_SET) < 0)
|
||||||
av_log(s, AV_LOG_ERROR, "Unable to seek back to the start\n");
|
av_log(s, AV_LOG_ERROR, "Unable to seek back to the start\n");
|
||||||
|
|
||||||
mpegts_open_section_filter(ts, SDT_PID, sdt_cb, ts, 1);
|
mpegts_open_section_filter(ts, SDT_PID, sdt_cb, ts, 1);
|
||||||
@ -1632,18 +1674,6 @@ static int mpegts_read_packet(AVFormatContext *s,
|
|||||||
MpegTSContext *ts = s->priv_data;
|
MpegTSContext *ts = s->priv_data;
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
if (avio_tell(s->pb) != ts->last_pos) {
|
|
||||||
/* seek detected, flush pes buffer */
|
|
||||||
for (i = 0; i < NB_PID_MAX; i++) {
|
|
||||||
if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {
|
|
||||||
PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
|
|
||||||
av_freep(&pes->buffer);
|
|
||||||
pes->data_index = 0;
|
|
||||||
pes->state = MPEGTS_SKIP; /* skip until pes header */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ts->pkt = pkt;
|
ts->pkt = pkt;
|
||||||
ret = handle_packets(ts, 0);
|
ret = handle_packets(ts, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
@ -1661,8 +1691,6 @@ static int mpegts_read_packet(AVFormatContext *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ts->last_pos = avio_tell(s->pb);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ static const AVOption options[]={
|
|||||||
#if FF_API_FLAG_RTP_HINT
|
#if FF_API_FLAG_RTP_HINT
|
||||||
{"rtphint", "add rtp hinting (deprecated, use the -movflags rtphint option instead)", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_RTP_HINT }, INT_MIN, INT_MAX, E, "fflags"},
|
{"rtphint", "add rtp hinting (deprecated, use the -movflags rtphint option instead)", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_RTP_HINT }, INT_MIN, INT_MAX, E, "fflags"},
|
||||||
#endif
|
#endif
|
||||||
|
{"discardcorrupt", "discard corrupted frames", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_DISCARD_CORRUPT }, INT_MIN, INT_MAX, D, "fflags"},
|
||||||
{"sortdts", "try to interleave outputted packets by dts", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},
|
{"sortdts", "try to interleave outputted packets by dts", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_SORT_DTS }, INT_MIN, INT_MAX, D, "fflags"},
|
||||||
{"keepside", "dont merge side data", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},
|
{"keepside", "dont merge side data", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_KEEP_SIDE_DATA }, INT_MIN, INT_MAX, D, "fflags"},
|
||||||
{"latm", "enable RTP MP4A-LATM payload", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},
|
{"latm", "enable RTP MP4A-LATM payload", 0, FF_OPT_TYPE_CONST, {.dbl = AVFMT_FLAG_MP4A_LATM }, INT_MIN, INT_MAX, E, "fflags"},
|
||||||
|
@ -738,8 +738,17 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((s->flags & AVFMT_FLAG_DISCARD_CORRUPT) &&
|
||||||
|
(pkt->flags & AV_PKT_FLAG_CORRUPT)) {
|
||||||
|
av_log(s, AV_LOG_WARNING,
|
||||||
|
"Dropped corrupted packet (stream = %d)\n",
|
||||||
|
pkt->stream_index);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
|
if(!(s->flags & AVFMT_FLAG_KEEP_SIDE_DATA))
|
||||||
av_packet_merge_side_data(pkt);
|
av_packet_merge_side_data(pkt);
|
||||||
|
|
||||||
st= s->streams[pkt->stream_index];
|
st= s->streams[pkt->stream_index];
|
||||||
|
|
||||||
switch(st->codec->codec_type){
|
switch(st->codec->codec_type){
|
||||||
|
@ -16,31 +16,31 @@
|
|||||||
0, 112500, 126720, 0xe572dfc9
|
0, 112500, 126720, 0xe572dfc9
|
||||||
0, 120000, 126720, 0xbc3cc34f
|
0, 120000, 126720, 0xbc3cc34f
|
||||||
0, 127500, 126720, 0xcf8cb0e2
|
0, 127500, 126720, 0xcf8cb0e2
|
||||||
0, 135000, 126720, 0x6d1c630d
|
0, 135000, 126720, 0x75ae61b6
|
||||||
0, 142500, 126720, 0x4338e469
|
0, 142500, 126720, 0x554fe3e4
|
||||||
0, 150000, 126720, 0x9d82ea38
|
0, 150000, 126720, 0x72ecea95
|
||||||
0, 157500, 126720, 0x55e0b559
|
0, 157500, 126720, 0x5d00b5fe
|
||||||
0, 165000, 126720, 0x5eefb5ef
|
0, 165000, 126720, 0xe39bba0d
|
||||||
0, 172500, 126720, 0x4b10b746
|
0, 172500, 126720, 0x9c21bad8
|
||||||
0, 180000, 126720, 0x8b07a1db
|
0, 180000, 126720, 0x72f2a47d
|
||||||
0, 187500, 126720, 0x8c639b34
|
0, 187500, 126720, 0x4f639ebe
|
||||||
0, 195000, 126720, 0x63eb0b9f
|
0, 195000, 126720, 0x534a10cc
|
||||||
0, 202500, 126720, 0x31c80c83
|
0, 202500, 126720, 0xfdca11d3
|
||||||
0, 210000, 126720, 0x78495352
|
0, 210000, 126720, 0x0c735615
|
||||||
0, 217500, 126720, 0x63d609c4
|
0, 217500, 126720, 0x0eaf0c1b
|
||||||
0, 225000, 126720, 0xcd2a62d8
|
0, 225000, 126720, 0xce5e6794
|
||||||
0, 232500, 126720, 0x4aea732d
|
0, 232500, 126720, 0x14cf7974
|
||||||
0, 240000, 126720, 0xe3bb352c
|
0, 240000, 126720, 0xbc513f2a
|
||||||
0, 247500, 126720, 0x4b9036ad
|
0, 247500, 126720, 0xbc303fae
|
||||||
0, 255000, 126720, 0x88b66e2d
|
0, 255000, 126720, 0xd9f67585
|
||||||
0, 262500, 126720, 0x4a8a1b16
|
0, 262500, 126720, 0x3378251f
|
||||||
0, 270000, 126720, 0x2e014eac
|
0, 270000, 126720, 0xb3ed5911
|
||||||
0, 277500, 126720, 0x83212c67
|
0, 277500, 126720, 0xc15a3577
|
||||||
0, 285000, 126720, 0x4937e897
|
0, 285000, 126720, 0x0a24f256
|
||||||
0, 292500, 126720, 0x2d38babe
|
0, 292500, 126720, 0xfab9c45d
|
||||||
0, 300000, 126720, 0xbcb43c09
|
0, 300000, 126720, 0x45464610
|
||||||
0, 307500, 126720, 0x955ffaf4
|
0, 307500, 126720, 0xfe2e057d
|
||||||
0, 315000, 126720, 0x3337d4a2
|
0, 315000, 126720, 0x23efdc35
|
||||||
0, 322500, 126720, 0xe8f58c33
|
0, 322500, 126720, 0x4d888b2e
|
||||||
0, 330000, 126720, 0x3a7f771f
|
0, 330000, 126720, 0xdd0d74df
|
||||||
0, 337500, 126720, 0xb67c39b9
|
0, 337500, 126720, 0x08382b8e
|
||||||
|
Loading…
x
Reference in New Issue
Block a user