comparison mpeg12.c @ 4454:c9ce397604f0 libavcodec

correctly set profile/level for hd
author bcoudurier
date Thu, 01 Feb 2007 09:47:36 +0000
parents d9cd0e5255d7
children ff5472c81ab8
comparison
equal deleted inserted replaced
4453:22827cd6b228 4454:c9ce397604f0
232 }else{ 232 }else{
233 av_log(avctx, AV_LOG_INFO, "MPEG1/2 does not support %d/%d fps, there may be AV sync issues\n", avctx->time_base.den, avctx->time_base.num); 233 av_log(avctx, AV_LOG_INFO, "MPEG1/2 does not support %d/%d fps, there may be AV sync issues\n", avctx->time_base.den, avctx->time_base.num);
234 } 234 }
235 } 235 }
236 236
237 if(avctx->profile == FF_PROFILE_UNKNOWN) 237 if(avctx->profile == FF_PROFILE_UNKNOWN){
238 avctx->profile = s->chroma_format == CHROMA_420 ? 4 : 0; 238 if(avctx->level != FF_LEVEL_UNKNOWN){
239 239 av_log(avctx, AV_LOG_ERROR, "Set profile and level\n");
240 if(avctx->level == FF_LEVEL_UNKNOWN) 240 return -1;
241 avctx->level = s->chroma_format == CHROMA_420 ? 8 : 5; 241 }
242 avctx->profile = s->chroma_format == CHROMA_420 ? 4 : 0; /* Main or 4:2:2 */
243 }
244
245 if(avctx->level == FF_LEVEL_UNKNOWN){
246 if(avctx->profile == 0){ /* 4:2:2 */
247 if(avctx->width <= 720 && avctx->height <= 608) avctx->level = 5; /* Main */
248 else avctx->level = 2; /* High */
249 }else{
250 if(avctx->profile != 1 && s->chroma_format != CHROMA_420){
251 av_log(avctx, AV_LOG_ERROR, "Only High(1) and 4:2:2(0) profiles support 4:2:2 color sampling\n");
252 return -1;
253 }
254 if(avctx->width <= 720 && avctx->height <= 576) avctx->level = 8; /* Main */
255 else if(avctx->width <= 1440) avctx->level = 6; /* High 1440 */
256 else avctx->level = 4; /* High */
257 }
258 }
242 259
243 if((avctx->flags2 & CODEC_FLAG2_DROP_FRAME_TIMECODE) && s->frame_rate_index != 4){ 260 if((avctx->flags2 & CODEC_FLAG2_DROP_FRAME_TIMECODE) && s->frame_rate_index != 4){
244 av_log(avctx, AV_LOG_ERROR, "Drop frame time code only allowed with 1001/30000 fps\n"); 261 av_log(avctx, AV_LOG_ERROR, "Drop frame time code only allowed with 1001/30000 fps\n");
245 return -1; 262 return -1;
246 } 263 }
331 348
332 if(s->codec_id == CODEC_ID_MPEG2VIDEO){ 349 if(s->codec_id == CODEC_ID_MPEG2VIDEO){
333 put_header(s, EXT_START_CODE); 350 put_header(s, EXT_START_CODE);
334 put_bits(&s->pb, 4, 1); //seq ext 351 put_bits(&s->pb, 4, 1); //seq ext
335 352
336 put_bits(&s->pb, 1, s->chroma_format == CHROMA_422); //escx 353 put_bits(&s->pb, 1, s->avctx->profile == 0); //escx 1 for 4:2:2 profile */
337 354
338 put_bits(&s->pb, 3, s->avctx->profile); //profile 355 put_bits(&s->pb, 3, s->avctx->profile); //profile
339 put_bits(&s->pb, 4, s->avctx->level); //level 356 put_bits(&s->pb, 4, s->avctx->level); //level
340 357
341 put_bits(&s->pb, 1, s->progressive_sequence); 358 put_bits(&s->pb, 1, s->progressive_sequence);