Changeset 853

Show
Ignore:
Timestamp:
04/19/08 23:46:50 (3 months ago)
Author:
astrange
Message:

ff_private: By popular request, anamorphic AVI!
Matroska: Merge duplicate code, delete a comment I accidentally copied.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/MatroskaCodecIDs.cpp

    r852 r853  
    143143         
    144144        if (dir == kToSampleDescription) { 
    145                 // WAVFORMATEX is stored in the private data, and some codecs (WMA) need it to decode 
    146145                KaxCodecPrivate & codecPrivate = GetChild<KaxCodecPrivate>(*tr_entry); 
    147146                 
  • trunk/MatroskaImportPrivate.cpp

    r851 r853  
    5151extern "C" { 
    5252#include "avutil.h" 
     53#define CodecType AVCodecType 
     54#include "ff_private.h" 
     55#undef CodecType         
    5356} 
    5457 
     
    406409        ComponentResult err = noErr; 
    407410        ImageDescriptionHandle imgDesc; 
    408         CleanApertureImageDescriptionExtension **clap = (CleanApertureImageDescriptionExtension**)NewHandle(sizeof(CleanApertureImageDescriptionExtension)); 
    409411        Fixed width, height; 
    410412         
     
    439441                return invalidTrack; 
    440442        } 
    441          
    442         SetCleanApertureDimensions(clap, width, height); 
    443          
     443                 
    444444        mkvTrack.theTrack = NewMovieTrack(theMovie, width, height, kNoVolume); 
    445445        if (mkvTrack.theTrack == NULL) 
     
    461461    (*imgDesc)->clutID = -1; 
    462462         
    463         AddImageDescriptionExtension(imgDesc,(Handle)clap, kCleanApertureImageDescriptionExtension); 
    464          
    465         DisposeHandle((Handle)clap); 
    466          
     463        set_track_clean_aperture_ext(imgDesc, width, height); 
    467464        mkvTrack.desc = (SampleDescriptionHandle) imgDesc; 
    468465         
  • trunk/ff_private.c

    r842 r853  
    518518} 
    519519 
     520static void get_track_dimensions_for_codec(AVCodecContext *codec, Fixed *fixedWidth, Fixed *fixedHeight) 
     521{        
     522        *fixedHeight = IntToFixed(codec->height); 
     523 
     524        if (!codec->sample_aspect_ratio.num) *fixedWidth = IntToFixed(codec->width); 
     525        else *fixedWidth = FloatToFixed(codec->width * av_q2d(codec->sample_aspect_ratio)); 
     526} 
     527 
     528void set_track_clean_aperture_ext(ImageDescriptionHandle imgDesc, Fixed cleanW, Fixed cleanH) 
     529{ 
     530        CleanApertureImageDescriptionExtension **clap = (CleanApertureImageDescriptionExtension**)NewHandle(sizeof(CleanApertureImageDescriptionExtension)); 
     531         
     532        int wN, wD, hN, hD; 
     533         
     534        av_reduce(&wN, &wD, cleanW, fixed1, UINT_MAX); 
     535        av_reduce(&hN, &hD, cleanH, fixed1, UINT_MAX); 
     536         
     537        **clap = (CleanApertureImageDescriptionExtension){EndianU32_NtoB(wN), EndianU32_NtoB(wD), 
     538                                                                                                      EndianU32_NtoB(hN), EndianU32_NtoB(hD),  
     539                                                                                                          EndianU32_NtoB(0), EndianU32_NtoB(1), 
     540                                                                                                          EndianU32_NtoB(0), EndianU32_NtoB(1)}; 
     541         
     542        AddImageDescriptionExtension(imgDesc, (Handle)clap, kCleanApertureImageDescriptionExtension); 
     543         
     544        DisposeHandle((Handle)clap); 
     545} 
     546 
    520547/* This function prepares the movie to receivve the movie data, 
    521548 * After success, *out_map points to a valid stream maping 
     
    544571                 
    545572                if(st->codec->codec_type == CODEC_TYPE_VIDEO) { 
    546                         track = NewMovieTrack(theMovie, st->codec->width << 16, st->codec->height << 16, kNoVolume); 
     573                        Fixed width, height; 
     574                         
     575                        get_track_dimensions_for_codec(st->codec, &width, &height); 
     576                        track = NewMovieTrack(theMovie, width, height, kNoVolume); 
    547577 
    548578            // XXX Support for 'old' NUV files, that didn't put the codec_tag in the file.  
     
    552582                         
    553583                        initialize_video_map(&map[j], track, dataRef, dataRefType, storage->firstFrames + j); 
     584                        set_track_clean_aperture_ext((ImageDescriptionHandle)map[j].sampleHdl, width, height); 
    554585                } else if (st->codec->codec_type == CODEC_TYPE_AUDIO) { 
    555586                        if (st->codec->sample_rate > 0) { 
  • trunk/ff_private.h

    r806 r853  
    111111uint8_t *create_cookie(AVCodecContext *codec, size_t *cookieSize, UInt32 formatID); 
    112112Handle create_strf_ext(AVCodecContext *codec); 
     113void set_track_clean_aperture_ext(ImageDescriptionHandle imgDesc, Fixed cleanW, Fixed cleanH); 
    113114 
    114115uint8_t *write_int32(uint8_t *target, int32_t data);