Mercurial > libavcodec.hg
comparison mpeg12.c @ 1064:b32afefe7d33 libavcodec
* UINTX -> uintx_t INTX -> intx_t
author | kabi |
---|---|
date | Tue, 11 Feb 2003 16:35:48 +0000 |
parents | e5a9dbf597d4 |
children | 6da5ae9ee199 |
comparison
equal
deleted
inserted
replaced
1063:fdeac9642346 | 1064:b32afefe7d33 |
---|---|
65 DCTELEM *block, | 65 DCTELEM *block, |
66 int n); | 66 int n); |
67 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred); | 67 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred); |
68 | 68 |
69 #ifdef CONFIG_ENCODERS | 69 #ifdef CONFIG_ENCODERS |
70 static UINT16 mv_penalty[MAX_FCODE+1][MAX_MV*2+1]; | 70 static uint16_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1]; |
71 static UINT8 fcode_tab[MAX_MV*2+1]; | 71 static uint8_t fcode_tab[MAX_MV*2+1]; |
72 | 72 |
73 static uint32_t uni_mpeg1_ac_vlc_bits[64*64*2]; | 73 static uint32_t uni_mpeg1_ac_vlc_bits[64*64*2]; |
74 static uint8_t uni_mpeg1_ac_vlc_len [64*64*2]; | 74 static uint8_t uni_mpeg1_ac_vlc_len [64*64*2]; |
75 #endif | 75 #endif |
76 | 76 |
180 static void mpeg1_encode_sequence_header(MpegEncContext *s) | 180 static void mpeg1_encode_sequence_header(MpegEncContext *s) |
181 { | 181 { |
182 unsigned int vbv_buffer_size; | 182 unsigned int vbv_buffer_size; |
183 unsigned int fps, v; | 183 unsigned int fps, v; |
184 int n, i; | 184 int n, i; |
185 UINT64 time_code; | 185 uint64_t time_code; |
186 float best_aspect_error= 1E10; | 186 float best_aspect_error= 1E10; |
187 float aspect_ratio= s->avctx->aspect_ratio; | 187 float aspect_ratio= s->avctx->aspect_ratio; |
188 | 188 |
189 if(aspect_ratio==0.0) aspect_ratio= s->width / (float)s->height; //pixel aspect 1:1 (VGA) | 189 if(aspect_ratio==0.0) aspect_ratio= s->width / (float)s->height; //pixel aspect 1:1 (VGA) |
190 | 190 |
240 put_header(s, GOP_START_CODE); | 240 put_header(s, GOP_START_CODE); |
241 put_bits(&s->pb, 1, 0); /* do drop frame */ | 241 put_bits(&s->pb, 1, 0); /* do drop frame */ |
242 /* time code : we must convert from the real frame rate to a | 242 /* time code : we must convert from the real frame rate to a |
243 fake mpeg frame rate in case of low frame rate */ | 243 fake mpeg frame rate in case of low frame rate */ |
244 fps = frame_rate_tab[s->frame_rate_index]; | 244 fps = frame_rate_tab[s->frame_rate_index]; |
245 time_code = (INT64)s->fake_picture_number * FRAME_RATE_BASE; | 245 time_code = (int64_t)s->fake_picture_number * FRAME_RATE_BASE; |
246 s->gop_picture_number = s->fake_picture_number; | 246 s->gop_picture_number = s->fake_picture_number; |
247 put_bits(&s->pb, 5, (UINT32)((time_code / (fps * 3600)) % 24)); | 247 put_bits(&s->pb, 5, (uint32_t)((time_code / (fps * 3600)) % 24)); |
248 put_bits(&s->pb, 6, (UINT32)((time_code / (fps * 60)) % 60)); | 248 put_bits(&s->pb, 6, (uint32_t)((time_code / (fps * 60)) % 60)); |
249 put_bits(&s->pb, 1, 1); | 249 put_bits(&s->pb, 1, 1); |
250 put_bits(&s->pb, 6, (UINT32)((time_code / fps) % 60)); | 250 put_bits(&s->pb, 6, (uint32_t)((time_code / fps) % 60)); |
251 put_bits(&s->pb, 6, (UINT32)((time_code % fps) / FRAME_RATE_BASE)); | 251 put_bits(&s->pb, 6, (uint32_t)((time_code % fps) / FRAME_RATE_BASE)); |
252 put_bits(&s->pb, 1, 1); /* closed gop */ | 252 put_bits(&s->pb, 1, 1); /* closed gop */ |
253 put_bits(&s->pb, 1, 0); /* broken link */ | 253 put_bits(&s->pb, 1, 0); /* broken link */ |
254 } | 254 } |
255 | 255 |
256 if (s->frame_rate < (24 * FRAME_RATE_BASE) && s->picture_number > 0) { | 256 if (s->frame_rate < (24 * FRAME_RATE_BASE) && s->picture_number > 0) { |
257 /* insert empty P pictures to slow down to the desired | 257 /* insert empty P pictures to slow down to the desired |
258 frame rate. Each fake pictures takes about 20 bytes */ | 258 frame rate. Each fake pictures takes about 20 bytes */ |
259 fps = frame_rate_tab[s->frame_rate_index]; | 259 fps = frame_rate_tab[s->frame_rate_index]; |
260 n = (((INT64)s->picture_number * fps) / s->frame_rate) - 1; | 260 n = (((int64_t)s->picture_number * fps) / s->frame_rate) - 1; |
261 while (s->fake_picture_number < n) { | 261 while (s->fake_picture_number < n) { |
262 mpeg1_skip_picture(s, s->fake_picture_number - | 262 mpeg1_skip_picture(s, s->fake_picture_number - |
263 s->gop_picture_number); | 263 s->gop_picture_number); |
264 s->fake_picture_number++; | 264 s->fake_picture_number++; |
265 } | 265 } |
735 } else { | 735 } else { |
736 /* encode the first coefficient : needs to be done here because | 736 /* encode the first coefficient : needs to be done here because |
737 it is handled slightly differently */ | 737 it is handled slightly differently */ |
738 level = block[0]; | 738 level = block[0]; |
739 if (abs(level) == 1) { | 739 if (abs(level) == 1) { |
740 code = ((UINT32)level >> 31); /* the sign bit */ | 740 code = ((uint32_t)level >> 31); /* the sign bit */ |
741 put_bits(&s->pb, 2, code | 0x02); | 741 put_bits(&s->pb, 2, code | 0x02); |
742 i = 1; | 742 i = 1; |
743 } else { | 743 } else { |
744 i = 0; | 744 i = 0; |
745 last_non_zero = -1; | 745 last_non_zero = -1; |
1206 int n) | 1206 int n) |
1207 { | 1207 { |
1208 int level, dc, diff, i, j, run; | 1208 int level, dc, diff, i, j, run; |
1209 int component; | 1209 int component; |
1210 RLTable *rl = &rl_mpeg1; | 1210 RLTable *rl = &rl_mpeg1; |
1211 UINT8 * const scantable= s->intra_scantable.permutated; | 1211 uint8_t * const scantable= s->intra_scantable.permutated; |
1212 const UINT16 *quant_matrix= s->intra_matrix; | 1212 const uint16_t *quant_matrix= s->intra_matrix; |
1213 const int qscale= s->qscale; | 1213 const int qscale= s->qscale; |
1214 | 1214 |
1215 /* DC coef */ | 1215 /* DC coef */ |
1216 component = (n <= 3 ? 0 : n - 4 + 1); | 1216 component = (n <= 3 ? 0 : n - 4 + 1); |
1217 diff = decode_dc(s, component); | 1217 diff = decode_dc(s, component); |
1278 DCTELEM *block, | 1278 DCTELEM *block, |
1279 int n) | 1279 int n) |
1280 { | 1280 { |
1281 int level, i, j, run; | 1281 int level, i, j, run; |
1282 RLTable *rl = &rl_mpeg1; | 1282 RLTable *rl = &rl_mpeg1; |
1283 UINT8 * const scantable= s->intra_scantable.permutated; | 1283 uint8_t * const scantable= s->intra_scantable.permutated; |
1284 const UINT16 *quant_matrix= s->inter_matrix; | 1284 const uint16_t *quant_matrix= s->inter_matrix; |
1285 const int qscale= s->qscale; | 1285 const int qscale= s->qscale; |
1286 | 1286 |
1287 { | 1287 { |
1288 int v; | 1288 int v; |
1289 OPEN_READER(re, &s->gb); | 1289 OPEN_READER(re, &s->gb); |
1356 DCTELEM *block, | 1356 DCTELEM *block, |
1357 int n) | 1357 int n) |
1358 { | 1358 { |
1359 int level, i, j, run; | 1359 int level, i, j, run; |
1360 RLTable *rl = &rl_mpeg1; | 1360 RLTable *rl = &rl_mpeg1; |
1361 UINT8 * const scantable= s->intra_scantable.permutated; | 1361 uint8_t * const scantable= s->intra_scantable.permutated; |
1362 const UINT16 *quant_matrix; | 1362 const uint16_t *quant_matrix; |
1363 const int qscale= s->qscale; | 1363 const int qscale= s->qscale; |
1364 int mismatch; | 1364 int mismatch; |
1365 | 1365 |
1366 mismatch = 1; | 1366 mismatch = 1; |
1367 | 1367 |
1436 int n) | 1436 int n) |
1437 { | 1437 { |
1438 int level, dc, diff, i, j, run; | 1438 int level, dc, diff, i, j, run; |
1439 int component; | 1439 int component; |
1440 RLTable *rl; | 1440 RLTable *rl; |
1441 UINT8 * const scantable= s->intra_scantable.permutated; | 1441 uint8_t * const scantable= s->intra_scantable.permutated; |
1442 const UINT16 *quant_matrix; | 1442 const uint16_t *quant_matrix; |
1443 const int qscale= s->qscale; | 1443 const int qscale= s->qscale; |
1444 int mismatch; | 1444 int mismatch; |
1445 | 1445 |
1446 /* DC coef */ | 1446 /* DC coef */ |
1447 if (n < 4){ | 1447 if (n < 4){ |
1514 /* compressed picture size */ | 1514 /* compressed picture size */ |
1515 #define PICTURE_BUFFER_SIZE 100000 | 1515 #define PICTURE_BUFFER_SIZE 100000 |
1516 | 1516 |
1517 typedef struct Mpeg1Context { | 1517 typedef struct Mpeg1Context { |
1518 MpegEncContext mpeg_enc_ctx; | 1518 MpegEncContext mpeg_enc_ctx; |
1519 UINT32 header_state; | 1519 uint32_t header_state; |
1520 int start_code; /* current start code */ | 1520 int start_code; /* current start code */ |
1521 UINT8 buffer[PICTURE_BUFFER_SIZE]; | 1521 uint8_t buffer[PICTURE_BUFFER_SIZE]; |
1522 UINT8 *buf_ptr; | 1522 uint8_t *buf_ptr; |
1523 int buffer_size; | 1523 int buffer_size; |
1524 int mpeg_enc_ctx_allocated; /* true if decoding context allocated */ | 1524 int mpeg_enc_ctx_allocated; /* true if decoding context allocated */ |
1525 int repeat_field; /* true if we must repeat the field */ | 1525 int repeat_field; /* true if we must repeat the field */ |
1526 } Mpeg1Context; | 1526 } Mpeg1Context; |
1527 | 1527 |
1544 return 0; | 1544 return 0; |
1545 } | 1545 } |
1546 | 1546 |
1547 /* return the 8 bit start code value and update the search | 1547 /* return the 8 bit start code value and update the search |
1548 state. Return -1 if no start code found */ | 1548 state. Return -1 if no start code found */ |
1549 static int find_start_code(UINT8 **pbuf_ptr, UINT8 *buf_end, | 1549 static int find_start_code(uint8_t **pbuf_ptr, uint8_t *buf_end, |
1550 UINT32 *header_state) | 1550 uint32_t *header_state) |
1551 { | 1551 { |
1552 UINT8 *buf_ptr; | 1552 uint8_t *buf_ptr; |
1553 unsigned int state, v; | 1553 unsigned int state, v; |
1554 int val; | 1554 int val; |
1555 | 1555 |
1556 state = *header_state; | 1556 state = *header_state; |
1557 buf_ptr = *pbuf_ptr; | 1557 buf_ptr = *pbuf_ptr; |
1570 *header_state = state; | 1570 *header_state = state; |
1571 return val; | 1571 return val; |
1572 } | 1572 } |
1573 | 1573 |
1574 static int mpeg1_decode_picture(AVCodecContext *avctx, | 1574 static int mpeg1_decode_picture(AVCodecContext *avctx, |
1575 UINT8 *buf, int buf_size) | 1575 uint8_t *buf, int buf_size) |
1576 { | 1576 { |
1577 Mpeg1Context *s1 = avctx->priv_data; | 1577 Mpeg1Context *s1 = avctx->priv_data; |
1578 MpegEncContext *s = &s1->mpeg_enc_ctx; | 1578 MpegEncContext *s = &s1->mpeg_enc_ctx; |
1579 int ref, f_code; | 1579 int ref, f_code; |
1580 | 1580 |
1722 dprintf("frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct); | 1722 dprintf("frame_pred_frame_dct=%d\n", s->frame_pred_frame_dct); |
1723 dprintf("progressive_frame=%d\n", s->progressive_frame); | 1723 dprintf("progressive_frame=%d\n", s->progressive_frame); |
1724 } | 1724 } |
1725 | 1725 |
1726 static void mpeg_decode_extension(AVCodecContext *avctx, | 1726 static void mpeg_decode_extension(AVCodecContext *avctx, |
1727 UINT8 *buf, int buf_size) | 1727 uint8_t *buf, int buf_size) |
1728 { | 1728 { |
1729 Mpeg1Context *s1 = avctx->priv_data; | 1729 Mpeg1Context *s1 = avctx->priv_data; |
1730 MpegEncContext *s = &s1->mpeg_enc_ctx; | 1730 MpegEncContext *s = &s1->mpeg_enc_ctx; |
1731 int ext_type; | 1731 int ext_type; |
1732 | 1732 |
1762 * DECODE_SLICE_EOP if the end of the picture is reached | 1762 * DECODE_SLICE_EOP if the end of the picture is reached |
1763 */ | 1763 */ |
1764 static int mpeg_decode_slice(AVCodecContext *avctx, | 1764 static int mpeg_decode_slice(AVCodecContext *avctx, |
1765 AVFrame *pict, | 1765 AVFrame *pict, |
1766 int start_code, | 1766 int start_code, |
1767 UINT8 *buf, int buf_size) | 1767 uint8_t *buf, int buf_size) |
1768 { | 1768 { |
1769 Mpeg1Context *s1 = avctx->priv_data; | 1769 Mpeg1Context *s1 = avctx->priv_data; |
1770 MpegEncContext *s = &s1->mpeg_enc_ctx; | 1770 MpegEncContext *s = &s1->mpeg_enc_ctx; |
1771 int ret; | 1771 int ret; |
1772 | 1772 |
1895 return DECODE_SLICE_OK; | 1895 return DECODE_SLICE_OK; |
1896 } | 1896 } |
1897 } | 1897 } |
1898 | 1898 |
1899 static int mpeg1_decode_sequence(AVCodecContext *avctx, | 1899 static int mpeg1_decode_sequence(AVCodecContext *avctx, |
1900 UINT8 *buf, int buf_size) | 1900 uint8_t *buf, int buf_size) |
1901 { | 1901 { |
1902 Mpeg1Context *s1 = avctx->priv_data; | 1902 Mpeg1Context *s1 = avctx->priv_data; |
1903 MpegEncContext *s = &s1->mpeg_enc_ctx; | 1903 MpegEncContext *s = &s1->mpeg_enc_ctx; |
1904 int width, height, i, v, j; | 1904 int width, height, i, v, j; |
1905 float aspect; | 1905 float aspect; |
2008 } | 2008 } |
2009 | 2009 |
2010 /* handle buffering and image synchronisation */ | 2010 /* handle buffering and image synchronisation */ |
2011 static int mpeg_decode_frame(AVCodecContext *avctx, | 2011 static int mpeg_decode_frame(AVCodecContext *avctx, |
2012 void *data, int *data_size, | 2012 void *data, int *data_size, |
2013 UINT8 *buf, int buf_size) | 2013 uint8_t *buf, int buf_size) |
2014 { | 2014 { |
2015 Mpeg1Context *s = avctx->priv_data; | 2015 Mpeg1Context *s = avctx->priv_data; |
2016 UINT8 *buf_end, *buf_ptr, *buf_start; | 2016 uint8_t *buf_end, *buf_ptr, *buf_start; |
2017 int len, start_code_found, ret, code, start_code, input_size; | 2017 int len, start_code_found, ret, code, start_code, input_size; |
2018 AVFrame *picture = data; | 2018 AVFrame *picture = data; |
2019 MpegEncContext *s2 = &s->mpeg_enc_ctx; | 2019 MpegEncContext *s2 = &s->mpeg_enc_ctx; |
2020 | 2020 |
2021 dprintf("fill_buffer\n"); | 2021 dprintf("fill_buffer\n"); |