590
672
put_symbol(c, state, i-last-1, 0);
675
static void write_quant_tables(RangeCoder *c, int16_t quant_table[MAX_CONTEXT_INPUTS][256]){
678
write_quant_table(c, quant_table[i]);
593
681
static void write_header(FFV1Context *f){
594
682
uint8_t state[CONTEXT_SIZE];
684
RangeCoder * const c= &f->slice_context[0]->c;
686
memset(state, 128, sizeof(state));
689
put_symbol(c, state, f->version, 0);
690
put_symbol(c, state, f->ac, 0);
692
for(i=1; i<256; i++){
693
put_symbol(c, state, f->state_transition[i] - c->one_state[i], 1);
696
put_symbol(c, state, f->colorspace, 0); //YUV cs type
698
put_symbol(c, state, f->avctx->bits_per_raw_sample, 0);
699
put_rac(c, state, 1); //chroma planes
700
put_symbol(c, state, f->chroma_h_shift, 0);
701
put_symbol(c, state, f->chroma_v_shift, 0);
702
put_rac(c, state, 0); //no transparency plane
704
write_quant_tables(c, f->quant_table);
706
put_symbol(c, state, f->slice_count, 0);
707
for(i=0; i<f->slice_count; i++){
708
FFV1Context *fs= f->slice_context[i];
709
put_symbol(c, state, (fs->slice_x +1)*f->num_h_slices / f->width , 0);
710
put_symbol(c, state, (fs->slice_y +1)*f->num_v_slices / f->height , 0);
711
put_symbol(c, state, (fs->slice_width +1)*f->num_h_slices / f->width -1, 0);
712
put_symbol(c, state, (fs->slice_height+1)*f->num_v_slices / f->height-1, 0);
713
for(j=0; j<f->plane_count; j++){
714
put_symbol(c, state, f->plane[j].quant_table_index, 0);
715
av_assert0(f->plane[j].quant_table_index == f->avctx->context_model);
720
#endif /* CONFIG_FFV1_ENCODER */
722
static av_cold int common_init(AVCodecContext *avctx){
723
FFV1Context *s = avctx->priv_data;
726
s->flags= avctx->flags;
728
dsputil_init(&s->dsp, avctx);
730
s->width = avctx->width;
731
s->height= avctx->height;
733
assert(s->width && s->height);
742
static int init_slice_state(FFV1Context *f){
745
for(i=0; i<f->slice_count; i++){
746
FFV1Context *fs= f->slice_context[i];
747
for(j=0; j<f->plane_count; j++){
748
PlaneContext * const p= &fs->plane[j];
751
if(!p-> state) p-> state= av_malloc(CONTEXT_SIZE*p->context_count*sizeof(uint8_t));
753
return AVERROR(ENOMEM);
755
if(!p->vlc_state) p->vlc_state= av_malloc(p->context_count*sizeof(VlcState));
757
return AVERROR(ENOMEM);
762
//FIXME only redo if state_transition changed
763
for(j=1; j<256; j++){
764
fs->c.one_state [ j]= fs->state_transition[j];
765
fs->c.zero_state[256-j]= 256-fs->c.one_state [j];
773
static av_cold int init_slice_contexts(FFV1Context *f){
776
f->slice_count= f->num_h_slices * f->num_v_slices;
778
for(i=0; i<f->slice_count; i++){
779
FFV1Context *fs= av_mallocz(sizeof(*fs));
780
int sx= i % f->num_h_slices;
781
int sy= i / f->num_h_slices;
782
int sxs= f->avctx->width * sx / f->num_h_slices;
783
int sxe= f->avctx->width *(sx+1) / f->num_h_slices;
784
int sys= f->avctx->height* sy / f->num_v_slices;
785
int sye= f->avctx->height*(sy+1) / f->num_v_slices;
786
f->slice_context[i]= fs;
787
memcpy(fs, f, sizeof(*fs));
788
memset(fs->rc_stat2, 0, sizeof(fs->rc_stat2));
790
fs->slice_width = sxe - sxs;
791
fs->slice_height= sye - sys;
795
fs->sample_buffer = av_malloc(9 * (fs->width+6) * sizeof(*fs->sample_buffer));
796
if (!fs->sample_buffer)
797
return AVERROR(ENOMEM);
802
static int allocate_initial_states(FFV1Context *f){
805
for(i=0; i<f->quant_table_count; i++){
806
f->initial_states[i]= av_malloc(f->context_count[i]*sizeof(*f->initial_states[i]));
807
if(!f->initial_states[i])
808
return AVERROR(ENOMEM);
809
memset(f->initial_states[i], 128, f->context_count[i]*sizeof(*f->initial_states[i]));
814
#if CONFIG_FFV1_ENCODER
815
static int write_extra_header(FFV1Context *f){
596
816
RangeCoder * const c= &f->c;
817
uint8_t state[CONTEXT_SIZE];
819
uint8_t state2[32][CONTEXT_SIZE];
821
memset(state2, 128, sizeof(state2));
598
822
memset(state, 128, sizeof(state));
824
f->avctx->extradata= av_malloc(f->avctx->extradata_size= 10000 + (11*11*5*5*5+11*11*11)*32);
825
ff_init_range_encoder(c, f->avctx->extradata, f->avctx->extradata_size);
826
ff_build_rac_states(c, 0.05*(1LL<<32), 256-8);
600
828
put_symbol(c, state, f->version, 0);
601
829
put_symbol(c, state, f->ac, 0);
603
831
for(i=1; i<256; i++){
604
f->state_transition[i]=ver2_state[i];
605
put_symbol(c, state, ver2_state[i] - c->one_state[i], 1);
832
put_symbol(c, state, f->state_transition[i] - c->one_state[i], 1);
608
835
put_symbol(c, state, f->colorspace, 0); //YUV cs type
610
put_symbol(c, state, f->avctx->bits_per_raw_sample, 0);
836
put_symbol(c, state, f->avctx->bits_per_raw_sample, 0);
611
837
put_rac(c, state, 1); //chroma planes
612
838
put_symbol(c, state, f->chroma_h_shift, 0);
613
839
put_symbol(c, state, f->chroma_v_shift, 0);
614
840
put_rac(c, state, 0); //no transparency plane
617
write_quant_table(c, f->quant_table[i]);
619
#endif /* CONFIG_FFV1_ENCODER */
621
static av_cold int common_init(AVCodecContext *avctx){
622
FFV1Context *s = avctx->priv_data;
625
s->flags= avctx->flags;
627
dsputil_init(&s->dsp, avctx);
629
s->width = avctx->width;
630
s->height= avctx->height;
632
assert(s->width && s->height);
841
put_symbol(c, state, f->num_h_slices-1, 0);
842
put_symbol(c, state, f->num_v_slices-1, 0);
844
put_symbol(c, state, f->quant_table_count, 0);
845
for(i=0; i<f->quant_table_count; i++)
846
write_quant_tables(c, f->quant_tables[i]);
848
for(i=0; i<f->quant_table_count; i++){
849
for(j=0; j<f->context_count[i]*CONTEXT_SIZE; j++)
850
if(f->initial_states[i] && f->initial_states[i][0][j] != 128)
852
if(j<f->context_count[i]*CONTEXT_SIZE){
853
put_rac(c, state, 1);
854
for(j=0; j<f->context_count[i]; j++){
855
for(k=0; k<CONTEXT_SIZE; k++){
856
int pred= j ? f->initial_states[i][j-1][k] : 128;
857
put_symbol(c, state2[k], (int8_t)(f->initial_states[i][j][k]-pred), 1);
861
put_rac(c, state, 0);
865
f->avctx->extradata_size= ff_rac_terminate(c);
637
#if CONFIG_FFV1_ENCODER
870
static int sort_stt(FFV1Context *s, uint8_t stt[256]){
871
int i,i2,changed,print=0;
875
for(i=12; i<244; i++){
876
for(i2=i+1; i2<245 && i2<i+4; i2++){
877
#define COST(old, new) \
878
s->rc_stat[old][0]*-log2((256-(new))/256.0)\
879
+s->rc_stat[old][1]*-log2( (new) /256.0)
881
#define COST2(old, new) \
883
+COST(256-(old), 256-(new))
885
double size0= COST2(i, i ) + COST2(i2, i2);
886
double sizeX= COST2(i, i2) + COST2(i2, i );
887
if(sizeX < size0 && i!=128 && i2!=128){
889
FFSWAP(int, stt[ i], stt[ i2]);
890
FFSWAP(int, s->rc_stat[i ][0],s->rc_stat[ i2][0]);
891
FFSWAP(int, s->rc_stat[i ][1],s->rc_stat[ i2][1]);
893
FFSWAP(int, stt[256-i], stt[256-i2]);
894
FFSWAP(int, s->rc_stat[256-i][0],s->rc_stat[256-i2][0]);
895
FFSWAP(int, s->rc_stat[256-i][1],s->rc_stat[256-i2][1]);
897
for(j=1; j<256; j++){
898
if (stt[j] == i ) stt[j] = i2;
899
else if(stt[j] == i2) stt[j] = i ;
901
if (stt[256-j] == 256-i ) stt[256-j] = 256-i2;
902
else if(stt[256-j] == 256-i2) stt[256-j] = 256-i ;
638
913
static av_cold int encode_init(AVCodecContext *avctx)
640
915
FFV1Context *s = avctx->priv_data;
643
918
common_init(avctx);
646
921
s->ac= avctx->coder_type ? 2:0;
925
s->state_transition[i]=ver2_state[i];
648
927
s->plane_count=2;
649
928
for(i=0; i<256; i++){
929
s->quant_table_count=2;
650
930
if(avctx->bits_per_raw_sample <=8){
651
s->quant_table[0][i]= quant11[i];
652
s->quant_table[1][i]= 11*quant11[i];
653
if(avctx->context_model==0){
654
s->quant_table[2][i]= 11*11*quant11[i];
655
s->quant_table[3][i]=
656
s->quant_table[4][i]=0;
658
s->quant_table[2][i]= 11*11*quant5 [i];
659
s->quant_table[3][i]= 5*11*11*quant5 [i];
660
s->quant_table[4][i]= 5*5*11*11*quant5 [i];
931
s->quant_tables[0][0][i]= quant11[i];
932
s->quant_tables[0][1][i]= 11*quant11[i];
933
s->quant_tables[0][2][i]= 11*11*quant11[i];
934
s->quant_tables[1][0][i]= quant11[i];
935
s->quant_tables[1][1][i]= 11*quant11[i];
936
s->quant_tables[1][2][i]= 11*11*quant5 [i];
937
s->quant_tables[1][3][i]= 5*11*11*quant5 [i];
938
s->quant_tables[1][4][i]= 5*5*11*11*quant5 [i];
663
s->quant_table[0][i]= quant9_10bit[i];
664
s->quant_table[1][i]= 11*quant9_10bit[i];
665
if(avctx->context_model==0){
666
s->quant_table[2][i]= 11*11*quant9_10bit[i];
667
s->quant_table[3][i]=
668
s->quant_table[4][i]=0;
670
s->quant_table[2][i]= 11*11*quant5_10bit[i];
671
s->quant_table[3][i]= 5*11*11*quant5_10bit[i];
672
s->quant_table[4][i]= 5*5*11*11*quant5_10bit[i];
940
s->quant_tables[0][0][i]= quant9_10bit[i];
941
s->quant_tables[0][1][i]= 11*quant9_10bit[i];
942
s->quant_tables[0][2][i]= 11*11*quant9_10bit[i];
943
s->quant_tables[1][0][i]= quant9_10bit[i];
944
s->quant_tables[1][1][i]= 11*quant9_10bit[i];
945
s->quant_tables[1][2][i]= 11*11*quant5_10bit[i];
946
s->quant_tables[1][3][i]= 5*11*11*quant5_10bit[i];
947
s->quant_tables[1][4][i]= 5*5*11*11*quant5_10bit[i];
950
s->context_count[0]= (11*11*11+1)/2;
951
s->context_count[1]= (11*11*5*5*5+1)/2;
952
memcpy(s->quant_table, s->quant_tables[avctx->context_model], sizeof(s->quant_table));
677
954
for(i=0; i<s->plane_count; i++){
678
955
PlaneContext * const p= &s->plane[i];
680
if(avctx->context_model==0){
681
p->context_count= (11*11*11+1)/2;
683
p->context_count= (11*11*5*5*5+1)/2;
687
if(!p->state) p->state= av_malloc(CONTEXT_SIZE*p->context_count*sizeof(uint8_t));
689
if(!p->vlc_state) p->vlc_state= av_malloc(p->context_count*sizeof(VlcState));
957
memcpy(p->quant_table, s->quant_table, sizeof(p->quant_table));
958
p->quant_table_index= avctx->context_model;
959
p->context_count= s->context_count[p->quant_table_index];
962
if(allocate_initial_states(s) < 0)
963
return AVERROR(ENOMEM);
693
965
avctx->coded_frame= &s->picture;
694
966
switch(avctx->pix_fmt){
695
967
case PIX_FMT_YUV444P16:
723
995
s->picture_number=0;
997
if(avctx->flags & (CODEC_FLAG_PASS1|CODEC_FLAG_PASS2)){
998
for(i=0; i<s->quant_table_count; i++){
999
s->rc_stat2[i]= av_mallocz(s->context_count[i]*sizeof(*s->rc_stat2[i]));
1001
return AVERROR(ENOMEM);
1004
if(avctx->stats_in){
1005
char *p= avctx->stats_in;
1006
uint8_t best_state[256][256];
1010
av_assert0(s->version>=2);
1013
for(j=0; j<256; j++){
1015
s->rc_stat[j][i]= strtol(p, &next, 0);
1017
av_log(avctx, AV_LOG_ERROR, "2Pass file invalid at %d %d [%s]\n", j,i,p);
1023
for(i=0; i<s->quant_table_count; i++){
1024
for(j=0; j<s->context_count[i]; j++){
1025
for(k=0; k<32; k++){
1027
s->rc_stat2[i][j][k][m]= strtol(p, &next, 0);
1029
av_log(avctx, AV_LOG_ERROR, "2Pass file invalid at %d %d %d %d [%s]\n", i,j,k,m,p);
1037
gob_count= strtol(p, &next, 0);
1038
if(next==p || gob_count <0){
1039
av_log(avctx, AV_LOG_ERROR, "2Pass file invalid\n");
1043
while(*p=='\n' || *p==' ') p++;
1046
sort_stt(s, s->state_transition);
1048
find_best_state(best_state, s->state_transition);
1050
for(i=0; i<s->quant_table_count; i++){
1051
for(j=0; j<s->context_count[i]; j++){
1052
for(k=0; k<32; k++){
1054
if(s->rc_stat2[i][j][k][0]+s->rc_stat2[i][j][k][1]){
1055
p=256.0*s->rc_stat2[i][j][k][1] / (s->rc_stat2[i][j][k][0]+s->rc_stat2[i][j][k][1]);
1057
s->initial_states[i][j][k]= best_state[av_clip(round(p), 1, 255)][av_clip((s->rc_stat2[i][j][k][0]+s->rc_stat2[i][j][k][1])/gob_count, 0, 255)];
1066
write_extra_header(s);
1069
if(init_slice_contexts(s) < 0)
1071
if(init_slice_state(s) < 0)
1074
#define STATS_OUT_SIZE 1024*1024*6
1075
if(avctx->flags & CODEC_FLAG_PASS1){
1076
avctx->stats_out= av_mallocz(STATS_OUT_SIZE);
1077
for(i=0; i<s->quant_table_count; i++){
1078
for(j=0; j<s->slice_count; j++){
1079
FFV1Context *sf= s->slice_context[j];
1080
av_assert0(!sf->rc_stat2[i]);
1081
sf->rc_stat2[i]= av_mallocz(s->context_count[i]*sizeof(*sf->rc_stat2[i]));
1082
if(!sf->rc_stat2[i])
1083
return AVERROR(ENOMEM);
727
1090
#endif /* CONFIG_FFV1_ENCODER */
730
1093
static void clear_state(FFV1Context *f){
733
for(i=0; i<f->plane_count; i++){
734
PlaneContext *p= &f->plane[i];
736
p->interlace_bit_state[0]= 128;
737
p->interlace_bit_state[1]= 128;
739
for(j=0; j<p->context_count; j++){
741
memset(p->state[j], 128, sizeof(uint8_t)*CONTEXT_SIZE);
1096
for(si=0; si<f->slice_count; si++){
1097
FFV1Context *fs= f->slice_context[si];
1098
for(i=0; i<f->plane_count; i++){
1099
PlaneContext *p= &fs->plane[i];
1101
p->interlace_bit_state[0]= 128;
1102
p->interlace_bit_state[1]= 128;
1105
if(f->initial_states[p->quant_table_index]){
1106
memcpy(p->state, f->initial_states[p->quant_table_index], CONTEXT_SIZE*p->context_count);
1108
memset(p->state, 128, CONTEXT_SIZE*p->context_count);
743
p->vlc_state[j].drift= 0;
744
p->vlc_state[j].error_sum= 4; //FFMAX((RANGE + 32)/64, 2);
745
p->vlc_state[j].bias= 0;
746
p->vlc_state[j].count= 1;
1110
for(j=0; j<p->context_count; j++){
1111
p->vlc_state[j].drift= 0;
1112
p->vlc_state[j].error_sum= 4; //FFMAX((RANGE + 32)/64, 2);
1113
p->vlc_state[j].bias= 0;
1114
p->vlc_state[j].count= 1;
752
1121
#if CONFIG_FFV1_ENCODER
1122
static int encode_slice(AVCodecContext *c, void *arg){
1123
FFV1Context *fs= *(void**)arg;
1124
FFV1Context *f= fs->avctx->priv_data;
1125
int width = fs->slice_width;
1126
int height= fs->slice_height;
1129
AVFrame * const p= &f->picture;
1131
if(f->colorspace==0){
1132
const int chroma_width = -((-width )>>f->chroma_h_shift);
1133
const int chroma_height= -((-height)>>f->chroma_v_shift);
1134
const int cx= x>>f->chroma_h_shift;
1135
const int cy= y>>f->chroma_v_shift;
1137
encode_plane(fs, p->data[0] + x + y*p->linesize[0], width, height, p->linesize[0], 0);
1139
encode_plane(fs, p->data[1] + cx+cy*p->linesize[1], chroma_width, chroma_height, p->linesize[1], 1);
1140
encode_plane(fs, p->data[2] + cx+cy*p->linesize[2], chroma_width, chroma_height, p->linesize[2], 1);
1142
encode_rgb_frame(fs, (uint32_t*)(p->data[0]) + x + y*(p->linesize[0]/4), width, height, p->linesize[0]/4);
753
1149
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
754
1150
FFV1Context *f = avctx->priv_data;
755
RangeCoder * const c= &f->c;
1151
RangeCoder * const c= &f->slice_context[0]->c;
756
1152
AVFrame *pict = data;
757
const int width= f->width;
758
const int height= f->height;
759
1153
AVFrame * const p= &f->picture;
760
1154
int used_count= 0;
761
1155
uint8_t keystate=128;
763
1159
ff_init_range_encoder(c, buf, buf_size);
764
1160
ff_build_rac_states(c, 0.05*(1LL<<32), 256-8);
791
if(f->colorspace==0){
792
const int chroma_width = -((-width )>>f->chroma_h_shift);
793
const int chroma_height= -((-height)>>f->chroma_v_shift);
795
encode_plane(f, p->data[0], width, height, p->linesize[0], 0);
797
encode_plane(f, p->data[1], chroma_width, chroma_height, p->linesize[1], 1);
798
encode_plane(f, p->data[2], chroma_width, chroma_height, p->linesize[2], 1);
800
encode_rgb_frame(f, (uint32_t*)(p->data[0]), width, height, p->linesize[0]/4);
1188
for(i=1; i<f->slice_count; i++){
1189
FFV1Context *fs= f->slice_context[i];
1190
uint8_t *start= buf + (buf_size-used_count)*i/f->slice_count;
1191
int len= buf_size/f->slice_count;
1194
ff_init_range_encoder(&fs->c, start, len);
1196
init_put_bits(&fs->pb, start, len);
1199
avctx->execute(avctx, encode_slice, &f->slice_context[0], NULL, f->slice_count, sizeof(void*));
1202
for(i=0; i<f->slice_count; i++){
1203
FFV1Context *fs= f->slice_context[i];
1208
put_rac(&fs->c, &state, 0);
1209
bytes= ff_rac_terminate(&fs->c);
1211
flush_put_bits(&fs->pb); //nicer padding FIXME
1212
bytes= used_count + (put_bits_count(&fs->pb)+7)/8;
1216
av_assert0(bytes < buf_size/f->slice_count);
1217
memmove(buf_p, fs->ac ? fs->c.bytestream_start : fs->pb.buf, bytes);
1218
av_assert0(bytes < (1<<24));
1219
AV_WB24(buf_p+bytes, bytes);
1225
if((avctx->flags&CODEC_FLAG_PASS1) && (f->picture_number&31)==0){
1227
char *p= avctx->stats_out;
1228
char *end= p + STATS_OUT_SIZE;
1230
memset(f->rc_stat, 0, sizeof(f->rc_stat));
1231
for(i=0; i<f->quant_table_count; i++)
1232
memset(f->rc_stat2[i], 0, f->context_count[i]*sizeof(*f->rc_stat2[i]));
1234
for(j=0; j<f->slice_count; j++){
1235
FFV1Context *fs= f->slice_context[j];
1236
for(i=0; i<256; i++){
1237
f->rc_stat[i][0] += fs->rc_stat[i][0];
1238
f->rc_stat[i][1] += fs->rc_stat[i][1];
1240
for(i=0; i<f->quant_table_count; i++){
1241
for(k=0; k<f->context_count[i]; k++){
1242
for(m=0; m<32; m++){
1243
f->rc_stat2[i][k][m][0] += fs->rc_stat2[i][k][m][0];
1244
f->rc_stat2[i][k][m][1] += fs->rc_stat2[i][k][m][1];
1250
for(j=0; j<256; j++){
1251
snprintf(p, end-p, "%"PRIu64" %"PRIu64" ", f->rc_stat[j][0], f->rc_stat[j][1]);
1254
snprintf(p, end-p, "\n");
1256
for(i=0; i<f->quant_table_count; i++){
1257
for(j=0; j<f->context_count[i]; j++){
1258
for(m=0; m<32; m++){
1259
snprintf(p, end-p, "%"PRIu64" %"PRIu64" ", f->rc_stat2[i][j][m][0], f->rc_stat2[i][j][m][1]);
1264
snprintf(p, end-p, "%d\n", f->gob_count);
1265
} else if(avctx->flags&CODEC_FLAG_PASS1)
1266
avctx->stats_out[0] = '\0';
804
1268
f->picture_number++;
807
return ff_rac_terminate(c);
809
flush_put_bits(&f->pb); //nicer padding FIXME
810
return used_count + (put_bits_count(&f->pb)+7)/8;
813
1271
#endif /* CONFIG_FFV1_ENCODER */
815
1273
static av_cold int common_end(AVCodecContext *avctx){
816
1274
FFV1Context *s = avctx->priv_data;
819
for(i=0; i<s->plane_count; i++){
820
PlaneContext *p= &s->plane[i];
823
av_freep(&p->vlc_state);
1277
if (avctx->codec->decode && s->picture.data[0])
1278
avctx->release_buffer(avctx, &s->picture);
1280
for(j=0; j<s->slice_count; j++){
1281
FFV1Context *fs= s->slice_context[j];
1282
for(i=0; i<s->plane_count; i++){
1283
PlaneContext *p= &fs->plane[i];
1285
av_freep(&p->state);
1286
av_freep(&p->vlc_state);
1288
av_freep(&fs->sample_buffer);
1291
av_freep(&avctx->stats_out);
1292
for(j=0; j<s->quant_table_count; j++){
1293
av_freep(&s->initial_states[j]);
1294
for(i=0; i<s->slice_count; i++){
1295
FFV1Context *sf= s->slice_context[i];
1296
av_freep(&sf->rc_stat2[j]);
1298
av_freep(&s->rc_stat2[j]);
1301
for(i=0; i<s->slice_count; i++){
1302
av_freep(&s->slice_context[i]);
1007
1531
f->colorspace= get_symbol(c, state, 0); //YUV cs type
1009
f->avctx->bits_per_raw_sample= get_symbol(c, state, 0);
1532
f->avctx->bits_per_raw_sample= get_symbol(c, state, 0);
1010
1533
get_rac(c, state); //no chroma = false
1011
1534
f->chroma_h_shift= get_symbol(c, state, 0);
1012
1535
f->chroma_v_shift= get_symbol(c, state, 0);
1013
1536
get_rac(c, state); //transparency plane
1014
1537
f->plane_count= 2;
1538
f->num_h_slices= 1 + get_symbol(c, state, 0);
1539
f->num_v_slices= 1 + get_symbol(c, state, 0);
1540
if(f->num_h_slices > (unsigned)f->width || f->num_v_slices > (unsigned)f->height){
1541
av_log(f->avctx, AV_LOG_ERROR, "too many slices\n");
1545
f->quant_table_count= get_symbol(c, state, 0);
1546
if(f->quant_table_count > (unsigned)MAX_QUANT_TABLES)
1548
for(i=0; i<f->quant_table_count; i++){
1549
if((f->context_count[i]= read_quant_tables(c, f->quant_tables[i])) < 0){
1550
av_log(f->avctx, AV_LOG_ERROR, "read_quant_table error\n");
1555
if(allocate_initial_states(f) < 0)
1556
return AVERROR(ENOMEM);
1558
for(i=0; i<f->quant_table_count; i++){
1559
if(get_rac(c, state)){
1560
for(j=0; j<f->context_count[i]; j++){
1561
for(k=0; k<CONTEXT_SIZE; k++){
1562
int pred= j ? f->initial_states[i][j-1][k] : 128;
1563
f->initial_states[i][j][k]= (pred+get_symbol(c, state2[k], 1))&0xFF;
1572
static int read_header(FFV1Context *f){
1573
uint8_t state[CONTEXT_SIZE];
1574
int i, j, context_count;
1575
RangeCoder * const c= &f->slice_context[0]->c;
1577
memset(state, 128, sizeof(state));
1580
f->version= get_symbol(c, state, 0);
1581
f->ac= f->avctx->coder_type= get_symbol(c, state, 0);
1583
for(i=1; i<256; i++){
1584
f->state_transition[i]= get_symbol(c, state, 1) + c->one_state[i];
1587
f->colorspace= get_symbol(c, state, 0); //YUV cs type
1589
f->avctx->bits_per_raw_sample= get_symbol(c, state, 0);
1590
get_rac(c, state); //no chroma = false
1591
f->chroma_h_shift= get_symbol(c, state, 0);
1592
f->chroma_v_shift= get_symbol(c, state, 0);
1593
get_rac(c, state); //transparency plane
1016
1597
if(f->colorspace==0){
1017
1598
if(f->avctx->bits_per_raw_sample<=8){
1049
1630
//printf("%d %d %d\n", f->chroma_h_shift, f->chroma_v_shift,f->avctx->pix_fmt);
1053
context_count*= read_quant_table(c, f->quant_table[i], context_count);
1054
if(context_count < 0 || context_count > 32768){
1055
av_log(f->avctx, AV_LOG_ERROR, "read_quant_table error\n");
1632
context_count= read_quant_tables(c, f->quant_table);
1633
if(context_count < 0){
1634
av_log(f->avctx, AV_LOG_ERROR, "read_quant_table error\n");
1638
f->slice_count= get_symbol(c, state, 0);
1639
if(f->slice_count > (unsigned)MAX_SLICES)
1643
for(j=0; j<f->slice_count; j++){
1644
FFV1Context *fs= f->slice_context[j];
1647
if(f->version >= 2){
1648
fs->slice_x = get_symbol(c, state, 0) *f->width ;
1649
fs->slice_y = get_symbol(c, state, 0) *f->height;
1650
fs->slice_width =(get_symbol(c, state, 0)+1)*f->width + fs->slice_x;
1651
fs->slice_height=(get_symbol(c, state, 0)+1)*f->height + fs->slice_y;
1653
fs->slice_x /= f->num_h_slices;
1654
fs->slice_y /= f->num_v_slices;
1655
fs->slice_width = fs->slice_width /f->num_h_slices - fs->slice_x;
1656
fs->slice_height = fs->slice_height/f->num_v_slices - fs->slice_y;
1657
if((unsigned)fs->slice_width > f->width || (unsigned)fs->slice_height > f->height)
1659
if( (unsigned)fs->slice_x + (uint64_t)fs->slice_width > f->width
1660
|| (unsigned)fs->slice_y + (uint64_t)fs->slice_height > f->height)
1059
context_count= (context_count+1)/2;
1061
for(i=0; i<f->plane_count; i++){
1062
PlaneContext * const p= &f->plane[i];
1064
p->context_count= context_count;
1067
if(!p->state) p->state= av_malloc(CONTEXT_SIZE*p->context_count*sizeof(uint8_t));
1069
if(!p->vlc_state) p->vlc_state= av_malloc(p->context_count*sizeof(VlcState));
1664
for(i=0; i<f->plane_count; i++){
1665
PlaneContext * const p= &fs->plane[i];
1667
if(f->version >= 2){
1668
int idx=get_symbol(c, state, 0);
1669
if(idx > (unsigned)f->quant_table_count){
1670
av_log(f->avctx, AV_LOG_ERROR, "quant_table_index out of range\n");
1673
p->quant_table_index= idx;
1674
memcpy(p->quant_table, f->quant_tables[idx], sizeof(p->quant_table));
1675
context_count= f->context_count[idx];
1677
memcpy(p->quant_table, f->quant_table, sizeof(p->quant_table));
1680
if(p->context_count < context_count){
1681
av_freep(&p->state);
1682
av_freep(&p->vlc_state);
1684
p->context_count= context_count;