Commit 2e73f805 authored by michaelni's avatar michaelni

fixing rv10, this isnt the cleanest solution (parsing the packet header in the...

fixing rv10, this isnt the cleanest solution (parsing the packet header in the codec & creating it in the muxer) but it was that way before things broke, and its the simplest solution


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@986 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent ed2d7e78
...@@ -631,6 +631,21 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) ...@@ -631,6 +631,21 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
return -EIO; return -EIO;
} }
static int get_num(ByteIOContext *pb, int *len)
{
int n, n1;
n = get_be16(pb);
(*len)-=2;
if (n >= 0x4000) {
return n - 0x4000;
} else {
n1 = get_be16(pb);
(*len)-=2;
return (n << 16) | n1;
}
}
static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
RMContext *rm = s->priv_data; RMContext *rm = s->priv_data;
...@@ -666,19 +681,44 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -666,19 +681,44 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
goto redo; goto redo;
} }
#if 0 // XXX/FIXME this is done in the codec currently, but should be done here ...
if (st->codec.codec_type == CODEC_TYPE_VIDEO) { if (st->codec.codec_type == CODEC_TYPE_VIDEO) {
get_byte(pb); int full_frame, h, pic_num;
get_byte(pb);
get_be16(pb); h= get_byte(pb);
get_be16(pb); if ((h & 0xc0) == 0xc0) {
get_byte(pb); int len2, pos;
len -= 7; full_frame = 1;
len2= get_num(pb, &len);
pos = get_num(pb, &len);
//printf("pos:%d\n",len);
len -= 2;
} else {
int seq, frame_size, pos;
full_frame = 0;
seq = get_byte(pb);
frame_size = get_num(pb, &len);
pos = get_num(pb, &len);
//printf("seq:%d, size:%d, pos:%d\n",seq,frame_size,pos);
len -= 3;
}
/* picture number */
pic_num= get_byte(pb);
av_new_packet(pkt, len+1);
pkt->stream_index = i;
//XXX/FIXME: is this a good idea?
pkt->data[0]= h; //store header, its needed for decoding
get_buffer(pb, pkt->data+1, len);
} }
#endif
av_new_packet(pkt, len); av_new_packet(pkt, len);
pkt->stream_index = i; pkt->stream_index = i;
get_buffer(pb, pkt->data, len); get_buffer(pb, pkt->data, len);
/* for AC3, needs to swap bytes */ /* for AC3, needs to swap bytes */
if (st->codec.codec_id == CODEC_ID_AC3) { if (st->codec.codec_id == CODEC_ID_AC3) {
ptr = pkt->data; ptr = pkt->data;
......
...@@ -223,18 +223,10 @@ int rv_decode_dc(MpegEncContext *s, int n) ...@@ -223,18 +223,10 @@ int rv_decode_dc(MpegEncContext *s, int n)
/* write RV 1.0 compatible frame header */ /* write RV 1.0 compatible frame header */
void rv10_encode_picture_header(MpegEncContext *s, int picture_number) void rv10_encode_picture_header(MpegEncContext *s, int picture_number)
{ {
int full_frame= 1; int full_frame= 0;
align_put_bits(&s->pb); align_put_bits(&s->pb);
if(full_frame){
put_bits(&s->pb, 8, 0xc0); /* packet header */
put_bits(&s->pb, 16, 0x4000); /* len */
put_bits(&s->pb, 16, 0x4000); /* pos */
}
put_bits(&s->pb, 8, picture_number&0xFF);
put_bits(&s->pb, 1, 1); /* marker */ put_bits(&s->pb, 1, 1); /* marker */
put_bits(&s->pb, 1, (s->pict_type == P_TYPE)); put_bits(&s->pb, 1, (s->pict_type == P_TYPE));
...@@ -276,6 +268,7 @@ static int rv10_decode_picture_header(MpegEncContext *s) ...@@ -276,6 +268,7 @@ static int rv10_decode_picture_header(MpegEncContext *s)
int mb_count, pb_frame, marker, h, full_frame; int mb_count, pb_frame, marker, h, full_frame;
int pic_num, unk; int pic_num, unk;
//XXX/FIXME this should be done in the demuxer not here
/* skip packet header */ /* skip packet header */
h = get_bits(&s->gb, 8); h = get_bits(&s->gb, 8);
if ((h & 0xc0) == 0xc0) { if ((h & 0xc0) == 0xc0) {
......
...@@ -17,7 +17,7 @@ f5f44dad09c2d4d16524e539645f693c *./data/a-mpeg4-adv.avi ...@@ -17,7 +17,7 @@ f5f44dad09c2d4d16524e539645f693c *./data/a-mpeg4-adv.avi
d0f077a3b42367d7432b73c0ddad7438 *./data/out.yuv d0f077a3b42367d7432b73c0ddad7438 *./data/out.yuv
2846c8e3d97d7395eb746bfce44e0443 *./data/a-mjpeg.avi 2846c8e3d97d7395eb746bfce44e0443 *./data/a-mjpeg.avi
278033451d7a6bfeb8339abbe4228499 *./data/out.yuv 278033451d7a6bfeb8339abbe4228499 *./data/out.yuv
202adaf59c09d703b55fc7dd95eace25 *./data/a-rv10.rm ccbf683d781fa3cdfa18b618731fc74b *./data/a-rv10.rm
c1f6c8ee7a24d8345deddf1a24ca3756 *./data/out.yuv c1f6c8ee7a24d8345deddf1a24ca3756 *./data/out.yuv
21f8ff9f1daacd9133683bb4ea0f50a4 *./data/a-mp2.mp2 21f8ff9f1daacd9133683bb4ea0f50a4 *./data/a-mp2.mp2
116d1290ba1b4eb98fdee52e423417b1 *./data/out.wav 116d1290ba1b4eb98fdee52e423417b1 *./data/out.wav
......
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