* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
*/
/**
#include <string.h>
#include <unistd.h>
-#include "common.h"
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
} else {
/* unpack the list of partially-coded superblocks */
- bit = get_bits(gb, 1);
+ bit = get_bits1(gb);
/* toggle the bit because as soon as the first run length is
* fetched the bit will be toggled again */
bit ^= 1;
current_superblock = 0;
current_run = 0;
- bit = get_bits(gb, 1);
+ bit = get_bits1(gb);
/* toggle the bit because as soon as the first run length is
* fetched the bit will be toggled again */
bit ^= 1;
if (decode_partial_blocks) {
current_run = 0;
- bit = get_bits(gb, 1);
+ bit = get_bits1(gb);
/* toggle the bit because as soon as the first run length is
* fetched the bit will be toggled again */
bit ^= 1;
memset(motion_y, 0, 6 * sizeof(int));
/* coding mode 0 is the VLC scheme; 1 is the fixed code scheme */
- coding_mode = get_bits(gb, 1);
+ coding_mode = get_bits1(gb);
debug_vectors(" using %s scheme for unpacking motion vectors\n",
(coding_mode == 0) ? "VLC" : "fixed-length");
{
Vp3DecodeContext *s = avctx->priv_data;
- if (get_bits(gb, 1)) {
+ if (get_bits1(gb)) {
int token;
if (s->entries >= 32) { /* overflow */
av_log(avctx, AV_LOG_ERROR, "huffman tree overflow\n");
static int theora_decode_header(AVCodecContext *avctx, GetBitContext *gb)
{
Vp3DecodeContext *s = avctx->priv_data;
+ int visible_width, visible_height;
s->theora = get_bits_long(gb, 24);
- av_log(avctx, AV_LOG_INFO, "Theora bitstream version %X\n", s->theora);
+ av_log(avctx, AV_LOG_VERBOSE, "Theora bitstream version %X\n", s->theora);
/* 3.2.0 aka alpha3 has the same frame orientation as original vp3 */
/* but previous versions have the image flipped relative to vp3 */
skip_bits(gb, 32); /* total number of blocks in a frame */
skip_bits(gb, 4); /* total number of blocks in a frame */
skip_bits(gb, 32); /* total number of macroblocks in a frame */
-
- skip_bits(gb, 24); /* frame width */
- skip_bits(gb, 24); /* frame height */
- }
- else
- {
- skip_bits(gb, 24); /* frame width */
- skip_bits(gb, 24); /* frame height */
}
- if (s->theora >= 0x030200) {
- skip_bits(gb, 8); /* offset x */
- skip_bits(gb, 8); /* offset y */
- }
+ visible_width = get_bits_long(gb, 24);
+ visible_height = get_bits_long(gb, 24);
+
+ if (s->theora >= 0x030200) {
+ skip_bits(gb, 8); /* offset x */
+ skip_bits(gb, 8); /* offset y */
+ }
skip_bits(gb, 32); /* fps numerator */
skip_bits(gb, 32); /* fps denumerator */
// align_get_bits(gb);
- avctx->width = s->width;
- avctx->height = s->height;
+ if ( visible_width <= s->width && visible_width > s->width-16
+ && visible_height <= s->height && visible_height > s->height-16)
+ avcodec_set_dimensions(avctx, visible_width, visible_height);
+ else
+ avcodec_set_dimensions(avctx, s->width, s->height);
return 0;
}
for (plane = 0; plane <= 2; plane++) {
int newqr= 1;
if (inter || plane > 0)
- newqr = get_bits(gb, 1);
+ newqr = get_bits1(gb);
if (!newqr) {
int qtj, plj;
- if(inter && get_bits(gb, 1)){
+ if(inter && get_bits1(gb)){
qtj = 0;
plj = plane;
}else{
for (s->hti = 0; s->hti < 80; s->hti++) {
s->entries = 0;
s->huff_code_size = 1;
- if (!get_bits(gb, 1)) {
+ if (!get_bits1(gb)) {
s->hbits = 0;
read_huffman_tree(avctx, gb);
s->hbits = 1;