Originally committed as revision 16111 to svn://svn.ffmpeg.org/ffmpeg/trunk
Ronald S. Bultje authored on 2008/12/14 06:40:20... | ... |
@@ -24,45 +24,6 @@ |
24 | 24 |
|
25 | 25 |
#include "avformat.h" |
26 | 26 |
|
27 |
- |
|
28 |
-typedef struct { |
|
29 |
- int nb_packets; |
|
30 |
- int packet_total_size; |
|
31 |
- int packet_max_size; |
|
32 |
- /* codec related output */ |
|
33 |
- int bit_rate; |
|
34 |
- float frame_rate; |
|
35 |
- int nb_frames; /* current frame number */ |
|
36 |
- int total_frames; /* total number of frames */ |
|
37 |
- int num; |
|
38 |
- AVCodecContext *enc; |
|
39 |
-} StreamInfo; |
|
40 |
- |
|
41 |
-typedef struct { |
|
42 |
- StreamInfo streams[2]; |
|
43 |
- StreamInfo *audio_stream, *video_stream; |
|
44 |
- int data_pos; /* position of the data after the header */ |
|
45 |
- int nb_packets; |
|
46 |
- int old_format; |
|
47 |
- int current_stream; |
|
48 |
- int remaining_len; |
|
49 |
- uint8_t *videobuf; ///< place to store merged video frame |
|
50 |
- int videobufsize; ///< current assembled frame size |
|
51 |
- int videobufpos; ///< position for the next slice in the video buffer |
|
52 |
- int curpic_num; ///< picture number of current frame |
|
53 |
- int cur_slice, slices; |
|
54 |
- int64_t pktpos; ///< first slice position in file |
|
55 |
- /// Audio descrambling matrix parameters |
|
56 |
- uint8_t *audiobuf; ///< place to store reordered audio data |
|
57 |
- int64_t audiotimestamp; ///< Audio packet timestamp |
|
58 |
- int sub_packet_cnt; // Subpacket counter, used while reading |
|
59 |
- int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container |
|
60 |
- int audio_stream_num; ///< Stream number for audio packets |
|
61 |
- int audio_pkt_cnt; ///< Output packet counter |
|
62 |
- int audio_framesize; /// Audio frame size from container |
|
63 |
- int sub_packet_lengths[16]; /// Length of each aac subpacket |
|
64 |
-} RMContext; |
|
65 |
- |
|
66 | 27 |
/*< input format for Realmedia-style RTSP streams */ |
67 | 28 |
extern AVInputFormat rdt_demuxer; |
68 | 29 |
|
... | ... |
@@ -21,7 +21,28 @@ |
21 | 21 |
|
22 | 22 |
#include "libavutil/avstring.h" |
23 | 23 |
#include "avformat.h" |
24 |
-#include "rm.h" |
|
24 |
+ |
|
25 |
+typedef struct { |
|
26 |
+ int nb_packets; |
|
27 |
+ int old_format; |
|
28 |
+ int current_stream; |
|
29 |
+ int remaining_len; |
|
30 |
+ uint8_t *videobuf; ///< place to store merged video frame |
|
31 |
+ int videobufsize; ///< current assembled frame size |
|
32 |
+ int videobufpos; ///< position for the next slice in the video buffer |
|
33 |
+ int curpic_num; ///< picture number of current frame |
|
34 |
+ int cur_slice, slices; |
|
35 |
+ int64_t pktpos; ///< first slice position in file |
|
36 |
+ /// Audio descrambling matrix parameters |
|
37 |
+ uint8_t *audiobuf; ///< place to store reordered audio data |
|
38 |
+ int64_t audiotimestamp; ///< Audio packet timestamp |
|
39 |
+ int sub_packet_cnt; // Subpacket counter, used while reading |
|
40 |
+ int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container |
|
41 |
+ int audio_stream_num; ///< Stream number for audio packets |
|
42 |
+ int audio_pkt_cnt; ///< Output packet counter |
|
43 |
+ int audio_framesize; /// Audio frame size from container |
|
44 |
+ int sub_packet_lengths[16]; /// Length of each aac subpacket |
|
45 |
+} RMDemuxContext; |
|
25 | 46 |
|
26 | 47 |
static inline void get_strl(ByteIOContext *pb, char *buf, int buf_size, int len) |
27 | 48 |
{ |
... | ... |
@@ -50,7 +71,7 @@ static void get_str8(ByteIOContext *pb, char *buf, int buf_size) |
50 | 50 |
static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb, |
51 | 51 |
AVStream *st, int read_all) |
52 | 52 |
{ |
53 |
- RMContext *rm = s->priv_data; |
|
53 |
+ RMDemuxContext *rm = s->priv_data; |
|
54 | 54 |
char buf[256]; |
55 | 55 |
uint32_t version; |
56 | 56 |
int i; |
... | ... |
@@ -267,7 +288,7 @@ skip: |
267 | 267 |
|
268 | 268 |
static int rm_read_header_old(AVFormatContext *s, AVFormatParameters *ap) |
269 | 269 |
{ |
270 |
- RMContext *rm = s->priv_data; |
|
270 |
+ RMDemuxContext *rm = s->priv_data; |
|
271 | 271 |
AVStream *st; |
272 | 272 |
|
273 | 273 |
rm->old_format = 1; |
... | ... |
@@ -279,7 +300,7 @@ static int rm_read_header_old(AVFormatContext *s, AVFormatParameters *ap) |
279 | 279 |
|
280 | 280 |
static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) |
281 | 281 |
{ |
282 |
- RMContext *rm = s->priv_data; |
|
282 |
+ RMDemuxContext *rm = s->priv_data; |
|
283 | 283 |
AVStream *st; |
284 | 284 |
ByteIOContext *pb = s->pb; |
285 | 285 |
unsigned int tag; |
... | ... |
@@ -396,7 +417,7 @@ static int get_num(ByteIOContext *pb, int *len) |
396 | 396 |
#define RAW_PACKET_SIZE 1000 |
397 | 397 |
|
398 | 398 |
static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos){ |
399 |
- RMContext *rm = s->priv_data; |
|
399 |
+ RMDemuxContext *rm = s->priv_data; |
|
400 | 400 |
ByteIOContext *pb = s->pb; |
401 | 401 |
int len, num, res, i; |
402 | 402 |
AVStream *st; |
... | ... |
@@ -452,7 +473,7 @@ skip: |
452 | 452 |
} |
453 | 453 |
|
454 | 454 |
static int rm_assemble_video_frame(AVFormatContext *s, ByteIOContext *pb, |
455 |
- RMContext *rm, AVPacket *pkt, int len) |
|
455 |
+ RMDemuxContext *rm, AVPacket *pkt, int len) |
|
456 | 456 |
{ |
457 | 457 |
int hdr, seq, pic_num, len2, pos; |
458 | 458 |
int type; |
... | ... |
@@ -553,7 +574,7 @@ ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb, |
553 | 553 |
AVStream *st, int len, AVPacket *pkt, |
554 | 554 |
int *seq, int *flags, int64_t *timestamp) |
555 | 555 |
{ |
556 |
- RMContext *rm = s->priv_data; |
|
556 |
+ RMDemuxContext *rm = s->priv_data; |
|
557 | 557 |
|
558 | 558 |
if (st->codec->codec_type == CODEC_TYPE_VIDEO) { |
559 | 559 |
rm->current_stream= st->id; |
... | ... |
@@ -651,7 +672,7 @@ void |
651 | 651 |
ff_rm_retrieve_cache (AVFormatContext *s, ByteIOContext *pb, |
652 | 652 |
AVStream *st, AVPacket *pkt) |
653 | 653 |
{ |
654 |
- RMContext *rm = s->priv_data; |
|
654 |
+ RMDemuxContext *rm = s->priv_data; |
|
655 | 655 |
|
656 | 656 |
assert (rm->audio_pkt_cnt > 0); |
657 | 657 |
|
... | ... |
@@ -670,7 +691,7 @@ ff_rm_retrieve_cache (AVFormatContext *s, ByteIOContext *pb, |
670 | 670 |
|
671 | 671 |
static int rm_read_packet(AVFormatContext *s, AVPacket *pkt) |
672 | 672 |
{ |
673 |
- RMContext *rm = s->priv_data; |
|
673 |
+ RMDemuxContext *rm = s->priv_data; |
|
674 | 674 |
ByteIOContext *pb = s->pb; |
675 | 675 |
AVStream *st; |
676 | 676 |
int i, len; |
... | ... |
@@ -728,7 +749,7 @@ resync: |
728 | 728 |
|
729 | 729 |
static int rm_read_close(AVFormatContext *s) |
730 | 730 |
{ |
731 |
- RMContext *rm = s->priv_data; |
|
731 |
+ RMDemuxContext *rm = s->priv_data; |
|
732 | 732 |
|
733 | 733 |
av_free(rm->audiobuf); |
734 | 734 |
av_free(rm->videobuf); |
... | ... |
@@ -751,7 +772,7 @@ static int rm_probe(AVProbeData *p) |
751 | 751 |
static int64_t rm_read_dts(AVFormatContext *s, int stream_index, |
752 | 752 |
int64_t *ppos, int64_t pos_limit) |
753 | 753 |
{ |
754 |
- RMContext *rm = s->priv_data; |
|
754 |
+ RMDemuxContext *rm = s->priv_data; |
|
755 | 755 |
int64_t pos, dts; |
756 | 756 |
int stream_index2, flags, len, h; |
757 | 757 |
|
... | ... |
@@ -794,7 +815,7 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index, |
794 | 794 |
AVInputFormat rm_demuxer = { |
795 | 795 |
"rm", |
796 | 796 |
NULL_IF_CONFIG_SMALL("RM format"), |
797 |
- sizeof(RMContext), |
|
797 |
+ sizeof(RMDemuxContext), |
|
798 | 798 |
rm_probe, |
799 | 799 |
rm_read_header, |
800 | 800 |
rm_read_packet, |
... | ... |
@@ -806,6 +827,6 @@ AVInputFormat rm_demuxer = { |
806 | 806 |
AVInputFormat rdt_demuxer = { |
807 | 807 |
"rdt", |
808 | 808 |
NULL_IF_CONFIG_SMALL("RDT demuxer"), |
809 |
- sizeof(RMContext), |
|
809 |
+ sizeof(RMDemuxContext), |
|
810 | 810 |
NULL, NULL, NULL, rm_read_close, NULL, NULL |
811 | 811 |
}; |
... | ... |
@@ -21,6 +21,25 @@ |
21 | 21 |
#include "avformat.h" |
22 | 22 |
#include "rm.h" |
23 | 23 |
|
24 |
+typedef struct { |
|
25 |
+ int nb_packets; |
|
26 |
+ int packet_total_size; |
|
27 |
+ int packet_max_size; |
|
28 |
+ /* codec related output */ |
|
29 |
+ int bit_rate; |
|
30 |
+ float frame_rate; |
|
31 |
+ int nb_frames; /* current frame number */ |
|
32 |
+ int total_frames; /* total number of frames */ |
|
33 |
+ int num; |
|
34 |
+ AVCodecContext *enc; |
|
35 |
+} StreamInfo; |
|
36 |
+ |
|
37 |
+typedef struct { |
|
38 |
+ StreamInfo streams[2]; |
|
39 |
+ StreamInfo *audio_stream, *video_stream; |
|
40 |
+ int data_pos; /* position of the data after the header */ |
|
41 |
+} RMMuxContext; |
|
42 |
+ |
|
24 | 43 |
/* in ms */ |
25 | 44 |
#define BUFFER_DURATION 0 |
26 | 45 |
|
... | ... |
@@ -44,7 +63,7 @@ static void put_str8(ByteIOContext *s, const char *tag) |
44 | 44 |
static void rv10_write_header(AVFormatContext *ctx, |
45 | 45 |
int data_size, int index_pos) |
46 | 46 |
{ |
47 |
- RMContext *rm = ctx->priv_data; |
|
47 |
+ RMMuxContext *rm = ctx->priv_data; |
|
48 | 48 |
ByteIOContext *s = ctx->pb; |
49 | 49 |
StreamInfo *stream; |
50 | 50 |
unsigned char *data_offset_ptr, *start_ptr; |
... | ... |
@@ -271,7 +290,7 @@ static void write_packet_header(AVFormatContext *ctx, StreamInfo *stream, |
271 | 271 |
|
272 | 272 |
static int rm_write_header(AVFormatContext *s) |
273 | 273 |
{ |
274 |
- RMContext *rm = s->priv_data; |
|
274 |
+ RMMuxContext *rm = s->priv_data; |
|
275 | 275 |
StreamInfo *stream; |
276 | 276 |
int n; |
277 | 277 |
AVCodecContext *codec; |
... | ... |
@@ -315,7 +334,7 @@ static int rm_write_header(AVFormatContext *s) |
315 | 315 |
static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int flags) |
316 | 316 |
{ |
317 | 317 |
uint8_t *buf1; |
318 |
- RMContext *rm = s->priv_data; |
|
318 |
+ RMMuxContext *rm = s->priv_data; |
|
319 | 319 |
ByteIOContext *pb = s->pb; |
320 | 320 |
StreamInfo *stream = rm->audio_stream; |
321 | 321 |
int i; |
... | ... |
@@ -339,7 +358,7 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int |
339 | 339 |
|
340 | 340 |
static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int flags) |
341 | 341 |
{ |
342 |
- RMContext *rm = s->priv_data; |
|
342 |
+ RMMuxContext *rm = s->priv_data; |
|
343 | 343 |
ByteIOContext *pb = s->pb; |
344 | 344 |
StreamInfo *stream = rm->video_stream; |
345 | 345 |
int key_frame = !!(flags & PKT_FLAG_KEY); |
... | ... |
@@ -393,7 +412,7 @@ static int rm_write_packet(AVFormatContext *s, AVPacket *pkt) |
393 | 393 |
|
394 | 394 |
static int rm_write_trailer(AVFormatContext *s) |
395 | 395 |
{ |
396 |
- RMContext *rm = s->priv_data; |
|
396 |
+ RMMuxContext *rm = s->priv_data; |
|
397 | 397 |
int data_size, index_pos, i; |
398 | 398 |
ByteIOContext *pb = s->pb; |
399 | 399 |
|
... | ... |
@@ -435,7 +454,7 @@ AVOutputFormat rm_muxer = { |
435 | 435 |
NULL_IF_CONFIG_SMALL("RM format"), |
436 | 436 |
"application/vnd.rn-realmedia", |
437 | 437 |
"rm,ra", |
438 |
- sizeof(RMContext), |
|
438 |
+ sizeof(RMMuxContext), |
|
439 | 439 |
CODEC_ID_AC3, |
440 | 440 |
CODEC_ID_RV10, |
441 | 441 |
rm_write_header, |