nutdec: K&R formatting cosmetics

Signed-off-by: Diego Biurrun <diego@biurrun.de>
pull/5/head
Asen Lekov 13 years ago committed by Diego Biurrun
parent a40ba3afe8
commit a559d65c07
  1. 242
      libavformat/nutdec.c

@ -33,7 +33,8 @@
#define NUT_MAX_STREAMS 256 /* arbitrary sanity check value */
static int get_str(AVIOContext *bc, char *string, unsigned int maxlen){
static int get_str(AVIOContext *bc, char *string, unsigned int maxlen)
{
unsigned int len = ffio_read_varlen(bc);
if (len && maxlen)
@ -52,40 +53,56 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen){
return 0;
}
static int64_t get_s(AVIOContext *bc){
static int64_t get_s(AVIOContext *bc)
{
int64_t v = ffio_read_varlen(bc) + 1;
if (v&1) return -(v>>1);
else return (v>>1);
if (v & 1)
return -(v >> 1);
else
return (v >> 1);
}
static uint64_t get_fourcc(AVIOContext *bc){
static uint64_t get_fourcc(AVIOContext *bc)
{
unsigned int len = ffio_read_varlen(bc);
if (len==2) return avio_rl16(bc);
else if(len==4) return avio_rl32(bc);
else return -1;
if (len == 2)
return avio_rl16(bc);
else if (len == 4)
return avio_rl32(bc);
else
return -1;
}
#ifdef TRACE
static inline uint64_t get_v_trace(AVIOContext *bc, char *file, char *func, int line){
static inline uint64_t get_v_trace(AVIOContext *bc, char *file,
char *func, int line)
{
uint64_t v = ffio_read_varlen(bc);
av_log(NULL, AV_LOG_DEBUG, "get_v %5"PRId64" / %"PRIX64" in %s %s:%d\n", v, v, file, func, line);
av_log(NULL, AV_LOG_DEBUG, "get_v %5"PRId64" / %"PRIX64" in %s %s:%d\n",
v, v, file, func, line);
return v;
}
static inline int64_t get_s_trace(AVIOContext *bc, char *file, char *func, int line){
static inline int64_t get_s_trace(AVIOContext *bc, char *file,
char *func, int line)
{
int64_t v = get_s(bc);
av_log(NULL, AV_LOG_DEBUG, "get_s %5"PRId64" / %"PRIX64" in %s %s:%d\n", v, v, file, func, line);
av_log(NULL, AV_LOG_DEBUG, "get_s %5"PRId64" / %"PRIX64" in %s %s:%d\n",
v, v, file, func, line);
return v;
}
static inline uint64_t get_vb_trace(AVIOContext *bc, char *file, char *func, int line){
static inline uint64_t get_vb_trace(AVIOContext *bc, char *file,
char *func, int line)
{
uint64_t v = get_vb(bc);
av_log(NULL, AV_LOG_DEBUG, "get_vb %5"PRId64" / %"PRIX64" in %s %s:%d\n", v, v, file, func, line);
av_log(NULL, AV_LOG_DEBUG, "get_vb %5"PRId64" / %"PRIX64" in %s %s:%d\n",
v, v, file, func, line);
return v;
}
#define ffio_read_varlen(bc) get_v_trace(bc, __FILE__, __PRETTY_FUNCTION__, __LINE__)
@ -93,7 +110,8 @@ static inline uint64_t get_vb_trace(AVIOContext *bc, char *file, char *func, int
#define get_vb(bc) get_vb_trace(bc, __FILE__, __PRETTY_FUNCTION__, __LINE__)
#endif
static int get_packetheader(NUTContext *nut, AVIOContext *bc, int calculate_checksum, uint64_t startcode)
static int get_packetheader(NUTContext *nut, AVIOContext *bc,
int calculate_checksum, uint64_t startcode)
{
int64_t size;
// start = avio_tell(bc) - 8;
@ -113,12 +131,14 @@ static int get_packetheader(NUTContext *nut, AVIOContext *bc, int calculate_chec
return size;
}
static uint64_t find_any_startcode(AVIOContext *bc, int64_t pos){
static uint64_t find_any_startcode(AVIOContext *bc, int64_t pos)
{
uint64_t state = 0;
if (pos >= 0)
avio_seek(bc, pos, SEEK_SET); //note, this may fail if the stream is not seekable, but that should not matter, as in this case we simply start where we currently are
/* Note, this may fail if the stream is not seekable, but that should
* not matter, as in this case we simply start where we currently are */
avio_seek(bc, pos, SEEK_SET);
while (!bc->eof_reached) {
state = (state << 8) | avio_r8(bc);
if ((state >> 56) != 'N')
@ -142,7 +162,8 @@ static uint64_t find_any_startcode(AVIOContext *bc, int64_t pos){
* @param pos the start position of the search, or -1 if the current position
* @return the position of the startcode or -1 if not found
*/
static int64_t find_startcode(AVIOContext *bc, uint64_t code, int64_t pos){
static int64_t find_startcode(AVIOContext *bc, uint64_t code, int64_t pos)
{
for (;;) {
uint64_t startcode = find_any_startcode(bc, pos);
if (startcode == code)
@ -153,7 +174,8 @@ static int64_t find_startcode(AVIOContext *bc, uint64_t code, int64_t pos){
}
}
static int nut_probe(AVProbeData *p){
static int nut_probe(AVProbeData *p)
{
int i;
uint64_t code = 0;
@ -173,7 +195,8 @@ static int nut_probe(AVProbeData *p){
} \
dst = tmp;
static int skip_reserved(AVIOContext *bc, int64_t pos){
static int skip_reserved(AVIOContext *bc, int64_t pos)
{
pos -= avio_tell(bc);
if (pos < 0) {
avio_seek(bc, pos, SEEK_CUR);
@ -185,12 +208,14 @@ static int skip_reserved(AVIOContext *bc, int64_t pos){
}
}
static int decode_main_header(NUTContext *nut){
static int decode_main_header(NUTContext *nut)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
uint64_t tmp, end;
unsigned int stream_count;
int i, j, tmp_stream, tmp_mul, tmp_pts, tmp_size, count, tmp_res, tmp_head_idx;
int i, j, count;
int tmp_stream, tmp_mul, tmp_pts, tmp_size, tmp_res, tmp_head_idx;
end = get_packetheader(nut, bc, 1, MAIN_STARTCODE);
end += avio_tell(bc);
@ -222,17 +247,29 @@ static int decode_main_header(NUTContext *nut){
for (i = 0; i < 256;) {
int tmp_flags = ffio_read_varlen(bc);
int tmp_fields = ffio_read_varlen(bc);
if(tmp_fields>0) tmp_pts = get_s(bc);
if(tmp_fields>1) tmp_mul = ffio_read_varlen(bc);
if(tmp_fields>2) tmp_stream= ffio_read_varlen(bc);
if(tmp_fields>3) tmp_size = ffio_read_varlen(bc);
else tmp_size = 0;
if(tmp_fields>4) tmp_res = ffio_read_varlen(bc);
else tmp_res = 0;
if(tmp_fields>5) count = ffio_read_varlen(bc);
else count = tmp_mul - tmp_size;
if(tmp_fields>6) get_s(bc);
if(tmp_fields>7) tmp_head_idx= ffio_read_varlen(bc);
if (tmp_fields > 0)
tmp_pts = get_s(bc);
if (tmp_fields > 1)
tmp_mul = ffio_read_varlen(bc);
if (tmp_fields > 2)
tmp_stream = ffio_read_varlen(bc);
if (tmp_fields > 3)
tmp_size = ffio_read_varlen(bc);
else
tmp_size = 0;
if (tmp_fields > 4)
tmp_res = ffio_read_varlen(bc);
else
tmp_res = 0;
if (tmp_fields > 5)
count = ffio_read_varlen(bc);
else
count = tmp_mul - tmp_size;
if (tmp_fields > 6)
get_s(bc);
if (tmp_fields > 7)
tmp_head_idx = ffio_read_varlen(bc);
while (tmp_fields-- > 8)
ffio_read_varlen(bc);
@ -286,14 +323,14 @@ static int decode_main_header(NUTContext *nut){
}
nut->stream = av_mallocz(sizeof(StreamContext) * stream_count);
for(i=0; i<stream_count; i++){
for (i = 0; i < stream_count; i++)
avformat_new_stream(s, NULL);
}
return 0;
}
static int decode_stream_header(NUTContext *nut){
static int decode_stream_header(NUTContext *nut)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
StreamContext *stc;
@ -306,7 +343,6 @@ static int decode_stream_header(NUTContext *nut){
GET_V(stream_id, tmp < s->nb_streams && !nut->stream[tmp].time_base);
stc = &nut->stream[stream_id];
st = s->streams[stream_id];
if (!st)
return AVERROR(ENOMEM);
@ -314,12 +350,14 @@ static int decode_stream_header(NUTContext *nut){
class = ffio_read_varlen(bc);
tmp = get_fourcc(bc);
st->codec->codec_tag = tmp;
switch(class)
{
switch (class) {
case 0:
st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
st->codec->codec_id = av_codec_get_id(
(const AVCodecTag * const []) { ff_codec_bmp_tags, ff_nut_video_tags, 0 },
st->codec->codec_id = av_codec_get_id((const AVCodecTag * const []) {
ff_codec_bmp_tags,
ff_nut_video_tags,
0
},
tmp);
break;
case 1:
@ -338,7 +376,8 @@ static int decode_stream_header(NUTContext *nut){
return -1;
}
if (class < 3 && st->codec->codec_id == CODEC_ID_NONE)
av_log(s, AV_LOG_ERROR, "Unknown codec tag '0x%04x' for stream number %d\n",
av_log(s, AV_LOG_ERROR,
"Unknown codec tag '0x%04x' for stream number %d\n",
(unsigned int) tmp, stream_id);
GET_V(stc->time_base_id, tmp < nut->time_base_count);
@ -350,7 +389,8 @@ static int decode_stream_header(NUTContext *nut){
GET_V(st->codec->extradata_size, tmp < (1 << 30));
if (st->codec->extradata_size) {
st->codec->extradata= av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
st->codec->extradata = av_mallocz(st->codec->extradata_size +
FF_INPUT_BUFFER_PADDING_SIZE);
avio_read(bc, st->codec->extradata, st->codec->extradata_size);
}
@ -360,7 +400,8 @@ static int decode_stream_header(NUTContext *nut){
st->sample_aspect_ratio.num = ffio_read_varlen(bc);
st->sample_aspect_ratio.den = ffio_read_varlen(bc);
if ((!st->sample_aspect_ratio.num) != (!st->sample_aspect_ratio.den)) {
av_log(s, AV_LOG_ERROR, "invalid aspect ratio %d/%d\n", st->sample_aspect_ratio.num, st->sample_aspect_ratio.den);
av_log(s, AV_LOG_ERROR, "invalid aspect ratio %d/%d\n",
st->sample_aspect_ratio.num, st->sample_aspect_ratio.den);
return -1;
}
ffio_read_varlen(bc); /* csp type */
@ -370,20 +411,24 @@ static int decode_stream_header(NUTContext *nut){
GET_V(st->codec->channels, tmp > 0)
}
if (skip_reserved(bc, end) || ffio_get_checksum(bc)) {
av_log(s, AV_LOG_ERROR, "stream header %d checksum mismatch\n", stream_id);
av_log(s, AV_LOG_ERROR,
"stream header %d checksum mismatch\n", stream_id);
return -1;
}
stc->time_base = &nut->time_base[stc->time_base_id];
avpriv_set_pts_info(s->streams[stream_id], 63, stc->time_base->num, stc->time_base->den);
avpriv_set_pts_info(s->streams[stream_id], 63, stc->time_base->num,
stc->time_base->den);
return 0;
}
static void set_disposition_bits(AVFormatContext* avf, char* value, int stream_id){
static void set_disposition_bits(AVFormatContext *avf, char *value,
int stream_id)
{
int flag = 0, i;
for (i=0; ff_nut_dispositions[i].flag; ++i) {
for (i = 0; ff_nut_dispositions[i].flag; ++i)
if (!strcmp(ff_nut_dispositions[i].str, value))
flag = ff_nut_dispositions[i].flag;
}
if (!flag)
av_log(avf, AV_LOG_INFO, "unknown disposition type '%s'\n", value);
for (i = 0; i < avf->nb_streams; ++i)
@ -391,7 +436,8 @@ static void set_disposition_bits(AVFormatContext* avf, char* value, int stream_i
avf->streams[i]->disposition |= flag;
}
static int decode_info_header(NUTContext *nut){
static int decode_info_header(NUTContext *nut)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
uint64_t tmp, chapter_start, chapter_len;
@ -416,7 +462,8 @@ static int decode_info_header(NUTContext *nut){
if (chapter_id && !stream_id_plus1) {
int64_t start = chapter_start / nut->time_base_count;
chapter = avpriv_new_chapter(s, chapter_id,
nut->time_base[chapter_start % nut->time_base_count],
nut->time_base[chapter_start %
nut->time_base_count],
start, start + chapter_len, NULL);
metadata = &chapter->metadata;
} else if (stream_id_plus1) {
@ -458,8 +505,8 @@ static int decode_info_header(NUTContext *nut){
set_disposition_bits(s, str_value, stream_id_plus1 - 1);
continue;
}
if(metadata && av_strcasecmp(name,"Uses")
&& av_strcasecmp(name,"Depends") && av_strcasecmp(name,"Replaces"))
if (metadata && av_strcasecmp(name, "Uses") &&
av_strcasecmp(name, "Depends") && av_strcasecmp(name, "Replaces"))
av_dict_set(metadata, name, str_value, 0);
}
}
@ -471,7 +518,8 @@ static int decode_info_header(NUTContext *nut){
return 0;
}
static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){
static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
int64_t end, tmp;
@ -486,20 +534,23 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){
if (*back_ptr < 0)
return -1;
ff_nut_reset_ts(nut, nut->time_base[tmp % nut->time_base_count], tmp / nut->time_base_count);
ff_nut_reset_ts(nut, nut->time_base[tmp % nut->time_base_count],
tmp / nut->time_base_count);
if (skip_reserved(bc, end) || ffio_get_checksum(bc)) {
av_log(s, AV_LOG_ERROR, "sync point checksum mismatch\n");
return -1;
}
*ts= tmp / s->nb_streams * av_q2d(nut->time_base[tmp % s->nb_streams])*AV_TIME_BASE;
*ts = tmp / s->nb_streams *
av_q2d(nut->time_base[tmp % s->nb_streams]) * AV_TIME_BASE;
ff_nut_add_sp(nut, nut->last_syncpoint_pos, *back_ptr, *ts);
return 0;
}
static int find_and_decode_index(NUTContext *nut){
static int find_and_decode_index(NUTContext *nut)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
uint64_t tmp, end;
@ -572,13 +623,8 @@ static int find_and_decode_index(NUTContext *nut){
// eor_pts[j][i] = last_pts + A + B
} else
B = 0;
av_add_index_entry(
s->streams[i],
16*syncpoints[j-1],
last_pts + A,
0,
0,
AVINDEX_KEYFRAME);
av_add_index_entry(s->streams[i], 16 * syncpoints[j - 1],
last_pts + A, 0, 0, AVINDEX_KEYFRAME);
last_pts += A + B;
}
}
@ -590,6 +636,7 @@ static int find_and_decode_index(NUTContext *nut){
goto fail;
}
ret = 0;
fail:
av_free(syncpoints);
av_free(has_keyframe);
@ -660,7 +707,9 @@ static int nut_read_header(AVFormatContext *s)
return 0;
}
static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, uint8_t *header_idx, int frame_code){
static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id,
uint8_t *header_idx, int frame_code)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
StreamContext *stc;
@ -668,7 +717,9 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, ui
uint64_t tmp;
if (avio_tell(bc) > nut->last_syncpoint_pos + nut->max_distance) {
av_log(s, AV_LOG_ERROR, "Last frame must have been damaged %"PRId64" > %"PRId64" + %d\n", avio_tell(bc), nut->last_syncpoint_pos, nut->max_distance);
av_log(s, AV_LOG_ERROR,
"Last frame must have been damaged %"PRId64" > %"PRId64" + %d\n",
avio_tell(bc), nut->last_syncpoint_pos, nut->max_distance);
return AVERROR_INVALIDDATA;
}
@ -697,9 +748,8 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, ui
*pts = coded_pts - (1 << stc->msb_pts_shift);
} else
*pts = stc->last_pts + pts_delta;
if(flags&FLAG_SIZE_MSB){
if (flags & FLAG_SIZE_MSB)
size += size_mul * ffio_read_varlen(bc);
}
if (flags & FLAG_MATCH_TIME)
get_s(bc);
if (flags & FLAG_HEADER_IDX)
@ -719,7 +769,8 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, ui
if (flags & FLAG_CHECKSUM) {
avio_rb32(bc); // FIXME check this
}else if(size > 2*nut->max_distance || FFABS(stc->last_pts - *pts) > stc->max_pts_distance){
} else if (size > 2 * nut->max_distance || FFABS(stc->last_pts - *pts) >
stc->max_pts_distance) {
av_log(s, AV_LOG_ERROR, "frame size > 2max_distance and no checksum\n");
return AVERROR_INVALIDDATA;
}
@ -730,7 +781,8 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, ui
return size;
}
static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){
static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code)
{
AVFormatContext *s = nut->avf;
AVIOContext *bc = s->pb;
int size, stream_id, discard;
@ -749,10 +801,11 @@ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){
discard = s->streams[stream_id]->discard;
last_IP_pts = s->streams[stream_id]->last_IP_pts;
if( (discard >= AVDISCARD_NONKEY && !(stc->last_flags & FLAG_KEY))
||(discard >= AVDISCARD_BIDIR && last_IP_pts != AV_NOPTS_VALUE && last_IP_pts > pts)
|| discard >= AVDISCARD_ALL
|| stc->skip_until_key_frame){
if ((discard >= AVDISCARD_NONKEY && !(stc->last_flags & FLAG_KEY)) ||
(discard >= AVDISCARD_BIDIR && last_IP_pts != AV_NOPTS_VALUE &&
last_IP_pts > pts) ||
discard >= AVDISCARD_ALL ||
stc->skip_until_key_frame) {
avio_skip(bc, size);
return 1;
}
@ -813,7 +866,7 @@ static int nut_read_packet(AVFormatContext *s, AVPacket *pkt)
ret = decode_frame(nut, pkt, frame_code);
if (ret == 0)
return 0;
else if(ret==1) //ok but discard packet
else if (ret == 1) // OK but discard packet
break;
default:
resync:
@ -827,11 +880,14 @@ av_log(s, AV_LOG_DEBUG, "sync\n");
}
}
static int64_t nut_read_timestamp(AVFormatContext *s, int stream_index, int64_t *pos_arg, int64_t pos_limit){
static int64_t nut_read_timestamp(AVFormatContext *s, int stream_index,
int64_t *pos_arg, int64_t pos_limit)
{
NUTContext *nut = s->priv_data;
AVIOContext *bc = s->pb;
int64_t pos, pts, back_ptr;
av_log(s, AV_LOG_DEBUG, "read_timestamp(X,%d,%"PRId64",%"PRId64")\n", stream_index, *pos_arg, pos_limit);
av_log(s, AV_LOG_DEBUG, "read_timestamp(X,%d,%"PRId64",%"PRId64")\n",
stream_index, *pos_arg, pos_limit);
pos = *pos_arg;
do {
@ -846,13 +902,17 @@ av_log(s, AV_LOG_DEBUG, "read_timestamp(X,%d,%"PRId64",%"PRId64")\n", stream_ind
assert(nut->last_syncpoint_pos == *pos_arg);
av_log(s, AV_LOG_DEBUG, "return %"PRId64" %"PRId64"\n", pts, back_ptr);
if (stream_index == -1) return pts;
else if(stream_index == -2) return back_ptr;
if (stream_index == -1)
return pts;
else if (stream_index == -2)
return back_ptr;
assert(0);
}
static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags){
static int read_seek(AVFormatContext *s, int stream_index,
int64_t pts, int flags)
{
NUTContext *nut = s->priv_data;
AVStream *st = s->streams[stream_index];
Syncpoint dummy = { .ts = pts * av_q2d(st->time_base) * AV_TIME_BASE };
@ -871,18 +931,23 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flag
} else {
av_tree_find(nut->syncpoints, &dummy, (void *) ff_nut_sp_pts_cmp,
(void **) next_node);
av_log(s, AV_LOG_DEBUG, "%"PRIu64"-%"PRIu64" %"PRId64"-%"PRId64"\n", next_node[0]->pos, next_node[1]->pos,
next_node[0]->ts , next_node[1]->ts);
pos = ff_gen_search(s, -1, dummy.ts, next_node[0]->pos, next_node[1]->pos, next_node[1]->pos,
next_node[0]->ts , next_node[1]->ts, AVSEEK_FLAG_BACKWARD, &ts, nut_read_timestamp);
av_log(s, AV_LOG_DEBUG, "%"PRIu64"-%"PRIu64" %"PRId64"-%"PRId64"\n",
next_node[0]->pos, next_node[1]->pos, next_node[0]->ts,
next_node[1]->ts);
pos = ff_gen_search(s, -1, dummy.ts, next_node[0]->pos,
next_node[1]->pos, next_node[1]->pos,
next_node[0]->ts, next_node[1]->ts,
AVSEEK_FLAG_BACKWARD, &ts, nut_read_timestamp);
if (!(flags & AVSEEK_FLAG_BACKWARD)) {
dummy.pos = pos + 16;
next_node[1] = &nopts_sp;
av_tree_find(nut->syncpoints, &dummy, (void *) ff_nut_sp_pos_cmp,
(void **) next_node);
pos2 = ff_gen_search(s, -2, dummy.pos, next_node[0]->pos , next_node[1]->pos, next_node[1]->pos,
next_node[0]->back_ptr, next_node[1]->back_ptr, flags, &ts, nut_read_timestamp);
pos2 = ff_gen_search(s, -2, dummy.pos, next_node[0]->pos,
next_node[1]->pos, next_node[1]->pos,
next_node[0]->back_ptr, next_node[1]->back_ptr,
flags, &ts, nut_read_timestamp);
if (pos2 >= 0)
pos = pos2;
// FIXME dir but I think it does not matter
@ -898,9 +963,8 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flag
pos = find_startcode(s->pb, SYNCPOINT_STARTCODE, pos2);
avio_seek(s->pb, pos, SEEK_SET);
av_log(NULL, AV_LOG_DEBUG, "SP: %"PRId64"\n", pos);
if(pos2 > pos || pos2 + 15 < pos){
if (pos2 > pos || pos2 + 15 < pos)
av_log(NULL, AV_LOG_ERROR, "no syncpoint at backptr pos\n");
}
for (i = 0; i < s->nb_streams; i++)
nut->stream[i].skip_until_key_frame = 1;

Loading…
Cancel
Save