Originally committed as revision 4891 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -1982,7 +1982,7 @@ typedef struct AVCodecContext { | |||||
| * - decoding: unused | * - decoding: unused | ||||
| */ | */ | ||||
| int directpred; | int directpred; | ||||
| /** | /** | ||||
| * audio cutoff bandwidth (0 means "automatic") . Currently used only by FAAC | * audio cutoff bandwidth (0 means "automatic") . Currently used only by FAAC | ||||
| * - encoding: set by user. | * - encoding: set by user. | ||||
| @@ -4310,10 +4310,10 @@ static int decode_slice_header(H264Context *h){ | |||||
| if(h->sps.timing_info_present_flag){ | if(h->sps.timing_info_present_flag){ | ||||
| s->avctx->time_base= (AVRational){h->sps.num_units_in_tick * 2, h->sps.time_scale}; | s->avctx->time_base= (AVRational){h->sps.num_units_in_tick * 2, h->sps.time_scale}; | ||||
| if(h->x264_build > 0 && h->x264_build < 44) | |||||
| s->avctx->time_base.den *= 2; | |||||
| av_reduce(&s->avctx->time_base.num, &s->avctx->time_base.den, | |||||
| s->avctx->time_base.num, s->avctx->time_base.den, 1<<30); | |||||
| if(h->x264_build > 0 && h->x264_build < 44) | |||||
| s->avctx->time_base.den *= 2; | |||||
| av_reduce(&s->avctx->time_base.num, &s->avctx->time_base.den, | |||||
| s->avctx->time_base.num, s->avctx->time_base.den, 1<<30); | |||||
| } | } | ||||
| } | } | ||||
| @@ -72,7 +72,7 @@ static void reset_ls_coding_parameters(MJpegDecodeContext *s, int reset_all){ | |||||
| int factor; | int factor; | ||||
| if(s->maxval==0 || reset_all) s->maxval= (1<<s->bits) - 1; | if(s->maxval==0 || reset_all) s->maxval= (1<<s->bits) - 1; | ||||
| if(s->maxval >=128){ | if(s->maxval >=128){ | ||||
| factor= (FFMIN(s->maxval, 4096) + 128)>>8; | factor= (FFMIN(s->maxval, 4096) + 128)>>8; | ||||
| @@ -103,7 +103,7 @@ static int decode_lse(MJpegDecodeContext *s) | |||||
| /* XXX: verify len field validity */ | /* XXX: verify len field validity */ | ||||
| len = get_bits(&s->gb, 16); | len = get_bits(&s->gb, 16); | ||||
| id = get_bits(&s->gb, 8); | id = get_bits(&s->gb, 8); | ||||
| switch(id){ | switch(id){ | ||||
| case 1: | case 1: | ||||
| s->maxval= get_bits(&s->gb, 16); | s->maxval= get_bits(&s->gb, 16); | ||||
| @@ -111,7 +111,7 @@ static int decode_lse(MJpegDecodeContext *s) | |||||
| s->t2= get_bits(&s->gb, 16); | s->t2= get_bits(&s->gb, 16); | ||||
| s->t3= get_bits(&s->gb, 16); | s->t3= get_bits(&s->gb, 16); | ||||
| s->reset= get_bits(&s->gb, 16); | s->reset= get_bits(&s->gb, 16); | ||||
| reset_ls_coding_parameters(s, 0); | reset_ls_coding_parameters(s, 0); | ||||
| //FIXME quant table? | //FIXME quant table? | ||||
| break; | break; | ||||
| @@ -145,15 +145,15 @@ static inline void update_vlc_state(VlcState * const state, const int v, int hal | |||||
| if(drift <= -count){ | if(drift <= -count){ | ||||
| if(state->bias > -128) state->bias--; | if(state->bias > -128) state->bias--; | ||||
| drift += count; | drift += count; | ||||
| if(drift <= -count) | if(drift <= -count) | ||||
| drift= -count + 1; | drift= -count + 1; | ||||
| }else if(drift > 0){ | }else if(drift > 0){ | ||||
| if(state->bias < 127) state->bias++; | if(state->bias < 127) state->bias++; | ||||
| drift -= count; | drift -= count; | ||||
| if(drift > 0) | |||||
| if(drift > 0) | |||||
| drift= 0; | drift= 0; | ||||
| } | } | ||||
| @@ -169,7 +169,7 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| for(x=0; x < w; x++){ | for(x=0; x < w; x++){ | ||||
| int l, t, lt, rt; | int l, t, lt, rt; | ||||
| t= R(last, 0); | t= R(last, 0); | ||||
| if(x){ | if(x){ | ||||
| l = t; | l = t; | ||||
| @@ -181,11 +181,11 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| if(x<w-1) rt= R(last, x+1); | if(x<w-1) rt= R(last, x+1); | ||||
| else rt= t; | else rt= t; | ||||
| hr_gradient= rt - t; | hr_gradient= rt - t; | ||||
| hl_gradient= t - lt; | hl_gradient= t - lt; | ||||
| v_gradient= lt - l; | v_gradient= lt - l; | ||||
| context= quantize(s, v_gradient) + 9*(quantize(s, hl_gradient) + 9*quantize(s, hr_gradient)); | context= quantize(s, v_gradient) + 9*(quantize(s, hl_gradient) + 9*quantize(s, hr_gradient)); | ||||
| if(context){ | if(context){ | ||||
| @@ -206,7 +206,7 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| k++; | k++; | ||||
| i += i; | i += i; | ||||
| } | } | ||||
| v= get_ur_golomb_jpegls(gb, k, LIMIT-qbpp, qbpp); | v= get_ur_golomb_jpegls(gb, k, LIMIT-qbpp, qbpp); | ||||
| #if 1 | #if 1 | ||||
| v++; | v++; | ||||
| @@ -222,9 +222,9 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| #endif | #endif | ||||
| update_vlc_state(state, v, half_count); | update_vlc_state(state, v, half_count); | ||||
| if(sign) v= -v; | if(sign) v= -v; | ||||
| if(is_uint8) ((uint8_t *)dst)[x]= (pred + v) & maxval; | if(is_uint8) ((uint8_t *)dst)[x]= (pred + v) & maxval; | ||||
| else ((uint16_t*)dst)[x]= (pred + v) & maxval; | else ((uint16_t*)dst)[x]= (pred + v) & maxval; | ||||
| }else{ | }else{ | ||||
| @@ -234,28 +234,28 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| run_count = 1<<log2_run[run_index]; | run_count = 1<<log2_run[run_index]; | ||||
| if(x + run_count > w) run_count= w - x; | if(x + run_count > w) run_count= w - x; | ||||
| else run_index++; | else run_index++; | ||||
| for(; run_count; run_count--){ | for(; run_count; run_count--){ | ||||
| if(is_uint8) ((uint8_t *)dst)[x++]= l; | if(is_uint8) ((uint8_t *)dst)[x++]= l; | ||||
| else ((uint16_t*)dst)[x++]= l; | else ((uint16_t*)dst)[x++]= l; | ||||
| } | } | ||||
| if(x >= w) return 0; | |||||
| if(x >= w) return 0; | |||||
| } | } | ||||
| run_count= get_bits(&s->gb, log2_run[run_index]); | run_count= get_bits(&s->gb, log2_run[run_index]); | ||||
| for(; run_count; run_count--){ | for(; run_count; run_count--){ | ||||
| if(is_uint8) ((uint8_t *)dst)[x++]= l; | if(is_uint8) ((uint8_t *)dst)[x++]= l; | ||||
| else ((uint16_t*)dst)[x++]= l; | else ((uint16_t*)dst)[x++]= l; | ||||
| } | } | ||||
| if(run_index) run_index--; | if(run_index) run_index--; | ||||
| if(x >= w) return 0; | if(x >= w) return 0; | ||||
| t= R(last, 0); | t= R(last, 0); | ||||
| RItype= (l==t); | RItype= (l==t); | ||||
| if(l==t){ | if(l==t){ | ||||
| state= 366; | state= 366; | ||||
| @@ -264,21 +264,21 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| state= 365; | state= 365; | ||||
| temp= state->error_sum; | temp= state->error_sum; | ||||
| } | } | ||||
| pred= t; | pred= t; | ||||
| sign= l > t; | sign= l > t; | ||||
| i= state->count; | i= state->count; | ||||
| k=0; | k=0; | ||||
| while(i < temp){ //FIXME optimize | while(i < temp){ //FIXME optimize | ||||
| k++; | k++; | ||||
| i += i; | i += i; | ||||
| } | } | ||||
| assert(Errval != 0); | assert(Errval != 0); | ||||
| map = (k==0 && 2*Nn < state->count) == (Errval>0); | |||||
| map = (k==0 && 2*Nn < state->count) == (Errval>0); | |||||
| if(run_count==0 && run_mode==1){ | if(run_count==0 && run_mode==1){ | ||||
| if(get_bits1(&s->gb)){ | if(get_bits1(&s->gb)){ | ||||
| run_count = 1<<log2_run[run_index]; | run_count = 1<<log2_run[run_index]; | ||||
| @@ -298,7 +298,7 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| if(diff>=0) diff++; | if(diff>=0) diff++; | ||||
| }else | }else | ||||
| diff=0; | diff=0; | ||||
| } | } | ||||
| } | } | ||||
| @@ -316,7 +316,7 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| x = 0; | x = 0; | ||||
| y = 0; | y = 0; | ||||
| linesize= s->linesize[c]; | linesize= s->linesize[c]; | ||||
| for(j=0; j<n; j++) { | for(j=0; j<n; j++) { | ||||
| int pred; | int pred; | ||||
| @@ -334,7 +334,7 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor); | PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor); | ||||
| } | } | ||||
| } | } | ||||
| if (s->interlaced && s->bottom_field) | if (s->interlaced && s->bottom_field) | ||||
| ptr += linesize >> 1; | ptr += linesize >> 1; | ||||
| *ptr= pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform); | *ptr= pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform); | ||||
| @@ -356,7 +356,7 @@ static inline int ls_decode_line(MJpegDecodeContext *s, void *lastv, void *dstv, | |||||
| x = 0; | x = 0; | ||||
| y = 0; | y = 0; | ||||
| linesize= s->linesize[c]; | linesize= s->linesize[c]; | ||||
| for(j=0; j<n; j++) { | for(j=0; j<n; j++) { | ||||
| int pred; | int pred; | ||||
| @@ -119,7 +119,7 @@ void *av_realloc(void *ptr, unsigned int size) | |||||
| /** | /** | ||||
| * Free memory which has been allocated with av_malloc(z)() or av_realloc(). | * Free memory which has been allocated with av_malloc(z)() or av_realloc(). | ||||
| * NOTE: ptr = NULL is explicetly allowed | |||||
| * NOTE: ptr = NULL is explicetly allowed | |||||
| * Note2: it is recommanded that you use av_freep() instead | * Note2: it is recommanded that you use av_freep() instead | ||||
| */ | */ | ||||
| void av_free(void *ptr) | void av_free(void *ptr) | ||||
| @@ -761,38 +761,38 @@ static const int ac3_sample_rates[4] = { | |||||
| }; | }; | ||||
| static const int ac3_frame_sizes[64][3] = { | static const int ac3_frame_sizes[64][3] = { | ||||
| { 64, 69, 96 }, | |||||
| { 64, 70, 96 }, | |||||
| { 80, 87, 120 }, | |||||
| { 80, 88, 120 }, | |||||
| { 96, 104, 144 }, | |||||
| { 96, 105, 144 }, | |||||
| { 112, 121, 168 }, | |||||
| { 112, 122, 168 }, | |||||
| { 128, 139, 192 }, | |||||
| { 128, 140, 192 }, | |||||
| { 160, 174, 240 }, | |||||
| { 160, 175, 240 }, | |||||
| { 192, 208, 288 }, | |||||
| { 192, 209, 288 }, | |||||
| { 224, 243, 336 }, | |||||
| { 224, 244, 336 }, | |||||
| { 256, 278, 384 }, | |||||
| { 256, 279, 384 }, | |||||
| { 320, 348, 480 }, | |||||
| { 320, 349, 480 }, | |||||
| { 384, 417, 576 }, | |||||
| { 384, 418, 576 }, | |||||
| { 448, 487, 672 }, | |||||
| { 448, 488, 672 }, | |||||
| { 512, 557, 768 }, | |||||
| { 512, 558, 768 }, | |||||
| { 640, 696, 960 }, | |||||
| { 640, 697, 960 }, | |||||
| { 768, 835, 1152 }, | |||||
| { 768, 836, 1152 }, | |||||
| { 896, 975, 1344 }, | |||||
| { 896, 976, 1344 }, | |||||
| { 64, 69, 96 }, | |||||
| { 64, 70, 96 }, | |||||
| { 80, 87, 120 }, | |||||
| { 80, 88, 120 }, | |||||
| { 96, 104, 144 }, | |||||
| { 96, 105, 144 }, | |||||
| { 112, 121, 168 }, | |||||
| { 112, 122, 168 }, | |||||
| { 128, 139, 192 }, | |||||
| { 128, 140, 192 }, | |||||
| { 160, 174, 240 }, | |||||
| { 160, 175, 240 }, | |||||
| { 192, 208, 288 }, | |||||
| { 192, 209, 288 }, | |||||
| { 224, 243, 336 }, | |||||
| { 224, 244, 336 }, | |||||
| { 256, 278, 384 }, | |||||
| { 256, 279, 384 }, | |||||
| { 320, 348, 480 }, | |||||
| { 320, 349, 480 }, | |||||
| { 384, 417, 576 }, | |||||
| { 384, 418, 576 }, | |||||
| { 448, 487, 672 }, | |||||
| { 448, 488, 672 }, | |||||
| { 512, 557, 768 }, | |||||
| { 512, 558, 768 }, | |||||
| { 640, 696, 960 }, | |||||
| { 640, 697, 960 }, | |||||
| { 768, 835, 1152 }, | |||||
| { 768, 836, 1152 }, | |||||
| { 896, 975, 1344 }, | |||||
| { 896, 976, 1344 }, | |||||
| { 1024, 1114, 1536 }, | { 1024, 1114, 1536 }, | ||||
| { 1024, 1115, 1536 }, | { 1024, 1115, 1536 }, | ||||
| { 1152, 1253, 1728 }, | { 1152, 1253, 1728 }, | ||||
| @@ -812,7 +812,7 @@ static const int ac3_channels[8] = { | |||||
| }; | }; | ||||
| static int ac3_sync(const uint8_t *buf, int *channels, int *sample_rate, | static int ac3_sync(const uint8_t *buf, int *channels, int *sample_rate, | ||||
| int *bit_rate) | |||||
| int *bit_rate) | |||||
| { | { | ||||
| unsigned int fscod, frmsizecod, acmod, bsid, lfeon; | unsigned int fscod, frmsizecod, acmod, bsid, lfeon; | ||||
| GetBitContext bits; | GetBitContext bits; | ||||
| @@ -820,26 +820,26 @@ static int ac3_sync(const uint8_t *buf, int *channels, int *sample_rate, | |||||
| init_get_bits(&bits, buf, AC3_HEADER_SIZE * 8); | init_get_bits(&bits, buf, AC3_HEADER_SIZE * 8); | ||||
| if(get_bits(&bits, 16) != 0x0b77) | if(get_bits(&bits, 16) != 0x0b77) | ||||
| return 0; | |||||
| return 0; | |||||
| get_bits(&bits, 16); /* crc */ | |||||
| get_bits(&bits, 16); /* crc */ | |||||
| fscod = get_bits(&bits, 2); | fscod = get_bits(&bits, 2); | ||||
| frmsizecod = get_bits(&bits, 6); | frmsizecod = get_bits(&bits, 6); | ||||
| if(!ac3_sample_rates[fscod]) | if(!ac3_sample_rates[fscod]) | ||||
| return 0; | |||||
| return 0; | |||||
| bsid = get_bits(&bits, 5); | bsid = get_bits(&bits, 5); | ||||
| if(bsid > 8) | if(bsid > 8) | ||||
| return 0; | |||||
| get_bits(&bits, 3); /* bsmod */ | |||||
| return 0; | |||||
| get_bits(&bits, 3); /* bsmod */ | |||||
| acmod = get_bits(&bits, 3); | acmod = get_bits(&bits, 3); | ||||
| if(acmod & 1 && acmod != 1) | if(acmod & 1 && acmod != 1) | ||||
| get_bits(&bits, 2); /* cmixlev */ | |||||
| get_bits(&bits, 2); /* cmixlev */ | |||||
| if(acmod & 4) | if(acmod & 4) | ||||
| get_bits(&bits, 2); /* surmixlev */ | |||||
| get_bits(&bits, 2); /* surmixlev */ | |||||
| if(acmod & 2) | if(acmod & 2) | ||||
| get_bits(&bits, 2); /* dsurmod */ | |||||
| get_bits(&bits, 2); /* dsurmod */ | |||||
| lfeon = get_bits(&bits, 1); | lfeon = get_bits(&bits, 1); | ||||
| *sample_rate = ac3_sample_rates[fscod]; | *sample_rate = ac3_sample_rates[fscod]; | ||||
| @@ -881,7 +881,7 @@ static int ac3_parse(AVCodecParserContext *s1, | |||||
| s->inbuf_ptr += len; | s->inbuf_ptr += len; | ||||
| buf_size -= len; | buf_size -= len; | ||||
| if ((s->inbuf_ptr - s->inbuf) == AC3_HEADER_SIZE) { | if ((s->inbuf_ptr - s->inbuf) == AC3_HEADER_SIZE) { | ||||
| len = ac3_sync(s->inbuf, &channels, &sample_rate, &bit_rate); | |||||
| len = ac3_sync(s->inbuf, &channels, &sample_rate, &bit_rate); | |||||
| if (len == 0) { | if (len == 0) { | ||||
| /* no sync found : move by one byte (inefficient, but simple!) */ | /* no sync found : move by one byte (inefficient, but simple!) */ | ||||
| memmove(s->inbuf, s->inbuf + 1, AC3_HEADER_SIZE - 1); | memmove(s->inbuf, s->inbuf + 1, AC3_HEADER_SIZE - 1); | ||||
| @@ -892,7 +892,7 @@ static int ac3_parse(AVCodecParserContext *s1, | |||||
| avctx->sample_rate = sample_rate; | avctx->sample_rate = sample_rate; | ||||
| /* set channels,except if the user explicitly requests 1 or 2 channels, XXX/FIXME this is a bit ugly */ | /* set channels,except if the user explicitly requests 1 or 2 channels, XXX/FIXME this is a bit ugly */ | ||||
| if(avctx->channels!=1 && avctx->channels!=2){ | if(avctx->channels!=1 && avctx->channels!=2){ | ||||
| avctx->channels = channels; | |||||
| avctx->channels = channels; | |||||
| } | } | ||||
| avctx->bit_rate = bit_rate; | avctx->bit_rate = bit_rate; | ||||
| avctx->frame_size = 6 * 256; | avctx->frame_size = 6 * 256; | ||||
| @@ -3021,7 +3021,7 @@ static int get_dc(SnowContext *s, int mb_x, int mb_y, int plane_index){ | |||||
| int x= block_w*mb_x2 + block_w/2; | int x= block_w*mb_x2 + block_w/2; | ||||
| int y= block_w*mb_y2 + block_w/2; | int y= block_w*mb_y2 + block_w/2; | ||||
| add_yblock(s, dst + ((i&1)+(i>>1)*obmc_stride)*block_w, NULL, ref, obmc, | |||||
| add_yblock(s, dst + ((i&1)+(i>>1)*obmc_stride)*block_w, NULL, ref, obmc, | |||||
| x, y, block_w, block_w, w, h, obmc_stride, ref_stride, obmc_stride, mb_x2, mb_y2, 0, 0, plane_index); | x, y, block_w, block_w, w, h, obmc_stride, ref_stride, obmc_stride, mb_x2, mb_y2, 0, 0, plane_index); | ||||
| for(y2= FFMAX(y, 0); y2<FFMIN(h, y+block_w); y2++){ | for(y2= FFMAX(y, 0); y2<FFMIN(h, y+block_w); y2++){ | ||||
| @@ -3177,7 +3177,7 @@ static int get_4block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index){ | |||||
| int x= block_w*mb_x2 + block_w/2; | int x= block_w*mb_x2 + block_w/2; | ||||
| int y= block_w*mb_y2 + block_w/2; | int y= block_w*mb_y2 + block_w/2; | ||||
| add_yblock(s, zero_dst, dst, ref, obmc, | |||||
| add_yblock(s, zero_dst, dst, ref, obmc, | |||||
| x, y, block_w, block_w, w, h, /*dst_stride*/0, ref_stride, obmc_stride, mb_x2, mb_y2, 1, 1, plane_index); | x, y, block_w, block_w, w, h, /*dst_stride*/0, ref_stride, obmc_stride, mb_x2, mb_y2, 1, 1, plane_index); | ||||
| //FIXME find a cleaner/simpler way to skip the outside stuff | //FIXME find a cleaner/simpler way to skip the outside stuff | ||||
| @@ -225,7 +225,7 @@ X264_init(AVCodecContext *avctx) | |||||
| if(avctx->level > 0) x4->params.i_level_idc = avctx->level; | if(avctx->level > 0) x4->params.i_level_idc = avctx->level; | ||||
| x4->params.rc.f_rate_tolerance = | |||||
| x4->params.rc.f_rate_tolerance = | |||||
| (float)avctx->bit_rate_tolerance/avctx->bit_rate; | (float)avctx->bit_rate_tolerance/avctx->bit_rate; | ||||
| if((avctx->rc_buffer_size != 0) && | if((avctx->rc_buffer_size != 0) && | ||||
| @@ -258,14 +258,14 @@ X264_init(AVCodecContext *avctx) | |||||
| avctx->coded_frame = &x4->out_pic; | avctx->coded_frame = &x4->out_pic; | ||||
| if(avctx->flags & CODEC_FLAG_GLOBAL_HEADER){ | if(avctx->flags & CODEC_FLAG_GLOBAL_HEADER){ | ||||
| x264_nal_t *nal; | |||||
| int nnal, i, s = 0; | |||||
| x264_nal_t *nal; | |||||
| int nnal, i, s = 0; | |||||
| x264_encoder_headers(x4->enc, &nal, &nnal); | |||||
| x264_encoder_headers(x4->enc, &nal, &nnal); | |||||
| /* 5 bytes NAL header + worst case escaping */ | |||||
| for(i = 0; i < nnal; i++) | |||||
| s += 5 + nal[i].i_payload * 4 / 3; | |||||
| /* 5 bytes NAL header + worst case escaping */ | |||||
| for(i = 0; i < nnal; i++) | |||||
| s += 5 + nal[i].i_payload * 4 / 3; | |||||
| avctx->extradata = av_malloc(s); | avctx->extradata = av_malloc(s); | ||||
| avctx->extradata_size = encode_nals(avctx->extradata, s, nal, nnal); | avctx->extradata_size = encode_nals(avctx->extradata, s, nal, nnal); | ||||
| @@ -153,24 +153,24 @@ static const CodecTag mov_audio_tags[] = { | |||||
| /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */ | /* cf. QTFileFormat.pdf p253, qtff.pdf p205 */ | ||||
| /* http://developer.apple.com/documentation/mac/Text/Text-368.html */ | /* http://developer.apple.com/documentation/mac/Text/Text-368.html */ | ||||
| /* deprecated by putting the code as 3*5bit ascii */ | /* deprecated by putting the code as 3*5bit ascii */ | ||||
| static const char *mov_mdhd_language_map[] = { | |||||
| static const char *mov_mdhd_language_map[] = { | |||||
| /* 0-9 */ | /* 0-9 */ | ||||
| "eng", "fra", "ger", "ita", "dut", "sve", "spa", "dan", "por", "nor", | |||||
| "heb", "jpn", "ara", "fin", "gre", "ice", "mlt", "tur", "hr "/*scr*/, "chi"/*ace?*/, | |||||
| "urd", "hin", "tha", "kor", "lit", "pol", "hun", "est", "lav", NULL, | |||||
| "fo ", NULL, "rus", "chi", NULL, "iri", "alb", "ron", "ces", "slk", | |||||
| "eng", "fra", "ger", "ita", "dut", "sve", "spa", "dan", "por", "nor", | |||||
| "heb", "jpn", "ara", "fin", "gre", "ice", "mlt", "tur", "hr "/*scr*/, "chi"/*ace?*/, | |||||
| "urd", "hin", "tha", "kor", "lit", "pol", "hun", "est", "lav", NULL, | |||||
| "fo ", NULL, "rus", "chi", NULL, "iri", "alb", "ron", "ces", "slk", | |||||
| "slv", "yid", "sr ", "mac", "bul", "ukr", "bel", "uzb", "kaz", "aze", | "slv", "yid", "sr ", "mac", "bul", "ukr", "bel", "uzb", "kaz", "aze", | ||||
| /*?*/ | |||||
| /*?*/ | |||||
| "aze", "arm", "geo", "mol", "kir", "tgk", "tuk", "mon", NULL, "pus", | "aze", "arm", "geo", "mol", "kir", "tgk", "tuk", "mon", NULL, "pus", | ||||
| "kur", "kas", "snd", "tib", "nep", "san", "mar", "ben", "asm", "guj", | "kur", "kas", "snd", "tib", "nep", "san", "mar", "ben", "asm", "guj", | ||||
| "pa ", "ori", "mal", "kan", "tam", "tel", NULL, "bur", "khm", "lao", | "pa ", "ori", "mal", "kan", "tam", "tel", NULL, "bur", "khm", "lao", | ||||
| /* roman? arabic? */ | /* roman? arabic? */ | ||||
| "vie", "ind", "tgl", "may", "may", "amh", "tir", "orm", "som", "swa", | "vie", "ind", "tgl", "may", "may", "amh", "tir", "orm", "som", "swa", | ||||
| /*==rundi?*/ | /*==rundi?*/ | ||||
| NULL, "run", NULL, "mlg", "epo", NULL, NULL, NULL, NULL, NULL, | |||||
| NULL, "run", NULL, "mlg", "epo", NULL, NULL, NULL, NULL, NULL, | |||||
| /* 100 */ | /* 100 */ | ||||
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | |||||
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | |||||
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | |||||
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, | |||||
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "wel", "baq", | NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "wel", "baq", | ||||
| "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav" | "cat", "lat", "que", "grn", "aym", "tat", "uig", "dzo", "jav" | ||||
| }; | }; | ||||
| @@ -380,7 +380,7 @@ extern int ff_mov_iso639_to_lang(const char *lang, int mp4); /* for movenc.c */ | |||||
| int ff_mov_iso639_to_lang(const char *lang, int mp4) | int ff_mov_iso639_to_lang(const char *lang, int mp4) | ||||
| { | { | ||||
| int i, code = 0; | int i, code = 0; | ||||
| /* old way, only for QT? */ | /* old way, only for QT? */ | ||||
| for (i = 0; !mp4 && (i < (sizeof(mov_mdhd_language_map)/sizeof(char *))); i++) { | for (i = 0; !mp4 && (i < (sizeof(mov_mdhd_language_map)/sizeof(char *))); i++) { | ||||
| if (mov_mdhd_language_map[i] && !strcmp(lang, mov_mdhd_language_map[i])) | if (mov_mdhd_language_map[i] && !strcmp(lang, mov_mdhd_language_map[i])) | ||||