Compare commits

...

20 Commits

Author SHA1 Message Date
50032a75d6 Changelog for 0.10.5
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 03:09:28 +02:00
eed53a38c9 Update for 0.10.5
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 02:34:55 +02:00
501e60dcf5 bmv_videodec: fix out of array read
Fixes Ticket1373

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 70f0ffa1ed)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d721cb009d)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 01:08:24 +02:00
d36c706b86 faxcompr: fix out of array read
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 5891e454a6)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 55b3e408fa)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 01:08:24 +02:00
fcb8bbf264 escape124: fix integer overflow leading to excessive memory allocation
Fixes Ticket1629

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 3d7817048c)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 9f1e01c991)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 01:08:24 +02:00
38c5e8fec5 sp5xdec: fix off by 1 error causing a crash
Fixes Ticket1633

Found-by: Piotr Bandurski <ami_stuff@o2.pl>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit f0896a6bd9)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 450e4b1a60)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 01:08:24 +02:00
1301942248 mpegaudio_parser: reset state to prevent it to be random
Fixes Ticket1718

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 93b240f4a5)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 3581ab6ce0)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 01:08:24 +02:00
e2c7b37fd2 pthread: Avoid crashes/odd behavior caused by spurious wakeups
pthread_wait_cond can wake up for no reason (Wikipedia: Spurious_wakeup).
The FF_THREAD_SLICE thread mechanism could spontaneously execute jobs or
allow the caller of avctx->execute to return before all jobs were complete.
This adds tests to both cases to ensure the wakeup is real.

Signed-off-by: Ben Jackson <ben@ben.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit e3329474a3)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit f1ec792ae3)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 01:08:24 +02:00
7f90fe1b4b Merge remote-tracking branch 'qatar/release/0.8' into release/0.10
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-19 00:54:30 +02:00
2cf6afffe5 Fix muxing mjpeg in swf.
(cherry picked from commit 7680d99b43)
2012-09-13 09:21:55 +02:00
50e6e494c9 build: Fix some paths in uninstall-libs
Folder and file names weren't being separated with a slash.
This resulted in .dll.a, .lib and .def files not being removed on uninstall.

Signed-off-by: Alexander Strasser <eclipse7@gmx.net>
(cherry picked from commit 49440853d0)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-13 04:47:57 +02:00
0f54c97f58 dxva2: include dxva.h if found
Apparently, some build environments require dxva.h even for dxva2,
while others lack this header entirely.  Including it conditionally
allows building in both cases.

Signed-off-by: Martin Storsjö <martin@martin.st>
(cherry picked from commit fa84506177)

Conflicts:

	configure

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-13 04:45:36 +02:00
a1f678f7ca asfenc: properly write index information
The index must take into account the pre-roll time and must seek backwards,
not forwards.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit bd603494f9)

Conflicts:

	tests/ref/lavf/asf
	tests/ref/seek/lavf_asf

Fixes Ticket1563

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-12 16:48:59 +02:00
94905d2af6 asfenc: remove useless casts
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit bc13b74992)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-12 16:37:05 +02:00
b04fbd2cd2 asfenc: reduce code duplication with new variable
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit f2fad251b8)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-12 16:36:57 +02:00
f7b045db09 asfenc: rename some variables
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 1ceff0859d)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-12 16:36:46 +02:00
de1591b167 asfenc: realloc index_ptr fewer times
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 97d36a1898)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2012-09-12 16:35:56 +02:00
c7b73724c7 Clarify that -passlogfile has a different syntax when used with -vcodec libx264. 2012-08-31 14:17:01 +02:00
2fb4be9a99 mov: set AVCodecContext.width/height for h264
This is required for correct cropping of files from Canon
cameras.

Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit 8aa93e9004)

Signed-off-by: Reinhard Tartler <siretart@tauware.de>
2012-06-10 11:22:57 +02:00
e1608014c5 h264: allow cropping to AVCodecContext.width/height
Override the frame size from the SPS with AVCodecContext values
if the latter specify a size smaller by less than one macroblock.
This is required for correct cropping of MOV files from Canon cameras.

Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit 30f515091c)

Conflicts:

	libavcodec/h264.c
2012-06-10 09:47:45 +02:00
19 changed files with 101 additions and 51 deletions

View File

@ -3,6 +3,11 @@ releases are sorted from youngest to oldest.
version next:
version 0.10.5:
- Several bugs and crashes have been fixed as well as build problems
with recent mingw64
version 0.10.4:

View File

@ -31,7 +31,7 @@ PROJECT_NAME = FFmpeg
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = 0.10.4
PROJECT_NUMBER = 0.10.5
# With the PROJECT_LOGO tag one can specify an logo or icon that is included
# in the documentation. The maximum height of the logo should not exceed 55

View File

@ -1 +1 @@
0.10.4
0.10.5

View File

@ -1 +1 @@
0.10.4
0.10.5

2
configure vendored
View File

@ -1168,6 +1168,7 @@ HAVE_LIST="
dlfcn_h
dlopen
dos_paths
dxva_h
ebp_available
ebx_available
exp2
@ -3047,6 +3048,7 @@ check_func_headers windows.h MapViewOfFile
check_func_headers windows.h VirtualAlloc
check_header dlfcn.h
check_header dxva.h
check_header dxva2api.h -D_WIN32_WINNT=0x0600
check_header libcrystalhd/libcrystalhd_if.h
check_header malloc.h

View File

@ -407,6 +407,10 @@ prefix is ``ffmpeg2pass''. The complete file name will be
@file{PREFIX-N.log}, where N is a number specific to the output
stream
Note that this option is overwritten by a local option of the same name
when using @code{-vcodec libx264}. That option maps to the x264 option stats
which has a different syntax.
@item -vlang @var{code}
Set the ISO 639 language code (3 letters) of the current video stream.

View File

@ -268,6 +268,11 @@ static av_cold int decode_init(AVCodecContext *avctx)
c->avctx = avctx;
avctx->pix_fmt = PIX_FMT_PAL8;
if (avctx->width != SCREEN_WIDE || avctx->height != SCREEN_HIGH) {
av_log(avctx, AV_LOG_ERROR, "Invalid dimension %dx%d\n", avctx->width, avctx->height);
return AVERROR_INVALIDDATA;
}
c->pic.reference = 1;
if (avctx->get_buffer(avctx, &c->pic) < 0) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");

View File

@ -25,7 +25,14 @@
#define _WIN32_WINNT 0x0600
#define COBJMACROS
#include "config.h"
#include "dxva2.h"
#if HAVE_DXVA_H
#include <dxva.h>
#endif
#include "avcodec.h"
#include "mpegvideo.h"

View File

@ -48,7 +48,7 @@ typedef struct Escape124Context {
CodeBook codebooks[3];
} Escape124Context;
static int can_safely_read(GetBitContext* gb, int bits) {
static int can_safely_read(GetBitContext* gb, uint64_t bits) {
return get_bits_left(gb) >= bits;
}
@ -90,7 +90,7 @@ static CodeBook unpack_codebook(GetBitContext* gb, unsigned depth,
unsigned i, j;
CodeBook cb = { 0 };
if (!can_safely_read(gb, size * 34))
if (!can_safely_read(gb, size * 34L))
return cb;
if (size >= INT_MAX / sizeof(MacroBlock))

View File

@ -228,7 +228,7 @@ static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb,
mode = !mode;
}
//sync line pointers
while(run_off <= offs){
while(offs < width && run_off <= offs){
run_off += *ref++;
run_off += *ref++;
}

View File

@ -53,6 +53,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
int inc= FFMIN(buf_size - i, s->frame_size);
i += inc;
s->frame_size -= inc;
state = 0;
if(!s->frame_size){
next= i;

View File

@ -79,6 +79,7 @@ typedef struct ThreadContext {
pthread_cond_t current_job_cond;
pthread_mutex_t current_job_lock;
int current_job;
unsigned int current_execute;
int done;
} ThreadContext;
@ -203,6 +204,7 @@ static void* attribute_align_arg worker(void *v)
AVCodecContext *avctx = v;
ThreadContext *c = avctx->thread_opaque;
int our_job = c->job_count;
int last_execute = 0;
int thread_count = avctx->thread_count;
int self_id;
@ -213,7 +215,9 @@ static void* attribute_align_arg worker(void *v)
if (c->current_job == thread_count + c->job_count)
pthread_cond_signal(&c->last_job_cond);
pthread_cond_wait(&c->current_job_cond, &c->current_job_lock);
while (last_execute == c->current_execute && !c->done)
pthread_cond_wait(&c->current_job_cond, &c->current_job_lock);
last_execute = c->current_execute;
our_job = self_id;
if (c->done) {
@ -233,7 +237,8 @@ static void* attribute_align_arg worker(void *v)
static av_always_inline void avcodec_thread_park_workers(ThreadContext *c, int thread_count)
{
pthread_cond_wait(&c->last_job_cond, &c->current_job_lock);
while (c->current_job != thread_count + c->job_count)
pthread_cond_wait(&c->last_job_cond, &c->current_job_lock);
pthread_mutex_unlock(&c->current_job_lock);
}
@ -282,6 +287,7 @@ static int avcodec_thread_execute(AVCodecContext *avctx, action_func* func, void
c->rets = &dummy_ret;
c->rets_count = 1;
}
c->current_execute++;
pthread_cond_broadcast(&c->current_job_cond);
avcodec_thread_park_workers(c, avctx->thread_count);

View File

@ -72,7 +72,7 @@ static int sp5x_decode_frame(AVCodecContext *avctx,
for (i = 2; i < buf_size-2 && j < buf_size+1024-2; i++)
recoded[j++] = buf[i];
else
for (i = 14; i < buf_size && j < buf_size+1024-2; i++)
for (i = 14; i < buf_size && j < buf_size+1024-3; i++)
{
recoded[j++] = buf[i];
if (buf[i] == 0xff)

View File

@ -30,7 +30,7 @@
#define ASF_INDEXED_INTERVAL 10000000
#define ASF_INDEX_BLOCK 600
#define ASF_INDEX_BLOCK (1<<9)
#define ASF_PACKET_ERROR_CORRECTION_DATA_SIZE 0x2
#define ASF_PACKET_ERROR_CORRECTION_FLAGS (\
@ -208,11 +208,13 @@ typedef struct {
/* only for reading */
uint64_t data_offset; ///< beginning of the first data packet
int64_t last_indexed_pts;
ASFIndex* index_ptr;
uint32_t nb_index_count;
uint32_t nb_index_memory_alloc;
uint16_t maximum_packet;
uint32_t next_packet_number;
uint16_t next_packet_count;
int next_start_sec;
int end_sec;
} ASFContext;
static const AVCodecTag codec_asf_bmp_tags[] = {
@ -557,10 +559,8 @@ static int asf_write_header(AVFormatContext *s)
s->packet_size = PACKET_SIZE;
asf->nb_packets = 0;
asf->last_indexed_pts = 0;
asf->index_ptr = av_malloc( sizeof(ASFIndex) * ASF_INDEX_BLOCK );
asf->nb_index_memory_alloc = ASF_INDEX_BLOCK;
asf->nb_index_count = 0;
asf->maximum_packet = 0;
/* the data-chunk-size has to be 50, which is data_size - asf->data_offset
@ -782,14 +782,42 @@ static void put_frame(
stream->seq++;
}
static void update_index(AVFormatContext *s, int start_sec,
uint32_t packet_number, uint16_t packet_count)
{
ASFContext *asf = s->priv_data;
if (start_sec > asf->next_start_sec) {
int i;
if (!asf->next_start_sec) {
asf->next_packet_number = packet_number;
asf->next_packet_count = packet_count;
}
if (start_sec > asf->nb_index_memory_alloc) {
asf->nb_index_memory_alloc = (start_sec + ASF_INDEX_BLOCK) & ~(ASF_INDEX_BLOCK - 1);
asf->index_ptr = av_realloc( asf->index_ptr, sizeof(ASFIndex) * asf->nb_index_memory_alloc );
}
for (i = asf->next_start_sec; i < start_sec; i++) {
asf->index_ptr[i].packet_number = asf->next_packet_number;
asf->index_ptr[i].packet_count = asf->next_packet_count;
}
}
asf->maximum_packet = FFMAX(asf->maximum_packet, packet_count);
asf->next_packet_number = packet_number;
asf->next_packet_count = packet_count;
asf->next_start_sec = start_sec;
}
static int asf_write_packet(AVFormatContext *s, AVPacket *pkt)
{
ASFContext *asf = s->priv_data;
ASFStream *stream;
int64_t duration;
AVCodecContext *codec;
int64_t packet_st,pts;
int start_sec,i;
uint32_t packet_number;
int64_t pts;
int start_sec;
int flags= pkt->flags;
codec = s->streams[pkt->stream_index]->codec;
@ -800,30 +828,22 @@ static int asf_write_packet(AVFormatContext *s, AVPacket *pkt)
pts = (pkt->pts != AV_NOPTS_VALUE) ? pkt->pts : pkt->dts;
assert(pts != AV_NOPTS_VALUE);
duration = pts * 10000;
asf->duration= FFMAX(asf->duration, duration + pkt->duration * 10000);
pts *= 10000;
asf->duration= FFMAX(asf->duration, pts + pkt->duration * 10000);
packet_st = asf->nb_packets;
packet_number = asf->nb_packets;
put_frame(s, stream, s->streams[pkt->stream_index], pkt->dts, pkt->data, pkt->size, flags);
start_sec = (int)((PREROLL_TIME * 10000 + pts + ASF_INDEXED_INTERVAL - 1)
/ ASF_INDEXED_INTERVAL);
/* check index */
if ((!asf->is_streamed) && (flags & AV_PKT_FLAG_KEY)) {
start_sec = (int)(duration / INT64_C(10000000));
if (start_sec != (int)(asf->last_indexed_pts / INT64_C(10000000))) {
for(i=asf->nb_index_count;i<start_sec;i++) {
if (i>=asf->nb_index_memory_alloc) {
asf->nb_index_memory_alloc += ASF_INDEX_BLOCK;
asf->index_ptr = (ASFIndex*)av_realloc( asf->index_ptr, sizeof(ASFIndex) * asf->nb_index_memory_alloc );
}
// store
asf->index_ptr[i].packet_number = (uint32_t)packet_st;
asf->index_ptr[i].packet_count = (uint16_t)(asf->nb_packets-packet_st);
asf->maximum_packet = FFMAX(asf->maximum_packet, (uint16_t)(asf->nb_packets-packet_st));
}
asf->nb_index_count = start_sec;
asf->last_indexed_pts = duration;
}
uint16_t packet_count = asf->nb_packets - packet_number;
update_index(s, start_sec, packet_number, packet_count);
}
asf->end_sec = start_sec;
return 0;
}
@ -858,8 +878,9 @@ static int asf_write_trailer(AVFormatContext *s)
/* write index */
data_size = avio_tell(s->pb);
if ((!asf->is_streamed) && (asf->nb_index_count != 0)) {
asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->nb_index_count);
if (!asf->is_streamed && asf->next_start_sec) {
update_index(s, asf->end_sec + 1, 0, 0);
asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->next_start_sec);
}
avio_flush(s->pb);

View File

@ -2071,9 +2071,6 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#if CONFIG_H263_DECODER
case CODEC_ID_H263:
#endif
#if CONFIG_H264_DECODER
case CODEC_ID_H264:
#endif
#if CONFIG_MPEG4_DECODER
case CODEC_ID_MPEG4:
#endif

View File

@ -498,8 +498,10 @@ static int swf_write_trailer(AVFormatContext *s)
avio_wl32(pb, file_size);
avio_seek(pb, swf->duration_pos, SEEK_SET);
avio_wl16(pb, swf->video_frame_number);
if (swf->vframes_pos) {
avio_seek(pb, swf->vframes_pos, SEEK_SET);
avio_wl16(pb, swf->video_frame_number);
}
avio_seek(pb, file_size, SEEK_SET);
}
return 0;

View File

@ -84,8 +84,8 @@ uninstall-libs::
-$(RM) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR)" \
"$(SHLIBDIR)/$(SLIBNAME)" \
"$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)"
-$(RM) $(SLIB_INSTALL_EXTRA_SHLIB:%="$(SHLIBDIR)"%)
-$(RM) $(SLIB_INSTALL_EXTRA_LIB:%="$(LIBDIR)"%)
-$(RM) $(SLIB_INSTALL_EXTRA_SHLIB:%="$(SHLIBDIR)/%")
-$(RM) $(SLIB_INSTALL_EXTRA_LIB:%="$(LIBDIR)/%")
-$(RM) "$(LIBDIR)/$(LIBNAME)"
uninstall-headers::

View File

@ -1,3 +1,3 @@
3d410176ebf9ffdf99d2738922cef260 *./tests/data/lavf/lavf.asf
333489 ./tests/data/lavf/lavf.asf
cee474c51df8a3e67d01b733cafbb7e8 *./tests/data/lavf/lavf.asf
333581 ./tests/data/lavf/lavf.asf
./tests/data/lavf/lavf.asf CRC=0x9f5ab3e6

View File

@ -2,9 +2,9 @@ ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st:-1 flags:0 ts:-1.000000
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st:-1 flags:1 ts: 1.894167
ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size: 209
ret: 0 st: 0 flags:0 ts: 0.788000
ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size: 209
ret: 0 st: 0 flags:1 ts:-0.317000
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st: 1 flags:0 ts: 2.577000
@ -22,11 +22,11 @@ ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st: 1 flags:0 ts:-0.058000
ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 29489 size: 208
ret: 0 st: 1 flags:1 ts: 2.836000
ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size: 209
ret: 0 st: 1 flags:1 dts: 0.862000 pts: 0.862000 pos: 279089 size: 209
ret: 0 st:-1 flags:0 ts: 1.730004
ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st:-1 flags:1 ts: 0.624171
ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size: 209
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st: 0 flags:0 ts:-0.482000
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st: 0 flags:1 ts: 2.413000
@ -34,19 +34,19 @@ ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st: 1 flags:0 ts: 1.307000
ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size: 209
ret: 0 st: 1 flags:1 ts: 0.201000
ret: 0 st: 1 flags:1 dts: 0.183000 pts: 0.183000 pos: 71089 size: 209
ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size: 209
ret: 0 st:-1 flags:0 ts:-0.904994
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st:-1 flags:1 ts: 1.989173
ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st: 0 flags:0 ts: 0.883000
ret: 0 st: 1 flags:1 dts: 0.940000 pts: 0.940000 pos: 301489 size: 209
ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size: 209
ret: 0 st: 0 flags:1 ts:-0.222000
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 689 size: 28487
ret: 0 st: 1 flags:0 ts: 2.672000
ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size: 209
ret: 0 st: 1 flags:1 ts: 1.566000
ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: 330289 size: 209
ret: 0 st: 1 flags:1 dts: 0.862000 pts: 0.862000 pos: 279089 size: 209
ret: 0 st:-1 flags:0 ts: 0.460008
ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147889 size: 209
ret: 0 st:-1 flags:1 ts:-0.645825