|
|
@@ -692,6 +692,20 @@ fail: |
|
|
return ret; |
|
|
return ret; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int nut_read_close(AVFormatContext *s) |
|
|
|
|
|
{ |
|
|
|
|
|
NUTContext *nut = s->priv_data; |
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
|
|
av_freep(&nut->time_base); |
|
|
|
|
|
av_freep(&nut->stream); |
|
|
|
|
|
ff_nut_free_sp(nut); |
|
|
|
|
|
for (i = 1; i < nut->header_count; i++) |
|
|
|
|
|
av_freep(&nut->header[i]); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
static int nut_read_header(AVFormatContext *s) |
|
|
static int nut_read_header(AVFormatContext *s) |
|
|
{ |
|
|
{ |
|
|
NUTContext *nut = s->priv_data; |
|
|
NUTContext *nut = s->priv_data; |
|
|
@@ -707,7 +721,7 @@ static int nut_read_header(AVFormatContext *s) |
|
|
pos = find_startcode(bc, MAIN_STARTCODE, pos) + 1; |
|
|
pos = find_startcode(bc, MAIN_STARTCODE, pos) + 1; |
|
|
if (pos < 0 + 1) { |
|
|
if (pos < 0 + 1) { |
|
|
av_log(s, AV_LOG_ERROR, "No main startcode found.\n"); |
|
|
av_log(s, AV_LOG_ERROR, "No main startcode found.\n"); |
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
goto fail; |
|
|
} |
|
|
} |
|
|
} while (decode_main_header(nut) < 0); |
|
|
} while (decode_main_header(nut) < 0); |
|
|
|
|
|
|
|
|
@@ -717,7 +731,7 @@ static int nut_read_header(AVFormatContext *s) |
|
|
pos = find_startcode(bc, STREAM_STARTCODE, pos) + 1; |
|
|
pos = find_startcode(bc, STREAM_STARTCODE, pos) + 1; |
|
|
if (pos < 0 + 1) { |
|
|
if (pos < 0 + 1) { |
|
|
av_log(s, AV_LOG_ERROR, "Not all stream headers found.\n"); |
|
|
av_log(s, AV_LOG_ERROR, "Not all stream headers found.\n"); |
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
goto fail; |
|
|
} |
|
|
} |
|
|
if (decode_stream_header(nut) >= 0) |
|
|
if (decode_stream_header(nut) >= 0) |
|
|
initialized_stream_count++; |
|
|
initialized_stream_count++; |
|
|
@@ -731,7 +745,7 @@ static int nut_read_header(AVFormatContext *s) |
|
|
|
|
|
|
|
|
if (startcode == 0) { |
|
|
if (startcode == 0) { |
|
|
av_log(s, AV_LOG_ERROR, "EOF before video frames\n"); |
|
|
av_log(s, AV_LOG_ERROR, "EOF before video frames\n"); |
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
|
goto fail; |
|
|
} else if (startcode == SYNCPOINT_STARTCODE) { |
|
|
} else if (startcode == SYNCPOINT_STARTCODE) { |
|
|
nut->next_startcode = startcode; |
|
|
nut->next_startcode = startcode; |
|
|
break; |
|
|
break; |
|
|
@@ -754,6 +768,11 @@ static int nut_read_header(AVFormatContext *s) |
|
|
ff_metadata_conv_ctx(s, NULL, ff_nut_metadata_conv); |
|
|
ff_metadata_conv_ctx(s, NULL, ff_nut_metadata_conv); |
|
|
|
|
|
|
|
|
return 0; |
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
fail: |
|
|
|
|
|
nut_read_close(s); |
|
|
|
|
|
|
|
|
|
|
|
return AVERROR_INVALIDDATA; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, |
|
|
static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, |
|
|
@@ -1028,20 +1047,6 @@ static int read_seek(AVFormatContext *s, int stream_index, |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static int nut_read_close(AVFormatContext *s) |
|
|
|
|
|
{ |
|
|
|
|
|
NUTContext *nut = s->priv_data; |
|
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
|
|
av_freep(&nut->time_base); |
|
|
|
|
|
av_freep(&nut->stream); |
|
|
|
|
|
ff_nut_free_sp(nut); |
|
|
|
|
|
for (i = 1; i < nut->header_count; i++) |
|
|
|
|
|
av_freep(&nut->header[i]); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
AVInputFormat ff_nut_demuxer = { |
|
|
AVInputFormat ff_nut_demuxer = { |
|
|
.name = "nut", |
|
|
.name = "nut", |
|
|
.long_name = NULL_IF_CONFIG_SMALL("NUT"), |
|
|
.long_name = NULL_IF_CONFIG_SMALL("NUT"), |
|
|
|