本文整理汇总了C++中skip_bits函数的典型用法代码示例。如果您正苦于以下问题:C++ skip_bits函数的具体用法?C++ skip_bits怎么用?C++ skip_bits使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了skip_bits函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: decode_unregistered_user_data
static int decode_unregistered_user_data(H264Context *h, int size)
{
uint8_t user_data[16 + 256];
int e, build, i;
if (size < 16)
return AVERROR_INVALIDDATA;
for (i = 0; i < sizeof(user_data) - 1 && i < size; i++)
user_data[i] = get_bits(&h->gb, 8);
user_data[i] = 0;
e = sscanf(user_data + 16, "x264 - core %d", &build);
if (e == 1 && build > 0)
h->x264_build = build;
if (h->avctx->debug & FF_DEBUG_BUGS)
av_log(h->avctx, AV_LOG_DEBUG, "user data:\"%s\"\n", user_data + 16);
for (; i < size; i++)
skip_bits(&h->gb, 8);
return 0;
}
开发者ID:rkrishna1,项目名称:libav,代码行数:24,代码来源:h264_sei.c
示例2: ff_h261_resync
/**
* decodes the group of blocks / video packet header.
* @return <0 if no resync found
*/
static int ff_h261_resync(H261Context *h){
MpegEncContext * const s = &h->s;
int left, ret;
if ( h->gob_start_code_skipped ){
ret= h261_decode_gob_header(h);
if(ret>=0)
return 0;
}
else{
if(show_bits(&s->gb, 15)==0){
ret= h261_decode_gob_header(h);
if(ret>=0)
return 0;
}
//OK, it is not where it is supposed to be ...
s->gb= s->last_resync_gb;
align_get_bits(&s->gb);
left= s->gb.size_in_bits - get_bits_count(&s->gb);
for(;left>15+1+4+5; left-=8){
if(show_bits(&s->gb, 15)==0){
GetBitContext bak= s->gb;
ret= h261_decode_gob_header(h);
if(ret>=0)
return 0;
s->gb= bak;
}
skip_bits(&s->gb, 8);
}
}
return -1;
}
开发者ID:AnthonyNystrom,项目名称:MobiVU,代码行数:40,代码来源:h261dec.c
示例3: decode_user_data_itu_t_t35
static int decode_user_data_itu_t_t35(H264Context *h, int size)
{
uint32_t user_identifier;
int dtg_active_format;
if (size < 7)
return -1;
size -= 7;
skip_bits(&h->gb, 8); // country_code
skip_bits(&h->gb, 16); // provider_code
user_identifier = get_bits_long(&h->gb, 32);
switch (user_identifier) {
case 0x44544731: // "DTG1" - AFD_data
if (size < 1)
return -1;
skip_bits(&h->gb, 1);
if (get_bits(&h->gb, 1)) {
skip_bits(&h->gb, 6);
if (size < 2)
return -1;
skip_bits(&h->gb, 4);
dtg_active_format = get_bits(&h->gb, 4);
h->avctx->dtg_active_format = dtg_active_format;
} else {
skip_bits(&h->gb, 6);
}
break;
default:
skip_bits(&h->gb, size * 8);
break;
}
return 0;
}
开发者ID:CoerSuer,项目名称:FFmpeg,代码行数:36,代码来源:h264_sei.c
示例4: mpc8_decode_init
static av_cold int mpc8_decode_init(AVCodecContext * avctx)
{
int i;
MPCContext *c = avctx->priv_data;
GetBitContext gb;
static int vlc_initialized = 0;
static VLC_TYPE band_table[542][2];
static VLC_TYPE q1_table[520][2];
static VLC_TYPE q9up_table[524][2];
static VLC_TYPE scfi0_table[1 << MPC8_SCFI0_BITS][2];
static VLC_TYPE scfi1_table[1 << MPC8_SCFI1_BITS][2];
static VLC_TYPE dscf0_table[560][2];
static VLC_TYPE dscf1_table[598][2];
static VLC_TYPE q3_0_table[512][2];
static VLC_TYPE q3_1_table[516][2];
static VLC_TYPE codes_table[5708][2];
if(avctx->extradata_size < 2){
av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size);
return -1;
}
memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
av_lfg_init(&c->rnd, 0xDEADBEEF);
dsputil_init(&c->dsp, avctx);
ff_mpc_init();
init_get_bits(&gb, avctx->extradata, 16);
skip_bits(&gb, 3);//sample rate
c->maxbands = get_bits(&gb, 5) + 1;
skip_bits(&gb, 4);//channels
c->MSS = get_bits1(&gb);
c->frames = 1 << (get_bits(&gb, 3) * 2);
avctx->sample_fmt = SAMPLE_FMT_S16;
avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
if(vlc_initialized) return 0;
av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
band_vlc.table = band_table;
band_vlc.table_allocated = 542;
init_vlc(&band_vlc, MPC8_BANDS_BITS, MPC8_BANDS_SIZE,
mpc8_bands_bits, 1, 1,
mpc8_bands_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
q1_vlc.table = q1_table;
q1_vlc.table_allocated = 520;
init_vlc(&q1_vlc, MPC8_Q1_BITS, MPC8_Q1_SIZE,
mpc8_q1_bits, 1, 1,
mpc8_q1_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
q9up_vlc.table = q9up_table;
q9up_vlc.table_allocated = 524;
init_vlc(&q9up_vlc, MPC8_Q9UP_BITS, MPC8_Q9UP_SIZE,
mpc8_q9up_bits, 1, 1,
mpc8_q9up_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
scfi_vlc[0].table = scfi0_table;
scfi_vlc[0].table_allocated = 1 << MPC8_SCFI0_BITS;
init_vlc(&scfi_vlc[0], MPC8_SCFI0_BITS, MPC8_SCFI0_SIZE,
mpc8_scfi0_bits, 1, 1,
mpc8_scfi0_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
scfi_vlc[1].table = scfi1_table;
scfi_vlc[1].table_allocated = 1 << MPC8_SCFI1_BITS;
init_vlc(&scfi_vlc[1], MPC8_SCFI1_BITS, MPC8_SCFI1_SIZE,
mpc8_scfi1_bits, 1, 1,
mpc8_scfi1_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
dscf_vlc[0].table = dscf0_table;
dscf_vlc[0].table_allocated = 560;
init_vlc(&dscf_vlc[0], MPC8_DSCF0_BITS, MPC8_DSCF0_SIZE,
mpc8_dscf0_bits, 1, 1,
mpc8_dscf0_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
dscf_vlc[1].table = dscf1_table;
dscf_vlc[1].table_allocated = 598;
init_vlc(&dscf_vlc[1], MPC8_DSCF1_BITS, MPC8_DSCF1_SIZE,
mpc8_dscf1_bits, 1, 1,
mpc8_dscf1_codes, 1, 1, INIT_VLC_USE_NEW_STATIC);
q3_vlc[0].table = q3_0_table;
q3_vlc[0].table_allocated = 512;
init_vlc_sparse(&q3_vlc[0], MPC8_Q3_BITS, MPC8_Q3_SIZE,
mpc8_q3_bits, 1, 1,
mpc8_q3_codes, 1, 1,
mpc8_q3_syms, 1, 1, INIT_VLC_USE_NEW_STATIC);
q3_vlc[1].table = q3_1_table;
q3_vlc[1].table_allocated = 516;
init_vlc_sparse(&q3_vlc[1], MPC8_Q4_BITS, MPC8_Q4_SIZE,
mpc8_q4_bits, 1, 1,
mpc8_q4_codes, 1, 1,
mpc8_q4_syms, 1, 1, INIT_VLC_USE_NEW_STATIC);
for(i = 0; i < 2; i++){
res_vlc[i].table = &codes_table[vlc_offsets[0+i]];
res_vlc[i].table_allocated = vlc_offsets[1+i] - vlc_offsets[0+i];
init_vlc(&res_vlc[i], MPC8_RES_BITS, MPC8_RES_SIZE,
&mpc8_res_bits[i], 1, 1,
&mpc8_res_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
//.........这里部分代码省略.........
开发者ID:WangCrystal,项目名称:FFplayer,代码行数:101,代码来源:mpc8.c
示例5: ff_intel_h263_decode_picture_header
/* don't understand why they choose a different header ! */
int ff_intel_h263_decode_picture_header(MpegEncContext *s)
{
int format;
/* picture header */
if (get_bits_long(&s->gb, 22) != 0x20) {
av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
return -1;
}
s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
if (get_bits1(&s->gb) != 1) {
av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
return -1; /* marker */
}
if (get_bits1(&s->gb) != 0) {
av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
return -1; /* h263 id */
}
skip_bits1(&s->gb); /* split screen off */
skip_bits1(&s->gb); /* camera off */
skip_bits1(&s->gb); /* freeze picture release off */
format = get_bits(&s->gb, 3);
if (format == 0 || format == 6) {
av_log(s->avctx, AV_LOG_ERROR, "Intel H263 free format not supported\n");
return -1;
}
s->h263_plus = 0;
s->pict_type = AV_PICTURE_TYPE_I + get_bits1(&s->gb);
s->h263_long_vectors = get_bits1(&s->gb);
if (get_bits1(&s->gb) != 0) {
av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n");
return -1; /* SAC: off */
}
s->obmc= get_bits1(&s->gb);
s->unrestricted_mv = s->obmc || s->h263_long_vectors;
s->pb_frame = get_bits1(&s->gb);
if (format < 6) {
s->width = ff_h263_format[format][0];
s->height = ff_h263_format[format][1];
s->avctx->sample_aspect_ratio.num = 12;
s->avctx->sample_aspect_ratio.den = 11;
} else {
format = get_bits(&s->gb, 3);
if(format == 0 || format == 7){
av_log(s->avctx, AV_LOG_ERROR, "Wrong Intel H263 format\n");
return -1;
}
if(get_bits(&s->gb, 2))
av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
s->loop_filter = get_bits1(&s->gb) * !s->avctx->lowres;
if(get_bits1(&s->gb))
av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
if(get_bits1(&s->gb))
s->pb_frame = 2;
if(get_bits(&s->gb, 5))
av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
if(get_bits(&s->gb, 5) != 1)
av_log(s->avctx, AV_LOG_ERROR, "Invalid marker\n");
}
if(format == 6){
int ar = get_bits(&s->gb, 4);
skip_bits(&s->gb, 9); // display width
skip_bits1(&s->gb);
skip_bits(&s->gb, 9); // display height
if(ar == 15){
s->avctx->sample_aspect_ratio.num = get_bits(&s->gb, 8); // aspect ratio - width
s->avctx->sample_aspect_ratio.den = get_bits(&s->gb, 8); // aspect ratio - height
} else {
s->avctx->sample_aspect_ratio = ff_h263_pixel_aspect[ar];
}
if (s->avctx->sample_aspect_ratio.num == 0)
av_log(s->avctx, AV_LOG_ERROR, "Invalid aspect ratio.\n");
}
s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
if(s->pb_frame){
skip_bits(&s->gb, 3); //temporal reference for B-frame
skip_bits(&s->gb, 2); //dbquant
}
/* PEI */
while (get_bits1(&s->gb) != 0) {
skip_bits(&s->gb, 8);
}
s->f_code = 1;
s->y_dc_scale_table=
s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
ff_h263_show_pict_info(s);
//.........这里部分代码省略.........
开发者ID:0xFFeng,项目名称:ffmpeg,代码行数:101,代码来源:intelh263dec.c
示例6: mjpegb_decode_frame
static int mjpegb_decode_frame(AVCodecContext *avctx,
void *data, int *got_frame,
AVPacket *avpkt)
{
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
MJpegDecodeContext *s = avctx->priv_data;
const uint8_t *buf_end, *buf_ptr;
GetBitContext hgb; /* for the header */
uint32_t dqt_offs, dht_offs, sof_offs, sos_offs, second_field_offs;
uint32_t field_size, sod_offs;
int ret;
buf_ptr = buf;
buf_end = buf + buf_size;
s->got_picture = 0;
read_header:
/* reset on every SOI */
s->restart_interval = 0;
s->restart_count = 0;
s->mjpb_skiptosod = 0;
if (buf_end - buf_ptr >= 1 << 28)
return AVERROR_INVALIDDATA;
init_get_bits(&hgb, buf_ptr, /*buf_size*/(buf_end - buf_ptr)*8);
skip_bits(&hgb, 32); /* reserved zeros */
if (get_bits_long(&hgb, 32) != MKBETAG('m','j','p','g')) {
av_log(avctx, AV_LOG_WARNING, "not mjpeg-b (bad fourcc)\n");
return AVERROR_INVALIDDATA;
}
field_size = get_bits_long(&hgb, 32); /* field size */
av_log(avctx, AV_LOG_DEBUG, "field size: 0x%"PRIx32"\n", field_size);
skip_bits(&hgb, 32); /* padded field size */
second_field_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "second_field_offs is %d and size is %d\n");
av_log(avctx, AV_LOG_DEBUG, "second field offs: 0x%"PRIx32"\n",
second_field_offs);
dqt_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dqt is %d and size is %d\n");
av_log(avctx, AV_LOG_DEBUG, "dqt offs: 0x%"PRIx32"\n", dqt_offs);
if (dqt_offs) {
init_get_bits(&s->gb, buf_ptr+dqt_offs, (buf_end - (buf_ptr+dqt_offs))*8);
s->start_code = DQT;
ret = ff_mjpeg_decode_dqt(s);
if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
return ret;
}
dht_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dht is %d and size is %d\n");
av_log(avctx, AV_LOG_DEBUG, "dht offs: 0x%"PRIx32"\n", dht_offs);
if (dht_offs) {
init_get_bits(&s->gb, buf_ptr+dht_offs, (buf_end - (buf_ptr+dht_offs))*8);
s->start_code = DHT;
ff_mjpeg_decode_dht(s);
}
sof_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "sof is %d and size is %d\n");
av_log(avctx, AV_LOG_DEBUG, "sof offs: 0x%"PRIx32"\n", sof_offs);
if (sof_offs) {
init_get_bits(&s->gb, buf_ptr+sof_offs, (buf_end - (buf_ptr+sof_offs))*8);
s->start_code = SOF0;
if ((ret = ff_mjpeg_decode_sof(s)) < 0)
return ret;
}
sos_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "sos is %d and size is %d\n");
av_log(avctx, AV_LOG_DEBUG, "sos offs: 0x%"PRIx32"\n", sos_offs);
sod_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "sof is %d and size is %d\n");
av_log(avctx, AV_LOG_DEBUG, "sod offs: 0x%"PRIx32"\n", sod_offs);
if (sos_offs) {
init_get_bits(&s->gb, buf_ptr + sos_offs,
8 * FFMIN(field_size, buf_end - buf_ptr - sos_offs));
s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
s->start_code = SOS;
ret = ff_mjpeg_decode_sos(s, NULL, 0, NULL);
if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
return ret;
}
if (s->interlaced) {
s->bottom_field ^= 1;
/* if not bottom field, do not output image yet */
if (s->bottom_field != s->interlace_polarity && second_field_offs) {
buf_ptr = buf + second_field_offs;
goto read_header;
}
}
//XXX FIXME factorize, this looks very similar to the EOI code
if(!s->got_picture) {
av_log(avctx, AV_LOG_WARNING, "no picture\n");
return buf_size;
}
if ((ret = av_frame_ref(data, s->picture_ptr)) < 0)
//.........这里部分代码省略.........
开发者ID:DeHackEd,项目名称:FFmpeg,代码行数:101,代码来源:mjpegbdec.c
示例7: parse_picture_type
static AVPictureType parse_picture_type(const uint8_t *buf, int buflen, CVC1HeaderParser *vc1Header)
{
AVPictureType pictype = AV_PICTURE_TYPE_NONE;
int skipped = 0;
const BYTE *framestart = buf;
if (IS_MARKER(AV_RB32(buf))) {
framestart = NULL;
const BYTE *start, *end, *next;
next = buf;
for (start = buf, end = buf + buflen; next < end; start = next) {
if (AV_RB32(start) == VC1_CODE_FRAME) {
framestart = start + 4;
break;
}
next = find_next_marker(start + 4, end);
}
}
if (framestart) {
GetBitContext gb;
init_get_bits(&gb, framestart, (buflen - (framestart-buf))*8);
if (vc1Header->hdr.profile == PROFILE_ADVANCED) {
int fcm = PROGRESSIVE;
if (vc1Header->hdr.interlaced)
fcm = decode012(&gb);
if (fcm == ILACE_FIELD) {
int fptype = get_bits(&gb, 3);
pictype = (fptype & 2) ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
if (fptype & 4) // B-picture
pictype = (fptype & 2) ? AV_PICTURE_TYPE_BI : AV_PICTURE_TYPE_B;
} else {
switch (get_unary(&gb, 0, 4)) {
case 0:
pictype = AV_PICTURE_TYPE_P;
break;
case 1:
pictype = AV_PICTURE_TYPE_B;
break;
case 2:
pictype = AV_PICTURE_TYPE_I;
break;
case 3:
pictype = AV_PICTURE_TYPE_BI;
break;
case 4:
pictype = AV_PICTURE_TYPE_P; // skipped pic
skipped = 1;
break;
}
}
} else {
if (vc1Header->hdr.finterp)
skip_bits1(&gb);
skip_bits(&gb, 2); // framecnt
if (vc1Header->hdr.rangered)
skip_bits1(&gb);
int pic = get_bits1(&gb);
if (vc1Header->hdr.bframes) {
if (!pic) {
if (get_bits1(&gb)) {
pictype = AV_PICTURE_TYPE_I;
} else {
pictype = AV_PICTURE_TYPE_B;
}
} else {
pictype = AV_PICTURE_TYPE_P;
}
} else {
pictype = pic ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
}
}
}
return pictype;
}
开发者ID:betaking,项目名称:LAVFilters,代码行数:73,代码来源:wmv9.cpp
示例8: h263_decode_picture_header
/* most is hardcoded. should extend to handle all h263 streams */
static int h263_decode_picture_header(unsigned char *b_ptr)
{
// int i;
// for(i=0;i<16;i++) printf(" %02X",b_ptr[i]); printf("\n");
buffer=b_ptr;
bufptr=bitcnt=buf=0;
/* picture header */
if (get_bits(&s->gb, 22) != 0x20){
mp_msg(MSGT_DEMUX, MSGL_FATAL, "bad picture header\n");
return -1;
}
skip_bits(&s->gb, 8); /* picture timestamp */
if (get_bits1(&s->gb) != 1){
mp_msg(MSGT_DEMUX, MSGL_FATAL, "bad marker\n");
return -1; /* marker */
}
if (get_bits1(&s->gb) != 0){
mp_msg(MSGT_DEMUX, MSGL_FATAL, "bad h263 id\n");
return -1; /* h263 id */
}
skip_bits1(&s->gb); /* split screen off */
skip_bits1(&s->gb); /* camera off */
skip_bits1(&s->gb); /* freeze picture release off */
format = get_bits(&s->gb, 3);
if (format != 7) {
mp_msg(MSGT_DEMUX, MSGL_V, "h263_plus = 0 format = %d\n", format);
/* H.263v1 */
width = h263_format[format][0];
height = h263_format[format][1];
mp_msg(MSGT_DEMUX, MSGL_V, "%d x %d\n", width, height);
// if (!width) return -1;
mp_msg(MSGT_DEMUX, MSGL_V, "pict_type=%d\n", get_bits1(&s->gb));
mp_msg(MSGT_DEMUX, MSGL_V, "unrestricted_mv=%d\n", get_bits1(&s->gb));
#if 1
mp_msg(MSGT_DEMUX, MSGL_V, "SAC: %d\n", get_bits1(&s->gb));
mp_msg(MSGT_DEMUX, MSGL_V, "advanced prediction mode: %d\n", get_bits1(&s->gb));
mp_msg(MSGT_DEMUX, MSGL_V, "PB frame: %d\n", get_bits1(&s->gb));
#else
if (get_bits1(&s->gb) != 0)
return -1; /* SAC: off */
if (get_bits1(&s->gb) != 0)
return -1; /* advanced prediction mode: off */
if (get_bits1(&s->gb) != 0)
return -1; /* not PB frame */
#endif
mp_msg(MSGT_DEMUX, MSGL_V, "qscale=%d\n", get_bits(&s->gb, 5));
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
} else {
mp_msg(MSGT_DEMUX, MSGL_V, "h263_plus = 1\n");
/* H.263v2 */
if (get_bits(&s->gb, 3) != 1){
mp_msg(MSGT_DEMUX, MSGL_FATAL, "H.263v2 A error\n");
return -1;
}
if (get_bits(&s->gb, 3) != 6){ /* custom source format */
mp_msg(MSGT_DEMUX, MSGL_FATAL, "custom source format\n");
return -1;
}
skip_bits(&s->gb, 12);
skip_bits(&s->gb, 3);
mp_msg(MSGT_DEMUX, MSGL_V, "pict_type=%d\n", get_bits(&s->gb, 3) + 1);
// if (s->pict_type != I_TYPE &&
// s->pict_type != P_TYPE)
// return -1;
skip_bits(&s->gb, 7);
skip_bits(&s->gb, 4); /* aspect ratio */
width = (get_bits(&s->gb, 9) + 1) * 4;
skip_bits1(&s->gb);
height = get_bits(&s->gb, 9) * 4;
mp_msg(MSGT_DEMUX, MSGL_V, "%d x %d\n", width, height);
//if (height == 0)
// return -1;
mp_msg(MSGT_DEMUX, MSGL_V, "qscale=%d\n", get_bits(&s->gb, 5));
}
/* PEI */
while (get_bits1(&s->gb) != 0) {
skip_bits(&s->gb, 8);
}
// s->f_code = 1;
// s->width = width;
// s->height = height;
return 0;
}
开发者ID:OpenSageTV,项目名称:mplayer-sage9orig,代码行数:92,代码来源:demux_viv.c
示例9: read_stream_mux_config
static int read_stream_mux_config(struct LATMContext *latmctx,
GetBitContext *gb)
{
int ret, audio_mux_version = get_bits(gb, 1);
latmctx->audio_mux_version_A = 0;
if (audio_mux_version)
latmctx->audio_mux_version_A = get_bits(gb, 1);
if (!latmctx->audio_mux_version_A) {
if (audio_mux_version)
latm_get_value(gb); // taraFullness
skip_bits(gb, 1); // allStreamSameTimeFraming
skip_bits(gb, 6); // numSubFrames
// numPrograms
if (get_bits(gb, 4)) { // numPrograms
avpriv_request_sample(latmctx->aac_ctx.avctx, "Multiple programs");
return AVERROR_PATCHWELCOME;
}
// for each program (which there is only one in DVB)
// for each layer (which there is only one in DVB)
if (get_bits(gb, 3)) { // numLayer
avpriv_request_sample(latmctx->aac_ctx.avctx, "Multiple layers");
return AVERROR_PATCHWELCOME;
}
// for all but first stream: use_same_config = get_bits(gb, 1);
if (!audio_mux_version) {
if ((ret = latm_decode_audio_specific_config(latmctx, gb, 0)) < 0)
return ret;
} else {
int ascLen = latm_get_value(gb);
if ((ret = latm_decode_audio_specific_config(latmctx, gb, ascLen)) < 0)
return ret;
ascLen -= ret;
skip_bits_long(gb, ascLen);
}
latmctx->frame_length_type = get_bits(gb, 3);
switch (latmctx->frame_length_type) {
case 0:
skip_bits(gb, 8); // latmBufferFullness
break;
case 1:
latmctx->frame_length = get_bits(gb, 9);
break;
case 3:
case 4:
case 5:
skip_bits(gb, 6); // CELP frame length table index
break;
case 6:
case 7:
skip_bits(gb, 1); // HVXC frame length table index
break;
}
if (get_bits(gb, 1)) { // other data
if (audio_mux_version) {
latm_get_value(gb); // other_data_bits
} else {
int esc;
do {
esc = get_bits(gb, 1);
skip_bits(gb, 8);
} while (esc);
}
}
if (get_bits(gb, 1)) // crc present
skip_bits(gb, 8); // config_crc
}
return 0;
}
开发者ID:hookbrother,项目名称:FFmpeg,代码行数:79,代码来源:aacdec.c
示例10: preview_obmc
/**
* read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
*/
static void preview_obmc(MpegEncContext *s){
GetBitContext gb= s->gb;
int cbpc, i, pred_x, pred_y, mx, my;
int16_t *mot_val;
const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
const int stride= s->b8_stride*2;
for(i=0; i<4; i++)
s->block_index[i]+= 2;
for(i=4; i<6; i++)
s->block_index[i]+= 1;
s->mb_x++;
av_assert2(s->pict_type == AV_PICTURE_TYPE_P);
do{
if (get_bits1(&s->gb)) {
/* skip mb */
mot_val = s->current_picture.motion_val[0][s->block_index[0]];
mot_val[0 ]= mot_val[2 ]=
mot_val[0+stride]= mot_val[2+stride]= 0;
mot_val[1 ]= mot_val[3 ]=
mot_val[1+stride]= mot_val[3+stride]= 0;
s->current_picture.mb_type[xy] = MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
goto end;
}
cbpc = get_vlc2(&s->gb, ff_h263_inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
}while(cbpc == 20);
if(cbpc & 4){
s->current_picture.mb_type[xy] = MB_TYPE_INTRA;
}else{
get_vlc2(&s->gb, ff_h263_cbpy_vlc.table, CBPY_VLC_BITS, 1);
if (cbpc & 8) {
if(s->modified_quant){
if(get_bits1(&s->gb)) skip_bits(&s->gb, 1);
else skip_bits(&s->gb, 5);
}else
skip_bits(&s->gb, 2);
}
if ((cbpc & 16) == 0) {
s->current_picture.mb_type[xy] = MB_TYPE_16x16 | MB_TYPE_L0;
/* 16x16 motion prediction */
mot_val= ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
if (s->umvplus)
mx = h263p_decode_umotion(s, pred_x);
else
mx = ff_h263_decode_motion(s, pred_x, 1);
if (s->umvplus)
my = h263p_decode_umotion(s, pred_y);
else
my = ff_h263_decode_motion(s, pred_y, 1);
mot_val[0 ]= mot_val[2 ]=
mot_val[0+stride]= mot_val[2+stride]= mx;
mot_val[1 ]= mot_val[3 ]=
mot_val[1+stride]= mot_val[3+stride]= my;
} else {
s->current_picture.mb_type[xy] = MB_TYPE_8x8 | MB_TYPE_L0;
for(i=0;i<4;i++) {
mot_val = ff_h263_pred_motion(s, i, 0, &pred_x, &pred_y);
if (s->umvplus)
mx = h263p_decode_umotion(s, pred_x);
else
mx = ff_h263_decode_motion(s, pred_x, 1);
if (s->umvplus)
my = h263p_decode_umotion(s, pred_y);
else
my = ff_h263_decode_motion(s, pred_y, 1);
if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
mot_val[0] = mx;
mot_val[1] = my;
}
}
}
end:
for(i=0; i<4; i++)
s->block_index[i]-= 2;
for(i=4; i<6; i++)
s->block_index[i]-= 1;
s->mb_x--;
s->gb= gb;
}
开发者ID:cxxg,项目名称:FFmpeg,代码行数:94,代码来源:ituh263dec.c
示例11: h261_decode_block
/**
* decodes a macroblock
* @return <0 if an error occurred
*/
static int h261_decode_block(H261Context * h, DCTELEM * block,
int n, int coded)
{
MpegEncContext * const s = &h->s;
int code, level, i, j, run;
RLTable *rl = &h261_rl_tcoeff;
const uint8_t *scan_table;
// For the variable length encoding there are two code tables, one being used for
// the first transmitted LEVEL in INTER, INTER+MC and INTER+MC+FIL blocks, the second
// for all other LEVELs except the first one in INTRA blocks which is fixed length
// coded with 8 bits.
// NOTE: the two code tables only differ in one VLC so we handle that manually.
scan_table = s->intra_scantable.permutated;
if (s->mb_intra){
/* DC coef */
level = get_bits(&s->gb, 8);
// 0 (00000000b) and -128 (10000000b) are FORBIDDEN
if((level&0x7F) == 0){
av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y);
return -1;
}
// The code 1000 0000 is not used, the reconstruction level of 1024 being coded as 1111 1111.
if (level == 255)
level = 128;
block[0] = level;
i = 1;
}else if(coded){
// Run Level Code
// EOB Not possible for first level when cbp is available (that's why the table is different)
// 0 1 1s
// * * 0*
int check = show_bits(&s->gb, 2);
i = 0;
if ( check & 0x2 ){
skip_bits(&s->gb, 2);
block[0] = ( check & 0x1 ) ? -1 : 1;
i = 1;
}
}else{
i = 0;
}
if(!coded){
s->block_last_index[n] = i - 1;
return 0;
}
for(;;){
code = get_vlc2(&s->gb, rl->vlc.table, TCOEFF_VLC_BITS, 2);
if (code < 0){
av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y);
return -1;
}
if (code == rl->n) {
/* escape */
// 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.
run = get_bits(&s->gb, 6);
level = get_sbits(&s->gb, 8);
}else if(code == 0){
break;
}else{
run = rl->table_run[code];
level = rl->table_level[code];
if (get_bits1(&s->gb))
level = -level;
}
i += run;
if (i >= 64){
av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d\n", s->mb_x, s->mb_y);
return -1;
}
j = scan_table[i];
block[j] = level;
i++;
}
s->block_last_index[n] = i-1;
return 0;
}
开发者ID:Bevara,项目名称:extra_libs_open,代码行数:81,代码来源:h261dec.c
示例12: gop_header
// Return TRUE if the data parsing finished, FALSE otherwise.
// estream->pos is advanced. Data is only processed if esstream->error
// is FALSE, parsing can set esstream->error to TRUE.
static int gop_header(struct bitstream *esstream)
{
dbg_print(DMT_VERBOSE, "GOP header\n");
if (esstream->error || esstream->bitsleft <= 0)
return 0;
// We only get here after seeing that start code
if (read_u32(esstream) != 0xB8010000) // LSB first (0x000001B8)
fatal(EXIT_BUG_BUG, "Impossible!");
unsigned drop_frame_flag = (unsigned) read_bits(esstream,1);
struct gop_time_code gtc;
gtc.time_code_hours = (int) read_bits(esstream,5);
gtc.time_code_minutes = (int) read_bits(esstream,6);
skip_bits(esstream,1); // Marker bit
gtc.time_code_seconds = (int) read_bits(esstream,6);
gtc.time_code_pictures = (int) read_bits(esstream,6);
gtc.inited = 1;
calculate_ms_gop_time(>c);
if (esstream->bitsleft < 0)
return 0;
if (gop_accepted(>c))
{
// Do GOP padding during GOP header. The previous GOP and all
// included captions are written. Use the current GOP time to
// do the padding.
// Flush buffered cc blocks before doing the housekeeping
if (has_ccdata_buffered)
{
process_hdcc();
}
// Last GOPs pulldown frames
if ((current_pulldownfields>0) != (pulldownfields>0))
{
current_pulldownfields = pulldownfields;
dbg_print(DMT_VERBOSE, "Pulldown: %s", (pulldownfields ? "on" : "off"));
if (pulldownfields)
dbg_print(DMT_VERBOSE, " - %u fields in last GOP", pulldownfields);
dbg_print(DMT_VERBOSE, "\n");
}
pulldownfields = 0;
// Report synchronization jumps between GOPs. Warn if there
// are 20% or more deviation.
if ( (debug_mask & DMT_TIME)
&& ((gtc.ms - gop_time.ms // more than 20% longer
> frames_since_last_gop*1000.0/current_fps*1.2)
||
(gtc.ms - gop_time.ms // or 20% shorter
< frames_since_last_gop*1000.0/current_fps*0.8))
&& first_gop_time.inited )
{
mprint("\rWarning: Jump in GOP timing.\n");
mprint(" (old) %s",
print_mstime(gop_time.ms));
mprint(" + %s (%uF)",
print_mstime(LLONG(frames_since_last_gop
*1000.0/current_fps)),
frames_since_last_gop);
mprint(" != (new) %s\n",
print_mstime(gtc.ms));
}
if (first_gop_time.inited == 0)
{
first_gop_time = gtc;
// It needs to be "+1" because the frame count starts at 0 and we
// need the length of all frames.
if ( total_frames_count == 0 )
{ // If this is the first frame there cannot be an offset
fts_fc_offset = 0;
// first_gop_time.ms stays unchanged
}
else
{
fts_fc_offset = LLONG((total_frames_count+1)
*1000.0/current_fps);
// Compensate for those written before
first_gop_time.ms -= fts_fc_offset;
}
dbg_print(DMT_TIME, "\nFirst GOP time: %02u:%02u:%02u:%03u %+lldms\n",
gtc.time_code_hours,
gtc.time_code_minutes, gtc.time_code_seconds,
unsigned(1000.0*gtc.time_code_pictures/current_fps),
fts_fc_offset);
}
gop_time = gtc;
frames_since_last_gop=0;
//.........这里部分代码省略.........
开发者ID:ScandalCorp,项目名称:ccextractor,代码行数:101,代码来源:es_functions.cpp
示例13: decode_picture_timing
static int decode_picture_timing(H264Context *h)
{
SPS *sps = &h->sps;
int i;
for (i = 0; i<MAX_SPS_COUNT; i++)
if (!sps->log2_max_frame_num && h->sps_buffers[i])
sps = h->sps_buffers[i];
if (sps->nal_hrd_parameters_present_flag || sps->vcl_hrd_parameters_present_flag) {
h->sei_cpb_removal_delay = get_bits_long(&h->gb,
sps->cpb_removal_delay_length);
h->sei_dpb_output_delay = get_bits_long(&h->gb,
sps->dpb_output_delay_length);
}
if (sps->pic_struct_present_flag) {
unsigned int i, num_clock_ts;
h->sei_pic_struct = get_bits(&h->gb, 4);
h->sei_ct_type = 0;
if (h->sei_pic_struct > SEI_PIC_STRUCT_FRAME_TRIPLING)
return AVERROR_INVALIDDATA;
num_clock_ts = sei_num_clock_ts_table[h->sei_pic_struct];
for (i = 0; i < num_clock_ts; i++) {
if (get_bits(&h->gb, 1)) { /* clock_timestamp_flag */
unsigned int full_timestamp_flag;
h->sei_ct_type |= 1 << get_bits(&h->gb, 2);
skip_bits(&h->gb, 1); /* nuit_field_based_flag */
skip_bits(&h->gb, 5); /* counting_type */
full_timestamp_flag = get_bits(&h->gb, 1);
skip_bits(&h->gb, 1); /* discontinuity_flag */
skip_bits(&h->gb, 1); /* cnt_dropped_flag */
skip_bits(&h->gb, 8); /* n_frames */
if (full_timestamp_flag) {
skip_bits(&h->gb, 6); /* seconds_value 0..59 */
skip_bits(&h->gb, 6); /* minutes_value 0..59 */
skip_bits(&h->gb, 5); /* hours_value 0..23 */
} else {
if (get_bits(&h->gb, 1)) { /* seconds_flag */
skip_bits(&h->gb, 6); /* seconds_value range 0..59 */
if (get_bits(&h->gb, 1)) { /* minutes_flag */
skip_bits(&h->gb, 6); /* minutes_value 0..59 */
if (get_bits(&h->gb, 1)) /* hours_flag */
skip_bits(&h->gb, 5); /* hours_value 0..23 */
}
}
}
if (sps->time_offset_length > 0)
skip_bits(&h->gb,
sps->time_offset_length); /* time_offset */
}
}
if (h->avctx->debug & FF_DEBUG_PICT_INFO)
av_log(h->avctx, AV_LOG_DEBUG, "ct_type:%X pic_struct:%d\n",
h->sei_ct_type, h->sei_pic_struct);
}
return 0;
}
开发者ID:CoerSuer,项目名称:FFmpeg,代码行数:63,代码来源:h264_sei.c
示例14: sequence_header
// Return TRUE if the data parsing finished, FALSE otherwise.
// estream->pos is advanced. Data is only processed if esstream->error
// is FALSE, parsing can set esstream->error to TRUE.
static int sequence_header(struct bitstream *esstream)
{
dbg_print(DMT_VERBOSE, "Sequence header\n");
if (esstream->error || esstream->bitsleft <= 0)
return 0;
// We only get here after seeing that start code
if (read_u32(esstream) != 0xB3010000) // LSB first (0x000001B3)
fatal(EXIT_BUG_BUG, "Impossible!");
unsigned hor_size = (unsigned) read_bits(esstream,12);
unsigned vert_size = (unsigned) read_bits(esstream,12);
unsigned aspect_ratio = (unsigned) read_bits(esstream,4);
unsigned frame_rate = (unsigned) read_bits(esstream,4);
// Discard some information
read_bits(esstream, 18+1+10+1);
// load_intra_quantiser_matrix
if (read_bits(esstream,1))
skip_bits(esstream, 8*64);
// load_non_intra_quantiser_matrix
if (read_bits(esstream,1))
skip_bits(esstream, 8*64);
if (esstream->bitsleft < 0)
return 0;
// If we got the whole sequence, process
if (hor_size!=current_hor_size ||
vert_size!=current_vert_size ||
aspect_ratio!=current_aspect_ratio ||
frame_rate!=current_frame_rate)
{
// If horizontal/vertical size, framerate and/or aspect
// ratio are ilegal, we discard the
// whole sequence info.
if (vert_size >= 288 && vert_size <= 1088 &&
hor_size >= 352 && hor_size <= 1920 &&
hor_size / vert_size >= 352/576 && hor_size / vert_size <= 2 &&
frame_rate>0 && frame_rate<9 &&
aspect_ratio>0 && aspect_ratio<5)
{
mprint ("\n\nNew video information found");
if (pts_set==2)
{
unsigned cur_sec = (unsigned) ((current_pts - min_pts)
/ MPEG_CLOCK_FREQ);
mprint (" at %02u:%02u",cur_sec/60, cur_sec % 60);
}
mprint ("\n");
mprint ("[%u * %u] [AR: %s] [FR: %s]",
hor_size,vert_size,
aspect_ratio_types[aspect_ratio],
framerates_types[frame_rate]);
// No newline, force the output of progressive info in picture
// info part.
current_progressive_sequence = 2;
current_hor_size=hor_size;
current_vert_size=vert_size;
current_aspect_ratio=aspect_ratio;
current_frame_rate=frame_rate;
current_fps = framerates_values[current_frame_rate];
activity_video_info (hor_size,vert_size,
aspect_ratio_types[aspect_ratio],
framerates_types[frame_rate]);
}
else
{
dbg_print(DMT_VERBOSE, "\nInvalid sequence header:\n");
dbg_print(DMT_VERBOSE, "V: %u H: %u FR: %u AS: %u\n",
vert_size, hor_size, frame_rate, aspect_ratio);
esstream->error = 1;
return 0;
}
}
// Read complete
return 1;
}
开发者ID:ScandalCorp,项目名称:ccextractor,代码行数:85,代码来源:es_functions.cpp
示例15: es_video_sequence
// Return TRUE if the video sequence was finished, FALSE
// Otherwise. estream->pos shall point to the position where
// the next call will continue, i.e. the possible begin of an
// unfinished video sequence or after the finished sequence.
static int es_video_sequence(struct bitstream *esstream)
{
// Avoid "Skip forward" message on first call and later only
// once per search.
static int noskipmessage = 1;
uint8_t startcode;
dbg_print(DMT_VERBOSE, "es_video_sequence()\n");
esstream->error = 0;
// Analyze sequence header ...
if (!no_bitstream_error)
{
// We might start here because of a syntax error. Discard
// all data until a new sequence_header_code or group_start_code
// is found.
if (!noskipmessage) // Avoid unnecessary output.
mprint("\nSkip forward to the next Sequence or GOP start.\n");
else
noskipmessage = 0;
uint8_t startcode;
while(1)
{
// search_start_code() cannot produce esstream->error
startcode = search_start_code(esstream);
if (esstream->bitsleft < 0)
{
noskipmessage = 1;
return 0;
}
if (startcode == 0xB3 || startcode == 0xB8) // found it
break;
skip_bits(esstream, 4*8);
}
no_bitstream_error = 1;
saw_seqgoppic = 0;
in_pic_data = 0;
}
do
{
startcode = next_start_code(esstream);
dbg_print(DMT_VERBOSE, "\nM2V - next start code %02X %d\n", startcode, in_pic_data);
// Syntax check - also returns on bitsleft < 0
if (startcode == 0xB4)
{
if (esstream->error)
{
no_bitstream_error = 0;
dbg_print(DMT_VERBOSE, "es_video_sequence: syntax problem.\n");
}
dbg_print(DMT_VERBOSE, "es_video_sequence: return on B4 startcode.\n");
return 0;
}
// Sequence_end_code
if (startcode == 0xB7)
{
read_u32(esstream); // Advance bitstream
no_bitstream_error = 0;
break;
}
if (!in_pic_data && startcode == 0xB3)
{
if (!read_seq_info(esstream))
{
if (esstream->error)
no_bitstream_error = 0;
return 0;
}
saw_seqgoppic = 1;
continue;
}
if (!in_pic_data && startcode == 0xB8)
{
if (!read_gop_info(esstream))
{
if (esstream->error)
no_bitstream_error = 0;
return 0;
}
saw_seqgoppic = 2;
continue;
}
//.........这里部分代码省略.........
开发者ID:ScandalCorp,项目名称:cce |
请发表评论