mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
fix fabrice's broken get_bi and some minor changes in draft
Originally committed as revision 2335 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7fe4c82382
commit
5aa0a64494
@ -63,7 +63,6 @@ static uint64_t get_v(ByteIOContext *bc)
|
|||||||
{
|
{
|
||||||
uint64_t val = 0;
|
uint64_t val = 0;
|
||||||
|
|
||||||
// for (; bytes_left(s)*8 > 0; )
|
|
||||||
for(; bytes_left(bc) > 0; )
|
for(; bytes_left(bc) > 0; )
|
||||||
{
|
{
|
||||||
int tmp = get_byte(bc);
|
int tmp = get_byte(bc);
|
||||||
@ -93,27 +92,23 @@ static int get_b(ByteIOContext *bc, char *data, int maxlen)
|
|||||||
len = get_v(bc);
|
len = get_v(bc);
|
||||||
for (i = 0; i < len && i < maxlen; i++)
|
for (i = 0; i < len && i < maxlen; i++)
|
||||||
data[i] = get_byte(bc);
|
data[i] = get_byte(bc);
|
||||||
if (i < len)
|
/* skip remaining bytes */
|
||||||
{
|
for (; i < len; i++)
|
||||||
len = i;
|
get_byte(bc);
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
get_byte(bc);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_bi(ByteIOContext *bc)
|
static int get_bi(ByteIOContext *bc)
|
||||||
{
|
{
|
||||||
int i, len, val;
|
int i, len, val = 0;
|
||||||
|
|
||||||
len = get_v(bc);
|
len = get_v(bc);
|
||||||
if(len > 4) return -1;
|
for (i = 0; i < len && i <= 4; i++)
|
||||||
|
|
||||||
val = 0;
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
val |= get_byte(bc) << (i * 8);
|
val |= get_byte(bc) << (i * 8);
|
||||||
}
|
/* skip remaining bytes */
|
||||||
|
for (; i < len; i++)
|
||||||
|
get_byte(bc);
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -232,21 +227,12 @@ static int nut_write_header(AVFormatContext *s)
|
|||||||
ByteIOContext *bc = &s->pb;
|
ByteIOContext *bc = &s->pb;
|
||||||
AVCodecContext *codec;
|
AVCodecContext *codec;
|
||||||
int i;
|
int i;
|
||||||
int stream_length = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < s->nb_streams; i++)
|
|
||||||
{
|
|
||||||
if (stream_length < (s->streams[i]->duration * (AV_TIME_BASE / 1000)))
|
|
||||||
stream_length = s->streams[i]->duration * (AV_TIME_BASE / 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* main header */
|
/* main header */
|
||||||
put_be64(bc, MAIN_STARTCODE);
|
put_be64(bc, MAIN_STARTCODE);
|
||||||
put_packetheader(nut, bc, 120);
|
put_packetheader(nut, bc, 120);
|
||||||
put_v(bc, 0); /* version */
|
put_v(bc, 0); /* version */
|
||||||
put_v(bc, s->nb_streams);
|
put_v(bc, s->nb_streams);
|
||||||
put_v(bc, 0); /* file size */
|
|
||||||
put_v(bc, stream_length); /* len in msec */
|
|
||||||
put_be32(bc, 0); /* FIXME: checksum */
|
put_be32(bc, 0); /* FIXME: checksum */
|
||||||
|
|
||||||
update_packetheader(nut, bc, 0);
|
update_packetheader(nut, bc, 0);
|
||||||
@ -439,10 +425,6 @@ static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
fprintf(stderr, "bad version (%Ld)\n", tmp);
|
fprintf(stderr, "bad version (%Ld)\n", tmp);
|
||||||
|
|
||||||
nb_streams = get_v(bc);
|
nb_streams = get_v(bc);
|
||||||
|
|
||||||
s->file_size = get_v(bc);
|
|
||||||
s->duration = get_v(bc) / (AV_TIME_BASE / 1000);
|
|
||||||
|
|
||||||
get_be32(bc); /* checkusm */
|
get_be32(bc); /* checkusm */
|
||||||
|
|
||||||
s->bit_rate = 0;
|
s->bit_rate = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user