3 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
4 * Copyright (c) 2004 Maarten Daniels
6 * This file is part of FFmpeg.
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 #include "mpegvideo.h"
34 #define H261_MBA_VLC_BITS 9
35 #define H261_MTYPE_VLC_BITS 6
36 #define H261_MV_VLC_BITS 7
37 #define H261_CBP_VLC_BITS 9
38 #define TCOEFF_VLC_BITS 9
40 #define MBA_STUFFING 33
41 #define MBA_STARTCODE 34
42 #define IS_FIL(a) ((a)&MB_TYPE_H261_FIL)
47 typedef struct H261Context
{
57 int gob_start_code_skipped
; // 1 if gob start code is already read before gob header is read
60 static uint8_t static_rl_table_store
[2][2*MAX_RUN
+ MAX_LEVEL
+ 3];
62 void ff_h261_loop_filter(MpegEncContext
*s
){
63 H261Context
* h
= (H261Context
*)s
;
64 const int linesize
= s
->linesize
;
65 const int uvlinesize
= s
->uvlinesize
;
66 uint8_t *dest_y
= s
->dest
[0];
67 uint8_t *dest_cb
= s
->dest
[1];
68 uint8_t *dest_cr
= s
->dest
[2];
70 if(!(IS_FIL (h
->mtype
)))
73 s
->dsp
.h261_loop_filter(dest_y
, linesize
);
74 s
->dsp
.h261_loop_filter(dest_y
+ 8, linesize
);
75 s
->dsp
.h261_loop_filter(dest_y
+ 8 * linesize
, linesize
);
76 s
->dsp
.h261_loop_filter(dest_y
+ 8 * linesize
+ 8, linesize
);
77 s
->dsp
.h261_loop_filter(dest_cb
, uvlinesize
);
78 s
->dsp
.h261_loop_filter(dest_cr
, uvlinesize
);
81 int ff_h261_get_picture_format(int width
, int height
){
83 if (width
== 176 && height
== 144)
86 else if (width
== 352 && height
== 288)
93 static void h261_encode_block(H261Context
* h
, DCTELEM
* block
,
95 static int h261_decode_block(H261Context
*h
, DCTELEM
*block
,
98 void ff_h261_encode_picture_header(MpegEncContext
* s
, int picture_number
){
99 H261Context
* h
= (H261Context
*) s
;
100 int format
, temp_ref
;
102 align_put_bits(&s
->pb
);
104 /* Update the pointer to last GOB */
105 s
->ptr_lastgob
= pbBufPtr(&s
->pb
);
107 put_bits(&s
->pb
, 20, 0x10); /* PSC */
109 temp_ref
= s
->picture_number
* (int64_t)30000 * s
->avctx
->time_base
.num
/
110 (1001 * (int64_t)s
->avctx
->time_base
.den
); //FIXME maybe this should use a timestamp
111 put_bits(&s
->pb
, 5, temp_ref
& 0x1f); /* TemporalReference */
113 put_bits(&s
->pb
, 1, 0); /* split screen off */
114 put_bits(&s
->pb
, 1, 0); /* camera off */
115 put_bits(&s
->pb
, 1, 0); /* freeze picture release off */
117 format
= ff_h261_get_picture_format(s
->width
, s
->height
);
119 put_bits(&s
->pb
, 1, format
); /* 0 == QCIF, 1 == CIF */
121 put_bits(&s
->pb
, 1, 0); /* still image mode */
122 put_bits(&s
->pb
, 1, 0); /* reserved */
124 put_bits(&s
->pb
, 1, 0); /* no PEI */
133 * Encodes a group of blocks header.
135 static void h261_encode_gob_header(MpegEncContext
* s
, int mb_line
){
136 H261Context
* h
= (H261Context
*)s
;
137 if(ff_h261_get_picture_format(s
->width
, s
->height
) == 0){
138 h
->gob_number
+=2; // QCIF
141 h
->gob_number
++; // CIF
143 put_bits(&s
->pb
, 16, 1); /* GBSC */
144 put_bits(&s
->pb
, 4, h
->gob_number
); /* GN */
145 put_bits(&s
->pb
, 5, s
->qscale
); /* GQUANT */
146 put_bits(&s
->pb
, 1, 0); /* no GEI */
153 void ff_h261_reorder_mb_index(MpegEncContext
* s
){
154 int index
= s
->mb_x
+ s
->mb_y
*s
->mb_width
;
157 h261_encode_gob_header(s
,0);
159 /* for CIF the GOB's are fragmented in the middle of a scanline
160 that's why we need to adjust the x and y index of the macroblocks */
161 if(ff_h261_get_picture_format(s
->width
,s
->height
) == 1){ // CIF
162 s
->mb_x
= index
% 11 ; index
/= 11;
163 s
->mb_y
= index
% 3 ; index
/= 3;
164 s
->mb_x
+= 11*(index
% 2); index
/= 2;
167 ff_init_block_index(s
);
168 ff_update_block_index(s
);
172 static void h261_encode_motion(H261Context
* h
, int val
){
173 MpegEncContext
* const s
= &h
->s
;
177 put_bits(&s
->pb
,h261_mv_tab
[code
][1],h261_mv_tab
[code
][0]);
185 code
= sign
? -val
: val
;
186 put_bits(&s
->pb
,h261_mv_tab
[code
][1],h261_mv_tab
[code
][0]);
187 put_bits(&s
->pb
,1,sign
);
191 static inline int get_cbp(MpegEncContext
* s
,
192 DCTELEM block
[6][64])
196 for (i
= 0; i
< 6; i
++) {
197 if (s
->block_last_index
[i
] >= 0)
202 void ff_h261_encode_mb(MpegEncContext
* s
,
203 DCTELEM block
[6][64],
204 int motion_x
, int motion_y
)
206 H261Context
* h
= (H261Context
*)s
;
207 int mvd
, mv_diff_x
, mv_diff_y
, i
, cbp
;
208 cbp
= 63; // avoid warning
216 cbp
= get_cbp(s
, block
);
218 /* mvd indicates if this block is motion compensated */
219 mvd
= motion_x
| motion_y
;
221 if((cbp
| mvd
| s
->dquant
) == 0) {
222 /* skip macroblock */
230 /* MB is not skipped, encode MBA */
231 put_bits(&s
->pb
, h261_mba_bits
[(h
->current_mba
-h
->previous_mba
)-1], h261_mba_code
[(h
->current_mba
-h
->previous_mba
)-1]);
233 /* calculate MTYPE */
237 if(mvd
|| s
->loop_filter
)
243 assert(h
->mtype
> 1);
249 put_bits(&s
->pb
, h261_mtype_bits
[h
->mtype
], h261_mtype_code
[h
->mtype
]);
251 h
->mtype
= h261_mtype_map
[h
->mtype
];
253 if(IS_QUANT(h
->mtype
)){
254 ff_set_qscale(s
,s
->qscale
+s
->dquant
);
255 put_bits(&s
->pb
, 5, s
->qscale
);
258 if(IS_16X16(h
->mtype
)){
259 mv_diff_x
= (motion_x
>> 1) - h
->current_mv_x
;
260 mv_diff_y
= (motion_y
>> 1) - h
->current_mv_y
;
261 h
->current_mv_x
= (motion_x
>> 1);
262 h
->current_mv_y
= (motion_y
>> 1);
263 h261_encode_motion(h
,mv_diff_x
);
264 h261_encode_motion(h
,mv_diff_y
);
267 h
->previous_mba
= h
->current_mba
;
269 if(HAS_CBP(h
->mtype
)){
271 put_bits(&s
->pb
,h261_cbp_tab
[cbp
-1][1],h261_cbp_tab
[cbp
-1][0]);
274 /* encode each block */
275 h261_encode_block(h
, block
[i
], i
);
278 if ( ( h
->current_mba
== 11 ) || ( h
->current_mba
== 22 ) || ( h
->current_mba
== 33 ) || ( !IS_16X16 ( h
->mtype
) )){
284 void ff_h261_encode_init(MpegEncContext
*s
){
289 init_rl(&h261_rl_tcoeff
, static_rl_table_store
);
295 s
->c_dc_scale_table
= ff_mpeg1_dc_scale_table
;
300 * encodes a 8x8 block.
301 * @param block the 8x8 block
302 * @param n block index (0-3 are luma, 4-5 are chroma)
304 static void h261_encode_block(H261Context
* h
, DCTELEM
* block
, int n
){
305 MpegEncContext
* const s
= &h
->s
;
306 int level
, run
, last
, i
, j
, last_index
, last_non_zero
, sign
, slevel
, code
;
309 rl
= &h261_rl_tcoeff
;
313 /* 255 cannot be represented, so we clamp */
318 /* 0 cannot be represented also */
319 else if (level
< 1) {
324 put_bits(&s
->pb
, 8, 0xff);
326 put_bits(&s
->pb
, 8, level
);
328 } else if((block
[0]==1 || block
[0] == -1) && (s
->block_last_index
[n
] > -1)){
330 put_bits(&s
->pb
,2,block
[0]>0 ? 2 : 3 );
337 last_index
= s
->block_last_index
[n
];
338 last_non_zero
= i
- 1;
339 for (; i
<= last_index
; i
++) {
340 j
= s
->intra_scantable
.permutated
[i
];
343 run
= i
- last_non_zero
- 1;
344 last
= (i
== last_index
);
351 code
= get_rl_index(rl
, 0 /*no last in H.261, EOB is used*/, run
, level
);
352 if(run
==0 && level
< 16)
354 put_bits(&s
->pb
, rl
->table_vlc
[code
][1], rl
->table_vlc
[code
][0]);
356 put_bits(&s
->pb
, 6, run
);
358 assert(level
<= 127);
359 put_bits(&s
->pb
, 8, slevel
& 0xff);
361 put_bits(&s
->pb
, 1, sign
);
367 put_bits(&s
->pb
, rl
->table_vlc
[0][1], rl
->table_vlc
[0][0]);// END OF BLOCK
371 /***********************************************/
374 static VLC h261_mba_vlc
;
375 static VLC h261_mtype_vlc
;
376 static VLC h261_mv_vlc
;
377 static VLC h261_cbp_vlc
;
379 static void h261_decode_init_vlc(H261Context
*h
){
384 init_vlc(&h261_mba_vlc
, H261_MBA_VLC_BITS
, 35,
386 h261_mba_code
, 1, 1, 1);
387 init_vlc(&h261_mtype_vlc
, H261_MTYPE_VLC_BITS
, 10,
388 h261_mtype_bits
, 1, 1,
389 h261_mtype_code
, 1, 1, 1);
390 init_vlc(&h261_mv_vlc
, H261_MV_VLC_BITS
, 17,
391 &h261_mv_tab
[0][1], 2, 1,
392 &h261_mv_tab
[0][0], 2, 1, 1);
393 init_vlc(&h261_cbp_vlc
, H261_CBP_VLC_BITS
, 63,
394 &h261_cbp_tab
[0][1], 2, 1,
395 &h261_cbp_tab
[0][0], 2, 1, 1);
396 init_rl(&h261_rl_tcoeff
, static_rl_table_store
);
397 init_vlc_rl(&h261_rl_tcoeff
, 1);
401 static int h261_decode_init(AVCodecContext
*avctx
){
402 H261Context
*h
= avctx
->priv_data
;
403 MpegEncContext
* const s
= &h
->s
;
406 MPV_decode_defaults(s
);
409 s
->width
= s
->avctx
->coded_width
;
410 s
->height
= s
->avctx
->coded_height
;
411 s
->codec_id
= s
->avctx
->codec
->id
;
413 s
->out_format
= FMT_H261
;
415 avctx
->pix_fmt
= PIX_FMT_YUV420P
;
417 s
->codec_id
= avctx
->codec
->id
;
419 h261_decode_init_vlc(h
);
421 h
->gob_start_code_skipped
= 0;
427 * decodes the group of blocks header or slice header.
428 * @return <0 if an error occured
430 static int h261_decode_gob_header(H261Context
*h
){
432 MpegEncContext
* const s
= &h
->s
;
434 if ( !h
->gob_start_code_skipped
){
435 /* Check for GOB Start Code */
436 val
= show_bits(&s
->gb
, 15);
441 skip_bits(&s
->gb
, 16);
444 h
->gob_start_code_skipped
= 0;
446 h
->gob_number
= get_bits(&s
->gb
, 4); /* GN */
447 s
->qscale
= get_bits(&s
->gb
, 5); /* GQUANT */
449 /* Check if gob_number is valid */
450 if (s
->mb_height
==18){ //cif
451 if ((h
->gob_number
<=0) || (h
->gob_number
>12))
455 if ((h
->gob_number
!=1) && (h
->gob_number
!=3) && (h
->gob_number
!=5))
460 while (get_bits1(&s
->gb
) != 0) {
461 skip_bits(&s
->gb
, 8);
467 // For the first transmitted macroblock in a GOB, MBA is the absolute address. For
468 // subsequent macroblocks, MBA is the difference between the absolute addresses of
469 // the macroblock and the last transmitted macroblock.
477 * decodes the group of blocks / video packet header.
478 * @return <0 if no resync found
480 static int ff_h261_resync(H261Context
*h
){
481 MpegEncContext
* const s
= &h
->s
;
484 if ( h
->gob_start_code_skipped
){
485 ret
= h261_decode_gob_header(h
);
490 if(show_bits(&s
->gb
, 15)==0){
491 ret
= h261_decode_gob_header(h
);
495 //ok, its not where its supposed to be ...
496 s
->gb
= s
->last_resync_gb
;
497 align_get_bits(&s
->gb
);
498 left
= s
->gb
.size_in_bits
- get_bits_count(&s
->gb
);
500 for(;left
>15+1+4+5; left
-=8){
501 if(show_bits(&s
->gb
, 15)==0){
502 GetBitContext bak
= s
->gb
;
504 ret
= h261_decode_gob_header(h
);
510 skip_bits(&s
->gb
, 8);
518 * decodes skipped macroblocks
521 static int h261_decode_mb_skipped(H261Context
*h
, int mba1
, int mba2
)
523 MpegEncContext
* const s
= &h
->s
;
528 for(i
=mba1
; i
<mba2
; i
++){
531 s
->mb_x
= ((h
->gob_number
-1) % 2) * 11 + i
% 11;
532 s
->mb_y
= ((h
->gob_number
-1) / 2) * 3 + i
/ 11;
533 xy
= s
->mb_x
+ s
->mb_y
* s
->mb_stride
;
534 ff_init_block_index(s
);
535 ff_update_block_index(s
);
538 s
->block_last_index
[j
] = -1;
540 s
->mv_dir
= MV_DIR_FORWARD
;
541 s
->mv_type
= MV_TYPE_16X16
;
542 s
->current_picture
.mb_type
[xy
]= MB_TYPE_SKIP
| MB_TYPE_16x16
| MB_TYPE_L0
;
546 h
->mtype
&= ~MB_TYPE_H261_FIL
;
548 MPV_decode_mb(s
, s
->block
);
554 static int decode_mv_component(GetBitContext
*gb
, int v
){
555 int mv_diff
= get_vlc2(gb
, h261_mv_vlc
.table
, H261_MV_VLC_BITS
, 2);
557 /* check if mv_diff is valid */
561 mv_diff
= mvmap
[mv_diff
];
563 if(mv_diff
&& !get_bits1(gb
))
568 else if(v
>= 16) v
-= 32;
573 static int h261_decode_mb(H261Context
*h
){
574 MpegEncContext
* const s
= &h
->s
;
580 h
->mba_diff
= get_vlc2(&s
->gb
, h261_mba_vlc
.table
, H261_MBA_VLC_BITS
, 2);
582 /* Check for slice end */
583 /* NOTE: GOB can be empty (no MB data) or exist only of MBA_stuffing */
584 if (h
->mba_diff
== MBA_STARTCODE
){ // start code
585 h
->gob_start_code_skipped
= 1;
589 while( h
->mba_diff
== MBA_STUFFING
); // stuffing
591 if ( h
->mba_diff
< 0 ){
592 if ( get_bits_count(&s
->gb
) + 7 >= s
->gb
.size_in_bits
)
595 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal mba at %d %d\n", s
->mb_x
, s
->mb_y
);
600 h
->current_mba
+= h
->mba_diff
;
602 if ( h
->current_mba
> MBA_STUFFING
)
605 s
->mb_x
= ((h
->gob_number
-1) % 2) * 11 + ((h
->current_mba
-1) % 11);
606 s
->mb_y
= ((h
->gob_number
-1) / 2) * 3 + ((h
->current_mba
-1) / 11);
607 xy
= s
->mb_x
+ s
->mb_y
* s
->mb_stride
;
608 ff_init_block_index(s
);
609 ff_update_block_index(s
);
612 h
->mtype
= get_vlc2(&s
->gb
, h261_mtype_vlc
.table
, H261_MTYPE_VLC_BITS
, 2);
613 h
->mtype
= h261_mtype_map
[h
->mtype
];
616 if ( IS_QUANT ( h
->mtype
) ){
617 ff_set_qscale(s
, get_bits(&s
->gb
, 5));
620 s
->mb_intra
= IS_INTRA4x4(h
->mtype
);
623 if ( IS_16X16 ( h
->mtype
) ){
624 // Motion vector data is included for all MC macroblocks. MVD is obtained from the macroblock vector by subtracting the
625 // vector of the preceding macroblock. For this calculation the vector of the preceding macroblock is regarded as zero in the
626 // following three situations:
627 // 1) evaluating MVD for macroblocks 1, 12 and 23;
628 // 2) evaluating MVD for macroblocks in which MBA does not represent a difference of 1;
629 // 3) MTYPE of the previous macroblock was not MC.
630 if ( ( h
->current_mba
== 1 ) || ( h
->current_mba
== 12 ) || ( h
->current_mba
== 23 ) ||
637 h
->current_mv_x
= decode_mv_component(&s
->gb
, h
->current_mv_x
);
638 h
->current_mv_y
= decode_mv_component(&s
->gb
, h
->current_mv_y
);
645 if ( HAS_CBP( h
->mtype
) ){
646 cbp
= get_vlc2(&s
->gb
, h261_cbp_vlc
.table
, H261_CBP_VLC_BITS
, 2) + 1;
650 s
->current_picture
.mb_type
[xy
]= MB_TYPE_INTRA
;
655 s
->mv_dir
= MV_DIR_FORWARD
;
656 s
->mv_type
= MV_TYPE_16X16
;
657 s
->current_picture
.mb_type
[xy
]= MB_TYPE_16x16
| MB_TYPE_L0
;
658 s
->mv
[0][0][0] = h
->current_mv_x
* 2;//gets divided by 2 in motion compensation
659 s
->mv
[0][0][1] = h
->current_mv_y
* 2;
662 /* decode each block */
663 if(s
->mb_intra
|| HAS_CBP(h
->mtype
)){
664 s
->dsp
.clear_blocks(s
->block
[0]);
665 for (i
= 0; i
< 6; i
++) {
666 if (h261_decode_block(h
, s
->block
[i
], i
, cbp
&32) < 0){
672 for (i
= 0; i
< 6; i
++)
673 s
->block_last_index
[i
]= -1;
676 MPV_decode_mb(s
, s
->block
);
682 * decodes a macroblock
683 * @return <0 if an error occured
685 static int h261_decode_block(H261Context
* h
, DCTELEM
* block
,
688 MpegEncContext
* const s
= &h
->s
;
689 int code
, level
, i
, j
, run
;
690 RLTable
*rl
= &h261_rl_tcoeff
;
691 const uint8_t *scan_table
;
693 // For the variable length encoding there are two code tables, one being used for
694 // the first transmitted LEVEL in INTER, INTER+MC and INTER+MC+FIL blocks, the second
695 // for all other LEVELs except the first one in INTRA blocks which is fixed length
696 // coded with 8 bits.
697 // NOTE: the two code tables only differ in one VLC so we handle that manually.
698 scan_table
= s
->intra_scantable
.permutated
;
701 level
= get_bits(&s
->gb
, 8);
702 // 0 (00000000b) and -128 (10000000b) are FORBIDDEN
703 if((level
&0x7F) == 0){
704 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal dc %d at %d %d\n", level
, s
->mb_x
, s
->mb_y
);
707 // The code 1000 0000 is not used, the reconstruction level of 1024 being coded as 1111 1111.
714 // EOB Not possible for first level when cbp is available (that's why the table is different)
717 int check
= show_bits(&s
->gb
, 2);
720 skip_bits(&s
->gb
, 2);
721 block
[0] = ( check
& 0x1 ) ? -1 : 1;
728 s
->block_last_index
[n
] = i
- 1;
732 code
= get_vlc2(&s
->gb
, rl
->vlc
.table
, TCOEFF_VLC_BITS
, 2);
734 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal ac vlc code at %dx%d\n", s
->mb_x
, s
->mb_y
);
739 // The remaining combinations of (run, level) are encoded with a 20-bit word consisting of 6 bits escape, 6 bits run and 8 bits level.
740 run
= get_bits(&s
->gb
, 6);
741 level
= get_sbits(&s
->gb
, 8);
745 run
= rl
->table_run
[code
];
746 level
= rl
->table_level
[code
];
747 if (get_bits1(&s
->gb
))
752 av_log(s
->avctx
, AV_LOG_ERROR
, "run overflow at %dx%d\n", s
->mb_x
, s
->mb_y
);
759 s
->block_last_index
[n
] = i
-1;
764 * decodes the H261 picture header.
765 * @return <0 if no startcode found
767 static int h261_decode_picture_header(H261Context
*h
){
768 MpegEncContext
* const s
= &h
->s
;
770 uint32_t startcode
= 0;
772 for(i
= s
->gb
.size_in_bits
- get_bits_count(&s
->gb
); i
>24; i
-=1){
773 startcode
= ((startcode
<< 1) | get_bits(&s
->gb
, 1)) & 0x000FFFFF;
775 if(startcode
== 0x10)
779 if (startcode
!= 0x10){
780 av_log(s
->avctx
, AV_LOG_ERROR
, "Bad picture start code\n");
784 /* temporal reference */
785 i
= get_bits(&s
->gb
, 5); /* picture timestamp */
786 if(i
< (s
->picture_number
&31))
788 s
->picture_number
= (s
->picture_number
&~31) + i
;
790 s
->avctx
->time_base
= (AVRational
){1001, 30000};
791 s
->current_picture
.pts
= s
->picture_number
;
794 /* PTYPE starts here */
795 skip_bits1(&s
->gb
); /* split screen off */
796 skip_bits1(&s
->gb
); /* camera off */
797 skip_bits1(&s
->gb
); /* freeze picture release off */
799 format
= get_bits1(&s
->gb
);
801 //only 2 formats possible
802 if (format
== 0){//QCIF
814 s
->mb_num
= s
->mb_width
* s
->mb_height
;
816 skip_bits1(&s
->gb
); /* still image mode off */
817 skip_bits1(&s
->gb
); /* Reserved */
820 while (get_bits1(&s
->gb
) != 0){
821 skip_bits(&s
->gb
, 8);
824 // h261 has no I-FRAMES, but if we pass I_TYPE for the first frame, the codec crashes if it does
825 // not contain all I-blocks (e.g. when a packet is lost)
826 s
->pict_type
= P_TYPE
;
832 static int h261_decode_gob(H261Context
*h
){
833 MpegEncContext
* const s
= &h
->s
;
835 ff_set_qscale(s
, s
->qscale
);
838 while(h
->current_mba
<= MBA_STUFFING
)
842 ret
= h261_decode_mb(h
);
845 h261_decode_mb_skipped(h
, h
->current_mba
, 33);
848 av_log(s
->avctx
, AV_LOG_ERROR
, "Error at MB: %d\n", s
->mb_x
+ s
->mb_y
*s
->mb_stride
);
852 h261_decode_mb_skipped(h
, h
->current_mba
-h
->mba_diff
, h
->current_mba
-1);
859 * returns the number of bytes consumed for building the current frame
861 static int get_consumed_bytes(MpegEncContext
*s
, int buf_size
){
862 int pos
= get_bits_count(&s
->gb
)>>3;
863 if(pos
==0) pos
=1; //avoid infinite loops (i doubt thats needed but ...)
864 if(pos
+10>buf_size
) pos
=buf_size
; // oops ;)
869 static int h261_decode_frame(AVCodecContext
*avctx
,
870 void *data
, int *data_size
,
871 uint8_t *buf
, int buf_size
)
873 H261Context
*h
= avctx
->priv_data
;
874 MpegEncContext
*s
= &h
->s
;
876 AVFrame
*pict
= data
;
879 av_log(avctx
, AV_LOG_DEBUG
, "*****frame %d size=%d\n", avctx
->frame_number
, buf_size
);
880 av_log(avctx
, AV_LOG_DEBUG
, "bytes=%x %x %x %x\n", buf
[0], buf
[1], buf
[2], buf
[3]);
882 s
->flags
= avctx
->flags
;
883 s
->flags2
= avctx
->flags2
;
885 h
->gob_start_code_skipped
=0;
889 init_get_bits(&s
->gb
, buf
, buf_size
*8);
891 if(!s
->context_initialized
){
892 if (MPV_common_init(s
) < 0) //we need the idct permutaton for reading a custom matrix
896 //we need to set current_picture_ptr before reading the header, otherwise we cant store anyting im there
897 if(s
->current_picture_ptr
==NULL
|| s
->current_picture_ptr
->data
[0]){
898 int i
= ff_find_unused_picture(s
, 0);
899 s
->current_picture_ptr
= &s
->picture
[i
];
902 ret
= h261_decode_picture_header(h
);
904 /* skip if the header was thrashed */
906 av_log(s
->avctx
, AV_LOG_ERROR
, "header damaged\n");
910 if (s
->width
!= avctx
->coded_width
|| s
->height
!= avctx
->coded_height
){
911 ParseContext pc
= s
->parse_context
; //FIXME move these demuxng hack to avformat
912 s
->parse_context
.buffer
=0;
914 s
->parse_context
= pc
;
916 if (!s
->context_initialized
) {
917 avcodec_set_dimensions(avctx
, s
->width
, s
->height
);
923 s
->current_picture
.pict_type
= s
->pict_type
;
924 s
->current_picture
.key_frame
= s
->pict_type
== I_TYPE
;
926 /* skip everything if we are in a hurry>=5 */
927 if(avctx
->hurry_up
>=5) return get_consumed_bytes(s
, buf_size
);
928 if( (avctx
->skip_frame
>= AVDISCARD_NONREF
&& s
->pict_type
==B_TYPE
)
929 ||(avctx
->skip_frame
>= AVDISCARD_NONKEY
&& s
->pict_type
!=I_TYPE
)
930 || avctx
->skip_frame
>= AVDISCARD_ALL
)
931 return get_consumed_bytes(s
, buf_size
);
933 if(MPV_frame_start(s
, avctx
) < 0)
936 ff_er_frame_start(s
);
938 /* decode each macroblock */
942 while(h
->gob_number
< (s
->mb_height
==18 ? 12 : 5)){
943 if(ff_h261_resync(h
)<0)
949 assert(s
->current_picture
.pict_type
== s
->current_picture_ptr
->pict_type
);
950 assert(s
->current_picture
.pict_type
== s
->pict_type
);
951 *pict
= *(AVFrame
*)s
->current_picture_ptr
;
952 ff_print_debug_info(s
, pict
);
954 *data_size
= sizeof(AVFrame
);
956 return get_consumed_bytes(s
, buf_size
);
959 static int h261_decode_end(AVCodecContext
*avctx
)
961 H261Context
*h
= avctx
->priv_data
;
962 MpegEncContext
*s
= &h
->s
;
968 #ifdef CONFIG_ENCODERS
969 AVCodec h261_encoder
= {
977 .pix_fmts
= (enum PixelFormat
[]){PIX_FMT_YUV420P
, -1},
981 AVCodec h261_decoder
= {