Hallo
Ik ben mijn nieuwe video-speler gemaakt met behulp van een atmega32 microcontroller en nokia kleur LCD introduceren. Ik heb een 65K kleuren LCD van een oude mobiele telefoon van nokia 6030. Ik gesoldeerd rechtstreeks 10 dunne geëmailleerd koper draad van 0,5 cm vierkante inzake de dunne flexibele pcb van het LCD-scherm naar een strook van de berg vast op een ander bord. Voor mij was het het moeilijkste deel van dit project, omdat ik niet een kleine tip soldeerbout en een lcd connector (5 x 2) voet met mij.
Na dat ik het lcd met de atmega32 via SPI geïnterfacet. Dan geïnitialiseerd het LCD-scherm en sommige kleurpatronen weergegeven en bevestigd de LCD werkt.
Nu is mijn volgende stap is om een stilstaand beeld op het LCD-scherm weer te geven. Ik gebruikte python beeldbank om pixelinformatie te extraheren uit een willekeurig afbeeldingsbestand (jpeg, png, enz) en ik stroomde het aan avr via uart met behulp van pyserial en het beeld op het LCD-scherm met 16 bit kleurdiepte met succes weergegeven.
Na dat ik een SD-kaart voor het opslaan van de geconverteerde pixel informatie (132 x 132 * 2) bytes/afbeelding gebruikt. Toen ik de SD-kaart met dezelfde SPI van atmega32 geïnterfacet en weergegeven van de opgeslagen afbeelding. Ik gebruikte de FAT16-bestandssysteem. De sd kaart deel is niet een probleem voor mij omdat ik meer projecten op SD/MMC kaarten al heb gedaan en ik heb mijn vorige code gekopieerd daarvoor.
Dus na het tonen van het stilstaande beeld, ik dacht van het maken van een diavoorstelling op het LCD-scherm. Daarvoor schreef ik een python-script om alle afbeeldingen in een map (op mijn pc) omzetten in een 132 x 132 x 2 byte bestanden die niets anders dan de ongecomprimeerde pixelinformatie opgeslagen als nieuwe bestanden is. Dan ik al deze geconverteerde bestanden gekopieerd naar SD-kaart (file.lcd) en hen als een afbeelding diavoorstelling met 1 seconde tijdsverschil tussen elke afbeelding weergegeven.
Aangezien ik heb met succes de afbeelding diavoorstelling, toen kwam plotseling het idee van het maken van een video-speler naar mijn mening. Omdat de video is niets anders dan een diavoorstelling met hoge framesnelheid.
Vanaf hier begint dit project.
Toen ik begon te zoeken in google, hoe een video te converteren naar nog frames. Ik kwam te weten over de ffmpeg programma. Ik gebruik linux altijd. Ik heb gedownload van ffmpeg en een monster video geconverteerd naar frames aan 15 frames/tweede & 132 x 65 resolutie. Dan gebruikte ik mijn python-script elke stilstaande beelden omzetten pixelinformatie op 16 bits/pixel. Hier in plaats van het maken van kleine bestandjes, ik gewoon alle de fotoinformatie verzameld van aangrenzende frames in een enkel bestand en die als my_video.lcd wordt genoemd. Dan ik dat bestand naar de geheugenkaart gekopieerd en bewerkt om de avr-programma weer te geven op het LCD-scherm. Het toegang tot het bestandssysteem FAT16, en zoek vervolgens naar *.lcd bestanden en indien gevonden, de begin retourneert cluster adres van dat bestand en vervolgens streamen van dat cluster op het LCD erg snel. VIDEO wordt nu AFGESPEELD (zonder audio)!!! .... Bijna de helft van het project is voltooid...
Volgende helft: (audio mixen)
Ik speelde 15 fps 16 bits/pixel op het LCD-scherm. Nu komt de volgende hoofdpijn. Video moet audio hebben. :-(.... Dan begon ik te denken van het opnemen van audio. Ik ffmpeg(in pc) gewend extract audio van de video-bestand naar 8 bits mono wav. Aangezien de wav is niet-gecomprimeerde audio, is het eenvoudig te bedienen met behulp van een microcontroller met hardware PWM. Vervolgens gewijzigde mij mijn python-script. Ik heb net het wav-bestand geopend en verwijderd van de eerste 44 bytes (wav header) en dan na dat, ik lees de Luistervoorbeeld byte voor byte en geïnjecteerd het tussen de videogegevens nadat sommige berekeningen aan de bitsnelheid van zowel audio als video om te beslissen de mengverhouding (Zie de onderstaande wiskunde) gerelateerde.
Voor de perfecte audio video synchronisatie uitgevoerd ik een foutcode van de correctie in de converter, die toezicht houdt op de fout bij de gegevenssynchronisatie terwijl het mengen van de audio-/ video-bytes en wanneer de fout bereikt de minimale drempelwaarde (1 byte Luistervoorbeeld fout), het schrijft een dummy Luistervoorbeeld in plaats van echte Luistervoorbeeld voorkomt dus dat de accumulatie van fout en dus de perfecte audio video synchronisatie is bereikt voor uren van ononderbroken videoplayback...
Nu heb ik mijn eigen video-formaat ontworpen ("video_with_audio.vin" voor mijn speler;-). Nu in avr, ik moet uittreksel de audio en video en nodig voor het verzenden van de audio naar een audio circulaire buffer die zullen verzenden PWM met behulp van een timer onderbreken en video rechtstreeks naar LCD. Als er wanverhouding één byte opgetreden tussen de video- en audio-byte, zullen alles krijgen samengevouwen. Ik heb vervolgens de code van de avr te doen zoals hierboven en tenslotte ik video met audio speelde gewijzigd! :-)
Voor broncode en meer informatie, bezoek mijn blog link:
http://blog.vinu.co.in/2012/06/AVR-Video-Player-on-Nokia-color-LCD.html