Commit 7030fc76 authored by reimar's avatar reimar

Support playback of incorrectly cut DV files where the headers do not

start at the first byte.


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@17519 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 266a1416
......@@ -31,6 +31,7 @@
#include <time.h>
#include "avformat.h"
#include "libavcodec/dvdata.h"
#include "libavutil/intreadwrite.h"
#include "dv.h"
struct DVDemuxContext {
......@@ -399,13 +400,24 @@ typedef struct RawDVContext {
static int dv_read_header(AVFormatContext *s,
AVFormatParameters *ap)
{
unsigned state;
RawDVContext *c = s->priv_data;
c->dv_demux = dv_init_demux(s);
if (!c->dv_demux)
return -1;
if (get_buffer(s->pb, c->buf, DV_PROFILE_BYTES) <= 0 ||
state = get_be32(s->pb);
while ((state & 0xffffff7f) != 0x1f07003f) {
if (url_feof(s->pb)) {
av_log(s, AV_LOG_ERROR, "Cannot find DV header.\n");
return -1;
}
state = (state << 8) | get_byte(s->pb);
}
AV_WB32(c->buf, state);
if (get_buffer(s->pb, c->buf + 4, DV_PROFILE_BYTES - 4) <= 0 ||
url_fseek(s->pb, -DV_PROFILE_BYTES, SEEK_CUR) < 0)
return AVERROR(EIO);
......
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